WordPress.org

Make WordPress Core

Ticket #23497: 23497.8.diff

File 23497.8.diff, 14.4 KB (added by adamsilverstein, 14 months ago)

fixes compare two math

  • wp-includes/wp-diff.php

     
    5959         */ 
    6060        var $inline_diff_renderer = 'WP_Text_Diff_Renderer_inline'; 
    6161 
     62        var $_showsplitview = null; 
     63 
    6264        /** 
    6365         * Constructor - Call parent constructor with params array. 
    6466         * 
     
    7072         */ 
    7173        function __construct( $params = array() ) { 
    7274                parent::__construct( $params ); 
     75                if ( isset( $params[ 'showsplitview' ] ) ) 
     76                        $this -> _showsplitview = $params[ 'showsplitview' ]; 
    7377        } 
    7478 
    7579        /** 
     
    98102         * @return string 
    99103         */ 
    100104        function addedLine( $line ) { 
    101                 return "<td>+</td><td class='diff-addedline'>{$line}</td>"; 
     105                return "<td class='diff-addedline'>{$line}</td>"; 
     106 
    102107        } 
    103108 
    104109        /** 
     
    108113         * @return string 
    109114         */ 
    110115        function deletedLine( $line ) { 
    111                 return "<td>-</td><td class='diff-deletedline'>{$line}</td>"; 
     116                return "<td class='diff-deletedline'>{$line}</td>"; 
    112117        } 
    113118 
    114119        /** 
     
    118123         * @return string 
    119124         */ 
    120125        function contextLine( $line ) { 
    121                 return "<td> </td><td class='diff-context'>{$line}</td>"; 
     126                return "<td class='diff-context'>{$line}</td>"; 
    122127        } 
    123128 
    124129        /** 
     
    127132         * @return string 
    128133         */ 
    129134        function emptyLine() { 
    130                 return '<td colspan="2">&nbsp;</td>'; 
     135                return '<td>&nbsp;</td>'; 
    131136        } 
    132137 
    133138        /** 
     
    142147                $r = ''; 
    143148                foreach ($lines as $line) { 
    144149                        if ( $encode ) 
    145                                 $line = htmlspecialchars( $line ); 
    146                         $r .= '<tr>' . $this->emptyLine() . $this->addedLine( $line ) . "</tr>\n"; 
     150                                $line = wp_kses_post( $line ); 
     151                        if ( ! $this->_showsplitview ) { 
     152                                $r .= '<tr>' . $this->addedLine( $line ) . "</tr>\n"; 
     153                        } else { 
     154                                $r .= '<tr>' . $this->emptyLine() . $this->emptyLine() . $this->addedLine( $line ) . "</tr>\n"; 
     155                        } 
    147156                } 
    148157                return $r; 
    149158        } 
     
    160169                $r = ''; 
    161170                foreach ($lines as $line) { 
    162171                        if ( $encode ) 
    163                                 $line = htmlspecialchars( $line ); 
    164                         $r .= '<tr>' . $this->deletedLine( $line ) . $this->emptyLine() . "</tr>\n"; 
     172                                $line = wp_kses_post( $line ); 
     173                        if ( ! $this->_showsplitview ) { 
     174                                $r .= '<tr>' . $this->deletedLine( $line ) . "</tr>\n"; 
     175                        } else { 
     176                                $r .= '<tr>' . $this->deletedLine( $line ) . $this->emptyLine() . $this->emptyLine() . "</tr>\n"; 
     177                        } 
     178 
    165179                } 
    166180                return $r; 
    167181        } 
     
    178192                $r = ''; 
    179193                foreach ($lines as $line) { 
    180194                        if ( $encode ) 
    181                                 $line = htmlspecialchars( $line ); 
    182                         $r .= '<tr>' . 
    183                                 $this->contextLine( $line ) . $this->contextLine( $line ) . "</tr>\n"; 
     195                                $line = wp_kses_post( $line ); 
     196                        if (  ! $this->_showsplitview ) { 
     197                                $r .= '<tr>' . $this->contextLine( $line ) . "</tr>\n"; 
     198                        } else { 
     199                                $r .= '<tr>' . $this->contextLine( $line ) . $this->emptyLine() . $this->contextLine( $line )  . "</tr>\n"; 
     200                        } 
    184201                } 
    185202                return $r; 
    186203        } 
     
    264281                        } elseif ( $final_rows[$row] < 0 ) { // Final is blank. This is really a deleted row. 
    265282                                $r .= $this->_deleted( array($orig_line), false ); 
    266283                        } else { // A true changed row. 
    267                                 $r .= '<tr>' . $this->deletedLine( $orig_line ) . $this->addedLine( $final_line ) . "</tr>\n"; 
     284                                if ( ! $this->_showsplitview ) { 
     285                                        $r .= '<tr>' . $this->deletedLine( $orig_line ) . "</tr><tr>" . $this->addedLine( $final_line ) . "</tr>\n"; 
     286                                } else { 
     287                                        $r .= '<tr>' . $this->deletedLine( $orig_line ) . $this->emptyLine() . $this->addedLine( $final_line ) . "</tr>\n"; 
     288                                } 
    268289                        } 
    269290                } 
    270291 
  • wp-includes/pluggable.php

     
    17131713 
    17141714        $left_lines  = explode("\n", $left_string); 
    17151715        $right_lines = explode("\n", $right_string); 
    1716  
    17171716        $text_diff = new Text_Diff($left_lines, $right_lines); 
    1718         $renderer  = new WP_Text_Diff_Renderer_Table(); 
     1717        $renderer  = new WP_Text_Diff_Renderer_Table( $args ); 
    17191718        $diff = $renderer->render($text_diff); 
    17201719 
    17211720        if ( !$diff ) 
    17221721                return ''; 
    17231722 
    17241723        $r  = "<table class='diff'>\n"; 
    1725         $r .= "<col class='ltype' /><col class='content' /><col class='ltype' /><col class='content' />"; 
    17261724 
     1725        if ( isset( $args[ 'showsplitview' ] ) && 'true' == $args[ 'showsplitview' ] ) { 
     1726                $r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />"; 
     1727        } else { 
     1728                $r .= "<col class='content' />"; 
     1729        } 
     1730 
    17271731        if ( $args['title'] || $args['title_left'] || $args['title_right'] ) 
    17281732                $r .= "<thead>"; 
    17291733        if ( $args['title'] ) 
  • wp-includes/script-loader.php

     
    270270        $scripts->add( 'json2', "/wp-includes/js/json2$suffix.js", array(), '2011-02-23'); 
    271271 
    272272        $scripts->add( 'underscore', '/wp-includes/js/underscore.min.js', array(), '1.4.4', 1 ); 
    273         $scripts->add( 'backbone', '/wp-includes/js/backbone.min.js', array('underscore','jquery'), '0.9.2', 1 ); 
     273        $scripts->add( 'template', "/wp-includes/js/template$suffix.js", array('underscore'), '1.4.4', 1 ); 
     274        $scripts->add( 'backbone', '/wp-includes/js/backbone.min.js', array('underscore','jquery', 'template'), '0.9.2', 1 ); 
    274275 
     276        $scripts->add( 'revisions', "/wp-includes/js/revisions$suffix.js", array('backbone'), '', 1 ); 
     277 
    275278        $scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), '0.9.8', 1 ); 
    276279 
    277280        $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), false, 1 ); 
     
    537540        $styles->add( 'customize-controls', "/wp-admin/css/customize-controls$suffix.css", array( 'wp-admin', 'colors', 'ie' ) ); 
    538541        $styles->add( 'media-views', "/wp-includes/css/media-views$suffix.css", array( 'buttons' ) ); 
    539542        $styles->add( 'buttons', "/wp-includes/css/buttons$suffix.css" ); 
     543        $styles->add( 'revisions', "/wp-admin/css/revisions$suffix.css" ); 
     544        $styles->add( 'wp-jquery-ui-slider', "/wp-includes/css/jquery-ui-slider$suffix.css" ); 
    540545 
    541546        foreach ( $rtl_styles as $rtl_style ) { 
    542547                $styles->add_data( $rtl_style, 'rtl', true ); 
  • wp-admin/admin-ajax.php

     
    4242 
    4343$core_actions_get = array( 
    4444        'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache', 
    45         'autocomplete-user', 'dashboard-widgets', 'logged-in', 
     45        'autocomplete-user', 'dashboard-widgets', 'logged-in', 'revisions-data' 
    4646); 
    4747 
    4848$core_actions_post = array( 
     
    5656        'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post', 
    5757        'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment', 
    5858        'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor', 
    59         'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 
     59        'send-attachment-to-editor', 'save-attachment-order', 'heartbeat' 
    6060); 
    6161 
    6262// Register core Ajax calls. 
  • wp-admin/includes/ajax-actions.php

     
    13791379        global $wp_list_table; 
    13801380 
    13811381        check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' ); 
    1382          
     1382 
    13831383        $post_data = wp_unslash( $_POST ); 
    13841384 
    13851385        $taxonomy = sanitize_key( $post_data['taxonomy'] ); 
     
    21342134        wp_send_json($response); 
    21352135} 
    21362136 
     2137function wp_ajax_revisions_data() { 
     2138 
     2139        $compareto = isset( $_GET['compareto'] ) ? $_GET['compareto'] : 0; 
     2140        $showautosaves = isset( $_GET['showautosaves'] ) ? $_GET['showautosaves'] : ''; 
     2141        $showsplitview = isset( $_GET['showsplitview'] ) ? $_GET['showsplitview'] : ''; 
     2142        $postid = isset( $_GET['postid'] ) ? $_GET['postid'] : ''; 
     2143 
     2144        $comparetwomode = ( '' == $postid ) ? false : true; 
     2145        // 
     2146        //TODO: currently code returns all possible comparisons for the indicated 'compareto' revision 
     2147        //however, the front end prevents users from pulling the right handle past the left or the left pass the right, 
     2148        //so only the possible diffs need be generated 
     2149        // 
     2150        $alltherevisions = array(); 
     2151 
     2152        if ( '' == $postid ) 
     2153                $postid = $compareto; 
     2154 
     2155        if ( ! $revisions = wp_get_post_revisions( $postid ) ) 
     2156                return; 
     2157 
     2158        //if we are comparing two revisions, the first 'revision' represented by the leftmost 
     2159        //slider position is the current revision, prepend a comparison to this revision 
     2160        if ( $comparetwomode ) 
     2161                array_unshift( $revisions, get_post( $postid ) ); 
     2162 
     2163        $count = 1; 
     2164        foreach ( $revisions as $revision ) : 
     2165        if ( 'true' != $showautosaves && wp_is_post_autosave( $revision ) ) 
     2166                        continue; 
     2167 
     2168        $revision_from_date_author = ''; 
     2169 
     2170 
     2171        //if ( current_user_can( 'read_post', $revision->ID ) ) 
     2172        //              continue; 
     2173        $left_revision = get_post( $compareto ); 
     2174        $right_revision = get_post( $revision ); 
     2175 
     2176        $author = get_the_author_meta( 'display_name', $revision->post_author ); 
     2177        $compareto_author = get_the_author_meta( 'display_name', $left_revision->post_author ); 
     2178        /* translators: revision date format, see http://php.net/date */ 
     2179        $datef = _x( 'j F, Y @ G:i:s', 'revision date format'); 
     2180 
     2181        $gravatar = get_avatar( $revision->post_author, 18 ); 
     2182        $compareto_gravatar = get_avatar( $left_revision->post_author, 18 ); 
     2183 
     2184        $date = date_i18n( $datef, strtotime( $revision->post_modified ) ); 
     2185        $compareto_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) ); 
     2186        $revision_date_author = sprintf( 
     2187                '%s %s, %s %s (%s)', 
     2188                $gravatar, 
     2189                $author, 
     2190                human_time_diff( strtotime( $revision->post_modified ), current_time( 'timestamp' ) ), 
     2191                __( ' ago ' ), 
     2192                $date 
     2193        ); 
     2194 
     2195        if ( $comparetwomode ) { 
     2196 
     2197                $revision_from_date_author = sprintf( 
     2198                        '%s %s, %s %s (%s)', 
     2199                        $compareto_gravatar, 
     2200                        $compareto_author, 
     2201                        human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ), 
     2202                        __( ' ago ' ), 
     2203                        $compareto_date 
     2204                ); 
     2205        } 
     2206 
     2207        $restoreaction = wp_nonce_url( 
     2208                add_query_arg( 
     2209                        array( 'revision' => $revision->ID, 'action' => 'restore' ), 
     2210                        '/wp-admin/revision.php' 
     2211                ), 
     2212                "restore-post_$compareto|$revision->ID" 
     2213        ); 
     2214 
     2215        // 
     2216        //make sure the left revision is the most recent 
     2217        // 
     2218        if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) { 
     2219                $temp = $left_revision; 
     2220                $left_revision = $right_revision; 
     2221                $right_revision = $temp; 
     2222        } 
     2223 
     2224        // 
     2225        //compare from left to right, passed from application 
     2226        // 
     2227        $content=''; 
     2228        foreach ( array_keys( _wp_post_revision_fields() ) as $field ) { 
     2229                $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' ); 
     2230                $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' ); 
     2231 
     2232                add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' ); 
     2233 
     2234                $args = array(); 
     2235 
     2236                if ( 'true' == $showsplitview ) 
     2237                         $args = array( 'showsplitview' => 'true' ); 
     2238 
     2239                $content .= wp_text_diff( $left_content, $right_content, $args ); 
     2240        } 
     2241 
     2242        //if we are comparing two revisions 
     2243        //and we are on the matching revision 
     2244        //add an error revision indicating unable to compare to self 
     2245        if ( $comparetwomode && $compareto == $revision->ID ) 
     2246                $alltherevisions[] = array ( 
     2247                        'ID' => $revision->ID, 
     2248                        'revision_date_author' => $revision_date_author, 
     2249                        'revisiondiff' => sprintf('<div id="selfcomparisonerror">%s</div>', __( 'Cannot compare revision to itself' ) ), 
     2250                        'restoreaction' => urldecode( $restoreaction ), 
     2251                        'revision_from_date_author' => '' 
     2252                ); 
     2253 
     2254        //add to the return data only if there is a difference 
     2255        if ( '' != $content ) 
     2256                $alltherevisions[] = array ( 
     2257                        'ID' => $revision->ID, 
     2258                        'revision_date_author' => $revision_date_author, 
     2259                        'revisiondiff' => $content, 
     2260                        'restoreaction' => urldecode( $restoreaction ), 
     2261                        'revision_from_date_author' => $revision_from_date_author 
     2262                ); 
     2263 
     2264        endforeach; 
     2265 
     2266        //remove initial revision that only contains 
     2267        //post title 
     2268        //TODO remove if this is fixed and initial revision not created 
     2269        array_pop( $alltherevisions ); 
     2270        echo json_encode( $alltherevisions ); 
     2271        exit(); 
     2272} 
  • wp-admin/includes/meta-boxes.php

     
    178178        <a href="#edit_timestamp" class="edit-timestamp hide-if-no-js"><?php _e('Edit') ?></a> 
    179179        <div id="timestampdiv" class="hide-if-js"><?php touch_time(($action == 'edit'), 1); ?></div> 
    180180</div><?php // /misc-pub-section ?> 
     181<?php endif; 
     182 
     183        $the_revisions = wp_get_post_revisions( $post->ID ); 
     184 
     185        if ( post_type_supports( $post_type, 'revisions' ) && count( $the_revisions ) ) : 
     186?> 
     187<div id="post-revisions-link" class="misc-pub-section" > 
     188        <span id="revisions-link"><?php _e( 'Revisions:' ) ?></span> 
     189        <a href="<?php printf( 'revisions.php?revision=%s&postid=%s&action=edit', key( $the_revisions ), $post->ID )?>" class="edit-revisions hide-if-no-js"> 
     190                <?php _e( 'View' ); ?> 
     191        </a> 
     192</div> 
    181193<?php endif; ?> 
    182194 
    183195<?php do_action('post_submitbox_misc_actions'); ?> 
     
    979991function post_thumbnail_meta_box( $post ) { 
    980992        $thumbnail_id = get_post_meta( $post->ID, '_thumbnail_id', true ); 
    981993        echo _wp_post_thumbnail_html( $thumbnail_id, $post->ID ); 
    982 } 
    983  No newline at end of file 
     994} 
  • wp-admin/css/colors-fresh.css

     
    12991299 
    13001300/* Diff */ 
    13011301table.diff .diff-deletedline { 
    1302         background-color: #fdd; 
     1302        background-color: #ffe5e6; 
     1303        color: #f2001f; 
     1304        text-decoration: line-through; 
    13031305} 
    13041306 
    13051307table.diff .diff-deletedline del { 
    13061308        background-color: #f99; 
    13071309} 
    13081310 
     1311table.diff .diff-deletedline-symbol { 
     1312        color: #f2001f; 
     1313} 
     1314 
    13091315table.diff .diff-addedline { 
    1310         background-color: #dfd; 
     1316        background-color: #e9f6ea; 
     1317        color: #00a500; 
    13111318} 
    13121319 
     1320table.diff .diff-addedline-symbol { 
     1321        color: #00a500; 
     1322} 
     1323 
    13131324table.diff .diff-addedline ins { 
    13141325        background-color: #9f9; 
    13151326} 
  • wp-admin/css/wp-admin.css

     
    34953495} 
    34963496 
    34973497table.diff col.content { 
    3498         width: 50%; 
     3498        width: auto; 
    34993499} 
    35003500 
     3501table.diff col.content.diffsplit { 
     3502        width: 48%; 
     3503} 
     3504 
     3505table.diff col.diffsplit.middle { 
     3506        width: 4%; 
     3507} 
     3508 
     3509table.diff col.ltype { 
     3510        width: 30px; 
     3511} 
     3512 
    35013513table.diff tr { 
    35023514        background-color: transparent; 
    35033515}