Make WordPress Core

Ticket #26001: 26001.diff

File 26001.diff, 21.2 KB (added by dougwollison, 8 years ago)

Initial changes: spacing, braces, equals, keys fixed and globals.

  • src/wp-admin/js/inline-edit-post.js

     
    1 (function($) {
    2 inlineEditPost = {
     1/* global inlineEditL10n:false */
     2/* global ajaxurl:false */
     3/* global typenow:false */
    34
    4         init : function(){
    5                 var t = this, qeRow = $('#inline-edit'), bulkRow = $('#bulk-edit');
     5(function( $ ) {
     6        var inlineEditPost = {
    67
    7                 t.type = $('table.widefat').hasClass('pages') ? 'page' : 'post';
    8                 t.what = '#post-';
     8                init: function() {
     9                        var t = this, qeRow = $( '#inline-edit' ), bulkRow = $( '#bulk-edit' );
    910
    10                 // prepare the edit rows
    11                 qeRow.keyup(function(e){
    12                         if (e.which == 27)
     11                        t.type = $( 'table.widefat' ).hasClass( 'pages' ) ? 'page' : 'post';
     12                        t.what = '#post-';
     13
     14                        // prepare the edit rows
     15                        qeRow.keyup(function( e ) {
     16                                if ( e.which === 27 ) {
     17                                        return inlineEditPost.revert();
     18                                }
     19                        });
     20                        bulkRow.keyup(function( e ) {
     21                                if ( e.which === 27 ) {
     22                                        return inlineEditPost.revert();
     23                                }
     24                        });
     25
     26                        $( 'a.cancel', qeRow ).click(function() {
    1327                                return inlineEditPost.revert();
    14                 });
    15                 bulkRow.keyup(function(e){
    16                         if (e.which == 27)
     28                        });
     29                        $( 'a.save', qeRow ).click(function() {
     30                                return inlineEditPost.save( this );
     31                        });
     32                        $( 'td', qeRow ).keydown(function( e ) {
     33                                if ( e.which === 13 ) {
     34                                        return inlineEditPost.save( this );
     35                                }
     36                        });
     37
     38                        $( 'a.cancel', bulkRow ).click(function() {
    1739                                return inlineEditPost.revert();
    18                 });
     40                        });
    1941
    20                 $('a.cancel', qeRow).click(function(){
    21                         return inlineEditPost.revert();
    22                 });
    23                 $('a.save', qeRow).click(function(){
    24                         return inlineEditPost.save(this);
    25                 });
    26                 $('td', qeRow).keydown(function(e){
    27                         if ( e.which == 13 )
    28                                 return inlineEditPost.save(this);
    29                 });
     42                        $( '#inline-edit .inline-edit-private input[value="private"]' ).click(function() {
     43                                var pw = $( 'input.inline-edit-password-input' );
     44                                if ( $( this ).prop( 'checked' ) ) {
     45                                        pw.val( '' ).prop( 'disabled', true );
     46                                } else {
     47                                        pw.prop( 'disabled', false );
     48                                }
     49                        });
    3050
    31                 $('a.cancel', bulkRow).click(function(){
    32                         return inlineEditPost.revert();
    33                 });
     51                        // add events
     52                        $( '#the-list' ).on( 'click', 'a.editinline', function() {
     53                                inlineEditPost.edit( this );
     54                                return false;
     55                        });
    3456
    35                 $('#inline-edit .inline-edit-private input[value="private"]').click( function(){
    36                         var pw = $('input.inline-edit-password-input');
    37                         if ( $(this).prop('checked') ) {
    38                                 pw.val('').prop('disabled', true);
    39                         } else {
    40                                 pw.prop('disabled', false);
    41                         }
    42                 });
     57                        $( '#bulk-title-div' ).parents( 'fieldset' ).after(
     58                                $( '#inline-edit fieldset.inline-edit-categories' ).clone()
     59                        ).siblings( 'fieldset:last' ).prepend(
     60                                $( '#inline-edit label.inline-edit-tags' ).clone()
     61                        );
    4362
    44                 // add events
    45                 $('#the-list').on('click', 'a.editinline', function(){
    46                         inlineEditPost.edit(this);
    47                         return false;
    48                 });
     63                        $( 'select[name="_status"] option[value="future"]', bulkRow ).remove();
    4964
    50                 $('#bulk-title-div').parents('fieldset').after(
    51                         $('#inline-edit fieldset.inline-edit-categories').clone()
    52                 ).siblings( 'fieldset:last' ).prepend(
    53                         $('#inline-edit label.inline-edit-tags').clone()
    54                 );
     65                        $( '#doaction, #doaction2' ).click(function( e ) {
     66                                var n = $( this ).attr( 'id' ).substr( 2 );
     67                                if ( $( 'select[name="' + n + '"]' ).val() === 'edit' ) {
     68                                        e.preventDefault();
     69                                        t.setBulk();
     70                                } else if ( $( 'form#posts-filter tr.inline-editor' ).length > 0 ) {
     71                                        t.revert();
     72                                }
     73                        });
     74                },
    5575
    56                 $('select[name="_status"] option[value="future"]', bulkRow).remove();
     76                toggle: function( el ) {
     77                        var t = this;
     78                        $( t.what + t.getId( el ) ).css( 'display' ) === 'none' ? t.revert() : t.edit( el );
     79                },
    5780
    58                 $('#doaction, #doaction2').click(function(e){
    59                         var n = $(this).attr('id').substr(2);
    60                         if ( $('select[name="'+n+'"]').val() == 'edit' ) {
    61                                 e.preventDefault();
    62                                 t.setBulk();
    63                         } else if ( $('form#posts-filter tr.inline-editor').length > 0 ) {
    64                                 t.revert();
     81                setBulk: function() {
     82                        var te = '', type = this.type, tax, c = true;
     83                        this.revert();
     84
     85                        $( '#bulk-edit td' ).attr( 'colspan', $( '.widefat:first thead th:visible' ).length );
     86                        $( 'table.widefat tbody' ).prepend( $( '#bulk-edit' ) );
     87                        $( '#bulk-edit' ).addClass( 'inline-editor' ).show();
     88
     89                        $( 'tbody th.check-column input[type="checkbox"]' ).each(function() {
     90                                if ( $( this ).prop( 'checked' ) ) {
     91                                        c = false;
     92                                        var id = $( this ).val(), theTitle;
     93                                        theTitle = $( '#inline_' + id + ' .post_title' ).html() || inlineEditL10n.notitle;
     94                                        te += '<div id="ttle' + id + '"><a id="_' + id + '" class="ntdelbutton" title="' + inlineEditL10n.ntdeltitle + '">X</a>' + theTitle + '</div>';
     95                                }
     96                        });
     97
     98                        if ( c ) {
     99                                return this.revert();
    65100                        }
    66                 });
    67         },
    68101
    69         toggle : function(el){
    70                 var t = this;
    71                 $(t.what+t.getId(el)).css('display') == 'none' ? t.revert() : t.edit(el);
    72         },
     102                        $( '#bulk-titles' ).html( te );
     103                        $( '#bulk-titles a' ).click(function() {
     104                                var id = $( this ).attr( 'id' ).substr( 1 );
    73105
    74         setBulk : function(){
    75                 var te = '', type = this.type, tax, c = true;
    76                 this.revert();
     106                                $( 'table.widefat input[value="' + id + '"]' ).prop( 'checked', false );
     107                                $( '#ttle' + id ).remove();
     108                        });
    77109
    78                 $('#bulk-edit td').attr('colspan', $('.widefat:first thead th:visible').length);
    79                 $('table.widefat tbody').prepend( $('#bulk-edit') );
    80                 $('#bulk-edit').addClass('inline-editor').show();
    81 
    82                 $('tbody th.check-column input[type="checkbox"]').each(function(i){
    83                         if ( $(this).prop('checked') ) {
    84                                 c = false;
    85                                 var id = $(this).val(), theTitle;
    86                                 theTitle = $('#inline_'+id+' .post_title').html() || inlineEditL10n.notitle;
    87                                 te += '<div id="ttle'+id+'"><a id="_'+id+'" class="ntdelbutton" title="'+inlineEditL10n.ntdeltitle+'">X</a>'+theTitle+'</div>';
     110                        // enable autocomplete for tags
     111                        if ( 'post' === type ) {
     112                                // support multi taxonomies?
     113                                tax = 'post_tag';
     114                                $( 'tr.inline-editor textarea[name="tax_input[' + tax + ']"]' )
     115                                        .suggest( ajaxurl + '?action=ajax-tag-search&tax=' + tax, {
     116                                                delay: 500,
     117                                                minchars: 2,
     118                                                multiple: true,
     119                                                multipleSep: inlineEditL10n.comma + ' '
     120                                        });
    88121                        }
    89                 });
     122                        $( 'html, body' ).animate( { scrollTop: 0 }, 'fast' );
     123                },
    90124
    91                 if ( c )
    92                         return this.revert();
     125                edit: function( id ) {
     126                        var t = this, fields, editRow, rowData, status, pageOpt, pageLevel, nextPage, pageLoop = true, nextLevel, cur_format, f;
     127                        t.revert();
    93128
    94                 $('#bulk-titles').html(te);
    95                 $('#bulk-titles a').click(function(){
    96                         var id = $(this).attr('id').substr(1);
     129                        if ( typeof( id ) === 'object' ) {
     130                                id = t.getId( id );
     131                        }
    97132
    98                         $('table.widefat input[value="' + id + '"]').prop('checked', false);
    99                         $('#ttle'+id).remove();
    100                 });
     133                        fields = [ 'post_title', 'post_name', 'post_author', '_status', 'jj', 'mm', 'aa', 'hh', 'mn', 'ss', 'post_password', 'post_format', 'menu_order' ];
     134                        if ( t.type === 'page' ) {
     135                                fields.push( 'post_parent', 'page_template' );
     136                        }
    101137
    102                 // enable autocomplete for tags
    103                 if ( 'post' == type ) {
    104                         // support multi taxonomies?
    105                         tax = 'post_tag';
    106                         $('tr.inline-editor textarea[name="tax_input['+tax+']"]').suggest( ajaxurl + '?action=ajax-tag-search&tax=' + tax, { delay: 500, minchars: 2, multiple: true, multipleSep: inlineEditL10n.comma + ' ' } );
    107                 }
    108                 $('html, body').animate( { scrollTop: 0 }, 'fast' );
    109         },
     138                        // add the new blank row
     139                        editRow = $( '#inline-edit' ).clone( true );
     140                        $( 'td', editRow ).attr( 'colspan', $( '.widefat:first thead th:visible' ).length );
    110141
    111         edit : function(id) {
    112                 var t = this, fields, editRow, rowData, status, pageOpt, pageLevel, nextPage, pageLoop = true, nextLevel, cur_format, f;
    113                 t.revert();
     142                        if ( $( t.what + id ).hasClass( 'alternate' ) ) {
     143                                $( editRow ).addClass( 'alternate' );
     144                        }
     145                        $( t.what + id ).hide().after( editRow );
    114146
    115                 if ( typeof(id) == 'object' )
    116                         id = t.getId(id);
     147                        // populate the data
     148                        rowData = $( '#inline_' + id );
     149                        if ( ! $( ':input[name="post_author"] option[value="' + $( '.post_author', rowData ).text() + '"]', editRow ).val() ) {
     150                                // author no longer has edit caps, so we need to add them to the list of authors
     151                                $( ':input[name="post_author"]', editRow ).prepend( '<option value="' + $( '.post_author', rowData ).text() + '">' + $( '#' + t.type + '-' + id + ' .author' ).text() + '</option>' );
     152                        }
     153                        if ( $( ':input[name="post_author"] option', editRow ).length === 1 ) {
     154                                $( 'label.inline-edit-author', editRow ).hide();
     155                        }
    117156
    118                 fields = ['post_title', 'post_name', 'post_author', '_status', 'jj', 'mm', 'aa', 'hh', 'mn', 'ss', 'post_password', 'post_format', 'menu_order'];
    119                 if ( t.type == 'page' )
    120                         fields.push('post_parent', 'page_template');
     157                        // hide unsupported formats, but leave the current format alone
     158                        cur_format = $( '.post_format', rowData ).text();
     159                        $( 'option.unsupported', editRow ).each(function() {
     160                                var $this = $( this );
     161                                if ( $this.val() !== cur_format ) {
     162                                        $this.remove();
     163                                }
     164                        });
    121165
    122                 // add the new blank row
    123                 editRow = $('#inline-edit').clone(true);
    124                 $('td', editRow).attr('colspan', $('.widefat:first thead th:visible').length);
     166                        for ( f = 0; f < fields.length; f++ ) {
     167                                $( ':input[name="' + fields[f] + '"]', editRow ).val( $( '.' + fields[f], rowData ).text() );
     168                        }
    125169
    126                 if ( $(t.what+id).hasClass('alternate') )
    127                         $(editRow).addClass('alternate');
    128                 $(t.what+id).hide().after(editRow);
     170                        if ( $( '.comment_status', rowData ).text() === 'open' ) {
     171                                $( 'input[name="comment_status"]', editRow ).prop( 'checked', true );
     172                        }
     173                        if ( $( '.ping_status', rowData ).text() === 'open' ) {
     174                                $( 'input[name="ping_status"]', editRow ).prop( 'checked', true );
     175                        }
     176                        if ( $( '.sticky', rowData ).text() === 'sticky' ) {
     177                                $( 'input[name="sticky"]', editRow ).prop( 'checked', true );
     178                        }
    129179
    130                 // populate the data
    131                 rowData = $('#inline_'+id);
    132                 if ( !$(':input[name="post_author"] option[value="' + $('.post_author', rowData).text() + '"]', editRow).val() ) {
    133                         // author no longer has edit caps, so we need to add them to the list of authors
    134                         $(':input[name="post_author"]', editRow).prepend('<option value="' + $('.post_author', rowData).text() + '">' + $('#' + t.type + '-' + id + ' .author').text() + '</option>');
    135                 }
    136                 if ( $(':input[name="post_author"] option', editRow).length == 1 ) {
    137                         $('label.inline-edit-author', editRow).hide();
    138                 }
     180                        // hierarchical taxonomies
     181                        $( '.post_category', rowData ).each(function() {
     182                                var term_ids = $( this ).text(), taxname;
    139183
    140                 // hide unsupported formats, but leave the current format alone
    141                 cur_format = $('.post_format', rowData).text();
    142                 $('option.unsupported', editRow).each(function() {
    143                         var $this = $(this);
    144                         if ( $this.val() != cur_format )
    145                                 $this.remove();
    146                 });
     184                                if ( term_ids ) {
     185                                        taxname = $( this ).attr( 'id' ).replace( '_' + id, '' );
     186                                        $( 'ul.' + taxname + '-checklist :checkbox', editRow ).val( term_ids.split( ',' ) );
     187                                }
     188                        });
    147189
    148                 for ( f = 0; f < fields.length; f++ ) {
    149                         $(':input[name="' + fields[f] + '"]', editRow).val( $('.'+fields[f], rowData).text() );
    150                 }
     190                        //flat taxonomies
     191                        $( '.tags_input', rowData ).each(function() {
     192                                var terms = $( this ).text(),
     193                                        taxname = $( this ).attr( 'id' ).replace( '_' + id, '' ),
     194                                        textarea = $( 'textarea.tax_input_' + taxname, editRow ),
     195                                        comma = inlineEditL10n.comma;
    151196
    152                 if ( $('.comment_status', rowData).text() == 'open' )
    153                         $('input[name="comment_status"]', editRow).prop("checked", true);
    154                 if ( $('.ping_status', rowData).text() == 'open' )
    155                         $('input[name="ping_status"]', editRow).prop("checked", true);
    156                 if ( $('.sticky', rowData).text() == 'sticky' )
    157                         $('input[name="sticky"]', editRow).prop("checked", true);
     197                                if ( terms ) {
     198                                        if ( ',' !== comma ) {
     199                                                terms = terms.replace( /,/g, comma );
     200                                        }
     201                                        textarea.val( terms );
     202                                }
    158203
    159                 // hierarchical taxonomies
    160                 $('.post_category', rowData).each(function(){
    161                         var term_ids = $(this).text();
     204                                textarea.suggest( ajaxurl + '?action=ajax-tag-search&tax=' + taxname, {
     205                                        delay: 500,
     206                                        minchars: 2,
     207                                        multiple: true,
     208                                        multipleSep: inlineEditL10n.comma + ' '
     209                                });
     210                        });
    162211
    163                         if ( term_ids ) {
    164                                 taxname = $(this).attr('id').replace('_'+id, '');
    165                                 $('ul.'+taxname+'-checklist :checkbox', editRow).val(term_ids.split(','));
     212                        // handle the post status
     213                        status = $( '._status', rowData ).text();
     214                        if ( 'future' !== status ) {
     215                                $( 'select[name="_status"] option[value="future"]', editRow ).remove();
    166216                        }
    167                 });
    168217
    169                 //flat taxonomies
    170                 $('.tags_input', rowData).each(function(){
    171                         var terms = $(this).text(),
    172                                 taxname = $(this).attr('id').replace('_' + id, ''),
    173                                 textarea = $('textarea.tax_input_' + taxname, editRow),
    174                                 comma = inlineEditL10n.comma;
    175 
    176                         if ( terms ) {
    177                                 if ( ',' !== comma )
    178                                         terms = terms.replace(/,/g, comma);
    179                                 textarea.val(terms);
     218                        if ( 'private' === status ) {
     219                                $( 'input[name="keep_private"]', editRow ).prop( 'checked', true );
     220                                $( 'input.inline-edit-password-input' ).val( '' ).prop( 'disabled', true );
    180221                        }
    181222
    182                         textarea.suggest( ajaxurl + '?action=ajax-tag-search&tax=' + taxname, { delay: 500, minchars: 2, multiple: true, multipleSep: inlineEditL10n.comma + ' ' } );
    183                 });
     223                        // remove the current page and children from the parent dropdown
     224                        pageOpt = $( 'select[name="post_parent"] option[value="' + id + '"]', editRow );
     225                        if ( pageOpt.length > 0 ) {
     226                                pageLevel = pageOpt[0].className.split( '-' )[1];
     227                                nextPage = pageOpt;
     228                                while ( pageLoop ) {
     229                                        nextPage = nextPage.next( 'option' );
     230                                        if ( nextPage.length === 0 ) {
     231                                                break;
     232                                        }
    184233
    185                 // handle the post status
    186                 status = $('._status', rowData).text();
    187                 if ( 'future' != status )
    188                         $('select[name="_status"] option[value="future"]', editRow).remove();
     234                                        nextLevel = nextPage[0].className.split( '-' )[1];
    189235
    190                 if ( 'private' == status ) {
    191                         $('input[name="keep_private"]', editRow).prop("checked", true);
    192                         $('input.inline-edit-password-input').val('').prop('disabled', true);
    193                 }
    194 
    195                 // remove the current page and children from the parent dropdown
    196                 pageOpt = $('select[name="post_parent"] option[value="' + id + '"]', editRow);
    197                 if ( pageOpt.length > 0 ) {
    198                         pageLevel = pageOpt[0].className.split('-')[1];
    199                         nextPage = pageOpt;
    200                         while ( pageLoop ) {
    201                                 nextPage = nextPage.next('option');
    202                                 if (nextPage.length == 0) break;
    203                                 nextLevel = nextPage[0].className.split('-')[1];
    204                                 if ( nextLevel <= pageLevel ) {
    205                                         pageLoop = false;
    206                                 } else {
    207                                         nextPage.remove();
    208                                         nextPage = pageOpt;
     236                                        if ( nextLevel <= pageLevel ) {
     237                                                pageLoop = false;
     238                                        } else {
     239                                                nextPage.remove();
     240                                                nextPage = pageOpt;
     241                                        }
    209242                                }
     243                                pageOpt.remove();
    210244                        }
    211                         pageOpt.remove();
    212                 }
    213245
    214                 $(editRow).attr('id', 'edit-'+id).addClass('inline-editor').show();
    215                 $('.ptitle', editRow).focus();
     246                        $( editRow ).attr( 'id', 'edit-' + id ).addClass( 'inline-editor' ).show();
     247                        $( '.ptitle', editRow ).focus();
    216248
    217                 return false;
    218         },
     249                        return false;
     250                },
    219251
    220         save : function(id) {
    221                 var params, fields, page = $('.post_status_page').val() || '';
     252                save: function( id ) {
     253                        var params, fields, page = $( '.post_status_page' ).val() || '';
    222254
    223                 if ( typeof(id) == 'object' )
    224                         id = this.getId(id);
     255                        if ( typeof id === 'object' ) {
     256                                id = this.getId( id );
     257                        }
    225258
    226                 $('table.widefat .spinner').show();
     259                        $( 'table.widefat .spinner' ).show();
    227260
    228                 params = {
    229                         action: 'inline-save',
    230                         post_type: typenow,
    231                         post_ID: id,
    232                         edit_date: 'true',
    233                         post_status: page
    234                 };
     261                        params = {
     262                                action: 'inline-save',
     263                                post_type: typenow,
     264                                post_ID: id,
     265                                edit_date: 'true',
     266                                post_status: page
     267                        };
    235268
    236                 fields = $('#edit-'+id).find(':input').serialize();
    237                 params = fields + '&' + $.param(params);
     269                        fields = $( '#edit-' + id ).find( ':input' ).serialize();
     270                        params = fields + '&' + $.param( params );
    238271
    239                 // make ajax request
    240                 $.post( ajaxurl, params,
    241                         function(r) {
    242                                 $('table.widefat .spinner').hide();
     272                        // make ajax request
     273                        $.post( ajaxurl, params,
     274                                function( r ) {
     275                                        $( 'table.widefat .spinner' ).hide();
    243276
    244                                 if (r) {
    245                                         if ( -1 != r.indexOf('<tr') ) {
    246                                                 $(inlineEditPost.what+id).remove();
    247                                                 $('#edit-'+id).before(r).remove();
    248                                                 $(inlineEditPost.what+id).hide().fadeIn();
     277                                        if ( r ) {
     278                                                if ( -1 !== r.indexOf( '<tr' ) ) {
     279                                                        $( inlineEditPost.what + id ).remove();
     280                                                        $( '#edit-' + id ).before( r ).remove();
     281                                                        $( inlineEditPost.what + id ).hide().fadeIn();
     282                                                } else {
     283                                                        r = r.replace( /<.[^<>]*?>/g, '' );
     284                                                        $( '#edit-' + id + ' .inline-edit-save .error' ).html( r ).show();
     285                                                }
    249286                                        } else {
    250                                                 r = r.replace( /<.[^<>]*?>/g, '' );
    251                                                 $('#edit-'+id+' .inline-edit-save .error').html(r).show();
     287                                                $( '#edit-' + id + ' .inline-edit-save .error' ).html( inlineEditL10n.error ).show();
    252288                                        }
    253                                 } else {
    254                                         $('#edit-'+id+' .inline-edit-save .error').html(inlineEditL10n.error).show();
    255                                 }
    256289
    257                                 if ( $('#post-'+id).prev().hasClass('alternate') ) {
    258                                         $('#post-'+id).removeClass('alternate');
    259                                 }
    260                         }
    261                 , 'html');
    262                 return false;
    263         },
     290                                        if ( $( '#post-' + id ).prev().hasClass( 'alternate' ) ) {
     291                                                $( '#post-' + id ).removeClass( 'alternate' );
     292                                        }
     293                                },
     294                        'html' );
     295                        return false;
     296                },
    264297
    265         revert : function(){
    266                 var id = $('table.widefat tr.inline-editor').attr('id');
     298                revert: function() {
     299                        var id = $( 'table.widefat tr.inline-editor' ).attr( 'id' );
    267300
    268                 if ( id ) {
    269                         $('table.widefat .spinner').hide();
     301                        if ( id ) {
     302                                $( 'table.widefat .spinner' ).hide();
    270303
    271                         if ( 'bulk-edit' == id ) {
    272                                 $('table.widefat #bulk-edit').removeClass('inline-editor').hide();
    273                                 $('#bulk-titles').html('');
    274                                 $('#inlineedit').append( $('#bulk-edit') );
    275                         } else {
    276                                 $('#'+id).remove();
    277                                 id = id.substr( id.lastIndexOf('-') + 1 );
    278                                 $(this.what+id).show();
     304                                if ( 'bulk-edit' === id ) {
     305                                        $( 'table.widefat #bulk-edit' ).removeClass( 'inline-editor' ).hide();
     306                                        $( '#bulk-titles' ).html( '' );
     307                                        $( '#inlineedit' ).append( $( '#bulk-edit' ) );
     308                                } else {
     309                                        $( '#' + id ).remove();
     310                                        id = id.substr( id.lastIndexOf( '-' ) + 1 );
     311                                        $( this.what + id ).show();
     312                                }
    279313                        }
    280                 }
    281314
    282                 return false;
    283         },
     315                        return false;
     316                },
    284317
    285         getId : function(o) {
    286                 var id = $(o).closest('tr').attr('id'),
    287                         parts = id.split('-');
    288                 return parts[parts.length - 1];
    289         }
    290 };
     318                getId: function( o ) {
     319                        var id = $( o ).closest( 'tr' ).attr( 'id' ),
     320                                parts = id.split( '-' );
     321                        return parts[ parts.length - 1 ];
     322                }
     323        };
    291324
    292 $( document ).ready( function(){ inlineEditPost.init(); } );
     325        $( document ).ready( function() { inlineEditPost.init(); } );
    293326
    294 // Show/hide locks on posts
    295 $( document ).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) {
    296         var locked = data['wp-check-locked-posts'] || {};
     327        // Show/hide locks on posts
     328        $( document ).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) {
     329                var locked = data['wp-check-locked-posts'] || {};
    297330
    298         $('#the-list tr').each( function(i, el) {
    299                 var key = el.id, row = $(el), lock_data, avatar;
     331                $( '#the-list tr' ).each( function( i, el ) {
     332                        var key = el.id, row = $( el ), lock_data, avatar;
    300333
    301                 if ( locked.hasOwnProperty( key ) ) {
    302                         if ( ! row.hasClass('wp-locked') ) {
    303                                 lock_data = locked[key];
    304                                 row.find('.column-title .locked-text').text( lock_data.text );
    305                                 row.find('.check-column checkbox').prop('checked', false);
     334                        if ( locked.hasOwnProperty( key ) ) {
     335                                if ( ! row.hasClass( 'wp-locked' ) ) {
     336                                        lock_data = locked[ key ];
     337                                        row.find( '.column-title .locked-text' ).text( lock_data.text );
     338                                        row.find( '.check-column checkbox' ).prop( 'checked', false );
    306339
    307                                 if ( lock_data.avatar_src ) {
    308                                         avatar = $('<img class="avatar avatar-18 photo" width="18" height="18" />').attr( 'src', lock_data.avatar_src.replace(/&amp;/g, '&') );
    309                                         row.find('.column-title .locked-avatar').empty().append( avatar );
     340                                        if ( lock_data.avatar_src ) {
     341                                                avatar = $( '<img class="avatar avatar-18 photo" width="18" height="18" />' ).attr( 'src', lock_data.avatar_src.replace( /&amp;/g, '&' ) );
     342                                                row.find( '.column-title .locked-avatar' ).empty().append( avatar );
     343                                        }
     344                                        row.addClass( 'wp-locked' );
    310345                                }
    311                                 row.addClass('wp-locked');
     346                        } else if ( row.hasClass( 'wp-locked' ) ) {
     347                                // Make room for the CSS animation
     348                                row.removeClass( 'wp-locked' ).delay( 1000 ).find( '.locked-info span' ).empty();
    312349                        }
    313                 } else if ( row.hasClass('wp-locked') ) {
    314                         // Make room for the CSS animation
    315                         row.removeClass('wp-locked').delay(1000).find('.locked-info span').empty();
     350                });
     351        }).on( 'heartbeat-send.wp-check-locked-posts', function( e, data ) {
     352                var check = [];
     353
     354                $( '#the-list tr' ).each( function( i, el ) {
     355                        if ( el.id ) {
     356                                check.push( el.id );
     357                        }
     358                });
     359
     360                if ( check.length ) {
     361                        data['wp-check-locked-posts'] = check;
    316362                }
    317363        });
    318 }).on( 'heartbeat-send.wp-check-locked-posts', function( e, data ) {
    319         var check = [];
    320 
    321         $('#the-list tr').each( function(i, el) {
    322                 if ( el.id )
    323                         check.push( el.id );
    324         });
    325 
    326         if ( check.length )
    327                 data['wp-check-locked-posts'] = check;
    328 });
    329 
    330 }(jQuery));
     364})( jQuery );