Ticket #44900: 44900-list-mode.diff
| File 44900-list-mode.diff, 5.6 KB (added by , 7 years ago) |
|---|
-
new file src/js/_enqueues/admin/post-lock.js
From 2ee0a5cf3ac32764a978d81226c7a7060339a4bc Mon Sep 17 00:00:00 2001 From: Paul Biron <paul@sparrowhawkcomputing.com> Date: Wed, 5 Sep 2018 10:52:18 -0600 Subject: [PATCH] add post lock display to Media Library Only handles the list mode parts, grid mode will require more changes. --- src/js/_enqueues/admin/post-lock.js | 52 ++++++++++++++++++++++ .../includes/class-wp-media-list-table.php | 33 +++++++++++++- src/wp-admin/upload.php | 3 ++ src/wp-includes/script-loader.php | 2 + 4 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/js/_enqueues/admin/post-lock.js diff --git a/src/js/_enqueues/admin/post-lock.js b/src/js/_enqueues/admin/post-lock.js new file mode 100644 index 0000000..ba473cc
- + 1 /* global wp.heartbeat */ 2 /** 3 * This file contains the functions needed for updating display of post locks. 4 * 5 * @since 5.0 6 */ 7 8 ( function( $ ) { 9 // Show/hide locks on posts. 10 $( document ).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) { 11 var locked = data['wp-check-locked-posts'] || {}; 12 13 $('#the-list tr').each( function(i, el) { 14 var key = el.id, row = $(el), lock_data, avatar; 15 16 if ( locked.hasOwnProperty( key ) ) { 17 if ( ! row.hasClass('wp-locked') ) { 18 lock_data = locked[key]; 19 row.find('.column-title .locked-text').text( lock_data.text ); 20 row.find('.check-column checkbox').prop('checked', false); 21 22 if ( lock_data.avatar_src ) { 23 avatar = $( '<img class="avatar avatar-18 photo" width="18" height="18" alt="" />' ).attr( 'src', lock_data.avatar_src.replace( /&/g, '&' ) ); 24 row.find('.column-title .locked-avatar').empty().append( avatar ); 25 } 26 row.addClass('wp-locked'); 27 } 28 } else if ( row.hasClass('wp-locked') ) { 29 // Make room for the CSS animation 30 row.removeClass('wp-locked').delay(1000).find('.locked-info span').empty(); 31 } 32 }); 33 }).on( 'heartbeat-send.wp-check-locked-posts', function( e, data ) { 34 var check = []; 35 36 $('#the-list tr').each( function(i, el) { 37 if ( el.id ) { 38 check.push( el.id ); 39 } 40 }); 41 42 if ( check.length ) { 43 data['wp-check-locked-posts'] = check; 44 } 45 }).ready( function() { 46 47 // Set the heartbeat interval to 15 sec. 48 if ( typeof wp !== 'undefined' && wp.heartbeat ) { 49 wp.heartbeat.interval( 15 ); 50 } 51 }); 52 } )( jQuery ); -
src/wp-admin/includes/class-wp-media-list-table.php
diff --git a/src/wp-admin/includes/class-wp-media-list-table.php b/src/wp-admin/includes/class-wp-media-list-table.php index 4be710f..1098a87 100644
a b class WP_Media_List_Table extends WP_List_Table { 361 361 ?> 362 362 </label> 363 363 <input type="checkbox" name="media[]" id="cb-select-<?php echo $post->ID; ?>" value="<?php echo $post->ID; ?>" /> 364 <div class="locked-indicator"> 365 <span class="locked-indicator-icon" aria-hidden="true"></span> 366 <span class="screen-reader-text"><?php 367 printf( 368 /* translators: %s: post title */ 369 __( '“%s” is locked' ), 370 _draft_or_post_title() 371 ); 372 ?></span> 373 </div> 364 374 <?php 365 375 } 366 376 } … … class WP_Media_List_Table extends WP_List_Table { 387 397 esc_attr( sprintf( __( '“%s” (Edit)' ), $title ) ) 388 398 ); 389 399 $link_end = '</a>'; 400 401 $lock_holder = wp_check_post_lock( $post->ID ); 402 403 if ( $lock_holder ) { 404 $lock_holder = get_userdata( $lock_holder ); 405 $locked_avatar = get_avatar( $lock_holder->ID, 18 ); 406 $locked_text = esc_html( sprintf( __( '%s is currently editing' ), $lock_holder->display_name ) ); 407 } else { 408 $locked_avatar = $locked_text = ''; 409 } 410 411 echo '<div class="locked-info"><span class="locked-avatar">' . $locked_avatar . '</span> <span class="locked-text">' . $locked_text . "</span></div>\n"; 390 412 } 391 413 392 414 $class = $thumb ? ' class="has-media-icon"' : ''; … … class WP_Media_List_Table extends WP_List_Table { 632 654 continue; 633 655 } 634 656 $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other'; 635 ?> 636 <tr id="post-<?php echo $post->ID; ?>" class="<?php echo trim( ' author-' . $post_owner . ' status-' . $post->post_status ); ?>"> 657 658 $classes = trim( ' author-' . $post_owner . ' status-' . $post->post_status ); 659 660 $lock_holder = wp_check_post_lock( $post->ID ); 661 if ( $lock_holder ) { 662 $classes .= ' wp-locked'; 663 } 664 ?> 665 <tr id="post-<?php echo $post->ID; ?>" class="<?php echo $classes; ?>"> 637 666 <?php $this->single_row_columns( $post ); ?> 638 667 </tr> 639 668 <?php -
src/wp-admin/upload.php
diff --git a/src/wp-admin/upload.php b/src/wp-admin/upload.php index 3afd24f..c0402a0 100644
a b if ( $doaction ) { 210 210 211 211 $wp_list_table->prepare_items(); 212 212 213 wp_enqueue_script('post-lock'); 214 wp_enqueue_script('heartbeat'); 215 213 216 $title = __( 'Media Library' ); 214 217 $parent_file = 'upload.php'; 215 218 -
src/wp-includes/script-loader.php
diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 226627e..da9367c 100644
a b function wp_default_scripts( &$scripts ) { 898 898 ) 899 899 ); 900 900 901 $scripts->add( 'post-lock', "/wp-admin/js/post-lock$suffix.js", array( 'jquery' ), false, 1 ); 902 901 903 $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'jquery-ui-core', 'thickbox' ), false, 1 ); 902 904 did_action( 'init' ) && $scripts->localize( 903 905 'plugin-install',