Make WordPress Core

Ticket #23497: 23497.38.diff

File 23497.38.diff, 67.3 KB (added by adamsilverstein, 12 years ago)

fixes default left handle position 1 not 0

  • wp-includes/default-filters.php

     
    250250add_action( 'plugins_loaded',             'wp_maybe_load_widgets',                    0    );
    251251add_action( 'plugins_loaded',             'wp_maybe_load_embeds',                     0    );
    252252add_action( 'shutdown',                   'wp_ob_end_flush_all',                      1    );
    253 add_action( 'pre_post_update',            'wp_save_post_revision',                   10, 2 );
     253add_action( 'pre_post_update',            'wp_save_post_revision',                   10, 1 );
     254add_action( 'post_updated',               'wp_save_post_revision',                   10, 1 );
    254255add_action( 'publish_post',               '_publish_post_hook',                       5, 1 );
    255256add_action( 'transition_post_status',     '_transition_post_status',                  5, 3 );
    256257add_action( 'transition_post_status',     '_update_term_count_on_transition_post_status', 10, 3 );
  • wp-includes/post-template.php

     
    13061306        if ( !in_array( $revision->post_type, array( 'post', 'page', 'revision' ) ) )
    13071307                return false;
    13081308
     1309        /* translators: revision date format, see http://php.net/date */
     1310        $datef = _x( 'j F, Y @ G:i', 'revision date format');
     1311        /* translators: 1: date */
     1312        $autosavef = __( '%1$s [Autosave]' );
     1313        /* translators: 1: date */
     1314        $currentf  = __( '%1$s [Current Revision]' );
     1315
     1316        $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
     1317        if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
     1318                $date = "<a href='$link'>$date</a>";
     1319
     1320        if ( !wp_is_post_revision( $revision ) )
     1321                $date = sprintf( $currentf, $date );
     1322        elseif ( wp_is_post_autosave( $revision ) )
     1323                $date = sprintf( $autosavef, $date );
     1324
     1325        return $date;
     1326}
     1327
     1328/**
     1329 * Retrieve formatted date timestamp of a revision (linked to that revisions's page).
     1330 *
     1331 * @package WordPress
     1332 * @subpackage Post_Revisions
     1333 * @since 3.6.0
     1334 *
     1335 * @uses date_i18n()
     1336 *
     1337 * @param int|object $revision Revision ID or revision object.
     1338 * @param bool $link Optional, default is true. Link to revisions's page?
     1339 * @return string gravatar, user, i18n formatted datetimestamp or localized 'Current Revision'.
     1340 */
     1341function wp_post_revision_title_expanded( $revision, $link = true ) {
     1342        if ( !$revision = get_post( $revision ) )
     1343                return $revision;
     1344
     1345        if ( !in_array( $revision->post_type, array( 'post', 'page', 'revision' ) ) )
     1346                return false;
     1347
    13091348        $author = get_the_author_meta( 'display_name', $revision->post_author );
    13101349        /* translators: revision date format, see http://php.net/date */
    13111350        $datef = _x( 'j F, Y @ G:i:s', 'revision date format');
    13121351
    1313         $gravatar = get_avatar( $revision->post_author, 18 );
     1352        $gravatar = get_avatar( $revision->post_author, 24 );
    13141353
    13151354        $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
    13161355        if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
     
    13881427        }
    13891428
    13901429        /* translators: post revision: 1: when, 2: author name */
    1391         $titlef = _x( '%1$s by %2$s', 'post revision' );
     1430        $titlef = _x( '%1$s', 'post revision' );
    13921431
    13931432        if ( $parent )
    13941433                array_unshift( $revisions, $post );
    13951434
     1435        // since 3.6 revisions include a copy of the current post data as a revision
     1436        // the collowing removes this current revision if present from the list of
     1437        // revisions returned by wp_list_post_revisions, remove these to include the
     1438        // crrent post revision in the list of revisions
     1439        if ( wp_first_revision_matches_current_version( $post_id ) )
     1440                array_pop( $revisions );
     1441
    13961442        $rows = $right_checked = '';
    13971443        $class = false;
    13981444        $can_edit_post = current_user_can( 'edit_post', $post->ID );
     
    14021448                if ( 'revision' === $type && wp_is_post_autosave( $revision ) )
    14031449                        continue;
    14041450
    1405                 $date = wp_post_revision_title( $revision );
    1406                 $name = get_the_author_meta( 'display_name', $revision->post_author );
     1451                $date = wp_post_revision_title_expanded( $revision );
    14071452
    1408                 if ( 'form-table' == $format ) {
    1409                         if ( $left )
    1410                                 $left_checked = $left == $revision->ID ? ' checked="checked"' : '';
    1411                         else
    1412                                 $left_checked = $right_checked ? ' checked="checked"' : ''; // [sic] (the next one)
    1413                         $right_checked = $right == $revision->ID ? ' checked="checked"' : '';
     1453                $title = sprintf( $titlef, $date );
     1454                $rows .= "\t<li>$title</li>\n";
    14141455
    1415                         $class = $class ? '' : " class='alternate'";
    1416 
    1417                         if ( $post->ID != $revision->ID && $can_edit_post )
    1418                                 $actions = '<a href="' . wp_nonce_url( add_query_arg( array( 'revision' => $revision->ID, 'action' => 'restore' ) ), "restore-post_$post->ID|$revision->ID" ) . '">' . __( 'Restore' ) . '</a>';
    1419                         else
    1420                                 $actions = '';
    1421 
    1422                         $rows .= "<tr$class>\n";
    1423                         $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='left' value='$revision->ID'$left_checked /></th>\n";
    1424                         $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='right' value='$revision->ID'$right_checked /></th>\n";
    1425                         $rows .= "\t<td>$date</td>\n";
    1426                         $rows .= "\t<td>$name</td>\n";
    1427                         $rows .= "\t<td class='action-links'>$actions</td>\n";
    1428                         $rows .= "</tr>\n";
    1429                 } else {
    1430                         $title = sprintf( $titlef, $date, $name );
    1431                         $rows .= "\t<li>$title</li>\n";
    1432                 }
    14331456        }
    14341457
    14351458        if ( 'form-table' == $format ) : ?>
     
    14791502                // if the post was previously restored from a revision
    14801503                // show the restore event details
    14811504                //
    1482                 if ( $restored_from_meta = get_post_meta( $post->ID, '_post_restored_from', true ) ) { 
    1483                         $author = get_the_author_meta( 'display_name', $restored_from_meta[ 'restored_by_user' ] ); 
    1484                         /* translators: revision date format, see http://php.net/date */ 
    1485                         $datef = _x( 'j F, Y @ G:i:s', 'revision date format'); 
    1486                         $date = date_i18n( $datef, strtotime( $restored_from_meta[ 'restored_time' ] ) ); 
    1487                         $timesince = human_time_diff( $restored_from_meta[ 'restored_time' ], current_time( 'timestamp' ) );
    1488                         ?> 
     1505                if ( $restored_from_meta = get_post_meta( $post->ID, '_post_restored_from', true ) ) {
     1506                        $author = get_the_author_meta( 'display_name', $restored_from_meta[ 'restored_by_user' ] );
     1507                        /* translators: revision date format, see http://php.net/date */
     1508                        $datef = _x( 'j F, Y @ G:i:s', 'revision date format');
     1509                        $date = date_i18n( $datef, strtotime( $restored_from_meta[ 'restored_time' ] ) );
     1510                        $timesince = human_time_diff( $restored_from_meta[ 'restored_time' ], current_time( 'timestamp' ) ) ;
     1511                        ?>
    14891512                        <hr />
    1490                         <div id="revisions-meta-restored"> 
    1491                                 <?php 
     1513                        <div id="revisions-meta-restored">
     1514                                <?php
    14921515                                /* translators: restored revision details: 1: revision ID, 2: time ago, 3: author name, 4: date */
    1493                                 printf( _x( 'Previously restored from revision ID %1$d, %2$s ago by %3$s (%4$s)', 'restored revision details' ), 
    1494                                 $restored_from_meta[ 'restored_revision_id'], 
    1495                                 $timesince, 
    1496                                 $author, 
    1497                                 $date ); 
    1498                                 ?> 
    1499                         </div> 
    1500                         <?php 
     1516                                printf( _x( 'Previously restored from revision ID %1$d, %2$s ago by %3$s (%4$s)', 'restored revision details' ),
     1517                                $restored_from_meta[ 'restored_revision_id'],
     1518                                $timesince,
     1519                                $author,
     1520                                $date );
     1521                                ?>
     1522                        </div>
     1523                        <?php
    15011524                echo "</ul>";
    1502                 } 
     1525                }
    15031526
    15041527        endif;
    15051528
  • wp-includes/revision.php

     
    6262/**
    6363 * Saves an already existing post as a post revision.
    6464 *
    65  * Typically used immediately prior to post updates.
     65 * Typically used immediately prior and after post updates.
     66 * Prior to update checks for old revision data (latest revision != current post before update) and adds a copy of the current post as a revision if missing
     67 * After update adds a copy of the current post as a revision, so latest revision always matches current post
    6668 *
    6769 * @package WordPress
    6870 * @subpackage Post_Revisions
    6971 * @since 2.6.0
    7072 *
    7173 * @uses _wp_put_post_revision()
     74 * @uses wp_first_revision_matches_current_version()
    7275 *
    7376 * @param int $post_id The ID of the post to save as a revision.
    7477 * @return mixed Null or 0 if error, new revision ID, if success.
    7578 */
    76 function wp_save_post_revision( $post_id, $new_data = null ) {
    77         // We do autosaves manually with wp_create_post_autosave()
     79function wp_save_post_revision( $post_id ) {
     80        //check to see if the post's first revision already matches the post data
     81        //should be true before post update, _except_ for old data which
     82        //doesn't include a copy of the current post data in revisions
     83        if ( wp_first_revision_matches_current_version( $post_id ) )
     84                return;
     85
    7886        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
    7987                return;
    8088
     
    8290        if ( ! WP_POST_REVISIONS )
    8391                return;
    8492
    85         if ( !$post = get_post( $post_id, ARRAY_A ) )
     93        if ( ! $post = get_post( $post_id, ARRAY_A ) )
    8694                return;
    8795
    8896        if ( 'auto-draft' == $post['post_status'] )
    8997                return;
    9098
    91         if ( !post_type_supports($post['post_type'], 'revisions') )
     99        if ( ! post_type_supports( $post['post_type'], 'revisions' ) )
    92100                return;
    93101
    94         // if new data is supplied, check that it is different from last saved revision, unless a plugin tells us to always save regardless
    95         if ( apply_filters( 'wp_save_post_revision_check_for_changes', true, $post, $new_data ) && is_array( $new_data ) ) {
    96                 $post_has_changed = false;
    97                 foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
    98                         if ( normalize_whitespace( $new_data[ $field ] ) != normalize_whitespace( $post[ $field ] ) ) {
    99                                 $post_has_changed = true;
    100                                 break;
     102        // compare the proposed update with the last stored revision, verify
     103        // different, unless a plugin tells us to always save regardless
     104        if ( $revisions = wp_get_post_revisions( $post_id ) ) { // grab the last revision
     105                $last_revision = array_shift( $revisions );
     106
     107                if ( $last_revision_array = get_post( $last_revision->ID, ARRAY_A ) ) { //if no previous revisions, save one for sure
     108
     109                        if ( apply_filters( 'wp_save_post_revision_check_for_changes', true, $last_revision_array, $post ) && is_array( $post ) ) {
     110                                $post_has_changed = false;
     111
     112                                foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
     113
     114                                        if ( normalize_whitespace( $post[ $field ] ) != normalize_whitespace( $last_revision_array[ $field ] ) ) {
     115                                                $post_has_changed = true;
     116                                                break;
     117
     118                                        }
     119                                }
     120
     121                                //don't save revision if post unchanged
     122                                if( ! $post_has_changed )
     123                                        return;
    101124                        }
    102125                }
    103                 //don't save revision if post unchanged
    104                 if( ! $post_has_changed )
    105                         return;
    106126        }
    107127
    108128        $return = _wp_put_post_revision( $post );
    109129
    110130        // WP_POST_REVISIONS = true (default), -1
    111         if ( !is_numeric( WP_POST_REVISIONS ) || WP_POST_REVISIONS < 0 )
     131        if ( ! is_numeric( WP_POST_REVISIONS ) || WP_POST_REVISIONS < 0 )
    112132                return $return;
    113133
    114134        // all revisions and (possibly) one autosave
    115135        $revisions = wp_get_post_revisions( $post_id, array( 'order' => 'ASC' ) );
    116136
    117137        // WP_POST_REVISIONS = (int) (# of autosaves to save)
    118         $delete = count($revisions) - WP_POST_REVISIONS;
     138        $delete = count( $revisions ) - WP_POST_REVISIONS;
    119139
    120140        if ( $delete < 1 )
    121141                return $return;
     
    123143        $revisions = array_slice( $revisions, 0, $delete );
    124144
    125145        for ( $i = 0; isset($revisions[$i]); $i++ ) {
    126                 if ( false !== strpos( $revisions[$i]->post_name, 'autosave' ) )
     146                if ( false !== strpos( $revisions[ $i ]->post_name, 'autosave' ) )
    127147                        continue;
    128                 wp_delete_post_revision( $revisions[$i]->ID );
     148                wp_delete_post_revision( $revisions[ $i ]->ID );
    129149        }
    130150
    131151        return $return;
     
    316336        if ( $post_id )
    317337                do_action( 'wp_restore_post_revision', $post_id, $revision['ID'] );
    318338
     339        //store revision event in post meta
     340        $restore_details = array(
     341                'restored_revision_id' => $revision_id,
     342                'restored_by_user' => get_current_user_id(),
     343                'restored_time' => time()
     344        );
     345        update_post_meta( $post_id, '_post_restored_from', $restore_details );
     346        update_post_meta( $post_id, '_edit_last', get_current_user_id() );
     347
    319348        return $post_id;
    320349}
    321350
     
    404433                add_filter('the_preview', '_set_preview');
    405434        }
    406435}
     436
     437/**
     438 * Determines if the specified post's most recent revision matches the post (by checking post_modified).
     439 *
     440 * @package WordPress
     441 * @subpackage Post_Revisions
     442 * @since 3.6.0
     443 *
     444 * @param int|object $post Post ID or post object.
     445 * @return bool false if not a match, otherwise true.
     446 */
     447function wp_first_revision_matches_current_version( $post ) {
     448
     449        if ( ! $post = get_post( $post ) )
     450                return false;
     451
     452        if ( ! $revisions = wp_get_post_revisions( $post->ID ) )
     453                return false;
     454
     455        $last_revision = array_shift( $revisions );
     456
     457        if ( ! ($last_revision->post_modified == $post->post_modified ) )
     458                return false;
     459
     460        return true;
     461}
  • wp-includes/pluggable.php

     
    17441744        return $r;
    17451745}
    17461746endif;
     1747
     1748if ( !function_exists( 'wp_text_diff_with_count' ) ) :
     1749/**
     1750 * Displays a human readable HTML representation of the difference between two strings.
     1751 * similar to wp_text_diff, but tracks and returns could of lines added and removed
     1752 *
     1753 * @since 3.6
     1754 * @see wp_parse_args() Used to change defaults to user defined settings.
     1755 * @uses Text_Diff
     1756 * @uses WP_Text_Diff_Renderer_Table
     1757 *
     1758 * @param string $left_string "old" (left) version of string
     1759 * @param string $right_string "new" (right) version of string
     1760 * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults.
     1761 * @return array contains html, linesadded & linesdeletd, empty string if strings are equivalent.
     1762 */
     1763function wp_text_diff_with_count( $left_string, $right_string, $args = null ) {
     1764        $defaults = array( 'title' => '', 'title_left' => '', 'title_right' => '' );
     1765        $args = wp_parse_args( $args, $defaults );
     1766
     1767        if ( !class_exists( 'WP_Text_Diff_Renderer_Table' ) )
     1768                        require( ABSPATH . WPINC . '/wp-diff.php' );
     1769
     1770        $left_string  = normalize_whitespace( $left_string );
     1771        $right_string = normalize_whitespace( $right_string );
     1772
     1773        $left_lines  = explode( "\n", $left_string );
     1774        $right_lines = explode( "\n", $right_string) ;
     1775
     1776        $text_diff = new Text_Diff($left_lines, $right_lines  );
     1777        $linesadded = $text_diff->countAddedLines();
     1778        $linesdeleted = $text_diff->countDeletedLines();
     1779
     1780        $renderer  = new WP_Text_Diff_Renderer_Table();
     1781        $diff = $renderer->render( $text_diff );
     1782
     1783        if ( !$diff )
     1784                        return '';
     1785
     1786                $r  = "<table class='diff'>\n";
     1787
     1788        if ( ! empty( $args[ 'show_split_view' ] ) ) {
     1789                $r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />";
     1790        } else {
     1791                $r .= "<col class='content' />";
     1792        }
     1793
     1794        if ( $args['title'] || $args['title_left'] || $args['title_right'] )
     1795                $r .= "<thead>";
     1796        if ( $args['title'] )
     1797                $r .= "<tr class='diff-title'><th colspan='4'>$args[title]</th></tr>\n";
     1798        if ( $args['title_left'] || $args['title_right'] ) {
     1799                $r .= "<tr class='diff-sub-title'>\n";
     1800                $r .= "\t<td></td><th>$args[title_left]</th>\n";
     1801                $r .= "\t<td></td><th>$args[title_right]</th>\n";
     1802                $r .= "</tr>\n";
     1803        }
     1804        if ( $args['title'] || $args['title_left'] || $args['title_right'] )
     1805                $r .= "</thead>\n";
     1806
     1807        $r .= "<tbody>\n$diff\n</tbody>\n";
     1808        $r .= "</table>";
     1809
     1810        return array( 'html' => $r, 'linesadded' => $linesadded, 'linesdeleted' => $linesdeleted );
     1811        }
     1812        endif;
  • wp-includes/script-loader.php

     
    273273        $scripts->add( 'template', "/wp-includes/js/template$suffix.js", array('underscore'), '1.4.4', 1 );
    274274        $scripts->add( 'backbone', '/wp-includes/js/backbone.min.js', array('underscore','jquery', 'template'), '0.9.10', 1 );
    275275
    276         $scripts->add( 'revisions', "/wp-admin/js/revisions$suffix.js", array( 'backbone', 'jquery-ui-slider' ), false, 1 );
     276        $scripts->add( 'revisions', "/wp-admin/js/revisions$suffix.js", array( 'backbone', 'jquery-ui-slider', 'jquery-ui-tooltip' ), false, 1 );
    277277
    278278        $scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), '0.9.8', 1 );
    279279
  • wp-admin/includes/ajax-actions.php

     
    21232123        /* translators: revision date format, see http://php.net/date */
    21242124        $datef = _x( 'j F, Y @ G:i:s', 'revision date format');
    21252125
     2126        $left_revision = get_post( $compare_to );
     2127
    21262128        //single model fetch mode
     2129        //return the diff of a single revision comparison
    21272130        if ( 0 != $single_revision_id ) {
    2128                 $left_revision = get_post( $compare_to );
    21292131                $right_revision = get_post( $single_revision_id );
    21302132
    2131                 if ( $compare_two_mode ) {
    2132                         $compare_to_gravatar = get_avatar( $left_revision->post_author, 18 );
    2133                         $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author );
    2134                         $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
    2135 
    2136                         $revision_from_date_author = sprintf(
    2137                                 /* translators: post revision title: 1: author avatar, 2: author name, 3: time ago, 4: date */
    2138                                 _x( '%1$s %2$s, %3$s ago (%4$s)', 'post revision title' ),
    2139                                 $compare_to_gravatar,
    2140                                 $compare_to_author,
    2141                                 human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
    2142                                 $compare_to_date
    2143                         );
    2144                 }
    2145 
    21462133                //
    21472134                //make sure the left revision is the most recent
    21482135                //
     2136
    21492137                if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) {
    21502138                        $temp = $left_revision;
    21512139                        $left_revision = $right_revision;
    21522140                        $right_revision = $temp;
    21532141                }
    21542142
     2143                $linesadded=0;
     2144                $linesdeleted=0;
     2145
    21552146                //
    21562147                //compare from left to right, passed from application
    21572148                //
     
    21672158                        if ( ! empty( $show_split_view ) )
    21682159                                 $args = array( 'show_split_view' => true );
    21692160
    2170                         $content .= wp_text_diff( $left_content, $right_content, $args );
     2161                        $diff = wp_text_diff_with_count( $left_content, $right_content, $args );
     2162
     2163                        if ( isset( $diff[ 'html' ] ) )
     2164                                $content .= $diff[ 'html' ];
     2165
     2166                        if ( isset( $diff[ 'linesadded' ] ) )
     2167                                $linesadded = $linesadded + $diff[ 'linesadded' ];
     2168
     2169                        if ( isset( $diff[ 'linesdeleted' ] ) )
     2170                                $linesdeleted = $linesdeleted + $diff[ 'linesdeleted' ];
     2171
     2172
    21712173                }
    2172                         $content = '' == $content ? __( 'No difference' ) : $content;
    2173                         $alltherevisions = array (
    2174                                 'revisiondiff' => $content
    2175                         );
     2174                $content = '' == $content ? __( 'No difference' ) : $content;
     2175
     2176                $alltherevisions = array (
     2177                        'revisiondiff' => $content,
     2178                        'lines_deleted' => $linesdeleted,
     2179                        'lines_added' => $linesadded
     2180                );
    21762181                echo json_encode( $alltherevisions );
    21772182                exit();
    2178         }
     2183        } //end single model fetch
    21792184
     2185        //fetch the list of revisions available
     2186
    21802187        //if we are comparing two revisions, the first 'revision' represented by the leftmost
    21812188        //slider position is the current revision, prepend a comparison to this revision
    2182         if ( $compare_two_mode )
    2183                 array_unshift( $revisions, get_post( $post_id ) );
    2184                
     2189        if ( ! wp_first_revision_matches_current_version( $post_id ) ) //revisions don't have current version
     2190                array_unshift( $revisions, get_post( $post_id ) ) ;
     2191        //$revisions->append ( get_post( $post_id ) );
     2192        //error_log( var_dump( $revisions ));
    21852193        $count = -1;
    21862194
     2195        //reverse the list to start with oldes revision
     2196        $revisions = array_reverse( $revisions );
     2197
     2198        $previous_revision_id = 0;
    21872199        foreach ( $revisions as $revision ) :
    2188                 if ( ! empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
     2200                //error_log( ( $show_autosaves  ));
     2201                if ( empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
    21892202                                continue;
    21902203
    21912204                $revision_from_date_author = '';
    21922205                $count++;
    21932206                // return blank data for diffs to the left of the left handle (for right handel model)
    21942207                // or to the right of the right handle (for left handel model)
    2195                 if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) || 
    2196                          ( 0 != $right_handle_at && $count > $right_handle_at )) { 
     2208                if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) ||
     2209                         ( 0 != $right_handle_at && $count > $right_handle_at )) {
    21972210                        $alltherevisions[] = array (
    21982211                                'ID' => $revision->ID,
    21992212                        );
    2200                        
    22012213                        continue;
    22022214                }
    22032215
    2204                 $gravatar = get_avatar( $revision->post_author, 18 );
     2216                if ( $compare_two_mode ) {
     2217                        $compare_to_gravatar = get_avatar( $left_revision->post_author, 24 );
     2218                        $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author );
     2219                        $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
     2220
     2221                        $revision_from_date_author = sprintf(
     2222                                /* translators: post revision title: 1: author avatar, 2: author name, 3: time ago, 4: date */
     2223                                _x( '%1$s %2$s, %3$s ago (%4$s)', 'post revision title' ),
     2224                                $compare_to_gravatar,
     2225                                $compare_to_author,
     2226                                human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
     2227                                $compare_to_date
     2228                        );
     2229                }
     2230
     2231                $gravatar = get_avatar( $revision->post_author, 24 );
    22052232                $author = get_the_author_meta( 'display_name', $revision->post_author );
    22062233                $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
    22072234                $revision_date_author = sprintf(
     
    22132240                        $date
    22142241                );
    22152242
     2243                $autosavef = __( '%1$s [Autosave]' );
     2244                $currentf  = __( '%1$s [Current Revision]' );
     2245
     2246                if ( ! $post = get_post( $post_id))
     2247                        exit();
     2248
     2249                if ( $left_revision->post_modified === $post->post_modified )
     2250                        $revision_from_date_author = sprintf( $currentf, $revision_from_date_author );
     2251                elseif ( wp_is_post_autosave( $left_revision ) )
     2252                        $revision_from_date_author = sprintf( $autosavef, $revision_from_date_author );
     2253
     2254                if ( $revision->post_modified === $post->post_modified )
     2255                        $revision_date_author = sprintf( $currentf, $revision_date_author );
     2256                elseif ( wp_is_post_autosave( $revision ) )
     2257                        $revision_date_author = sprintf( $autosavef, $revision_date_author );
     2258
     2259                $date_short_format = __( 'j M @ G:i' );
     2260                $date_short = date_i18n( $date_short_format, strtotime( $revision->post_modified ) );
     2261
     2262                $revision_date_author_short = sprintf(
     2263                        '%s <strong>%s</strong><br />%s',
     2264                        $gravatar,
     2265                        $author,
     2266                        $date_short
     2267                );
     2268
    22162269                $restoreaction = wp_nonce_url(
    22172270                        add_query_arg(
    22182271                                array( 'revision' => $revision->ID,
    22192272                                        'action' => 'restore' ),
    22202273                                        admin_url( 'revision.php' )
    22212274                        ),
    2222                         "restore-post_{$compare_to}|{$revision->ID}"
     2275                        "restore-post_{$revision->ID}"
    22232276                );
    2224 
    2225                 $alltherevisions[] = array (
     2277                // if this is a left handled calculation swap data
     2278                if ( 0 != $right_handle_at ) {
     2279                        $tmp = $revision_from_date_author;
     2280                        $revision_from_date_author = $revision_date_author;
     2281                        $revision_date_author = $tmp;
     2282                }
     2283                if ( ( $compare_two_mode || 0 !== $previous_revision_id ) ) {
     2284                        $alltherevisions[] = array (
    22262285                                'ID' => $revision->ID,
    22272286                                'revision_date_author' => $revision_date_author,
    22282287                                'revision_from_date_author' => $revision_from_date_author,
     2288                                'revision_date_author_short' => $revision_date_author_short,
    22292289                                'restoreaction' => urldecode( $restoreaction ),
    2230                                 'revision_toload' => true
     2290                                'revision_toload' => true,
     2291                                'previous_revision_id' => $previous_revision_id
    22312292                        );
     2293                }
     2294                $previous_revision_id = $revision->ID;
    22322295
    22332296        endforeach;
    22342297
  • wp-admin/js/revisions.js

     
    77
    88                Model : Backbone.Model.extend({
    99                        idAttribute : 'ID',
    10                         urlRoot : ajaxurl +     '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
    11                                 '&show_autosaves=false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
     10                        urlRoot : ajaxurl +     '?action=revisions-data' +
     11                                '&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
    1212                        defaults: {
    1313                                ID : 0,
    1414                                revision_date_author : '',
     15                                revision_date_author_short: '',
    1516                                revisiondiff : '<div class="diff-loading"><div class="spinner"></div></div>',
    1617                                restoreaction : '',
    1718                                revision_from_date_author : '',
    18                                 revision_toload : false
     19                                revision_toload : false,
     20                                lines_added : 0,
     21                                lines_deleted : 0,
     22                                scope_of_changes : 'none',
     23                                previous_revision_id : 0
    1924                        },
    2025
    2126                        url : function() {
    22                                 return this.urlRoot + '&single_revision_id=' + this.id;
     27                                if ( 1 === REVAPP._compareoneortwo ) {
     28                                        return this.urlRoot +
     29                                                '&single_revision_id=' + this.id +
     30                                                '&compare_to=' + this.get( 'previous_revision_id' ) +
     31                                                '&post_id=' + wpRevisionsSettings.post_id;
     32                                } else {
     33                                        return this.urlRoot +
     34                                '&single_revision_id=' + this.id;
     35                                }
     36
    2337                        }
    2438
    2539                }),
     
    3347                        _right_handle_revisions : null,
    3448                        _revisionsInteractions : null,
    3549                        _revisionsOptions : null,
    36                         _left_diff : 0,
     50                        _left_diff : 1,
    3751                        _right_diff : 1,
    38                         _autosaves : false,
     52                        _autosaves : true,
    3953                        _show_split_view : true,
    4054                        _compareoneortwo : 1,
    4155                        _left_model_loading : false,    //keep track of model loads
    4256                        _right_model_loading : false,   //disallow slider interaction, also repeat loads, while loading
     57                        _tickmarkView : null, //the slider tickmarks
     58                        _has_tooltip : false,
    4359
    44                         //TODO add ability to arrive on specific revision
    4560                        routes : {
    4661                        },
    4762
    48                         viewrevision : function( revision ) {
    49                                 //coming soon
    50                         },
    51 
    5263                        reload_toload_revisions : function( model_collection, reverse_direction ) {
    5364                                var self = this;
    5465                                var revisions_to_load = model_collection.where( { revision_toload : true } );
    55                                 //console.log(revisions_to_load);
    5666                                var delay=0;
    57                                 _.each(revisions_to_load, function( the_model ) {
     67                                //match slider to passed revision_id
     68                                _.each( revisions_to_load, function( the_model ) {
     69                                        if ( the_model.get( 'ID' )  == wpRevisionsSettings.revision_id ) {
     70                                                self._right_diff = self._revisions.indexOf( the_model ) + 1;
     71                                        }
     72
     73                                });
     74                                _.each( revisions_to_load, function( the_model ) {
    5875                                                the_model.urlRoot = model_collection.url;
    5976                                                _.delay( function() {
    6077                                                        the_model.fetch( {
    6178                                                                update : true,
    6279                                                                add : false,
    6380                                                                remove : false,
    64                                                                 //async : false,
    6581                                                                success : function( model ) {
    66                                                                         //console.log(model.get( 'ID' ) +'-'+self._revisions.at( self._right_diff ).get( 'ID' ));
    67                                                                         if ( model.get( 'ID' ) === self._revisions.at( self._right_diff - 1 ).get( 'ID' ) ) { //reload if current model refreshed
    68                                                                                 //console.log('render');
     82                                                                        model.set( 'revision_toload', 'false' );
     83
     84                                                                        //stop spinner when all models are loaded
     85                                                                        if ( 0 === model_collection.where( { revision_toload : true } ).length )
     86                                                                                self.stop_model_loading_spinner();
     87
     88                                                                        self._tickmarkView.render();
     89
     90                                                                        var total_changes = model.get( 'lines_added' ) + model.get( 'lines_deleted');
     91                                                                        var scope_of_changes = 'vsmall';
     92
     93                                                                        // Note: hard coded scope of changes
     94                                                                        // TODO change to dynamic based on range of values
     95                                                                        if  ( total_changes > 1 && total_changes <= 3 ) {
     96                                                                                scope_of_changes = 'small';
     97                                                                        } else if(total_changes > 3 && total_changes <= 5 ) {
     98                                                                                scope_of_changes = 'med';
     99                                                                        } else if(total_changes > 5 && total_changes <= 10 ) {
     100                                                                                scope_of_changes = 'large';
     101                                                                        } else if(total_changes > 10 ) {
     102                                                                                scope_of_changes = 'vlarge';
     103                                                                        }
     104                                                                        model.set( 'scope_of_changes', scope_of_changes );
     105                                                                        if ( 0 !== self._right_diff &&
     106                                                                                model.get( 'ID' ) === self._revisions.at( self._right_diff - 1 ).get( 'ID' ) ) {
     107                                                                                //reload if current model refreshed
    69108                                                                                self._revisionView.render();
    70109                                                                        }
     110
    71111                                                                }
    72112                                                } );
    73113                                                }, delay ) ;
    74                                                 delay = delay + 200; //stagger model loads by 200 ms to avoid hammering server with requests
     114                                                delay = delay + 150; //stagger model loads to avoid hammering server with requests
    75115                                        }
    76116                                );
    77117                        },
     
    83123
    84124                        stop_left_model_loading : function() {
    85125                                this._left_model_loading = false;
    86                                 $('.revisiondiffcontainer').removeClass('leftmodelloading');
    87126                        },
    88127
    89128                        start_right_model_loading : function() {
     
    93132
    94133                        stop_right_model_loading : function() {
    95134                                this._right_model_loading = false;
     135                        },
     136
     137                        stop_model_loading_spinner : function() {
    96138                                $('.revisiondiffcontainer').removeClass('rightmodelloading');
     139                                $('.revisiondiffcontainer').removeClass('leftmodelloading');
    97140                        },
    98141
    99142                        reloadmodel : function() {
     
    104147                                }
    105148                        },
    106149
     150                        //load the models for the single handle mode
    107151                        reloadmodelsingle : function() {
    108152                                var self = this;
    109153                                self._revisions.url = ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
    110154                                                                                        '&show_autosaves=' + self._autosaves +
    111                                                                                         '&show_split_view=' +  REVAPP._show_split_view +
     155                                                                                        '&show_split_view=' +  self._show_split_view +
    112156                                                                                        '&nonce=' + wpRevisionsSettings.nonce;
    113157                                self.start_right_model_loading();
    114                                 this._revisions.fetch({ //reload revision data
     158                                self._revisions.fetch({ //reload revision data
    115159                                        success : function() {
    116                                                 self.stop_right_model_loading();
     160                                                console.log('loaded');
     161                                                //self.stop_right_model_loading();
     162                                                //REVAPP._right_diff -= 1;
    117163                                                var revisioncount = self._revisions.length;
    118                                                 if ( self._right_diff > revisioncount ) //if right handle past rightmost, move
    119                                                         self._right_diff = revisioncount;
    120 
     164                                                self._revisionView.model = self._revisions;
    121165                                                self._revisionView.render();
    122166                                                self.reload_toload_revisions( self._revisions );
     167                                                self._tickmarkView.model = self._revisions;
     168                                                self._tickmarkView.render();
     169                                                $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this, if autsave option changed
     170                                                $( '#slider' ).slider( 'value', self._right_diff - 1 ).trigger( 'slide' );
    123171
    124                                                 $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this, autsaves changed
    125172                                        },
    126173
    127174                                        error : function () {
    128175                                                self.stop_right_model_loading();
    129                                                 //console.log( 'Error loading revision data' );
    130176                                        }
    131177
    132178                                });
    133179                        },
    134180
     181                        //load the models for the left handle
    135182                        reloadleft : function() {
    136183                                var self = this;
    137184                                self.start_left_model_loading();
    138185                                self._left_handle_revisions = new wp.revisions.Collection();
     186
    139187                                self._left_handle_revisions.url =
    140188                                        ajaxurl +
    141189                                        '?action=revisions-data&compare_to=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) +
    142190                                        '&post_id=' + wpRevisionsSettings.post_id +
    143                                         '&show_autosaves=' + self._autosaves +
    144                                         '&show_split_view=' +  self._show_split_view +
     191                                        '&show_autosaves=' + REVAPP._autosaves +
     192                                        '&show_split_view=' +  REVAPP._show_split_view +
    145193                                        '&nonce=' + wpRevisionsSettings.nonce +
    146194                                        '&right_handle_at='  + ( self._right_diff );
    147195
     
    150198                                        success : function(){
    151199                                                self.stop_left_model_loading();
    152200                                                self.reload_toload_revisions( self._left_handle_revisions );
    153                                         },
     201                                                self._tickmarkView.model = self._left_handle_revisions;
     202                                                $( '#slider' ).slider( 'option', 'max', self._revisions.length );
     203                                                // ensure right handle not beyond length, in particular if viewing autosaves is switched from on to off
     204                                                // the number of models in the collection might get shorter, this ensures right handle is not beyond last model
     205                                                if ( self._right_diff > self._revisions.length )
     206                                                        self._right_diff = self._revisions.length;
     207                                                },
    154208
    155209                                        error : function () {
    156                                                 //console.log( 'Error loading revision data' );
    157210                                                self.stop_left_model_loading();
    158211                                        }
    159212                                });
    160213                        },
    161214
     215                        //load the models for the right handle
    162216                        reloadright : function() {
    163217                                var self = this;
    164218                                self.start_right_model_loading();
    165219                                self._right_handle_revisions = new wp.revisions.Collection();
    166                                 if ( 0 === self._left_diff ) {
     220
    167221                                        self._right_handle_revisions.url =
    168222                                                ajaxurl +
    169                                                 '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
     223                                                '?action=revisions-data&compare_to=' + ( self._revisions.at( self._left_diff ).get( 'ID' ) -1)+
    170224                                                '&post_id=' + wpRevisionsSettings.post_id +
    171                                                 '&show_autosaves=' + self._autosaves +
    172                                                 '&show_split_view=' +  self._show_split_view +
     225                                                '&show_autosaves=' + REVAPP._autosaves +
     226                                                '&show_split_view=' +  REVAPP._show_split_view +
    173227                                                '&nonce=' + wpRevisionsSettings.nonce;
    174                                 } else {
    175                                         self._right_handle_revisions.url =
    176                                                 ajaxurl +
    177                                                 '?action=revisions-data&compare_to=' + self._revisions.at( self._left_diff - 1 ).get( 'ID' ) +
    178                                                 '&post_id=' + wpRevisionsSettings.post_id +
    179                                                 '&show_autosaves=' + self._autosaves +
    180                                                 '&show_split_view=' +  self._show_split_view +
    181                                                 '&nonce=' + wpRevisionsSettings.nonce +
    182                                                 '&left_handle_at=' + (self._left_diff ) ;
    183                                 }
    184228
    185229                                self._right_handle_revisions.fetch({
    186230
    187231                                        success : function(){
    188232                                                self.stop_right_model_loading();
    189233                                                self.reload_toload_revisions( self._right_handle_revisions );
     234                                                self._tickmarkView.model = self._right_handle_revisions;
     235                                                $( '#slider' ).slider( 'option', 'max', self._revisions.length );
     236                                                $( '#slider' ).slider( 'values', [ REVAPP._left_diff, REVAPP._right_diff] ).trigger( 'slide' );
     237
     238                                                //REVAPP._revisionView.render();
     239
    190240                                        },
    191241
    192242                                        error : function ( response ) {
    193                                                 //console.log( 'Error loading revision data - ' + response.toSource() );
    194243                                                self.stop_right_model_loading();
    195244                                        }
    196245                                });
     
    198247                        },
    199248
    200249                        reloadleftright : function() {
     250                                this.start_right_model_loading();
     251                                this.start_left_model_loading();
    201252                                this.reloadleft();
    202253                                this.reloadright();
    203254                        },
     
    208259                        initialize : function( options ) {
    209260                                var self = this; //store the application instance
    210261                                if (this._revisions === null) {
    211                                         self._autosaves = '';
    212262                                        self._revisions = new wp.revisions.Collection(); //set up collection
    213263                                        self.start_right_model_loading();
    214264                                        self._revisions.fetch({ //load revision data
    215265
    216266                                                success : function() {
    217267                                                        self.stop_right_model_loading();
    218                                                         self.revisionDiffSetup();
     268                                                        //self._right_handle_revisions = self._revisions;
     269                                                        self.completeApplicationSetup();
    219270                                                }
    220271                                        });
    221272                                }
    222273                                return this;
    223274                        },
    224275
    225                         revisionDiffSetup : function() {
     276                        addTooltip : function( handle, message ) {
     277
     278                                handle.attr( 'title', '' ).tooltip({
     279                                        track: false,
     280
     281                                        position: {
     282                                                my: "left-30 top-66",
     283                                                at: "top left",
     284                                                using: function( position, feedback ) {
     285                                                        $( this ).css( position );
     286                                                        $( "<div>" )
     287                                                        .addClass( "arrow" )
     288                                                        .addClass( feedback.vertical )
     289                                                        .addClass( feedback.horizontal )
     290                                                        .appendTo( $( this ) );
     291                                                }
     292                                        },
     293                                        show: false,
     294                                        hide: false,
     295                                        content:  function() {
     296                                                return message;
     297                                        }
     298
     299                                } );
     300                        },
     301/**/
     302
     303                        completeApplicationSetup : function() {
    226304                                this._revisionView = new wp.revisions.views.View({
    227305                                        model : this._revisions
    228306                                });
    229307                                this._revisionView.render();
    230                                 $( '#diff_max, #diff_maxof' ).html( this._revisions.length );
    231                                 $( '#diff_count' ).html( REVAPP._right_diff );
    232308                                $( '#slider' ).slider( 'option', 'max', this._revisions.length - 1 );
    233309
    234310                                this.reload_toload_revisions( this._revisions );
     311
    235312                                this._revisionsInteractions = new wp.revisions.views.Interact({
    236313                                        model : this._revisions
    237314                                });
    238315                                this._revisionsInteractions.render();
    239316
     317                                this._tickmarkView = new wp.revisions.views.Tickmarks({
     318                                        model : this._revisions
     319                                });
     320                                this._tickmarkView.render();
     321                                this._tickmarkView.resetticks();
     322
     323
    240324                                /*
     325                                .on( 'mouseup', function( event ) {
     326                                        REVAPP._keep_tooltip_open = false;
     327                                        $( this ).find('.ui-slider-tooltip').hide();
     328                                } ).on( 'mousedown', function( event ) {
     329                                        REVAPP._keep_tooltip_open = true;
     330                                } ).on( 'mouseout', function( event ) {
     331                                        if ( REVAPP._keep_tooltip_open)
     332                                                event.stopImmediatePropagation();
     333                                        });
     334                                */
     335                                /*
    241336                                //Options hidden for now, moving to screen options
    242337                                this._revisionsOptions = new wp.revisions.views.Options({
    243338                                        model : this._revisions
     
    252347        wp.revisions.Collection = Backbone.Collection.extend({
    253348                model : wp.revisions.Model,
    254349                url : ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
    255                         '&show_autosaves=false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
     350                        '&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
    256351
    257352                initialize : function() {
    258353                        }
    259354        } );
    260355
    261356        _.extend(wp.revisions.views, {
     357
     358                //Ticks inside slider view
    262359                //
     360                Tickmarks : Backbone.View.extend({
     361                        el : $('#diff-slider-ticks')[0],
     362                        tagName : 'diff-slider-ticks-view',
     363                        className : 'diff-slider-ticks-container',
     364                        template : wp.template('revision-ticks'),
     365                        model : wp.revisions.Model,
     366
     367                        resetticks : function() {
     368                                var slider_max = $( '#slider' ).slider( 'option', 'max');
     369                                var slider_width = $( '#slider' ).width();
     370                                var adjust_max = ( 2 === REVAPP._compareoneortwo ) ? 1 : 0;
     371                                var tick_width = Math.floor( slider_width / ( slider_max - adjust_max ) );
     372
     373                                //TODO: adjust right margins for wider ticks so they stay centered on handle stop point
     374
     375                                //set minimum and maximum widths for tick marks
     376                                tick_width = (tick_width > 50 ) ? 50 : tick_width;
     377                                tick_width = (tick_width < 10 ) ? 10 : tick_width;
     378
     379                                slider_width = tick_width * (slider_max - adjust_max ) +1;
     380
     381                                $( '#slider' ).width( slider_width );
     382                                $( '.diff-slider-ticks-wrapper' ).width( slider_width );
     383                                $( '#diffslider' ).width( slider_width );
     384                                $( '#diff-slider-ticks' ).width( slider_width );
     385
     386                                var a_tick_width = $( '.revision-tick' ).width();
     387
     388                                if ( tick_width !==  a_tick_width ) { // is the width already set correctly?
     389                                        $( '.revision-tick' ).each( function( ) {
     390                                                $(this).css( 'margin-right', tick_width - 1 + 'px'); //space the ticks out using right margin
     391                                        });
     392
     393                                        if( 2 === REVAPP._compareoneortwo ) {
     394                                                $( '.revision-tick' ).first().remove(); //TODO - remove the check
     395                                        }
     396                                        $( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin
     397                                }
     398
     399                        },
     400
     401                        //render the tickmark view
     402                        render : function() {
     403                                var self = this;
     404
     405                                if ( null !== self.model ) {
     406                                        var addhtml = "";
     407                                        _.each ( self.model.models, function ( the_model ) {
     408                                                addhtml = addhtml + self.template ( the_model.toJSON() );
     409                                        });
     410                                        self.$el.html( addhtml );
     411
     412                                }
     413                                self.resetticks();
     414                                return self;
     415                        }
     416                }),
     417
     418                //
    263419                //primary revision diff view
    264420                //
    265421                View : Backbone.View.extend({
     
    267423                        tagName : 'revisionvview',
    268424                        className : 'revisionview-container',
    269425                        template : wp.template('revision'),
    270                         revvapp : null,
    271426                        comparetwochecked : '',
    272427                        draggingleft : false,
    273428
    274                         initialize : function(){
    275                         },
    276 
    277429                        //
    278430                        //render the revisions
    279431                        //
    280432                        render : function() {
    281433                                var addhtml = '';
    282434                                //compare two revisions mode?
     435
    283436                                if ( 2 === REVAPP._compareoneortwo ) {
    284437                                        this.comparetwochecked = 'checked';
    285438                                        if ( this.draggingleft ) {
     
    310463                                this.$el.html( addhtml );
    311464                                if ( this.model.length < 3 ) {
    312465                                        $( 'div#comparetworevisions' ).hide(); //don't allow compare two if fewer than three revisions
     466                                }
     467                                if ( this.model.length < 2 ) {
     468                                        $( 'div#diffslider' ).hide(); //don't allow compare two if fewer than three revisions
     469                                        $( 'div.diff-slider-ticks-wrapper' ).hide();
     470                                }
    313471
     472                                //
     473                                // add tooltips to the handles
     474                                //
     475                                if ( 2 === REVAPP._compareoneortwo ) {
     476                                        REVAPP.addTooltip ( $( 'a.ui-slider-handle.left-handle' ),
     477                                                ( REVAPP._right_diff >= REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._left_diff ).get( 'revision_date_author_short' ) );
     478                                        REVAPP.addTooltip ( $( 'a.ui-slider-handle.right-handle' ),
     479                                                ( REVAPP._right_diff >= REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._right_diff ).get( 'revision_date_author_short' ) );
     480                                } else {
     481                                        REVAPP.addTooltip ( $( 'a.ui-slider-handle' ),
     482                                                ( REVAPP._right_diff >= REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._right_diff ).get( 'revision_date_author_short' ) );
    314483                                }
    315                                 //console.log ( (this.model.at( REVAPP._right_diff - 1 )).url());
     484
     485                                //
     486                                // hide the restore button when on the last sport/current post data
     487                                //
     488                                if (  REVAPP._right_diff === REVAPP._revisions.length ){
     489                                        $( '.restore-button' ).hide();
     490                                } else {
     491                                        $( '.restore-button' ).show();
     492                                }
     493
    316494                                return this;
    317495                        },
    318496
     
    326504                        //
    327505                        clickcomparetwo : function(){
    328506                                self = this;
    329                                 if ( $( 'input#comparetwo' ).is( ':checked' ) ) {
     507
     508                                if ( $( 'input#comparetwo' ).is( ':checked' ) ) { //compare 2 mode
    330509                                        REVAPP._compareoneortwo = 2 ;
    331                                         REVAPP.reloadleftright();
    332                                 } else {
    333                                         REVAPP._compareoneortwo = 1 ;
    334                                         REVAPP._revisionView.draggingleft = false;
    335                                         REVAPP._left_diff = 0;
    336                                         REVAPP.reloadmodelsingle();
    337                                 }
    338                                 REVAPP._revisionsInteractions.render();
     510
     511                                        if ( 1 === REVAPP._right_diff )
     512                                                REVAPP._right_diff = 2;
     513                                                REVAPP._revisionView.draggingleft = false;
     514
     515                                                wpRevisionsSettings.revision_id = ''; // reset passed revision id so switching back to one handle mode doesn't re-select revision
     516                                                REVAPP.reloadleftright();
     517                                                REVAPP._revisionView.model = REVAPP._right_handle_revisions;
     518
     519                                        } else { //compare one mode
     520                                                REVAPP._compareoneortwo = 1 ;
     521                                                REVAPP._revisionView.draggingleft = false;
     522                                                //REVAPP._left_diff = 0;
     523                                                //REVAPP._right_diff = (REVAPP._revisions.length <= REVAPP._right_diff ) ? REVAPP._right_diff + 1 : REVAPP._right_diff + 1;
     524                                                REVAPP.reloadmodelsingle();
     525                                        }
     526                                        //REVAPP._revisionView.render();
     527                                        REVAPP._revisionsInteractions.render();
     528                                        REVAPP._tickmarkView.render();
     529
    339530                        }
    340531                }),
    341532
    342533                //
    343534                //options view for show autosaves and show split view options
    344535                //
     536                /* DISABLED for now
    345537                Options : Backbone.View.extend({
    346538                        el : $('#backbonerevisionsoptions')[0],
    347539                        tagName : 'revisionoptionsview',
    348540                        className : 'revisionoptions-container',
    349541                        template : wp.template('revisionoptions'),
    350542
    351                         initialize : function() {
    352                         },
    353 
    354543                        //render the options view
    355544                        render : function() {
    356545                                var addhtml = this.template;
     
    396585                                REVAPP.reloadmodel();
    397586                        }
    398587                }),
    399 
     588                */
    400589                //
    401590                //main interactions view
    402591                //
     
    405594                        tagName : 'revisionvinteract',
    406595                        className : 'revisionvinteract-container',
    407596                        template : wp.template('revisionvinteract'),
    408                         _restoreword : '',
    409597
    410598                        initialize : function() {
    411                                 this._restoreword = $( 'input#restore' ).attr( 'value' );
    412599                        },
    413600
    414                         reset_restore_button : function() {
    415                                 $( 'input#restore' ).attr( 'value', this._restoreword + ' ' + REVAPP._revisions.at( REVAPP._right_diff - 1 ).get( 'ID' ) );
    416                         },
    417 
    418601                        render : function() {
    419602                                var self = this;
    420603
    421604                                var addhtml = this.template;
    422605                                this.$el.html( addhtml );
    423                                 $( '#diff_max, #diff_maxof' ).html( this.model.length );
    424                                 $( '#diff_count' ).html( REVAPP._right_diff );
    425                                 $( '#diff_left_count_inner' ).html( 0 === REVAPP._left_diff ? '' : 'revision' + REVAPP._left_diff );
    426                                 self.reset_restore_button();
    427606
    428607                                var modelcount = REVAPP._revisions.length;
    429608
     
    431610                                if ( 1 === REVAPP._compareoneortwo ) {
    432611                                        //set up the slider with a single handle
    433612                                        slider.slider({
    434                                                 value : REVAPP._right_diff-1,
    435                                                 min : 0,
    436                                                 max : modelcount-1,
    437                                                 step : 1,
     613                                                value: REVAPP._right_diff-1,
     614                                                min: 0,
     615                                                max: modelcount-1,
     616                                                step: 1,
    438617
     618
    439619                                                //slide interactions for one handles slider
    440620                                                slide : function( event, ui ) {
    441                                                         if ( REVAPP._right_model_loading ) //left model stoll loading, prevent sliding left handle
    442                                                                                 return false;
    443621
    444                                                         REVAPP._right_diff =( ui.value+1 );
    445                                                         $( '#diff_count' ).html( REVAPP._right_diff );
     622                                                        REVAPP._right_diff = ( ui.value + 1 );
    446623                                                        REVAPP._revisionView.render();
    447                                                         self.reset_restore_button();
    448                                                 }
     624                                                        /*
     625                                                        $( 'a.ui-slider-handle' ).tooltip( {
     626                                                                content: REVAPP._revisions.at( ui.value ).get( 'revision_date_author_short' ),
     627                                                                position: {
     628                                                                my: "top-65",
     629                                                                using: function( position, feedback ) {
     630                                                                        $( this ).css( position );
     631                                                                        $( "<div>" )
     632                                                                        .addClass( "arrow" )
     633                                                                        .addClass( feedback.vertical )
     634                                                                        .addClass( feedback.horizontal )
     635                                                                        .appendTo( this );
     636                                                                        }
     637                                                                }
     638                                                        });//.trigger( 'close' ).trigger( 'open' );
     639*/
     640                                                        }
    449641                                        });
    450642                                        $( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
     643
    451644                                } else { //comparing more than one, eg 2
    452645                                        //set up the slider with two handles
    453646                                        slider.slider({
     
    460653                                                //in two handled mode when user starts dragging, swap in precalculated diff for handle
    461654                                                start : function (event, ui ) {
    462655                                                        var index = $( ui.handle ).index(); //0 (left) or 1 (right)
    463 
    464656                                                        switch ( index ) {
    465657                                                                case 1: //left handle drag
    466                                                                         if ( REVAPP._left_model_loading ) //left model stoll loading, prevent sliding left handle
     658                                                                        if ( REVAPP._left_model_loading ) //left model still loading, prevent sliding left handle
    467659                                                                                return false;
    468660
     661                                                                        REVAPP._revisionView.draggingleft = true;
     662
    469663                                                                        if ( REVAPP._revisionView.model !== REVAPP._left_handle_revisions &&
    470                                                                                         null !== REVAPP._left_handle_revisions )
     664                                                                                        null !== REVAPP._left_handle_revisions ) {
    471665                                                                                REVAPP._revisionView.model = REVAPP._left_handle_revisions;
     666                                                                                REVAPP._tickmarkView.model = REVAPP._left_handle_revisions;
     667                                                                                REVAPP._tickmarkView.render();
     668                                                                        }
    472669
    473                                                                         REVAPP._revisionView.draggingleft = true;
    474670                                                                        REVAPP._left_diff_start = ui.values[ 0 ];
    475671                                                                        break;
    476672
    477673                                                                case 2: //right
    478                                                                         if ( REVAPP._right_model_loading ) //right model stoll loading, prevent sliding right handle
     674                                                                        if ( REVAPP._right_model_loading || 0 === REVAPP._right_handle_revisions.length) //right model still loading, prevent sliding right handle
    479675                                                                                return false;
    480676
    481                                                                         //one extra spot at left end when comparing two
    482677                                                                        if ( REVAPP._revisionView.model !== REVAPP._right_handle_revisions &&
    483                                                                                         null !== REVAPP._right_handle_revisions )
     678                                                                                        null !== REVAPP._right_handle_revisions ) {
    484679                                                                                REVAPP._revisionView.model = REVAPP._right_handle_revisions;
     680                                                                                REVAPP._tickmarkView.model = REVAPP._right_handle_revisions;
     681                                                                                REVAPP._tickmarkView.render();
     682                                                                        }
    485683
    486684                                                                        REVAPP._revisionView.draggingleft = false;
    487685                                                                        REVAPP._right_diff_start = ui.values[ 1 ];
     
    501699                                                                        if ( REVAPP._left_model_loading ) //left model still loading, prevent sliding left handle
    502700                                                                                return false;
    503701
    504                                                                         REVAPP._left_diff = ui.values[ 0 ] - 1; //one extra spot at left end when comparing two
     702                                                                        REVAPP._left_diff = ui.values[ 0 ];
    505703                                                                        break;
    506704
    507705                                                                case 2: //right
    508706                                                                        if ( REVAPP._right_model_loading ) //right model still loading, prevent sliding right handle
    509707                                                                                return false;
    510708
    511                                                                         REVAPP._right_diff = ui.values[ 1 ] - 1 ;
     709                                                                        REVAPP._right_diff = ui.values[ 1 ];
    512710                                                                        break;
    513711                                                        }
    514712
    515                                                         $( '#diff_count' ).html( REVAPP._right_diff );
    516 
    517713                                                        if ( 0 === REVAPP._left_diff ) {
    518714                                                                $( '.revisiondiffcontainer' ).addClass( 'currentversion' );
    519715
    520716                                                        } else {
    521717                                                                $( '.revisiondiffcontainer' ).removeClass( 'currentversion' );
    522                                                                 $( '#diff_left_count_inner' ).html( REVAPP._left_diff );
    523718                                                        }
    524719
    525                                                         REVAPP._revisionView.render(); //render the diff view
    526                                                         self.reset_restore_button();
     720                                                        REVAPP._revisionView.render();
     721
    527722                                                },
    528723
    529724                                                //when the user stops sliding  in 2 handle mode, recalculate diffs
     
    536731
    537732                                                                switch ( index ) {
    538733                                                                        case 1: //left
     734
    539735                                                                                //left handle dragged & changed, reload right handle model
    540                                                                                 if ( ! ( REVAPP._left_diff_start === ui.values[ 0 ] || REVAPP._left_model_loading ) )
     736                                                                                if ( REVAPP._left_diff_start !== ui.values[ 0 ] )
    541737                                                                                        REVAPP.reloadright();
    542738
    543739                                                                                break;
    544740
    545741                                                                        case 2: //right
     742                                                                                //REVAPP._right_diff =  ( 1 >= REVAPP._right_diff ) ? 1  : REVAPP._right_diff-1;
    546743                                                                                //right handle dragged & changed, reload left handle model if changed
    547                                                                                 if ( ! ( REVAPP._right_diff_start === ui.values[ 1 ] || REVAPP._right_model_loading ) ) {
     744                                                                                if ( REVAPP._right_diff_start !== ui.values[ 1 ] )
    548745                                                                                        REVAPP.reloadleft();
    549                                                                                 }
     746
    550747                                                                                break;
    551748                                                                }
    552749                                                        }
    553750                                                }
    554751                                        });
    555752                                        $( '.revisiondiffcontainer' ).addClass( 'comparetwo' );
     753                                        $( '#diffslider a.ui-slider-handle' ).first().addClass( 'left-handle' ).next().addClass( 'right-handle' );
    556754                                }
    557755
    558756                                return this;
     
    571769
    572770                                REVAPP._revisionView.render();
    573771
    574                                 $( '#diff_count' ).html( REVAPP._right_diff );
    575772                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
    576                                 this.reset_restore_button();
    577773                        },
    578774
    579775                        //go the the previous revision
     
    583779
    584780                                REVAPP._revisionView.render();
    585781
    586                                 $( '#diff_count' ).html( REVAPP._right_diff );
    587782                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
    588                                 this.reset_restore_button();
    589783                        }
    590784                })
    591785        });
    592786
    593787        //instantiate Revision Application
    594788        REVAPP = new wp.revisions.App();
    595         //TODO consider enable back button to step back thru states?
    596         //Backbone.history.start({pushState: true});
    597789
    598790}(jQuery));
  • wp-admin/revision.php

     
    1717case 'restore' :
    1818        if ( ! $revision = wp_get_post_revision( $revision_id ) )
    1919                break;
     20
    2021        if ( ! current_user_can( 'edit_post', $revision->post_parent ) )
    2122                break;
     23
     24
    2225        if ( ! $post = get_post( $revision->post_parent ) )
    2326                break;
    2427
    25         // Revisions disabled and we're not looking at an autosave
    26         if ( ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) ) && ! wp_is_post_autosave( $revision ) ) {
     28        // Revisions disabled (previously checked autosavegs && ! wp_is_post_autosave( $revision ))
     29        if ( ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) ) ) {
    2730                $redirect = 'edit.php?post_type=' . $post->post_type;
    2831                break;
    2932        }
    30         check_admin_referer( "restore-post_{$post->ID}|{$revision->ID}" );
    3133
    32         //store revision event in post meta
    33         $restore_details = array(
    34                 'restored_revision_id' => $revision->ID,
    35                 'restored_by_user' => get_current_user_id(),
    36                 'restored_time' => time()
    37         );
    38         update_post_meta( $post->ID, '_post_restored_from', $restore_details );
     34        check_admin_referer( "restore-post_{$revision->ID}" );
    3935
    4036        wp_restore_post_revision( $revision->ID );
    4137        $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) );
     
    5854        }
    5955
    6056        $post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
    61         $revision_title = wp_post_revision_title( $revision, false );
    6257        $h2 = sprintf( __( 'Compare Revisions of &#8220;%1$s&#8221;' ), $post_title );
    6358        $title = __( 'Revisions' );
    6459
     
    8075        $parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type;
    8176else
    8277        $parent_file = $submenu_file = 'edit.php';
    83 
    8478wp_enqueue_script( 'revisions' );
    8579
    8680require_once( './admin-header.php' );
    8781
    8882//TODO - Some of the translations below split things into multiple strings that are contextually related and this makes it pretty impossible for RTL translation.
    8983//TODO can we pass the context in a better way
     84$wpRevisionsSettings = array( 'post_id' => $post->ID,
     85                                                'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ),
     86                                                'revision_id' => $revision_id );
     87wp_localize_script( 'revisions', 'wpRevisionsSettings', $wpRevisionsSettings );
     88
     89$comparetworevisionslink = get_edit_post_link( $revision->ID );
    9090?>
    91 <script type="text/javascript">
    92 var wpRevisionsSettings = <?php echo json_encode( array( 'post_id' => $post->ID, 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ) ) ); ?>;
    93 </script>
    94 <?php
    95         $comparetworevisionslink = get_edit_post_link( $revision->ID );
    96 ?>
    9791
    98 <div id="backbonerevisionsoptions"></div>
     92<div id="backbonerevisionsoptions">
     93</div>
    9994<div class="wrap">
    100         <div class="icon32 icon32-posts-post" id="icon-edit"><br></div>
     95        <div class="icon32 icon32-posts-post" id="icon-edit">
     96                <br>
     97        </div>
    10198        <div class="revisiondiffcontainer diffsplit currentversion rightmodelloading">
    102                 <div id="modelsloading" class="updated message"><span class="spinner" ></span> <?php _e( 'Calculating revision diffs' ); ?></div>
     99                <div id="modelsloading" class="updated message">
     100                        <span class="spinner" ></span> <?php _e( 'Calculating revision diffs' ); ?>
     101                </div>
    103102                <h2 class="long-header"><?php echo $h2; ?></h2>
    104                 <div id="backbonerevisionsinteract"></div>
    105                 <div id="backbonerevisionsdiff"></div>
     103                <div class="diff-slider-ticks-wrapper">
     104                        <div id="diff-slider-ticks">
     105                        </div>
     106                </div>
     107                <div id="backbonerevisionsinteract">
     108                </div>
     109                <div id="backbonerevisionsdiff">
     110                </div>
    106111                <hr />
    107112        </div>
    108113</div>
    109114
    110115<script id="tmpl-revision" type="text/html">
     116        <div id="diffsubheader" class="diff-left-hand-meta-row">
     117                <div id="diff_from_current_revision">
     118                        <?php printf( '<b>%1$s</b> %2$s.' , __( 'From:' ), __( 'the current version' ) ); ?>
     119                </div>
     120                <div id="difftitlefrom">
     121                        <div class="diff-from-title"><?php _e( 'From:' ); ?></div>{{{ data.revision_from_date_author }}}
     122                </div>
     123        </div>
     124
    111125        <div id="diffsubheader">
    112                 <span id="diff_from_current_revision"><?php _e( 'Current version' ); ?><?php _e( '- compared to -' ); ?></span>
    113                 <div id="difftitlefrom">{{{ data.revision_from_date_author }}} <?php _e( '- compared to -' ); ?></div>
    114                 <div id="difftitle">{{{ data.revision_date_author }}}</div>
    115                 <div id="diffcancel"><input class="button" onClick="document.location='<?php echo get_edit_post_link( $post->ID ); ?>'" type="submit" id="cancel" value="<?php esc_attr_e( 'Cancel' )?>" /></div>
    116                 <div id="diffrestore"><input class="button button-primary" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore revision ID' )?>" /></div>
    117                 <div id="comparetworevisions"><input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/> <label for="comparetwo"><?php esc_attr_e( 'Compare two revisions' ); ?></a></div>    </div>
     126                <div id="difftitle">
     127                        <div class="diff-to-title"><?php _e( 'To:' ); ?></div>{{{ data.revision_date_author }}}
     128                </div>
     129                <div id="diffrestore">
     130                        <input class="button button-primary restore-button" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore This Revision' )?>" />
     131                </div>
     132                <div id="comparetworevisions">
     133                        <input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/>
     134                                <label for="comparetwo"><?php esc_attr_e( 'Compare two revisions' ); ?></a></label>
     135                </div>
     136        </div>
     137
    118138        <div id="removedandadded">
    119139                <div id="removed"><?php _e( 'Removed -' ); ?></div>
    120140                <div id="added"><?php _e( 'Added +' ); ?></div>
     
    124144
    125145<script id="tmpl-revisionvinteract" type="text/html">
    126146        <div id="diffheader">
    127 <div id="diffprevious"><input class="button" type="submit" id="previous" value="<?php esc_attr_e( 'Previous' ); ?>" /></div>
    128                         <div id="diffnext"><input class="button" type="submit" id="next" value="<?php esc_attr_e( 'Next' ); ?>" /></div>
    129                         <div id="diffslider">
    130         <div id="revisioncount">
    131                                         <?php _e( 'Comparing' ); ?>
    132                                         <span id="diff_left_count"> <?php _e( 'revision' ); ?></span> <span id="diff_left_count_inner"></span>
    133                                         <span id="diff_left_current_revision"><?php _e( 'current version' ); ?></span>
    134                                         <span id="diff_revision_from">{{{ data.diff_revision_from }}}</span>
    135                                         <?php _e( ' to revision' ); ?>
    136                                         <span id="diff_count">{{{ data.current_diff }}}</span>
    137                                         <?php _e( ' of ' ); ?>
    138                                         <span id="diff_max" ></span>
    139                                 </div>
    140 
    141                         <div id="slider" class="wp-slider"></div>
     147                <div id="diffprevious"><input class="button" type="submit" id="previous" value="<?php esc_attr_e( 'Previous' ); ?>" />
    142148                </div>
     149                <div id="diffnext"><input class="button" type="submit" id="next" value="<?php esc_attr_e( 'Next' ); ?>" />
     150                </div>
     151                <div id="diffslider">
     152                        <div id="slider" class="wp-slider">
     153                        </div>
     154                </div>
    143155        </div>
    144156</script>
     157<script id="tmpl-revision-ticks" type="text/html">
     158        <div class="revision-tick revision-toload{{{ data.revision_toload }}} revision-scopeofchanges-{{{ data.scope_of_changes }}}">
     159        </div>
     160</script>
    145161<?php
    146162/*
    147163TODO Convert these into screen options
  • wp-admin/css/colors-fresh.css

     
    175175.sidebar-name,
    176176#nav-menu-header,
    177177#nav-menu-footer,
    178 .menu-item-handle,
    179 .wp-slider .ui-slider-handle {
     178.menu-item-handle {
    180179        background: #f1f1f1;
    181180        background-image: -webkit-gradient(linear, left bottom, left top, from(#ececec), to(#f9f9f9));
    182181        background-image: -webkit-linear-gradient(bottom, #ececec, #f9f9f9);
     
    185184        background-image: linear-gradient(to top, #ececec, #f9f9f9);
    186185}
    187186
     187
     188
    188189.widget .widget-top,
    189190.postbox h3,
    190191.stuffbox h3 {
     
    13781379        background-color: #e9f6ea;
    13791380}
    13801381
     1382.diff-to-title {
     1383        color: #0080AA;
     1384}
     1385
    13811386#diffsubheader{
    13821387        background-color: #f7f7f7;
    13831388}
    13841389
     1390.comparetwo#diffsubheader.diff-left-hand-meta-row {
     1391        background-color: #fcfcfc;
     1392}
     1393
     1394.revision-tick.revision-toloadtrue {
     1395        background-color: #9999cc;
     1396        background: url(../images/wpspin_light.gif) no-repeat;
     1397        background-position: middle;
     1398        background-size: 1px 10px;
     1399}
     1400
     1401.revision-tick.revision-toloadfalse {
     1402        background-color: #aaa;
     1403}
     1404
    13851405#att-info {
    13861406        background-color: #e4f2Fd;
    13871407}
    13881408
     1409body .ui-tooltip {
     1410        border-color: #d7d7d7;
     1411        background-color: #fff;
     1412}
     1413
    13891414/* jQuery UI Slider */
    13901415.wp-slider.ui-slider {
    13911416        border-color: #d7d7d7;
     
    13931418}
    13941419
    13951420.wp-slider .ui-slider-handle {
    1396         border-color: #d7d7d7;
     1421        border-color: none;
    13971422}
    13981423
     1424.wp-slider .ui-slider-handle.left-handle {
     1425background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAABAlBMVEXR2uHM1dzCzNW4ydOzxtSxw9Gqwc+bs7+Ss8SVscaZrLqQq7yNrMCKqr+EqsGDqb6GpruCpbl8pL15o7t1n7hwnLVika1djq5giqJXiqlYiqNJgp9ieYlDfqA/epw3dpk7dpg2dpo3dZo6dZc4dJY4dJg3cZY2bpE1bosxaIYxZIMrYX0tXnwtXHYsWHEnVW0mTmglT2cjTGIhRVsfQlYaN0kYM0QULDgTKTYRJzQTJzINISoLHCYNGyYKGCEIFxwJEhcJEhsHEhQDDAkHCg8EBwwCBwoEBAQBAwIBAQEBAQMAAgEBAAAAAAQAAQMBAAIAAAICAAEBAQAAAQAAAAD///+62qV+AAAAVnRSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEpNbNkAAAAJcEhZcwAACusAAArrAYKLDVoAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACbSURBVBiVVcvVDoNQEEXRqbu781B3d/dQQknh/P+vtBQKt/tpsnKGEOW4klkQFFvIsqwYzUJUvCts1wJl9gIruxT5hpLEyMBLKG+Z0ToJgrPLTDqOjyCxNN7mcahiaz50uDWsX0Fk+tKahKGJpX55qp1qpAsCY0lt5MdPUD2KoniowBRXn+f5Xp4RZDfCKg1W0D637P/iznn06w0M+083NZW9ZwAAAABJRU5ErkJggg==);
     1426}
     1427
     1428.wp-slider .ui-slider-handle.ui-state-active.left-handle {
     1429background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAAzFBMVEXZ5ejU4eXM3ODG2NzE1tvB1Nq90deux86sxs2qxcynwsqlwcmjwMihvseevMWdvMSbusOXuMGTtb6IrbiHrLeCqbSBqLN/p7J3oa11oKxzn6tvnKhrmaZqmKVpmKVol6RllaJhk6Bej51djptaiZZZiJVYhpNWg5BUf4xSfYlRfIhPeYRMdYBKcXxFaXNDZnA+X2g9XmY8XGU4VV43VFw2U1s0UFgyTVQxS1IwSVAuR00sREosQ0orQkgqQEYpPkQoPkMoPUMoPUL///8pY4MvAAAARHRSTlP/////////////////////////////////////////////////////////////////////////////////////////AHHSjxIAAAAJcEhZcwAACusAAArrAYKLDVoAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACUSURBVBiVVctXEoJQEETRMaIo5qwF5hwxYOY9ev97EiQ43q+pUz2EYk9n5UElU0rpRO016toO79WhxlVysWqkroRgsswSjAsbnasgpGdsMk25gooZvR3K8CQxCuU9jH8FhZ3022rwJTZ4CK9nnwJBbiO8yVpFKDButm1bOn6iLFyZt5igeZLHOrhgfJ8k/yXTVoLrAxo1P5iCdUg7AAAAAElFTkSuQmCC);
     1430}
     1431
     1432.wp-slider .ui-slider-handle {
     1433        /* Slider drag Triangle CSS */
     1434background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA8FBMVEU2dZipwNBJl8VGmcX///+EpLlBgqpymrNFjru3ydNWiKs6eZzY4uuRrL08faPL3OZBjLSBqsCTssRHlMJEf59cj657o7xKl8OEqsE9gag2dJtEkb+ct8iZs8BHmMePq8BejKZAiK5llK5FjrlJl8c6dZdGl8avxdBJlcZ4nbc6ep6XrbpKgZ+Lqr5KmcdIkbqsws1Gk8E+f6c4dptaiadFirRKl8V8pblImcNIl8eGpruVscZCh7BMlsdIlcFImchEkbs9eJpCjbdGjbk8fJ84dp02dpo8gatMlsM2dps8faVAg61Ej71Ek75IksFIlcOaLCw7AAAAUHRSTlP/////AP///////////////////////////////////////////////////////////////////////////////////////////////////xB6m5UAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVcxZD8FAGIXhjxzUVktQgqKmo7ZYhkgsiS1tQuj//zeomo736uS5OFSo2W6UXc/R5hxXW5foxDlXqUKZx0GFZpXynuM4kXhjgjgyJkGzQIjpvi9Fx1uQ0iQUh4GkR/Ini0CQ2IfQ24YC4X8T+Mn0zj8lO1IgnqZpzlxE0m4YhrFsKYJVn126UGV+W1wHf4LdpByuF0goFKI7tv/dAAAAAElFTkSuQmCC);
     1435}
     1436
    13991437.wp-slider .ui-slider-handle.ui-state-hover,
    14001438.wp-slider .ui-slider-handle.ui-state-focus {
    1401         border-color: #aaa;
     1439        border-color: none;
     1440        outline: none;
    14021441}
    14031442
    14041443.wp-slider .ui-slider-handle.ui-state-active {
    1405         border-color: #aaa;
    1406         background: #eee;
    1407         background-image: -webkit-gradient(linear, left bottom, left top, from(#f9f9f9), to(#ececec));
    1408         background-image: -webkit-linear-gradient(bottom, #f9f9f9, #ececec);
    1409         background-image:    -moz-linear-gradient(bottom, #f9f9f9, #ececec);
    1410         background-image:      -o-linear-gradient(bottom, #f9f9f9, #ececec);
    1411         background-image: linear-gradient(to top, #f9f9f9, #ececec);
     1444        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA51BMVEUgZpDkzc0yd6f///8mcqFJm8cjbZZzr80mg78lh8BDk8UngLl+s9AmfKk4hrGeweBaoMhNlMORwt4nd6Zdm8BAjMEnf7RYmsMkb50mhsFWlsYhZ5ImhbwocZg0f61Lk8E9i7twqNBgo8VSmMUofLBcm8o3faUpfK8mh8Aia5MgZpFMmcgpeapDmcJjo8sliMEmh70nhLkkcKAqgLF2sc8sc5ojbZsngrMkh8EnfKw1eaUjbpkkapImeKQgaJAohb0mh8MmhcMng7kkcKEpf68iZ48haJMmhb8kicEmc6MibJkia5UnhLsw1mWvAAAATXRSTlP/AP8A/////////////////////////////////////////////////////////////////////////////////////////////////9/iR18AAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVc15D8FAEIfh+Ymj6761LIrSiCNVVyjbRGgifP/PQ6q22/evyZPJDNXzD6G0qNDq5PtO3DJDFyfRpk+po2Eo0h5Qx9U0LRa3SejdlR2rDMLI41yKh6/AtOSzUiuU4kvemSMUDBsRXGuRIHj/CvCXyTNcSXelQBQYY1uBWMY651xfK4KzbdgzqJI73LK7hGC6r0bTB5apIhqIH/YIAAAAAElFTkSuQmCC);
    14121445}
    14131446
    14141447/* edit image */
  • wp-admin/css/wp-admin.css

     
    35523552        vertical-align: middle;
    35533553}
    35543554
     3555.diff-from-title,
     3556.diff-to-title {
     3557        font-size: 14px;
     3558        font-weight: bold;
     3559        width:60px;
     3560        text-align: right;
     3561        float: left;
     3562        margin-right: 5px;
     3563}
     3564
    35553565.revisiondiffcontainer {
    35563566        width: 96%;
    35573567}
     
    35603570        margin: 2px;
    35613571}
    35623572
    3563 #diffrestore,
    3564 #diffnext,
    3565 #diffcancel {
     3573#diffnext {
    35663574        float: right;
    35673575        margin-right: 5px;
    35683576}
    35693577
     3578#diffrestore input{
     3579        margin-left: 10px;
     3580}
     3581
    35703582#diffprevious,
    35713583#difftitle,
    35723584#difftitlefrom,
     
    35783590
    35793591#diffprevious,
    35803592#diffnext {
    3581         margin-top: 7px;
    35823593        height: 30px;
    35833594}
    35843595
     
    35903601#diffheader {
    35913602        border-bottom: 1px solid #dfdfdf;
    35923603        width: 100%;
    3593         height: 45px;
    3594         line-height: 45px;
    3595         padding-top: 10px;
     3604        height: 40px;
     3605        line-height: 40px;
     3606        padding-top: 30px;
    35963607}
    35973608
    3598 #diffsubheader {
    3599         border-bottom: 1px solid #dfdfdf;
     3609#diffsubheader,.diff-left-hand-meta-row {
    36003610        width: 100%;
    36013611        height:35px;
    36023612        line-height: 35px;
     3613        display: block;
    36033614}
    36043615
    3605 #diffslider {
     3616#diffslider{
    36063617        width: 70%;
    36073618        margin-left: auto;
    36083619        margin-right: auto;
    36093620        text-align: center;
    3610         height: 3.5em;
     3621        height: 0.8em;
     3622        margin-top: 20px;
    36113623}
    36123624
     3625.diff-slider-ticks-wrapper {
     3626        margin-left: auto;
     3627        margin-right: auto;
     3628        text-align: center;
     3629}
     3630
     3631#diff-slider-ticks {
     3632        position: absolute;
     3633        margin-top: 50px;
     3634        z-index: 1;
     3635}
     3636
    36133637#revisioncount {
    36143638        width: 50%;
    36153639        margin-left: auto;
     
    36773701
    36783702#comparetworevisions {
    36793703        float: right;
     3704        position: absolute;
     3705        top: 10px;
     3706        right: 10px;
    36803707        line-height: 35px;
    36813708        padding-right: 5px;
    36823709}
     
    36863713}
    36873714
    36883715#difftitle img,
    3689 #difftitlefrom img {
     3716#difftitlefrom img,
     3717.post-revisions li img {
    36903718        vertical-align: middle;
    36913719        margin-left: 5px;
    36923720}
     3721.post-revisions li {
     3722        vertical-align: middle;
     3723        height: 28px;
     3724}
    36933725
    36943726#showsplitviewoption,
    36953727#toggleshowautosavesoption {
     
    37123744.comparetwo #diffprevious,
    37133745.comparetwo #diffnext,
    37143746span#diff_left_current_revision,
    3715 span#diff_from_current_revision,
     3747#diff_from_current_revision,
    37163748.currentversion span#diff_left_count,
    37173749.currentversion span#diff_left_count_inner,
    3718 .currentversion #difftitlefrom,
    3719 .comparetwo.currentversion #difftitlefrom {
     3750.comparetwo.currentversion #diff_from_current_revision,
     3751#diffsubheader.diff-left-hand-meta-row {
    37203752        display: none;
    37213753}
    37223754
     
    37243756span#diff_left_count,
    37253757span#diff_left_count_inner,
    37263758.comparetwo #difftitlefrom,
    3727 .comparetwo.currentversion span#diff_from_current_revision,
    37283759.leftmodelloading #modelsloading,
    37293760.rightmodelloading #modelsloading,
    37303761.leftmodelloading #modelsloading .spinner,
    37313762.rightmodelloading #modelsloading .spinner,
    3732 {
    3733         display: inline;
     3763.comparetwo #diffsubheader.diff-left-hand-meta-row {
     3764        display: block;
    37343765}
    37353766
     3767.revision-tick {
     3768        width: 1px;
     3769        float: left;
     3770        margin-right: 15px;
     3771        height: 11px;
     3772        padding: 0;
     3773        margin-left: 0px;
     3774}
     3775
     3776.revision-tick.revision-scopeofchanges-vsmall {
     3777                width: 1px;
     3778                background-color: #aaa;
     3779}
     3780
     3781.revision-tick.revision-scopeofchanges-small {
     3782                width: 2px;
     3783                background-color: #aaa;
     3784                margin-left: -1px;
     3785}
     3786
     3787.revision-tick.revision-scopeofchanges-med {
     3788                width: 3px;
     3789                margin-left: -2px;
     3790                background-color: #666;
     3791}
     3792
     3793.revision-tick.revision-scopeofchanges-large {
     3794                width: 4px;
     3795                margin-left: -3px;
     3796                background-color: #333;
     3797}
     3798
     3799.revision-tick.revision-scopeofchanges-vlarge {
     3800                margin-left: -3px;
     3801                width: 4px;
     3802                background-color: #111;
     3803                left: 1;
     3804}
     3805
    37363806.diff-loading {
    37373807        margin-top: 50px;
    37383808        width: 100%;
     
    37473817        float: none;
    37483818}
    37493819
    3750 #difftitlefrom {
    3751         float: left;
    3752         display: none;
    3753 }
    3754 
    37553820#modelsloading {
    37563821        float: right;
     3822        position: absolute;
    37573823        line-height: 30px;
    37583824        display: none;
    37593825        clear: none;
    3760         margin: 0;
     3826        right: 170px;
    37613827        margin-top: -40px;
    37623828}
    37633829
    37643830#modelsloading .spinner {
    37653831        float: left;
    3766  }
     3832}
    37673833
     3834.ui-tooltip-content img {
     3835        float: left;
     3836        margin-right: 5px;
     3837}
     3838
     3839
     3840
     3841/*  jQuery UI Tooltip 1.10.1 */
     3842
     3843.ui-tooltip {
     3844        padding: 8px;
     3845        position: absolute;
     3846        z-index: 9999;
     3847        max-width: 300px;
     3848        min-width: 130px;
     3849}
     3850
     3851body .ui-tooltip {
     3852        border-width: 1px;
     3853}
     3854
     3855.ui-tooltip, .arrow:after {
     3856        border: 1px solid #d7d7d7;
     3857}
     3858
     3859.ui-tooltip {
     3860        padding: 5px 10px;
     3861}
     3862
     3863.arrow {
     3864        width: 70px;
     3865        height: 16px;
     3866        overflow: hidden;
     3867        position: absolute;
     3868        left: 50%;
     3869        margin-left: -35px;
     3870        bottom: -16px;
     3871        z-index: 99999;
     3872
     3873}
     3874
     3875.arrow.top {
     3876        top: -16px;
     3877        bottom: auto;
     3878}
     3879
     3880.arrow.left {
     3881        left: 20%;
     3882}
     3883
     3884.arrow:after {
     3885        content: "";
     3886        position: absolute;
     3887        left: 20px;
     3888        top: -20px;
     3889        width: 25px;
     3890        height: 25px;
     3891        background-color: #FFF;
     3892        -webkit-transform: rotate(45deg);
     3893        -moz-transform: rotate(45deg);
     3894        -ms-transform: rotate(45deg);
     3895        -o-transform: rotate(45deg);
     3896        tranform: rotate(45deg);
     3897}
     3898
     3899.arrow.top:after {
     3900        bottom: -20px;
     3901        top: auto;
     3902}
     3903
    37683904 /* jQuery UI Slider */
    37693905
    37703906.wp-slider.ui-slider {
     
    37793915.wp-slider .ui-slider-handle {
    37803916        position: absolute;
    37813917        z-index: 2;
    3782         width: 1.2em;
    3783         height: 1.2em;
    3784         border-width: 1px;
    3785         border-style: solid;
    3786         border-radius: 3px;
     3918        width: 17px;
     3919        height: 17px;
     3920        border: none;
    37873921}
    37883922
    37893923.wp-slider .ui-slider-range {