WordPress.org

Make WordPress Core

Ticket #44900: 44900-list-mode.diff

File 44900-list-mode.diff, 5.6 KB (added by pbiron, 15 months ago)

patch the covers the needed changes to list mode

  • 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( /&amp;/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 { 
    361361                                                                                                                                                ?>
    362362                        </label>
    363363                        <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                                        __( '&#8220;%s&#8221; is locked' ),
     370                                        _draft_or_post_title()
     371                                );
     372                                ?></span>
     373                        </div>
    364374                        <?php
    365375                }
    366376        }
    class WP_Media_List_Table extends WP_List_Table { 
    387397                                esc_attr( sprintf( __( '&#8220;%s&#8221; (Edit)' ), $title ) )
    388398                        );
    389399                        $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";
    390412                }
    391413
    392414                $class = $thumb ? ' class="has-media-icon"' : '';
    class WP_Media_List_Table extends WP_List_Table { 
    632654                                continue;
    633655                        }
    634656                        $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; ?>">
    637666                                <?php $this->single_row_columns( $post ); ?>
    638667                        </tr>
    639668                        <?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 ) { 
    210210
    211211$wp_list_table->prepare_items();
    212212
     213wp_enqueue_script('post-lock');
     214wp_enqueue_script('heartbeat');
     215
    213216$title       = __( 'Media Library' );
    214217$parent_file = 'upload.php';
    215218
  • 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 ) { 
    898898                        )
    899899                );
    900900
     901                $scripts->add( 'post-lock', "/wp-admin/js/post-lock$suffix.js", array( 'jquery' ), false, 1 );
     902
    901903                $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'jquery-ui-core', 'thickbox' ), false, 1 );
    902904                did_action( 'init' ) && $scripts->localize(
    903905                        'plugin-install',