Make WordPress Core

Ticket #26001: 26001.2.diff

File 26001.2.diff, 21.3 KB (added by dougwollison, 8 years ago)

Revised declaration of globals.

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

     
    1 (function($) {
    2 inlineEditPost = {
     1/* global inlineEditL10n, ajaxurl, typenow */
    32
    4         init : function(){
    5                 var t = this, qeRow = $('#inline-edit'), bulkRow = $('#bulk-edit');
     3(function( $ ) {
     4        var inlineEditPost = {
    65
    7                 t.type = $('table.widefat').hasClass('pages') ? 'page' : 'post';
    8                 t.what = '#post-';
     6                init: function() {
     7                        var t = this, qeRow = $( '#inline-edit' ), bulkRow = $( '#bulk-edit' );
    98
    10                 // prepare the edit rows
    11                 qeRow.keyup(function(e){
    12                         if (e.which == 27)
     9                        t.type = $( 'table.widefat' ).hasClass( 'pages' ) ? 'page' : 'post';
     10                        t.what = '#post-';
     11
     12                        // prepare the edit rows
     13                        qeRow.keyup(function( e ) {
     14                                if ( e.which === 27 ) {
     15                                        return inlineEditPost.revert();
     16                                }
     17                        });
     18                        bulkRow.keyup(function( e ) {
     19                                if ( e.which === 27 ) {
     20                                        return inlineEditPost.revert();
     21                                }
     22                        });
     23
     24                        $( 'a.cancel', qeRow ).click(function() {
    1325                                return inlineEditPost.revert();
    14                 });
    15                 bulkRow.keyup(function(e){
    16                         if (e.which == 27)
     26                        });
     27                        $( 'a.save', qeRow ).click(function() {
     28                                return inlineEditPost.save( this );
     29                        });
     30                        $( 'td', qeRow ).keydown(function( e ) {
     31                                if ( e.which === 13 ) {
     32                                        return inlineEditPost.save( this );
     33                                }
     34                        });
     35
     36                        $( 'a.cancel', bulkRow ).click(function() {
    1737                                return inlineEditPost.revert();
    18                 });
     38                        });
    1939
    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                 });
     40                        $( '#inline-edit .inline-edit-private input[value="private"]' ).click(function() {
     41                                var pw = $( 'input.inline-edit-password-input' );
     42                                if ( $( this ).prop( 'checked' ) ) {
     43                                        pw.val( '' ).prop( 'disabled', true );
     44                                } else {
     45                                        pw.prop( 'disabled', false );
     46                                }
     47                        });
    3048
    31                 $('a.cancel', bulkRow).click(function(){
    32                         return inlineEditPost.revert();
    33                 });
     49                        // add events
     50                        $( '#the-list' ).on( 'click', 'a.editinline', function() {
     51                                inlineEditPost.edit( this );
     52                                return false;
     53                        });
    3454
    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                 });
     55                        $( '#bulk-title-div' ).parents( 'fieldset' ).after(
     56                                $( '#inline-edit fieldset.inline-edit-categories' ).clone()
     57                        ).siblings( 'fieldset:last' ).prepend(
     58                                $( '#inline-edit label.inline-edit-tags' ).clone()
     59                        );
    4360
    44                 // add events
    45                 $('#the-list').on('click', 'a.editinline', function(){
    46                         inlineEditPost.edit(this);
    47                         return false;
    48                 });
     61                        $( 'select[name="_status"] option[value="future"]', bulkRow ).remove();
    4962
    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                 );
     63                        $( '#doaction, #doaction2' ).click(function( e ) {
     64                                var n = $( this ).attr( 'id' ).substr( 2 );
     65                                if ( $( 'select[name="' + n + '"]' ).val() === 'edit' ) {
     66                                        e.preventDefault();
     67                                        t.setBulk();
     68                                } else if ( $( 'form#posts-filter tr.inline-editor' ).length > 0 ) {
     69                                        t.revert();
     70                                }
     71                        });
     72                },
    5573
    56                 $('select[name="_status"] option[value="future"]', bulkRow).remove();
     74                toggle: function( el ) {
     75                        var t = this;
     76                        $( t.what + t.getId( el ) ).css( 'display' ) === 'none' ? t.revert() : t.edit( el );
     77                },
    5778
    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();
     79                setBulk: function() {
     80                        var te = '', type = this.type, tax, c = true;
     81                        this.revert();
     82
     83                        $( '#bulk-edit td' ).attr( 'colspan', $( '.widefat:first thead th:visible' ).length );
     84                        $( 'table.widefat tbody' ).prepend( $( '#bulk-edit' ) );
     85                        $( '#bulk-edit' ).addClass( 'inline-editor' ).show();
     86
     87                        $( 'tbody th.check-column input[type="checkbox"]' ).each(function() {
     88                                if ( $( this ).prop( 'checked' ) ) {
     89                                        c = false;
     90                                        var id = $( this ).val(), theTitle;
     91                                        theTitle = $( '#inline_' + id + ' .post_title' ).html() || inlineEditL10n.notitle;
     92                                        te += '<div id="ttle' + id + '"><a id="_' + id + '" class="ntdelbutton" title="' + inlineEditL10n.ntdeltitle + '">X</a>' + theTitle + '</div>';
     93                                }
     94                        });
     95
     96                        if ( c ) {
     97                                return this.revert();
    6598                        }
    66                 });
    67         },
    6899
    69         toggle : function(el){
    70                 var t = this;
    71                 $(t.what+t.getId(el)).css('display') == 'none' ? t.revert() : t.edit(el);
    72         },
     100                        $( '#bulk-titles' ).html( te );
     101                        $( '#bulk-titles a' ).click(function() {
     102                                var id = $( this ).attr( 'id' ).substr( 1 );
    73103
    74         setBulk : function(){
    75                 var te = '', type = this.type, tax, c = true;
    76                 this.revert();
     104                                $( 'table.widefat input[value="' + id + '"]' ).prop( 'checked', false );
     105                                $( '#ttle' + id ).remove();
     106                        });
    77107
    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>';
     108                        // enable autocomplete for tags
     109                        if ( 'post' === type ) {
     110                                // support multi taxonomies?
     111                                tax = 'post_tag';
     112                                $( 'tr.inline-editor textarea[name="tax_input[' + tax + ']"]' )
     113                                        .suggest( ajaxurl + '?action=ajax-tag-search&tax=' + tax, {
     114                                                delay: 500,
     115                                                minchars: 2,
     116                                                multiple: true,
     117                                                multipleSep: inlineEditL10n.comma + ' '
     118                                        });
    88119                        }
    89                 });
     120                        $( 'html, body' ).animate( { scrollTop: 0 }, 'fast' );
     121                },
    90122
    91                 if ( c )
    92                         return this.revert();
     123                edit: function( id ) {
     124                        var t = this, fields, editRow, rowData, status, pageOpt, pageLevel, nextPage, pageLoop = true, nextLevel, cur_format, f;
     125                        t.revert();
    93126
    94                 $('#bulk-titles').html(te);
    95                 $('#bulk-titles a').click(function(){
    96                         var id = $(this).attr('id').substr(1);
     127                        if ( typeof( id ) === 'object' ) {
     128                                id = t.getId( id );
     129                        }
    97130
    98                         $('table.widefat input[value="' + id + '"]').prop('checked', false);
    99                         $('#ttle'+id).remove();
    100                 });
     131                        fields = [ 'post_title', 'post_name', 'post_author', '_status', 'jj', 'mm', 'aa', 'hh', 'mn', 'ss', 'post_password', 'post_format', 'menu_order' ];
     132                        if ( t.type === 'page' ) {
     133                                fields.push( 'post_parent', 'page_template' );
     134                        }
    101135
    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         },
     136                        // add the new blank row
     137                        editRow = $( '#inline-edit' ).clone( true );
     138                        $( 'td', editRow ).attr( 'colspan', $( '.widefat:first thead th:visible' ).length );
    110139
    111         edit : function(id) {
    112                 var t = this, fields, editRow, rowData, status, pageOpt, pageLevel, nextPage, pageLoop = true, nextLevel, cur_format, f;
    113                 t.revert();
     140                        if ( $( t.what + id ).hasClass( 'alternate' ) ) {
     141                                $( editRow ).addClass( 'alternate' );
     142                        }
     143                        $( t.what + id ).hide().after( editRow );
    114144
    115                 if ( typeof(id) == 'object' )
    116                         id = t.getId(id);
     145                        // populate the data
     146                        rowData = $( '#inline_' + id );
     147                        if ( ! $( ':input[name="post_author"] option[value="' + $( '.post_author', rowData ).text() + '"]', editRow ).val() ) {
     148                                // author no longer has edit caps, so we need to add them to the list of authors
     149                                $( ':input[name="post_author"]', editRow ).prepend( '<option value="' + $( '.post_author', rowData ).text() + '">' + $( '#' + t.type + '-' + id + ' .author' ).text() + '</option>' );
     150                        }
     151                        if ( $( ':input[name="post_author"] option', editRow ).length === 1 ) {
     152                                $( 'label.inline-edit-author', editRow ).hide();
     153                        }
    117154
    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');
     155                        // hide unsupported formats, but leave the current format alone
     156                        cur_format = $( '.post_format', rowData ).text();
     157                        $( 'option.unsupported', editRow ).each(function() {
     158                                var $this = $( this );
     159                                if ( $this.val() !== cur_format ) {
     160                                        $this.remove();
     161                                }
     162                        });
    121163
    122                 // add the new blank row
    123                 editRow = $('#inline-edit').clone(true);
    124                 $('td', editRow).attr('colspan', $('.widefat:first thead th:visible').length);
     164                        for ( f = 0; f < fields.length; f++ ) {
     165                                $( ':input[name="' + fields[f] + '"]', editRow ).val( $( '.' + fields[f], rowData ).text() );
     166                        }
    125167
    126                 if ( $(t.what+id).hasClass('alternate') )
    127                         $(editRow).addClass('alternate');
    128                 $(t.what+id).hide().after(editRow);
     168                        if ( $( '.comment_status', rowData ).text() === 'open' ) {
     169                                $( 'input[name="comment_status"]', editRow ).prop( 'checked', true );
     170                        }
     171                        if ( $( '.ping_status', rowData ).text() === 'open' ) {
     172                                $( 'input[name="ping_status"]', editRow ).prop( 'checked', true );
     173                        }
     174                        if ( $( '.sticky', rowData ).text() === 'sticky' ) {
     175                                $( 'input[name="sticky"]', editRow ).prop( 'checked', true );
     176                        }
    129177
    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                 }
     178                        // hierarchical taxonomies
     179                        $( '.post_category', rowData ).each(function() {
     180                                var term_ids = $( this ).text(), taxname;
    139181
    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                 });
     182                                if ( term_ids ) {
     183                                        taxname = $( this ).attr( 'id' ).replace( '_' + id, '' );
     184                                        $( 'ul.' + taxname + '-checklist :checkbox', editRow ).val( term_ids.split( ',' ) );
     185                                }
     186                        });
    147187
    148                 for ( f = 0; f < fields.length; f++ ) {
    149                         $(':input[name="' + fields[f] + '"]', editRow).val( $('.'+fields[f], rowData).text() );
    150                 }
     188                        //flat taxonomies
     189                        $( '.tags_input', rowData ).each(function() {
     190                                var terms = $( this ).text(),
     191                                        taxname = $( this ).attr( 'id' ).replace( '_' + id, '' ),
     192                                        textarea = $( 'textarea.tax_input_' + taxname, editRow ),
     193                                        comma = inlineEditL10n.comma;
    151194
    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);
     195                                if ( terms ) {
     196                                        if ( ',' !== comma ) {
     197                                                terms = terms.replace( /,/g, comma );
     198                                        }
     199                                        textarea.val( terms );
     200                                }
    158201
    159                 // hierarchical taxonomies
    160                 $('.post_category', rowData).each(function(){
    161                         var term_ids = $(this).text();
     202                                textarea.suggest( ajaxurl + '?action=ajax-tag-search&tax=' + taxname, {
     203                                        delay: 500,
     204                                        minchars: 2,
     205                                        multiple: true,
     206                                        multipleSep: inlineEditL10n.comma + ' '
     207                                });
     208                        });
    162209
    163                         if ( term_ids ) {
    164                                 taxname = $(this).attr('id').replace('_'+id, '');
    165                                 $('ul.'+taxname+'-checklist :checkbox', editRow).val(term_ids.split(','));
     210                        // handle the post status
     211                        status = $( '._status', rowData ).text();
     212                        if ( 'future' !== status ) {
     213                                $( 'select[name="_status"] option[value="future"]', editRow ).remove();
    166214                        }
    167                 });
    168215
    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);
     216                        if ( 'private' === status ) {
     217                                $( 'input[name="keep_private"]', editRow ).prop( 'checked', true );
     218                                $( 'input.inline-edit-password-input' ).val( '' ).prop( 'disabled', true );
    180219                        }
    181220
    182                         textarea.suggest( ajaxurl + '?action=ajax-tag-search&tax=' + taxname, { delay: 500, minchars: 2, multiple: true, multipleSep: inlineEditL10n.comma + ' ' } );
    183                 });
     221                        // remove the current page and children from the parent dropdown
     222                        pageOpt = $( 'select[name="post_parent"] option[value="' + id + '"]', editRow );
     223                        if ( pageOpt.length > 0 ) {
     224                                pageLevel = pageOpt[0].className.split( '-' )[1];
     225                                nextPage = pageOpt;
     226                                while ( pageLoop ) {
     227                                        nextPage = nextPage.next( 'option' );
     228                                        if ( nextPage.length === 0 ) {
     229                                                break;
     230                                        }
    184231
    185                 // handle the post status
    186                 status = $('._status', rowData).text();
    187                 if ( 'future' != status )
    188                         $('select[name="_status"] option[value="future"]', editRow).remove();
     232                                        nextLevel = nextPage[0].className.split( '-' )[1];
    189233
    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;
     234                                        if ( nextLevel <= pageLevel ) {
     235                                                pageLoop = false;
     236                                        } else {
     237                                                nextPage.remove();
     238                                                nextPage = pageOpt;
     239                                        }
    209240                                }
     241                                pageOpt.remove();
    210242                        }
    211                         pageOpt.remove();
    212                 }
    213243
    214                 $(editRow).attr('id', 'edit-'+id).addClass('inline-editor').show();
    215                 $('.ptitle', editRow).focus();
     244                        $( editRow ).attr( 'id', 'edit-' + id ).addClass( 'inline-editor' ).show();
     245                        $( '.ptitle', editRow ).focus();
    216246
    217                 return false;
    218         },
     247                        return false;
     248                },
    219249
    220         save : function(id) {
    221                 var params, fields, page = $('.post_status_page').val() || '';
     250                save: function( id ) {
     251                        var params, fields, page = $( '.post_status_page' ).val() || '';
    222252
    223                 if ( typeof(id) == 'object' )
    224                         id = this.getId(id);
     253                        if ( typeof id === 'object' ) {
     254                                id = this.getId( id );
     255                        }
    225256
    226                 $('table.widefat .spinner').show();
     257                        $( 'table.widefat .spinner' ).show();
    227258
    228                 params = {
    229                         action: 'inline-save',
    230                         post_type: typenow,
    231                         post_ID: id,
    232                         edit_date: 'true',
    233                         post_status: page
    234                 };
     259                        params = {
     260                                action: 'inline-save',
     261                                post_type: typenow,
     262                                post_ID: id,
     263                                edit_date: 'true',
     264                                post_status: page
     265                        };
    235266
    236                 fields = $('#edit-'+id).find(':input').serialize();
    237                 params = fields + '&' + $.param(params);
     267                        fields = $( '#edit-' + id ).find( ':input' ).serialize();
     268                        params = fields + '&' + $.param( params );
    238269
    239                 // make ajax request
    240                 $.post( ajaxurl, params,
    241                         function(r) {
    242                                 $('table.widefat .spinner').hide();
     270                        // make ajax request
     271                        $.post( ajaxurl, params,
     272                                function( r ) {
     273                                        $( 'table.widefat .spinner' ).hide();
    243274
    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();
     275                                        if ( r ) {
     276                                                if ( -1 !== r.indexOf( '<tr' ) ) {
     277                                                        $( inlineEditPost.what + id ).remove();
     278                                                        $( '#edit-' + id ).before( r ).remove();
     279                                                        $( inlineEditPost.what + id ).hide().fadeIn();
     280                                                } else {
     281                                                        r = r.replace( /<.[^<>]*?>/g, '' );
     282                                                        $( '#edit-' + id + ' .inline-edit-save .error' ).html( r ).show();
     283                                                }
    249284                                        } else {
    250                                                 r = r.replace( /<.[^<>]*?>/g, '' );
    251                                                 $('#edit-'+id+' .inline-edit-save .error').html(r).show();
     285                                                $( '#edit-' + id + ' .inline-edit-save .error' ).html( inlineEditL10n.error ).show();
    252286                                        }
    253                                 } else {
    254                                         $('#edit-'+id+' .inline-edit-save .error').html(inlineEditL10n.error).show();
    255                                 }
    256287
    257                                 if ( $('#post-'+id).prev().hasClass('alternate') ) {
    258                                         $('#post-'+id).removeClass('alternate');
    259                                 }
    260                         }
    261                 , 'html');
    262                 return false;
    263         },
     288                                        if ( $( '#post-' + id ).prev().hasClass( 'alternate' ) ) {
     289                                                $( '#post-' + id ).removeClass( 'alternate' );
     290                                        }
     291                                },
     292                        'html' );
     293                        return false;
     294                },
    264295
    265         revert : function(){
    266                 var id = $('table.widefat tr.inline-editor').attr('id');
     296                revert: function() {
     297                        var id = $( 'table.widefat tr.inline-editor' ).attr( 'id' );
    267298
    268                 if ( id ) {
    269                         $('table.widefat .spinner').hide();
     299                        if ( id ) {
     300                                $( 'table.widefat .spinner' ).hide();
    270301
    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();
     302                                if ( 'bulk-edit' === id ) {
     303                                        $( 'table.widefat #bulk-edit' ).removeClass( 'inline-editor' ).hide();
     304                                        $( '#bulk-titles' ).html( '' );
     305                                        $( '#inlineedit' ).append( $( '#bulk-edit' ) );
     306                                } else {
     307                                        $( '#' + id ).remove();
     308                                        id = id.substr( id.lastIndexOf( '-' ) + 1 );
     309                                        $( this.what + id ).show();
     310                                }
    279311                        }
    280                 }
    281312
    282                 return false;
    283         },
     313                        return false;
     314                },
    284315
    285         getId : function(o) {
    286                 var id = $(o).closest('tr').attr('id'),
    287                         parts = id.split('-');
    288                 return parts[parts.length - 1];
    289         }
    290 };
     316                getId: function( o ) {
     317                        var id = $( o ).closest( 'tr' ).attr( 'id' ),
     318                                parts = id.split( '-' );
     319                        return parts[ parts.length - 1 ];
     320                }
     321        };
    291322
    292 $( document ).ready( function(){ inlineEditPost.init(); } );
     323        $( document ).ready( function() { inlineEditPost.init(); } );
    293324
    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'] || {};
     325        // Show/hide locks on posts
     326        $( document ).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) {
     327                var locked = data['wp-check-locked-posts'] || {};
    297328
    298         $('#the-list tr').each( function(i, el) {
    299                 var key = el.id, row = $(el), lock_data, avatar;
     329                $( '#the-list tr' ).each( function( i, el ) {
     330                        var key = el.id, row = $( el ), lock_data, avatar;
    300331
    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);
     332                        if ( locked.hasOwnProperty( key ) ) {
     333                                if ( ! row.hasClass( 'wp-locked' ) ) {
     334                                        lock_data = locked[ key ];
     335                                        row.find( '.column-title .locked-text' ).text( lock_data.text );
     336                                        row.find( '.check-column checkbox' ).prop( 'checked', false );
    306337
    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 );
     338                                        if ( lock_data.avatar_src ) {
     339                                                avatar = $( '<img class="avatar avatar-18 photo" width="18" height="18" />' ).attr( 'src', lock_data.avatar_src.replace( /&amp;/g, '&' ) );
     340                                                row.find( '.column-title .locked-avatar' ).empty().append( avatar );
     341                                        }
     342                                        row.addClass( 'wp-locked' );
    310343                                }
    311                                 row.addClass('wp-locked');
     344                        } else if ( row.hasClass( 'wp-locked' ) ) {
     345                                // Make room for the CSS animation
     346                                row.removeClass( 'wp-locked' ).delay( 1000 ).find( '.locked-info span' ).empty();
    312347                        }
    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();
     348                });
     349        }).on( 'heartbeat-send.wp-check-locked-posts', function( e, data ) {
     350                var check = [];
     351
     352                $( '#the-list tr' ).each( function( i, el ) {
     353                        if ( el.id ) {
     354                                check.push( el.id );
     355                        }
     356                });
     357
     358                if ( check.length ) {
     359                        data['wp-check-locked-posts'] = check;
    316360                }
    317361        });
    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 }).ready( function() {
    329         // Set the heartbeat interval to 15 sec.
    330         if ( typeof wp !== 'undefined' && wp.heartbeat ) {
    331                 wp.heartbeat.setInterval( 15 );
    332         }
    333 });
    334 
    335 }(jQuery));
     362})( jQuery );
     363 No newline at end of file