WordPress.org

Make WordPress Core

Ticket #23396: version-6.diff

File version-6.diff, 17.5 KB (added by adamsilverstein, 5 years ago)
  • wp-includes/post-template.php

     
    13011301                return false;
    13021302
    13031303        /* translators: revision date format, see http://php.net/date */
    1304         $datef = _x( 'j F, Y @ G:i', 'revision date format');
     1304        $datef = _x( 'D, M jS @ G:i a', 'revision date format' );
    13051305        /* translators: 1: date */
    13061306        $autosavef = __( '%1$s [Autosave]' );
    13071307        /* translators: 1: date */
    13081308        $currentf  = __( '%1$s [Current Revision]' );
    13091309
     1310        $author = get_the_author_meta( 'display_name', $revision->post_author );
     1311
    13101312        $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
    13111313        if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
    1312                 $date = "<a href='$link'>$date</a>";
     1314                $date = "<a href='$link'>$author : $date</a>";
    13131315
    13141316        if ( !wp_is_post_revision( $revision ) )
    13151317                $date = sprintf( $currentf, $date );
     
    13861388                        continue;
    13871389
    13881390                $date = wp_post_revision_title( $revision );
    1389                 $name = get_the_author_meta( 'display_name', $revision->post_author );
     1391                $datelinktodiff = sprintf( '<a href="revision.php?action=diff&post_type=post&left=%d&right=%d">%s</a>',
     1392                                                                        $revision->ID, $post->ID, wp_post_revision_title( $revision, false ) );
    13901393
     1394                $name = '';
     1395                $avatar = get_avatar( $revision->post_author, 22 );
    13911396                if ( 'form-table' == $format ) {
    1392                         if ( $left )
    1393                                 $left_checked = $left == $revision->ID ? ' checked="checked"' : '';
    1394                         else
    1395                                 $left_checked = $right_checked ? ' checked="checked"' : ''; // [sic] (the next one)
    1396                         $right_checked = $right == $revision->ID ? ' checked="checked"' : '';
    13971397
    13981398                        $class = $class ? '' : " class='alternate'";
    13991399
    14001400                        if ( $post->ID != $revision->ID && $can_edit_post )
    1401                                 $actions = '<a href="' . wp_nonce_url( add_query_arg( array( 'revision' => $revision->ID, 'action' => 'restore' ) ), "restore-post_$post->ID|$revision->ID" ) . '">' . __( 'Restore' ) . '</a>';
     1401                                $actions = '';// '<a href="' . wp_nonce_url( add_query_arg( array( 'revision' => $revision->ID, 'action' => 'restore' ) ), "restore-post_$post->ID|$revision->ID" ) . '">' . __( 'Restore' ) . '</a>';
    14021402                        else
    14031403                                $actions = '';
    14041404
    14051405                        $rows .= "<tr$class>\n";
    1406                         $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='left' value='$revision->ID'$left_checked /></th>\n";
    1407                         $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='right' value='$revision->ID'$right_checked /></th>\n";
    1408                         $rows .= "\t<td>$date</td>\n";
    1409                         $rows .= "\t<td>$name</td>\n";
    1410                         $rows .= "\t<td class='action-links'>$actions</td>\n";
     1406                        $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='checkbox' name='revisionstocompare[]' value='$revision->ID' /></th>\n";
     1407                        $rows .= "\t<td>$avatar $date</td>\n";
    14111408                        $rows .= "</tr>\n";
    14121409                } else {
    1413                         $title = sprintf( $titlef, $date, $name );
     1410                        $title = sprintf( $titlef, $datelinktodiff, $name );
    14141411                        $rows .= "\t<li>$title</li>\n";
    14151412                }
    14161413        }
    14171414
    14181415        if ( 'form-table' == $format ) : ?>
    1419 
    1420 <form action="revision.php" method="get">
    1421 
     1416<form action="revision.php" method="get" id='revision-list-form'>
    14221417<div class="tablenav">
    1423         <div class="alignleft">
    1424                 <input type="submit" class="button-secondary" value="<?php esc_attr_e( 'Compare Revisions' ); ?>" />
     1418        <div class='revision-post-list-title'><?php _e( 'Pick two revisions to compare' ) ?></div>
     1419        <div class="alignright">
     1420                <input type="submit" class="button-secondary compare-revisions no-js" value="<?php esc_attr_e( 'Compare Revisions' ); ?>" />
    14251421                <input type="hidden" name="action" value="diff" />
    14261422                <input type="hidden" name="post_type" value="<?php echo esc_attr($post->post_type); ?>" />
    14271423        </div>
    14281424</div>
    14291425
    1430 <br class="clear" />
    1431 
    14321426<table class="widefat post-revisions" cellspacing="0" id="post-revisions">
    14331427        <col />
    1434         <col />
    1435         <col style="width: 33%" />
    1436         <col style="width: 33%" />
    1437         <col style="width: 33%" />
    1438 <thead>
    1439 <tr>
    1440         <th scope="col"><?php /* translators: column name in revisions */ _ex( 'Old', 'revisions column name' ); ?></th>
    1441         <th scope="col"><?php /* translators: column name in revisions */ _ex( 'New', 'revisions column name' ); ?></th>
    1442         <th scope="col"><?php /* translators: column name in revisions */ _ex( 'Date Created', 'revisions column name' ); ?></th>
    1443         <th scope="col"><?php _e( 'Author' ); ?></th>
    1444         <th scope="col" class="action-links"><?php _e( 'Actions' ); ?></th>
    1445 </tr>
    1446 </thead>
     1428        <col style="width: 95%" />
    14471429<tbody>
    14481430
    14491431<?php echo $rows; ?>
  • wp-includes/js/wp-list-revisions.js

     
    66                        var i, checkCount = 0, side;
    77                        for ( i = 0; i < inputs.length; i++ ) {
    88                                checkCount += inputs[i].checked ? 1 : 0;
    9                                 side = inputs[i].getAttribute('name');
    10                                 if ( ! inputs[i].checked &&
    11                                 ( 'left' == side && 1 > checkCount || 'right' == side && 1 < checkCount && ( ! inputs[i-1] || ! inputs[i-1].checked ) ) &&
    12                                 ! ( inputs[i+1] && inputs[i+1].checked && 'right' == inputs[i+1].getAttribute('name') ) )
    13                                         inputs[i].style.visibility = 'hidden';
    14                                 else if ( 'left' == side || 'right' == side )
    15                                         inputs[i].style.visibility = 'visible';
    169                        }
     10
     11                        if ( 2 == checkCount ) {
     12                                document.getElementById('revision-list-form').submit();
     13                        }
     14
    1715                }
    1816                pr.onclick();
    1917        }
  • wp-includes/wp-diff.php

     
    9898         * @return string
    9999         */
    100100        function addedLine( $line ) {
    101                 return "<td>+</td><td class='diff-addedline'>{$line}</td>";
     101                return "<td class='diff-addedline-indicator'>+</td><td class='diff-addedline'>{$line}</td>";
    102102        }
    103103
    104104        /**
     
    108108         * @return string
    109109         */
    110110        function deletedLine( $line ) {
    111                 return "<td>-</td><td class='diff-deletedline'>{$line}</td>";
     111                return "<td class='diff-deletedline-indicator'>-</td><td class='diff-deletedline'>{$line}</td>";
    112112        }
    113113
    114114        /**
     
    118118         * @return string
    119119         */
    120120        function contextLine( $line ) {
    121                 return "<td> </td><td class='diff-context'>{$line}</td>";
     121                return "<td class='context-indicator'></td><td class='diff-context'>{$line}</td>";
    122122        }
    123123
    124124        /**
     
    142142                $r = '';
    143143                foreach ($lines as $line) {
    144144                        if ( $encode )
    145                                 $line = htmlspecialchars( $line );
     145                                $line = wp_kses_post( $line );
    146146                        $r .= '<tr>' . $this->emptyLine() . $this->addedLine( $line ) . "</tr>\n";
    147147                }
    148148                return $r;
     
    160160                $r = '';
    161161                foreach ($lines as $line) {
    162162                        if ( $encode )
    163                                 $line = htmlspecialchars( $line );
     163                                $line = ( $line );
    164164                        $r .= '<tr>' . $this->deletedLine( $line ) . $this->emptyLine() . "</tr>\n";
    165165                }
    166166                return $r;
     
    178178                $r = '';
    179179                foreach ($lines as $line) {
    180180                        if ( $encode )
    181                                 $line = htmlspecialchars( $line );
     181                                $line = wp_kses_post( $line );
    182182                        $r .= '<tr>' .
    183183                                $this->contextLine( $line ) . $this->contextLine( $line ) . "</tr>\n";
    184184                }
     
    248248                        if ( isset( $orig_diffs[$orig_rows[$row]] ) )
    249249                                $orig_line = $orig_diffs[$orig_rows[$row]];
    250250                        elseif ( isset( $orig[$orig_rows[$row]] ) )
    251                                 $orig_line = htmlspecialchars($orig[$orig_rows[$row]]);
     251                                $orig_line = wp_kses_post($orig[$orig_rows[$row]]);
    252252                        else
    253253                                $orig_line = '';
    254254
    255255                        if ( isset( $final_diffs[$final_rows[$row]] ) )
    256256                                $final_line = $final_diffs[$final_rows[$row]];
    257257                        elseif ( isset( $final[$final_rows[$row]] ) )
    258                                 $final_line = htmlspecialchars($final[$final_rows[$row]]);
     258                                $final_line = wp_kses_post($final[$final_rows[$row]]);
    259259                        else
    260260                                $final_line = '';
    261261
  • wp-includes/pluggable.php

     
    17431743        return $r;
    17441744}
    17451745endif;
     1746function wp_text_diff_with_count( $left_string, $right_string, $args = null ) {
     1747        $defaults = array( 'title' => '', 'title_left' => '', 'title_right' => '' );
     1748        $args = wp_parse_args( $args, $defaults );
     1749
     1750        if ( !class_exists( 'WP_Text_Diff_Renderer_Table' ) )
     1751                require( ABSPATH . WPINC . '/wp-diff.php' );
     1752
     1753        $left_string  = normalize_whitespace( $left_string );
     1754        $right_string = normalize_whitespace( $right_string );
     1755
     1756        $left_lines  = explode( "\n", $left_string );
     1757        $right_lines = explode( "\n", $right_string) ;
     1758
     1759        $text_diff = new Text_Diff($left_lines, $right_lines  );
     1760        $linesadded = $text_diff->countAddedLines();
     1761        $linesdeleted = $text_diff->countDeletedLines();
     1762
     1763        $renderer  = new WP_Text_Diff_Renderer_Table();
     1764        $diff = $renderer->render( $text_diff );
     1765
     1766        if ( !$diff )
     1767                return '';
     1768
     1769        $r  = "<table class='diff'>\n";
     1770        $r .= "<col class='ltype' /><col class='content' /><col class='ltype' /><col class='content' />";
     1771
     1772        if ( $args['title'] || $args['title_left'] || $args['title_right'] )
     1773                $r .= "<thead>";
     1774        if ( $args['title'] )
     1775                $r .= "<tr class='diff-title'><th colspan='4'>$args[title]</th></tr>\n";
     1776        if ( $args['title_left'] || $args['title_right'] ) {
     1777                $r .= "<tr class='diff-sub-title'>\n";
     1778                $r .= "\t<td id=\"left\"></td><th>$args[title_left]</th>\n";
     1779                $r .= "\t<td id=\"right\"></td><th>$args[title_right]</th>\n";
     1780                $r .= "</tr>\n";
     1781        }
     1782        if ( $args['title'] || $args['title_left'] || $args['title_right'] )
     1783                $r .= "</thead>\n";
     1784
     1785        $r .= "<tbody>\n$diff\n</tbody>\n";
     1786        $r .= "</table>";
     1787
     1788        return array( 'html' => $r, 'linesadded' => $linesadded, 'linesdeleted' => $linesdeleted );
     1789}
     1790 No newline at end of file
  • wp-admin/revision.php

     
    1111
    1212wp_enqueue_script('list-revisions');
    1313
    14 wp_reset_vars(array('revision', 'left', 'right', 'action'));
     14wp_reset_vars( array( 'revision', 'left', 'right', 'action' ) );
    1515
    1616$revision_id = absint($revision);
    1717$left        = absint($left);
     
    1919
    2020$redirect = 'edit.php';
    2121
     22if ( isset( $_GET['revisionstocompare'] ) ) {
     23        $revisionstocompare = $_GET['revisionstocompare'];
     24        $left        = absint( $revisionstocompare[1] );
     25        $right       = absint( $revisionstocompare[0] );
     26}
     27
     28
    2229switch ( $action ) :
    2330case 'restore' :
    2431        if ( !$revision = wp_get_post_revision( $revision_id ) )
     
    93100                break;
    94101
    95102        $post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
    96         $h2 = sprintf( __( 'Compare Revisions of &#8220;%1$s&#8221;' ), $post_title );
     103        $h2 = sprintf( __( 'Comparing revisions of %1$s' ), $post_title );
    97104        $title = __( 'Revisions' );
    98105
    99106        $left  = $left_revision->ID;
     
    135142        $redirect = 'edit.php';
    136143
    137144if ( !empty($redirect) ) {
     145        $redirect = remove_query_arg( 'revisionstocompare', $redirect );
    138146        wp_redirect( $redirect );
    139147        exit;
    140148}
     
    146154        $parent_file = $submenu_file = 'edit.php';
    147155
    148156require_once( './admin-header.php' );
    149 
    150157?>
    151158
    152159<div class="wrap">
    153 
    154160<h2 class="long-header"><?php echo $h2; ?></h2>
    155 
    156 <table class="form-table ie-fixed">
    157         <col class="th" />
     161<table class="form-table ie-fixed revision-compare">
    158162<?php if ( 'diff' == $action ) : ?>
    159163<tr id="revision">
    160         <th scope="row"></th>
    161164        <th scope="col" class="th-full">
    162                 <span class="alignleft"><?php printf( __('Older: %s'), wp_post_revision_title( $left_revision ) ); ?></span>
    163                 <span class="alignright"><?php printf( __('Newer: %s'), wp_post_revision_title( $right_revision ) ); ?></span>
     165                <table width="100%" cellspacing="0" cellpadding="0">
     166                        <tr>
     167                                <td width="50%">
     168                                        <?php printf('<div class="revision-type-left">%s</div><div class="revision-avatar-left">%s</div><div class="revision-title-left">%s</div>',
     169                                                                        __('Older'),
     170                                                                        get_avatar( $left_revision->post_author, 22 ),
     171                                                                        wp_post_revision_title( $left_revision )
     172                                                                 ); ?>
     173                                </td>
     174                                <td width="50%">
     175                                        <?php printf('<div class="revision-type-right">%s</div><div class="revision-title-right">%s</div><div class="revision-avatar-right">%s</div>',
     176                                                                        __('Newer'),
     177                                                                        wp_post_revision_title( $right_revision ),
     178                                                                        get_avatar( $right_revision->post_author, 22 )
     179                                                                 ); ?>
     180                                </td>
     181                        </tr>
     182                </table>
    164183        </th>
    165184</tr>
    166185<?php endif;
    167186
    168187// use get_post_to_edit filters?
    169188$identical = true;
     189$linesadded=0;
     190$linesdeleted=0;
    170191foreach ( _wp_post_revision_fields() as $field => $field_title ) :
    171192        if ( 'diff' == $action ) {
    172193                $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field );
    173194                $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field );
    174                 if ( !$content = wp_text_diff( $left_content, $right_content ) )
     195                if ( !$content = wp_text_diff_with_count( $left_content, $right_content ) )
    175196                        continue; // There is no difference between left and right
     197                $htmlcontent = $content[ 'html' ];
     198                $linesadded += $content[ 'linesadded' ];
     199                $linesdeleted += $content[ 'linesdeleted' ];
     200
    176201                $identical = false;
    177202        } else {
    178                 add_filter( "_wp_post_revision_field_$field", 'htmlspecialchars' );
    179                 $content = apply_filters( "_wp_post_revision_field_$field", $revision->$field, $field );
     203                add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' );
     204                $htmlcontent = apply_filters( "_wp_post_revision_field_$field", $revision->$field, $field );
    180205        }
     206
    181207        ?>
    182208
    183209        <tr id="revision-field-<?php echo $field; ?>">
    184                 <th scope="row"><?php echo esc_html( $field_title ); ?></th>
    185                 <td><div class="pre"><?php echo $content; ?></div></td>
     210                <td><div class="pre"><?php echo $htmlcontent; ?></div></td>
    186211        </tr>
    187212
    188213        <?php
    189214
    190215endforeach;
     216?>
     217<div class="revision-summary-area">
     218        <div class="revisions-header-deleted"><?php echo (0 != $linesdeleted ? '-' : '' ) . $linesdeleted; ?></div>
     219        <div class="revisions-header-added"><?php echo (0 != $linesadded ? '+' : '' ) . $linesadded; ?></div>
     220</div>
     221<?php
    191222
    192223if ( 'diff' == $action && $identical ) :
    193224
     
    202233?>
    203234
    204235</table>
    205 
    206 <br class="clear" />
    207 
    208 <h3><?php echo $title; ?></h3>
    209 
     236<div id="revisions-detail-list">
    210237<?php
    211238
    212239$args = array( 'format' => 'form-table', 'parent' => true, 'right' => $right, 'left' => $left );
     
    218245?>
    219246
    220247</div>
    221 
     248</div>
    222249<?php
    223250require_once( './admin-footer.php' );
  • wp-admin/css/colors-fresh.css

     
    13501350
    13511351/* Diff */
    13521352table.diff .diff-deletedline {
    1353         background-color: #fdd;
     1353        background-color: #EC9898;
    13541354}
    13551355
     1356table.diff .diff-deletedline-indicator, .revisions-header-deleted {
     1357        color: #D4362F; /* dark red for - (deleted) symbol and header diffs*/
     1358}
     1359.revision-summary-area { /*move the diff summary to the upper right*/
     1360        position: absolute;
     1361        top: 20px;
     1362        right: 20px;
     1363}
     1364.revisions-header-deleted, .revisions-header-added {
     1365        float: right;
     1366        font-size: 1.6em;
     1367        font-weight: bold;
     1368        padding: 3px;
     1369}
     1370
     1371.revision-post-list-title {
     1372        float: left;
     1373        font-weight: bold;
     1374        font-size: 16px;
     1375        line-height: 24px;
     1376        color: #676767;
     1377}
     1378
    13561379table.diff .diff-deletedline del {
    13571380        background-color: #f99;
    13581381}
    13591382
    13601383table.diff .diff-addedline {
    1361         background-color: #dfd;
     1384        background-color: #B5D8A6;
    13621385}
    13631386
     1387table.diff .diff-addedline-indicator, .revisions-header-added {
     1388        color: #00A100; /* dark green for + (added) symbol and header diffs */
     1389}
     1390
     1391table.diff li {
     1392        margin-left: 12px; /*add some left margin to li's in the diff or they hand outside the box*/
     1393}
     1394
    13641395table.diff .diff-addedline ins {
    13651396        background-color: #9f9;
    13661397}
  • wp-admin/css/wp-admin.css

     
    44114411.form-table td {
    44124412        margin-bottom: 9px;
    44134413        padding: 8px 10px;
    4414         line-height: 20px;
     4414        line-height: 24px;
    44154415        font-size: 12px;
    44164416}
    44174417
     
    83948394        #col-right {
    83958395                width: 65%;
    83968396        }
     8397
     8398        table.diff col.content {
     8399                width: auto;
     8400        }
     8401
     8402        .revision-compare {
     8403                float: right;
     8404                width: 69%;
     8405        }
     8406
     8407        #revisions-detail-list {
     8408                float: left;
     8409                width: 29%;
     8410                margin-right: 2%;
     8411        }
     8412
     8413        .tablenav {
     8414                padding-top: 20px;
     8415        }
    83978416}
    83988417
    83998418@media only screen and (max-width: 768px) {
     
    85858604.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap {
    85868605        margin-left: 8em;
    85878606}
     8607.revision-title-left {
     8608        float: left;
     8609        font-size: 1.1em;
     8610}
     8611
     8612.revision-title-right {
     8613        float: right;
     8614        font-size: 1.1em;
     8615        padding-right: 5px;
     8616}
     8617
     8618.revision-type-left {
     8619        float: left;
     8620        font-size: 1.4em;
     8621        color: #999;
     8622}
     8623
     8624.revision-type-right {
     8625        float: right;
     8626        font-size: 1.4em;
     8627        color: #999;
     8628}
     8629
     8630.revision-avatar-left {
     8631        float: left;
     8632        margin-left: 5px;
     8633        margin-right: 5px;
     8634}
     8635
     8636.revision-avatar-right {
     8637        float: right;
     8638        margin-right: 5px;
     8639        margin-left: 5px;
     8640}
     8641
     8642.form-table tr#revision th {
     8643        vertical-align: top;
     8644        text-align: left;
     8645        padding-top: 10px;
     8646        padding-bottom: 10px;
     8647        padding-right: 10px;
     8648        padding-left: 0;
     8649        width: 200px;
     8650}
     8651
     8652.form-table tr#revision td {
     8653        font-size: 12px;
     8654        line-height: 24px;
     8655        margin-bottom: 9px;
     8656        padding-top: 8px;
     8657        padding-bottom: 8px;
     8658        padding-right: 10px;
     8659        padding-left: 0;
     8660}
     8661
     8662.form-table tr#revision-field-post_content .pre {
     8663        margin: 0;
     8664        padding: 0;
     8665}
     8666
     8667.form-table  tr#revision-field-post_content td {
     8668        font-size: 12px;
     8669        line-height: 24px;
     8670        margin-bottom: 9px;
     8671        padding: 8px 10px;
     8672}
     8673
     8674
     8675.form-table tr#revision-field-post_content td.diff-addedline-indicator {
     8676        padding-left: 30px;
     8677}
     8678table.post-revisions a {
     8679        line-height: 24px;
     8680}
     8681table.post-revisions img {
     8682        float: left;
     8683        margin-right: 5px;
     8684}