WordPress.org

Make WordPress Core

Ticket #32395: 32395.7.diff

File 32395.7.diff, 25.7 KB (added by helen, 4 years ago)
  • src/wp-admin/css/list-tables.css

     
    428428        content: '\f140';
    429429}
    430430
     431.wp-list-table .toggle-row {
     432        position: absolute;
     433        right: 8px;
     434        top: 10px;
     435        display: none;
     436        padding: 0;
     437        width: 40px;
     438        height: 40px;
     439        border: none;
     440        outline: none;
     441        background: transparent;
     442}
     443
     444.wp-list-table .toggle-row:hover {
     445        cursor: pointer;
     446}
     447
     448.wp-list-table .toggle-row:focus {
     449    -webkit-box-shadow:
     450        0 0 0 1px #5b9dd9,
     451                0 0 2px 1px rgba(30, 140, 190, .8);
     452    box-shadow:
     453        0 0 0 1px #5b9dd9,
     454                0 0 2px 1px rgba(30, 140, 190, .8);
     455}
     456
     457.ie8 .wp-list-table .toggle-row:focus {
     458        outline: #5b9dd9 solid 1px;
     459}
     460
     461.wp-list-table .toggle-row:active {
     462        -webkit-box-shadow: none;
     463        box-shadow: none;
     464}
     465
     466.wp-list-table .toggle-row:before {
     467        position: absolute;
     468        top: 0;
     469        left: 10px;
     470        display: block;
     471        padding: 0;
     472        color: #666;
     473        content: '\f140';
     474        font: normal 20px/1 'dashicons';
     475        line-height: 10px;
     476        -webkit-font-smoothing: antialiased;
     477        -moz-osx-font-smoothing: grayscale;
     478        speak: none;
     479}
     480
     481.wp-list-table .is-expanded .toggle-row:before {
     482        content: '\f142';
     483}
     484
    431485tr.wp-locked .locked-indicator {
    432486        margin-left: 6px;
    433487        height: 20px;
     
    13031357        content: '\f147';
    13041358}
    13051359
    1306 .plugins .plugin-update-tr .plugin-update {
     1360.wp-list-table.plugins tbody tr.plugin-update-tr td.plugin-update {
     1361        overflow: hidden; /* clearfix */
    13071362        padding: 0;
    13081363        -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
    13091364        box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
     
    16761731                font-size: 14px;
    16771732        }
    16781733
    1679         /* Columns to hide */
    1680         .fixed .column-date,
    1681         .fixed .column-author,
    1682         .column-categories,
    1683         .column-tags,
    1684         .tags .column-description,
    1685         .media .column-parent,
    1686         .media .column-comments,
    1687         .users .column-email,
    1688         .users .column-name,
    1689         .sites .column-registered,
    1690         .sites .column-users {
     1734        .wp-list-table th:not(.column-primary),
     1735        .wp-list-table th:not(.column-primary),
     1736        .wp-list-table tr:not(.inline-edit-row) td:not(.column-primary):not(.check-column) {
    16911737                display: none;
    16921738        }
    16931739
     1740        /* Checkboxes need to show */
     1741        .wp-list-table tr th.check-column {
     1742                display: table-cell;
     1743                width: 35px;
     1744        }
     1745
     1746        .wp-list-table .toggle-row {
     1747                display: block;
     1748        }
     1749
     1750        .wp-list-table tr:not(.inline-edit-row) td:not(.check-column) {
     1751                position: relative;
     1752                clear: both;
     1753                display: block;
     1754                width: auto !important; /* needs to override some columns that are more specifically targeted */
     1755        }
     1756
     1757        .wp-list-table td.column-primary {
     1758                padding-right: 50px; /* space for toggle button */
     1759        }
     1760
     1761        .wp-list-table tr:not(.inline-edit-row) td:not(.column-primary):not(.check-column) {
     1762                padding: 3px 8px 3px 35%;
     1763        }
     1764
     1765        .wp-list-table tr:not(.inline-edit-row) td:not(.column-primary)::before {
     1766                position: absolute;
     1767                left: 10px; /* match padding of regular table cell */
     1768                display: block;
     1769                overflow: hidden;
     1770                width: 32%; /* leave a little space for a gutter */
     1771                content: attr(data-colname);
     1772                white-space: nowrap;
     1773                text-overflow: ellipsis;
     1774        }
     1775
     1776        .wp-list-table .is-expanded td:not(.hidden) {
     1777                display: block !important;
     1778                overflow: hidden; /* clearfix */
     1779        }
     1780
     1781        /* Special cases */
     1782        .widefat .num,
     1783        .column-posts {
     1784                text-align: left;
     1785        }
     1786
     1787        #comments-form .fixed .column-author {
     1788                display: none !important;
     1789        }
     1790
    16941791        .fixed .column-comment .comment-author {
    16951792                display: block;
    16961793        }
    16971794
    1698         /* Posts */
    1699         .column-title {
    1700                 width: 85%;
     1795        #the-comment-list .is-expanded td {
     1796                -webkit-box-shadow: none;
     1797                box-shadow: none;
    17011798        }
    17021799
    1703         .fixed .column-comments, .widefat .check-column {
    1704                 width: 35px
     1800        #the-comment-list .is-expanded td:last-child {
     1801                -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
     1802                box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
    17051803        }
    17061804
    17071805        .widefat thead .check-column, .widefat tfoot .check-column {
     
    17121810                word-wrap: normal;
    17131811        }
    17141812
    1715         /* Media */
    1716         .media .column-title {
    1717                 width: auto;
    1718         }
    1719 
    17201813        /* Quick Edit and Bulk Edit */
    17211814        #wpbody-content .quick-edit-row-post .inline-edit-col-left,
    17221815        #wpbody-content .quick-edit-row-post .inline-edit-col-right,
     
    17921885                height: 22px;
    17931886        }
    17941887
    1795         /* Taxonomies */
    1796         .tags .column-posts {
    1797                 width: 74px;
    1798         }
    1799 
    1800         .tags .column-slug {
    1801                 width: 30%;
    1802         }
    1803 
    1804         /* Comments */
    1805         .comments .column-response {
    1806                 width: 35%;
    1807         }
    1808 
    1809         /* Users */
    1810         .users .column-role {
    1811                 width: 35%;
    1812         }
    1813 
    1814         /* Network admin sites */
    1815         .sites .column-blogname {
    1816                 width: 55%;
    1817         }
    1818 
    18191888        /* Updates */
    18201889        #wpbody-content #update-themes-table .plugin-title {
    18211890                width: auto;
     
    18311900        }
    18321901
    18331902        /* Plugin/Theme Management Page */
    1834         .wp-list-table.plugins {
    1835                 position: relative;
    1836                 margin-bottom: 15px;
    1837         }
    1838 
    1839         #wpbody-content .wp-list-table.plugins thead .column-description,
    1840         #wpbody-content .wp-list-table.plugins tfoot .column-description,
    1841         .wp-list-table.plugins th#description {
     1903        .wp-list-table.plugins .toggle-row {
    18421904                display: none;
    18431905        }
    18441906
    1845         #wpbody-content .wp-list-table.plugins,
    1846         #wpbody-content .wp-list-table.plugins thead,
    1847         #wpbody-content .wp-list-table.plugins tbody,
    1848         #wpbody-content .wp-list-table.plugins tr,
    1849         #wpbody-content .wp-list-table.plugins .column-description,
    1850         #wpbody-content .wp-list-table.plugins .plugin-title,
    1851         #wpbody-content .wp-list-table.plugins .theme-title,
    1852         #wpbody-content .wp-list-table.plugins .plugin-update,
    1853         #wpbody-content .wp-list-table.plugins .manage-column.column-name {
     1907        #wpbody-content .wp-list-table.plugins td {
    18541908                display: block;
    18551909                width: auto;
     1910                padding: 10px 9px; /* reset from other list tables that have a label at this width */
    18561911        }
    18571912
    1858         .active, .inactive {
    1859                 padding-top: 0;
     1913        #wpbody-content .wp-list-table.plugins .column-description {
     1914                padding-top: 2px;
    18601915        }
    18611916
    18621917        .wp-list-table.plugins .plugin-title,
     
    18651920                padding-bottom: 4px;
    18661921        }
    18671922
    1868         .plugins tr.active + tr.inactive th.check-column,
    18691923        .plugins tr.active + tr.inactive td,
    18701924        .wp-list-table.plugins .plugin-title,
    1871         .wp-list-table.plugins .theme-title,
    1872         .wp-list-table.plugins tbody th {
     1925        .wp-list-table.plugins .theme-title {
    18731926                -webkit-box-shadow: none;
    18741927                box-shadow: none;
    18751928        }
     
    18781931                padding: 1px 0 0;
    18791932        }
    18801933
    1881         .plugins tr.active + tr.inactive td.column-description {
     1934        .plugins tr.active + tr.inactive th.check-column,
     1935        .plugins tr.active + tr.inactive td.column-description,
     1936        .plugins .plugin-update-tr:before {
    18821937                -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
    18831938                box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
    18841939        }
     
    18881943                border-top: none;
    18891944        }
    18901945
    1891         .wp-list-table.plugins .column-description {
    1892                 padding-top: 0;
     1946        /* mimic the checkbox th */
     1947        .plugins .plugin-update-tr:before {
     1948                content: '';
     1949                display: table-cell;
    18931950        }
    18941951
    1895         .wp-list-table.plugins .manage-column.column-name,
    1896         .wp-list-table.plugins .column-description,
    1897         .wp-list-table.plugins .plugin-title,
    1898         .wp-list-table.plugins .theme-title {
    1899                 padding-right: 12px;
    1900                 padding-left: 46px;
     1952        .plugins .active.update + .plugin-update-tr:before {
     1953                border-left: 4px solid #d54e21;
     1954                background-color: #fef7f1;
    19011955        }
    19021956
    1903         .wp-list-table.plugins .manage-column.column-name {
    1904                 padding-top: 11px;
    1905                 padding-bottom: 12px;
     1957        .plugins .plugin-update-tr .plugin-update {
     1958                border-left: none;
    19061959        }
    19071960
    1908         .wp-list-table.plugins .manage-column.column-name.sortable {
    1909                 padding: 4px 12px 4px 36px;
     1961        .plugin-update-tr .update-message {
     1962                margin-left: 0;
    19101963        }
    19111964
    1912         .wp-list-table.plugins tr {
    1913                 position: relative;
    1914         }
    1915 
    1916         .wp-list-table.plugins th.check-column,
    1917         .wp-list-table.plugins thead td.check-column,
    1918         .wp-list-table.plugins tfoot td.check-column,
    1919         .wp-list-table.plugins tr.update th.check-column {
    1920                 position: absolute;
    1921                 height: auto;
    1922                 top: 0;
    1923                 bottom: 0;
    1924                 left: 0;
    1925                 padding-left: 2px;
    1926                 padding-top: 18px;
    1927         }
    1928 
    1929         .wp-list-table.plugins thead td.check-column,
    1930         .wp-list-table.plugins tfoot td.check-column {
    1931                 padding-left: 3px;
    1932                 padding-top: 11px;
    1933                 background: none;
    1934         }
    1935 
    1936         .plugins tbody th.check-column input[type="checkbox"] {
    1937                 margin-top: -3px;
    1938                 margin-left: 9px;
    1939         }
    1940 
    1941         .plugins tbody .active th.check-column input[type="checkbox"],
    1942         .plugins tbody .active.update th.check-column input[type="checkbox"] {
    1943                 margin-left: 5px;
    1944         }
    1945 
    1946         .wp-list-table.plugins thead .check-column input,
    1947         .wp-list-table.plugins tfoot .check-column input {
    1948                 margin-top: -2px;
    1949                 margin-left: 8px;
    1950         }
    1951 
    1952         .wp-list-table.plugins .active th.check-column {
    1953                 background: none;
    1954         }
    1955 
    19561965        .wp-list-table.plugins .plugin-title strong,
    19571966        .wp-list-table.plugins .theme-title strong {
    19581967                font-size: 1.4em;
     
    19912000                box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
    19922001        }
    19932002}
    1994 
    1995 /* Smartphone */
    1996 @media screen and (max-width: 600px) {
    1997         /* Remove slug column from taxonomy list page
    1998            and role column from users list page */
    1999         .tags .column-slug,
    2000         .users .column-role {
    2001                 display: none;
    2002         }
    2003 }
  • src/wp-admin/includes/class-wp-comments-list-table.php

     
    395395                $this->display_tablenav( 'top' );
    396396
    397397?>
    398 <table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>">
     398<table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
    399399        <thead>
    400400        <tr>
    401401                <?php $this->print_column_headers(); ?>
     
    466466                        return;
    467467                }
    468468
     469                if ( $primary !== $column_name ) {
     470                        return '';
     471                }
     472
    469473                $post = get_post();
    470474
    471475                $the_comment_status = wp_get_comment_status( $comment->comment_ID );
    472476
    473477                $out = '';
    474478
    475                 if ( $primary === $column_name ) {
    476                         $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) );
    477                         $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) );
     479                $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) );
     480                $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) );
    478481
    479                         $url = "comment.php?c=$comment->comment_ID";
     482                $url = "comment.php?c=$comment->comment_ID";
    480483
    481                         $approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" );
    482                         $unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" );
    483                         $spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" );
    484                         $unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" );
    485                         $trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" );
    486                         $untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" );
    487                         $delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" );
     484                $approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" );
     485                $unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" );
     486                $spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" );
     487                $unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" );
     488                $trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" );
     489                $untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" );
     490                $delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" );
    488491
    489                         // Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash.
    490                         $actions = array(
    491                                 'approve' => '', 'unapprove' => '',
    492                                 'reply' => '',
    493                                 'quickedit' => '',
    494                                 'edit' => '',
    495                                 'spam' => '', 'unspam' => '',
    496                                 'trash' => '', 'untrash' => '', 'delete' => ''
    497                         );
     492                // Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash.
     493                $actions = array(
     494                        'approve' => '', 'unapprove' => '',
     495                        'reply' => '',
     496                        'quickedit' => '',
     497                        'edit' => '',
     498                        'spam' => '', 'unspam' => '',
     499                        'trash' => '', 'untrash' => '', 'delete' => ''
     500                );
    498501
    499                         // Not looking at all comments.
    500                         if ( $comment_status && 'all' != $comment_status ) {
    501                                 if ( 'approved' == $the_comment_status ) {
    502                                         $actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=unapproved' class='vim-u vim-destructive' title='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
    503                                 } elseif ( 'unapproved' == $the_comment_status ) {
    504                                         $actions['approve'] = "<a href='$approve_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=approved' class='vim-a vim-destructive' title='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
    505                                 }
    506                         } else {
    507                                 $actions['approve'] = "<a href='$approve_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a' title='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
    508                                 $actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u' title='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
     502                // Not looking at all comments.
     503                if ( $comment_status && 'all' != $comment_status ) {
     504                        if ( 'approved' == $the_comment_status ) {
     505                                $actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=unapproved' class='vim-u vim-destructive' title='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
     506                        } elseif ( 'unapproved' == $the_comment_status ) {
     507                                $actions['approve'] = "<a href='$approve_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=approved' class='vim-a vim-destructive' title='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
    509508                        }
     509                } else {
     510                        $actions['approve'] = "<a href='$approve_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a' title='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
     511                        $actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u' title='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
     512                }
    510513
    511                         if ( 'spam' != $the_comment_status ) {
    512                                 $actions['spam'] = "<a href='$spam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::spam=1' class='vim-s vim-destructive' title='" . esc_attr__( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>';
    513                         } elseif ( 'spam' == $the_comment_status ) {
    514                                 $actions['unspam'] = "<a href='$unspam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:66cc66:unspam=1' class='vim-z vim-destructive'>" . _x( 'Not Spam', 'comment' ) . '</a>';
    515                         }
     514                if ( 'spam' != $the_comment_status ) {
     515                        $actions['spam'] = "<a href='$spam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::spam=1' class='vim-s vim-destructive' title='" . esc_attr__( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>';
     516                } elseif ( 'spam' == $the_comment_status ) {
     517                        $actions['unspam'] = "<a href='$unspam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:66cc66:unspam=1' class='vim-z vim-destructive'>" . _x( 'Not Spam', 'comment' ) . '</a>';
     518                }
    516519
    517                         if ( 'trash' == $the_comment_status ) {
    518                                 $actions['untrash'] = "<a href='$untrash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:66cc66:untrash=1' class='vim-z vim-destructive'>" . __( 'Restore' ) . '</a>';
    519                         }
     520                if ( 'trash' == $the_comment_status ) {
     521                        $actions['untrash'] = "<a href='$untrash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:66cc66:untrash=1' class='vim-z vim-destructive'>" . __( 'Restore' ) . '</a>';
     522                }
    520523
    521                         if ( 'spam' == $the_comment_status || 'trash' == $the_comment_status || !EMPTY_TRASH_DAYS ) {
    522                                 $actions['delete'] = "<a href='$delete_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::delete=1' class='delete vim-d vim-destructive'>" . __( 'Delete Permanently' ) . '</a>';
    523                         } else {
    524                                 $actions['trash'] = "<a href='$trash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::trash=1' class='delete vim-d vim-destructive' title='" . esc_attr__( 'Move this comment to the trash' ) . "'>" . _x( 'Trash', 'verb' ) . '</a>';
    525                         }
     524                if ( 'spam' == $the_comment_status || 'trash' == $the_comment_status || !EMPTY_TRASH_DAYS ) {
     525                        $actions['delete'] = "<a href='$delete_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::delete=1' class='delete vim-d vim-destructive'>" . __( 'Delete Permanently' ) . '</a>';
     526                } else {
     527                        $actions['trash'] = "<a href='$trash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::trash=1' class='delete vim-d vim-destructive' title='" . esc_attr__( 'Move this comment to the trash' ) . "'>" . _x( 'Trash', 'verb' ) . '</a>';
     528                }
    526529
    527                         if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) {
    528                                 $actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" . esc_attr__( 'Edit comment' ) . "'>". __( 'Edit' ) . '</a>';
     530                if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) {
     531                        $actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" . esc_attr__( 'Edit comment' ) . "'>". __( 'Edit' ) . '</a>';
    529532
    530                                 $format = '<a data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s" title="%s" href="#">%s</a>';
     533                        $format = '<a data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s" title="%s" href="#">%s</a>';
    531534
    532                                 $actions['quickedit'] = sprintf( $format, $comment->comment_ID, $post->ID, 'edit', 'vim-q comment-inline',esc_attr__( 'Edit this item inline' ), __( 'Quick&nbsp;Edit' ) );
     535                        $actions['quickedit'] = sprintf( $format, $comment->comment_ID, $post->ID, 'edit', 'vim-q comment-inline',esc_attr__( 'Edit this item inline' ), __( 'Quick&nbsp;Edit' ) );
    533536
    534                                 $actions['reply'] = sprintf( $format, $comment->comment_ID, $post->ID, 'replyto', 'vim-r comment-inline', esc_attr__( 'Reply to this comment' ), __( 'Reply' ) );
    535                         }
     537                        $actions['reply'] = sprintf( $format, $comment->comment_ID, $post->ID, 'replyto', 'vim-r comment-inline', esc_attr__( 'Reply to this comment' ), __( 'Reply' ) );
     538                }
    536539
    537                         /** This filter is documented in wp-admin/includes/dashboard.php */
    538                         $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment );
     540                /** This filter is documented in wp-admin/includes/dashboard.php */
     541                $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment );
    539542
    540                         $i = 0;
    541                         $out .= '<div class="row-actions">';
    542                         foreach ( $actions as $action => $link ) {
    543                                 ++$i;
    544                                 ( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | ';
     543                $i = 0;
     544                $out .= '<div class="row-actions">';
     545                foreach ( $actions as $action => $link ) {
     546                        ++$i;
     547                        ( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | ';
    545548
    546                                 // Reply and quickedit need a hide-if-no-js span when not added with ajax
    547                                 if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined('DOING_AJAX') )
    548                                         $action .= ' hide-if-no-js';
    549                                 elseif ( ( $action == 'untrash' && $the_comment_status == 'trash' ) || ( $action == 'unspam' && $the_comment_status == 'spam' ) ) {
    550                                         if ( '1' == get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true ) )
    551                                                 $action .= ' approve';
    552                                         else
    553                                                 $action .= ' unapprove';
    554                                 }
     549                        // Reply and quickedit need a hide-if-no-js span when not added with ajax
     550                        if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined('DOING_AJAX') )
     551                                $action .= ' hide-if-no-js';
     552                        elseif ( ( $action == 'untrash' && $the_comment_status == 'trash' ) || ( $action == 'unspam' && $the_comment_status == 'spam' ) ) {
     553                                if ( '1' == get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true ) )
     554                                        $action .= ' approve';
     555                                else
     556                                        $action .= ' unapprove';
     557                        }
    555558
    556                                 $out .= "<span class='$action'>$sep$link</span>";
    557                         }
    558                         $out .= '</div>';
     559                        $out .= "<span class='$action'>$sep$link</span>";
    559560                }
     561                $out .= '</div>';
    560562
     563                $out .= '<button type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>';
     564
    561565                return $out;
    562566        }
    563567
  • src/wp-admin/includes/class-wp-list-table.php

     
    497497                }
    498498                $out .= '</div>';
    499499
     500                $out .= '<button type="button" class="toggle-row"><span class="screen-reader-text">Show more details</span></button>';
     501
    500502                return $out;
    501503        }
    502504
     
    943945         * @param bool $with_id Whether to set the id attribute or not
    944946         */
    945947        public function print_column_headers( $with_id = true ) {
    946                 list( $columns, $hidden, $sortable ) = $this->get_column_info();
     948                list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
    947949
    948950                $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
    949951                $current_url = remove_query_arg( 'paged', $current_url );
     
    977979                        elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) )
    978980                                $class[] = 'num';
    979981
     982                        if ( $column_key === $primary ) {
     983                                $class[] = 'column-primary';
     984                        }
     985
    980986                        if ( isset( $sortable[$column_key] ) ) {
    981987                                list( $orderby, $desc_first ) = $sortable[$column_key];
    982988
     
    11631169                                $classes .= ' hidden';
    11641170                        }
    11651171
    1166                         $attributes = "class='$classes'";
     1172                        // Comments column uses HTML in the display name with screen reader text.
     1173                        // Instead of using esc_attr(), we strip tags to get closer to a user-friendly string.
     1174                        $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
    11671175
     1176                        $attributes = "class='$classes' $data";
     1177
    11681178                        if ( 'cb' == $column_name ) {
    11691179                                echo '<th scope="row" class="check-column">';
    11701180                                echo $this->column_cb( $item );
  • src/wp-admin/includes/class-wp-ms-sites-list-table.php

     
    403403                                $classes .= ' hidden';
    404404                        }
    405405
    406                         $attributes = "class='$classes'";
     406                        $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
    407407
     408                        $attributes = "class='$classes' $data";
     409
    408410                        if ( 'cb' === $column_name ) {
    409411                                echo '<th scope="row" class="check-column">';
    410412
  • src/wp-admin/includes/class-wp-ms-users-list-table.php

     
    336336                                $classes .= ' hidden';
    337337                        }
    338338
    339                         $attributes = "class='$classes'";
     339                        $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
    340340
     341                        $attributes = "class='$classes' $data";
     342
    341343                        if ( 'cb' === $column_name ) {
    342344                                echo '<th scope="row" class="check-column">';
    343345
  • src/wp-admin/includes/class-wp-posts-list-table.php

     
    973973                                $classes .= ' hidden';
    974974                        }
    975975
    976                         $attributes = "class='$classes'";
     976                        // Comments column uses HTML in the display name with screen reader text.
     977                        // Instead of using esc_attr(), we strip tags to get closer to a user-friendly string.
     978                        $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
    977979
     980                        $attributes = "class='$classes' $data";
     981
    978982                        if ( 'cb' === $column_name ) {
    979983                                echo '<th scope="row" class="check-column">';
    980984
  • src/wp-admin/includes/class-wp-users-list-table.php

     
    419419                                $classes .= ' hidden';
    420420                        }
    421421
    422                         $attributes = "class='$classes'";
     422                        $data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
    423423
     424                        $attributes = "class='$classes' $data";
     425
    424426                        if ( 'cb' === $column_name ) {
    425427                                $r .= "<th scope='row' class='check-column'>$checkbox</th>";
    426428                        } else {
  • src/wp-admin/js/common.js

     
    487487                }
    488488        }, 'td.has-row-actions' );
    489489
     490        // Toggle list table rows on small screens
     491        $( 'tbody' ).on( 'click', '.toggle-row', function() {
     492                $( this ).closest( 'tr' ).toggleClass( 'is-expanded' );
     493        });
     494
    490495        $('#default-password-nag-no').click( function() {
    491496                setUserSetting('default_password_nag', 'hide');
    492497                $('div.default-password-nag').hide();
  • src/wp-admin/js/inline-edit-post.js

     
    133133                editRow = $('#inline-edit').clone(true);
    134134                $('td', editRow).attr('colspan', $('.widefat:first thead th:visible').length);
    135135
    136                 $(t.what+id).hide().after(editRow).after('<tr class="hidden"></tr>');
     136                $(t.what+id).removeClass('is-expanded').hide().after(editRow).after('<tr class="hidden"></tr>');
    137137
    138138                // populate the data
    139139                rowData = $('#inline_'+id);