Make WordPress Core

Ticket #23497: 23497.21.diff

File 23497.21.diff, 59.9 KB (added by adamsilverstein, 12 years ago)

fixed compare two mode

  • wp-includes/post-template.php

     
    13151315        $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
    13161316        if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
    13171317                $date = "<a href='$link'>$date</a>";
    1318        
     1318
    13191319        $revision_date_author = sprintf(
    13201320                '%s %s, %s %s (%s)',
    13211321                $gravatar,
     
    13931393        if ( $parent )
    13941394                array_unshift( $revisions, $post );
    13951395
     1396        //if ( wp_first_revision_matches_current_version( $post_id ) )
     1397                array_pop( $revisions );
     1398
    13961399        $rows = $right_checked = '';
    13971400        $class = false;
    13981401        $can_edit_post = current_user_can( 'edit_post', $post->ID );
     
    14791482                // if the post was previously restored from a revision
    14801483                // show the restore event details
    14811484                //
    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' ) ) . __( ' ago ' ); 
    1488                         ?> 
     1485                if ( $restored_from_meta = get_post_meta( $post->ID, '_post_restored_from', true ) ) {
     1486                        $author = get_the_author_meta( 'display_name', $restored_from_meta[ 'restored_by_user' ] );
     1487                        /* translators: revision date format, see http://php.net/date */
     1488                        $datef = _x( 'j F, Y @ G:i:s', 'revision date format');
     1489                        $date = date_i18n( $datef, strtotime( $restored_from_meta[ 'restored_time' ] ) );
     1490                        $timesince = human_time_diff( $restored_from_meta[ 'restored_time' ], current_time( 'timestamp' ) ) . __( ' ago ' );
     1491                        ?>
    14891492                        <hr />
    1490                         <div id="revisions-meta-restored"> 
    1491                                 <?php 
    1492                                 printf( 'Previously restored from Revision ID %d, %s by %s (%s)', 
    1493                                 $restored_from_meta[ 'restored_revision_id'], 
    1494                                 $timesince, 
    1495                                 $author, 
    1496                                 $date ); 
    1497                                 ?> 
    1498                         </div> 
    1499                         <?php 
     1493                        <div id="revisions-meta-restored">
     1494                                <?php
     1495                                printf( 'Previously restored from Revision ID %d, %s by %s (%s)',
     1496                                $restored_from_meta[ 'restored_revision_id'],
     1497                                $timesince,
     1498                                $author,
     1499                                $date );
     1500                                ?>
     1501                        </div>
     1502                        <?php
    15001503                echo "</ul>";
    1501                 } 
     1504                }
    15021505
    15031506        endif;
    15041507
  • 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;
     
    418438                add_filter('the_preview', '_set_preview');
    419439        }
    420440}
     441
     442/**
     443 * Determines if the specified post's most recent revision matches the post (by checking post_modified).
     444 *
     445 * @package WordPress
     446 * @subpackage Post_Revisions
     447 * @since 3.6.0
     448 *
     449 * @param int|object $post Post ID or post object.
     450 * @return bool false if not a match, otherwise true.
     451 */
     452function wp_first_revision_matches_current_version( $post ) {
     453
     454        if ( ! $post = get_post( $post ) )
     455                return false;
     456
     457        if ( ! $revisions = wp_get_post_revisions( $post->ID ) )
     458                return false;
     459
     460        $last_revision = array_shift( $revisions );
     461
     462        if ( ! ($last_revision->post_modified == $post->post_modified ) )
     463                return false;
     464
     465        return true;
     466}
  • wp-includes/pluggable.php

     
    257257                                list( $name, $content ) = explode( ':', trim( $header ), 2 );
    258258
    259259                                // Cleanup crew
    260                                 $name    = trim( $name    );
     260                                $name   = trim( $name   );
    261261                                $content = trim( $content );
    262262
    263263                                switch ( strtolower( $name ) ) {
     
    337337        }
    338338
    339339        // Plugin authors can override the potentially troublesome default
    340         $phpmailer->From     = apply_filters( 'wp_mail_from'    , $from_email );
     340        $phpmailer->From         = apply_filters( 'wp_mail_from'        , $from_email );
    341341        $phpmailer->FromName = apply_filters( 'wp_mail_from_name', $from_name  );
    342342
    343343        // Set destination addresses
     
    362362
    363363        // Set mail's subject and body
    364364        $phpmailer->Subject = $subject;
    365         $phpmailer->Body    = $message;
     365        $phpmailer->Body        = $message;
    366366
    367367        // Add any CC and BCC recipients
    368368        if ( !empty( $cc ) ) {
     
    619619                                        $cookie_name = AUTH_COOKIE;
    620620                                        $scheme = 'auth';
    621621                                }
    622             }
     622                }
    623623
    624624                if ( empty($_COOKIE[$cookie_name]) )
    625625                        return false;
     
    694694function wp_clear_auth_cookie() {
    695695        do_action('clear_auth_cookie');
    696696
    697         setcookie( AUTH_COOKIE,        ' ', time() - YEAR_IN_SECONDS, ADMIN_COOKIE_PATH,   COOKIE_DOMAIN );
     697        setcookie( AUTH_COOKIE,         ' ', time() - YEAR_IN_SECONDS, ADMIN_COOKIE_PATH,   COOKIE_DOMAIN );
    698698        setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, ADMIN_COOKIE_PATH,   COOKIE_DOMAIN );
    699         setcookie( AUTH_COOKIE,        ' ', time() - YEAR_IN_SECONDS, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN );
     699        setcookie( AUTH_COOKIE,         ' ', time() - YEAR_IN_SECONDS, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN );
    700700        setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN );
    701         setcookie( LOGGED_IN_COOKIE,   ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,          COOKIE_DOMAIN );
    702         setcookie( LOGGED_IN_COOKIE,   ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH,      COOKIE_DOMAIN );
     701        setcookie( LOGGED_IN_COOKIE,   ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,                 COOKIE_DOMAIN );
     702        setcookie( LOGGED_IN_COOKIE,   ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH,     COOKIE_DOMAIN );
    703703
    704704        // Old cookies
    705         setcookie( AUTH_COOKIE,        ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,    COOKIE_DOMAIN );
    706         setcookie( AUTH_COOKIE,        ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
    707         setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,    COOKIE_DOMAIN );
     705        setcookie( AUTH_COOKIE,         ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,      COOKIE_DOMAIN );
     706        setcookie( AUTH_COOKIE,         ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
     707        setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,        COOKIE_DOMAIN );
    708708        setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
    709709
    710710        // Even older cookies
    711         setcookie( USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,    COOKIE_DOMAIN );
    712         setcookie( PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,    COOKIE_DOMAIN );
     711        setcookie( USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,      COOKIE_DOMAIN );
     712        setcookie( PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH,      COOKIE_DOMAIN );
    713713        setcookie( USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
    714714        setcookie( PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
    715715}
     
    988988 */
    989989function wp_notify_postauthor( $comment_id, $comment_type = '' ) {
    990990        $comment = get_comment( $comment_id );
    991         $post    = get_post( $comment->comment_post_ID );
     991        $post   = get_post( $comment->comment_post_ID );
    992992        $author  = get_userdata( $post->post_author );
    993993
    994994        // The post author is no longer a member of the blog
     
    10201020                /* translators: 1: comment author, 2: author IP, 3: author domain */
    10211021                $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    10221022                $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n";
    1023                 $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
     1023                $notify_message .= sprintf( __('URL     : %s'), $comment->comment_author_url ) . "\r\n";
    10241024                $notify_message .= sprintf( __('Whois  : http://whois.arin.net/rest/ip/%s'), $comment->comment_author_IP ) . "\r\n";
    10251025                $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
    10261026                $notify_message .= __('You can see all comments on this post here: ') . "\r\n";
     
    10301030                $notify_message  = sprintf( __( 'New trackback on your post "%s"' ), $post->post_title ) . "\r\n";
    10311031                /* translators: 1: website name, 2: author IP, 3: author domain */
    10321032                $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    1033                 $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
     1033                $notify_message .= sprintf( __('URL     : %s'), $comment->comment_author_url ) . "\r\n";
    10341034                $notify_message .= __('Excerpt: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
    10351035                $notify_message .= __('You can see all trackbacks on this post here: ') . "\r\n";
    10361036                /* translators: 1: blog name, 2: post title */
     
    10391039                $notify_message  = sprintf( __( 'New pingback on your post "%s"' ), $post->post_title ) . "\r\n";
    10401040                /* translators: 1: comment author, 2: author IP, 3: author domain */
    10411041                $notify_message .= sprintf( __('Website: %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    1042                 $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
     1042                $notify_message .= sprintf( __('URL     : %s'), $comment->comment_author_url ) . "\r\n";
    10431043                $notify_message .= __('Excerpt: ') . "\r\n" . sprintf('[...] %s [...]', $comment->comment_content ) . "\r\n\r\n";
    10441044                $notify_message .= __('You can see all pingbacks on this post here: ') . "\r\n";
    10451045                /* translators: 1: blog name, 2: post title */
     
    11181118                        $notify_message  = sprintf( __('A new trackback on the post "%s" is waiting for your approval'), $post->post_title ) . "\r\n";
    11191119                        $notify_message .= get_permalink($comment->comment_post_ID) . "\r\n\r\n";
    11201120                        $notify_message .= sprintf( __('Website : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    1121                         $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
     1121                        $notify_message .= sprintf( __('URL     : %s'), $comment->comment_author_url ) . "\r\n";
    11221122                        $notify_message .= __('Trackback excerpt: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
    11231123                        break;
    11241124                case 'pingback':
    11251125                        $notify_message  = sprintf( __('A new pingback on the post "%s" is waiting for your approval'), $post->post_title ) . "\r\n";
    11261126                        $notify_message .= get_permalink($comment->comment_post_ID) . "\r\n\r\n";
    11271127                        $notify_message .= sprintf( __('Website : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    1128                         $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
     1128                        $notify_message .= sprintf( __('URL     : %s'), $comment->comment_author_url ) . "\r\n";
    11291129                        $notify_message .= __('Pingback excerpt: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
    11301130                        break;
    11311131                default: //Comments
     
    11331133                        $notify_message .= get_permalink($comment->comment_post_ID) . "\r\n\r\n";
    11341134                        $notify_message .= sprintf( __('Author : %1$s (IP: %2$s , %3$s)'), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
    11351135                        $notify_message .= sprintf( __('E-mail : %s'), $comment->comment_author_email ) . "\r\n";
    1136                         $notify_message .= sprintf( __('URL    : %s'), $comment->comment_author_url ) . "\r\n";
     1136                        $notify_message .= sprintf( __('URL     : %s'), $comment->comment_author_url ) . "\r\n";
    11371137                        $notify_message .= sprintf( __('Whois  : http://whois.arin.net/rest/ip/%s'), $comment->comment_author_IP ) . "\r\n";
    11381138                        $notify_message .= __('Comment: ') . "\r\n" . $comment->comment_content . "\r\n\r\n";
    11391139                        break;
     
    13051305 * for you.
    13061306 *
    13071307 * <code>
    1308  * define('AUTH_KEY',        ' Xakm<o xQy rw4EMsLKM-?!T+,PFF})H4lzcW57AF0U@N@< >M%G4Yt>f`z]MON');
     1308 * define('AUTH_KEY',            ' Xakm<o xQy rw4EMsLKM-?!T+,PFF})H4lzcW57AF0U@N@< >M%G4Yt>f`z]MON');
    13091309 * define('SECURE_AUTH_KEY',  'LzJ}op]mr|6+![P}Ak:uNdJCJZd>(Hx.-Mh#Tz)pCIU#uGEnfFz|f ;;eU%/U^O~');
    1310  * define('LOGGED_IN_KEY',    '|i|Ux`9<p-h$aFf(qnT:sDO:D1P^wZ$$/Ra@miTJi9G;ddp_<q}6H1)o|a +&JCM');
    1311  * define('NONCE_KEY',        '%:R{[P|,s.KuMltH5}cI;/k<Gx~j!f0I)m_sIyu+&NJZ)-iO>z7X>QYR0Z_XnZ@|');
    1312  * define('AUTH_SALT',        'eZyT)-Naw]F8CwA*VaW#q*|.)g@o}||wf~@C-YSt}(dh_r6EbI#A,y|nU2{B#JBW');
     1310 * define('LOGGED_IN_KEY',      '|i|Ux`9<p-h$aFf(qnT:sDO:D1P^wZ$$/Ra@miTJi9G;ddp_<q}6H1)o|a +&JCM');
     1311 * define('NONCE_KEY',          '%:R{[P|,s.KuMltH5}cI;/k<Gx~j!f0I)m_sIyu+&NJZ)-iO>z7X>QYR0Z_XnZ@|');
     1312 * define('AUTH_SALT',          'eZyT)-Naw]F8CwA*VaW#q*|.)g@o}||wf~@C-YSt}(dh_r6EbI#A,y|nU2{B#JBW');
    13131313 * define('SECURE_AUTH_SALT', '!=oLUTXh,QW=H `}`L|9/^4-3 STz},T(w}W<I`.JjPi)<Bmf1v,HpGe}T1:Xt7n');
    13141314 * define('LOGGED_IN_SALT',   '+XSqHc;@Q*K_b|Z?NC[3H!!EONbh.n<+=uKR:>*c(u`g~EJBf#8u#R{mUEZrozmm');
    1315  * define('NONCE_SALT',       'h`GXHhD>SLWVfg1(1(N{;.V!MoE(SfbA_ksP@&`+AycHcAV$+?@3q+rxV{%^VyKT');
     1315 * define('NONCE_SALT',    'h`GXHhD>SLWVfg1(1(N{;.V!MoE(SfbA_ksP@&`+AycHcAV$+?@3q+rxV{%^VyKT');
    13161316 * </code>
    13171317 *
    13181318 * Salting passwords helps against tools which has stored hashed values of
     
    17441744        return $r;
    17451745}
    17461746endif;
     1747
     1748
     1749if ( !function_exists( 'wp_text_diff_with_count' ) ) :
     1750/**
     1751 * Displays a human readable HTML representation of the difference between two strings.
     1752 * similar to wp_text_diff, but tracks and returns could of lines added and removed
     1753 *
     1754 * @since 3.6
     1755 * @see wp_parse_args() Used to change defaults to user defined settings.
     1756 * @uses Text_Diff
     1757 * @uses WP_Text_Diff_Renderer_Table
     1758 *
     1759 * @param string $left_string "old" (left) version of string
     1760 * @param string $right_string "new" (right) version of string
     1761 * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults.
     1762 * @return array contains html, linesadded & linesdeletd, empty string if strings are equivalent.
     1763 */
     1764function wp_text_diff_with_count( $left_string, $right_string, $args = null ) {
     1765        $defaults = array( 'title' => '', 'title_left' => '', 'title_right' => '' );
     1766        $args = wp_parse_args( $args, $defaults );
     1767
     1768        if ( !class_exists( 'WP_Text_Diff_Renderer_Table' ) )
     1769                        require( ABSPATH . WPINC . '/wp-diff.php' );
     1770
     1771        $left_string  = normalize_whitespace( $left_string );
     1772        $right_string = normalize_whitespace( $right_string );
     1773
     1774        $left_lines  = explode( "\n", $left_string );
     1775        $right_lines = explode( "\n", $right_string) ;
     1776
     1777        $text_diff = new Text_Diff($left_lines, $right_lines  );
     1778        $linesadded = $text_diff->countAddedLines();
     1779        $linesdeleted = $text_diff->countDeletedLines();
     1780
     1781        $renderer  = new WP_Text_Diff_Renderer_Table();
     1782        $diff = $renderer->render( $text_diff );
     1783
     1784        if ( !$diff )
     1785                        return '';
     1786
     1787                $r  = "<table class='diff'>\n";
     1788
     1789        if ( ! empty( $args[ 'show_split_view' ] ) ) {
     1790                $r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />";
     1791        } else {
     1792                $r .= "<col class='content' />";
     1793        }
     1794
     1795        if ( $args['title'] || $args['title_left'] || $args['title_right'] )
     1796                $r .= "<thead>";
     1797        if ( $args['title'] )
     1798                $r .= "<tr class='diff-title'><th colspan='4'>$args[title]</th></tr>\n";
     1799        if ( $args['title_left'] || $args['title_right'] ) {
     1800                $r .= "<tr class='diff-sub-title'>\n";
     1801                $r .= "\t<td></td><th>$args[title_left]</th>\n";
     1802                $r .= "\t<td></td><th>$args[title_right]</th>\n";
     1803                $r .= "</tr>\n";
     1804        }
     1805        if ( $args['title'] || $args['title_left'] || $args['title_right'] )
     1806                $r .= "</thead>\n";
     1807
     1808        $r .= "<tbody>\n$diff\n</tbody>\n";
     1809        $r .= "</table>";
     1810
     1811        return array( 'html' => $r, 'linesadded' => $linesadded, 'linesdeleted' => $linesdeleted );
     1812        }
     1813        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

     
    21582158        /* translators: revision date format, see http://php.net/date */
    21592159        $datef = _x( 'j F, Y @ G:i:s', 'revision date format');
    21602160
     2161        $left_revision = get_post( $compare_to );
     2162        //error_log($left_revision);
    21612163        //single model fetch mode
     2164        //return the diff of a single revision comparison
    21622165        if ( 0 != $single_revision_id ) {
    2163                 $left_revision = get_post( $compare_to );
    21642166                $right_revision = get_post( $single_revision_id );
     2167        //error_log($right_revision);
    21652168
    2166                 if ( $compare_two_mode ) {
    2167                         $compare_to_gravatar = get_avatar( $left_revision->post_author, 18 );
    2168                         $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author );
    2169                         $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
    2170 
    2171                         $revision_from_date_author = sprintf(
    2172                                 '%s %s, %s %s (%s)',
    2173                                 $compare_to_gravatar,
    2174                                 $compare_to_author,
    2175                                 human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
    2176                                 __( ' ago ' ),
    2177                                 $compare_to_date
    2178                         );
    2179                 }
    2180 
    21812169                //
    21822170                //make sure the left revision is the most recent
    21832171                //
     
    21872175                        $right_revision = $temp;
    21882176                }
    21892177
     2178                $linesadded=0;
     2179                $linesdeleted=0;
     2180
    21902181                //
    21912182                //compare from left to right, passed from application
    21922183                //
     
    22022193                        if ( ! empty( $show_split_view ) )
    22032194                                 $args = array( 'show_split_view' => true );
    22042195
    2205                         $content .= wp_text_diff( $left_content, $right_content, $args );
     2196                        $diff = wp_text_diff_with_count( $left_content, $right_content, $args );
     2197
     2198                        if ( isset( $diff[ 'html' ] ) )
     2199                                $content .= $diff[ 'html' ];
     2200
     2201                        if ( isset( $diff[ 'linesadded' ] ) )
     2202                                $linesadded = $linesadded + $diff[ 'linesadded' ];
     2203
     2204                        if ( isset( $diff[ 'linesdeleted' ] ) )
     2205                                $linesdeleted = $linesdeleted + $diff[ 'linesdeleted' ];
     2206
     2207
    22062208                }
    2207                         $content = '' == $content ? __( 'No difference' ) : $content;
    2208                         $alltherevisions = array (
    2209                                 'revisiondiff' => $content
    2210                         );
     2209                $content = '' == $content ? __( 'No difference' ) : $content;
     2210
     2211                $alltherevisions = array (
     2212                        'revisiondiff' => $content,
     2213                        'lines_deleted' => $linesdeleted,
     2214                        'lines_added' => $linesadded
     2215                );
    22112216                echo json_encode( $alltherevisions );
    22122217                exit();
    2213         }
     2218        } //end single model fetch
    22142219
     2220        //fetch the list of revisions available
     2221
    22152222        //if we are comparing two revisions, the first 'revision' represented by the leftmost
    22162223        //slider position is the current revision, prepend a comparison to this revision
    2217         if ( $compare_two_mode )
     2224        if ( $compare_two_mode && ! wp_first_revision_matches_current_version( $post_id ) ) //revisions don't have current version
    22182225                array_unshift( $revisions, get_post( $post_id ) );
    2219                
     2226
     2227if ( $compare_two_mode) // && wp_first_revision_matches_current_version( $post_id ) ) //revisions already include current version
     2228                array_shift( $revisions ); //remove the extra current revisions (comparing to current in one handle mode)
     2229
     2230
    22202231        $count = -1;
    22212232
     2233        //reverse the list to start with oldes revision
     2234        $revisions = array_reverse( $revisions );
     2235
     2236        $previous_revision_id = 0;
    22222237        foreach ( $revisions as $revision ) :
    22232238                if ( ! empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
    22242239                                continue;
     
    22272242                $count++;
    22282243                // return blank data for diffs to the left of the left handle (for right handel model)
    22292244                // or to the right of the right handle (for left handel model)
    2230                 if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) || 
    2231                          ( 0 != $right_handle_at && $count > $right_handle_at )) { 
     2245                if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) ||
     2246                         ( 0 != $right_handle_at && $count > $right_handle_at )) {
    22322247                        $alltherevisions[] = array (
    22332248                                'ID' => $revision->ID,
    22342249                        );
    2235                        
    22362250                        continue;
    22372251                }
    22382252
    2239                 $gravatar = get_avatar( $revision->post_author, 18 );
     2253                if ( $compare_two_mode ) {
     2254                        $compare_to_gravatar = get_avatar( $left_revision->post_author, 24 );
     2255                        $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author );
     2256                        $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
     2257
     2258                        $revision_from_date_author = sprintf(
     2259                                '%s %s, %s %s (%s)',
     2260                                $compare_to_gravatar,
     2261                                $compare_to_author,
     2262                                human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
     2263                                __( ' ago ' ),
     2264                                $compare_to_date
     2265                        );
     2266                }
     2267
     2268                $gravatar = get_avatar( $revision->post_author, 24 );
    22402269                $author = get_the_author_meta( 'display_name', $revision->post_author );
    22412270                $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
    22422271                $revision_date_author = sprintf(
     
    22472276                        __( ' ago ' ),
    22482277                        $date
    22492278                );
     2279                $datef2 = __( 'j M @ G:i' );
     2280                $date2 = date_i18n( $datef2, strtotime( $revision->post_modified ) );
    22502281
     2282                $revision_date_author_short = sprintf(
     2283                        '%s <strong>%s</strong><br />%s',
     2284                        $gravatar,
     2285                        $author,
     2286                        $date2
     2287                );
     2288
    22512289                $restoreaction = wp_nonce_url(
    22522290                        add_query_arg(
    22532291                                array( 'revision' => $revision->ID,
     
    22572295                        "restore-post_{$compare_to}|{$revision->ID}"
    22582296                );
    22592297
    2260                 $alltherevisions[] = array (
     2298                if ( ( $compare_two_mode || 0 !== $previous_revision_id ) ) {
     2299                        $alltherevisions[] = array (
    22612300                                'ID' => $revision->ID,
    22622301                                'revision_date_author' => $revision_date_author,
    22632302                                'revision_from_date_author' => $revision_from_date_author,
     2303                                'revision_date_author_short' => $revision_date_author_short,
    22642304                                'restoreaction' => urldecode( $restoreaction ),
    2265                                 'revision_toload' => true
     2305                                'revision_toload' => true,
     2306                                'previous_revision_id' => $previous_revision_id
    22662307                        );
     2308                }
     2309                $previous_revision_id = $revision->ID;
    22672310
    22682311        endforeach;
    22692312
  • 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                }),
     
    3549                        _revisionsOptions : null,
    3650                        _left_diff : 0,
    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                        _keep_tooltip_open : false,
    4359
    4460                        //TODO add ability to arrive on specific revision
    4561                        routes : {
     
    5470                                var revisions_to_load = model_collection.where( { revision_toload : true } );
    5571                                //console.log(revisions_to_load);
    5672                                var delay=0;
    57                                 _.each(revisions_to_load, function( the_model ) {
     73                                //match slider to passed revision_id
     74                                _.each( revisions_to_load, function( the_model ) {
     75                                        if ( the_model.get( 'ID' )  == wpRevisionsSettings.revision_id ) {
     76                                                //console.log ( the_model.get( 'ID' ) +'-' +wpRevisionsSettings.revision_id);
     77                                                self._right_diff = self._revisions.indexOf( the_model ) + 1;
     78                                        }
     79
     80                                });
     81                                _.each( revisions_to_load, function( the_model ) {
    5882                                                the_model.urlRoot = model_collection.url;
    5983                                                _.delay( function() {
    6084                                                        the_model.fetch( {
     
    6387                                                                remove : false,
    6488                                                                //async : false,
    6589                                                                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');
    69                                                                                 self._revisionView.render();
     90                                                                        model.set( 'revision_toload', 'false' );
     91                                                                        //console.log(model_collection.where( { revision_toload : true } ).length);
     92                                                                        if ( 0 === model_collection.where( { revision_toload : true } ).length )
     93                                                                                self.stop_model_loading_spinner();
     94
     95                                                                        self._tickmarkView.render();
     96
     97                                                                        var total_changes = model.get( 'lines_added' ) + model.get( 'lines_deleted');
     98                                                                        //      console.log(total_changes);
     99                                                                        var scope_of_changes = 'vsmall';
     100                                                                        if  ( total_changes > 1 && total_changes <= 3 ) {
     101                                                                                scope_of_changes = 'small';
     102                                                                        } else if(total_changes > 3 && total_changes <= 5 ) {
     103                                                                                scope_of_changes = 'med';
     104                                                                        } else if(total_changes > 5 && total_changes <= 10 ) {
     105                                                                                scope_of_changes = 'large';
     106                                                                        } else if(total_changes > 10 ) {
     107                                                                                scope_of_changes = 'vlarge';
    70108                                                                        }
    71                                                                 }
     109                                                                        model.set( 'scope_of_changes', scope_of_changes );
     110                                                                        console.log (self._right_diff);
     111                                                                        if ( 0 !== self._right_diff && model.get( 'ID' ) === self._revisions.at( self._right_diff - 1 ).get( 'ID' ) ) { //reload if current model refreshed
     112                                                                        //console.log('render');
     113                                                                        self._revisionView.render();
     114                                                                        }
     115
     116                                                                }
    72117                                                } );
    73118                                                }, delay ) ;
    74                                                 delay = delay + 200; //stagger model loads by 200 ms to avoid hammering server with requests
     119                                                delay = delay + 150; //stagger model loads to avoid hammering server with requests
    75120                                        }
    76121                                );
    77122                        },
     
    83128
    84129                        stop_left_model_loading : function() {
    85130                                this._left_model_loading = false;
    86                                 $('.revisiondiffcontainer').removeClass('leftmodelloading');
    87131                        },
    88132
    89133                        start_right_model_loading : function() {
     
    93137
    94138                        stop_right_model_loading : function() {
    95139                                this._right_model_loading = false;
     140                        },
     141
     142                        stop_model_loading_spinner : function() {
    96143                                $('.revisiondiffcontainer').removeClass('rightmodelloading');
     144                                $('.revisiondiffcontainer').removeClass('leftmodelloading');
    97145                        },
    98146
    99147                        reloadmodel : function() {
     
    111159                                                                                        '&show_split_view=' +  REVAPP._show_split_view +
    112160                                                                                        '&nonce=' + wpRevisionsSettings.nonce;
    113161                                self.start_right_model_loading();
    114                                 this._revisions.fetch({ //reload revision data
     162                                self._revisions.fetch({ //reload revision data
    115163                                        success : function() {
    116164                                                self.stop_right_model_loading();
    117165                                                var revisioncount = self._revisions.length;
     
    122170                                                self.reload_toload_revisions( self._revisions );
    123171
    124172                                                $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this, autsaves changed
     173                                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
     174                                                REVAPP._tickmarkView.model = self._revisions;
     175                                                REVAPP._tickmarkView.render();
    125176                                        },
    126177
    127178                                        error : function () {
     
    136187                                var self = this;
    137188                                self.start_left_model_loading();
    138189                                self._left_handle_revisions = new wp.revisions.Collection();
     190                                console.log( 'right - ' + self._right_diff );
    139191                                self._left_handle_revisions.url =
    140192                                        ajaxurl +
    141193                                        '?action=revisions-data&compare_to=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) +
     
    150202                                        success : function(){
    151203                                                self.stop_left_model_loading();
    152204                                                self.reload_toload_revisions( self._left_handle_revisions );
     205                                                self._tickmarkView.model = self._left_handle_revisions;
     206                                                $( '#slider' ).slider( 'option', 'max', self._revisions.length );
    153207                                        },
    154208
    155209                                        error : 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 ) {
    167                                         self._right_handle_revisions.url =
     220                                        self._right_handle_revisions.url =
    168221                                                ajaxurl +
    169                                                 '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
     222                                                '?action=revisions-data&compare_to=' + self._revisions.at( self._left_diff ).get( 'ID' )+
    170223                                                '&post_id=' + wpRevisionsSettings.post_id +
    171224                                                '&show_autosaves=' + self._autosaves +
    172225                                                '&show_split_view=' +  self._show_split_view +
    173226                                                '&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                                 }
    184227
     228
    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
    190237                                        },
    191238
    192239                                        error : function ( response ) {
     
    215262
    216263                                                success : function() {
    217264                                                        self.stop_right_model_loading();
    218                                                         self.revisionDiffSetup();
     265                                                        self.completeApplicationSetup();
    219266                                                }
    220267                                        });
    221268                                }
    222269                                return this;
    223270                        },
    224271
    225                         revisionDiffSetup : function() {
     272                        completeApplicationSetup : function() {
    226273                                this._revisionView = new wp.revisions.views.View({
    227274                                        model : this._revisions
    228275                                });
    229276                                this._revisionView.render();
    230                                 $( '#diff_max, #diff_maxof' ).html( this._revisions.length );
    231                                 $( '#diff_count' ).html( REVAPP._right_diff );
    232277                                $( '#slider' ).slider( 'option', 'max', this._revisions.length - 1 );
    233278
    234279                                this.reload_toload_revisions( this._revisions );
     280
    235281                                this._revisionsInteractions = new wp.revisions.views.Interact({
    236282                                        model : this._revisions
    237283                                });
    238284                                this._revisionsInteractions.render();
    239285
     286                                this._tickmarkView = new wp.revisions.views.Tickmarks({
     287                                        model : this._revisions
     288                                });
     289                                this._tickmarkView.render();
     290                                this._tickmarkView.resetticks();
     291
     292                                $( 'a.ui-slider-handle' ).attr( 'title', '' ).tooltip({
     293                                        track: false,
     294                                        position: {
     295                                                my: "top-80",
     296                                                active: function( position, feedback ) {
     297                                                        $( this ).css( position );
     298                                                        $( "<div>" )
     299                                                        .addClass( "arrow" )
     300                                                        .addClass( feedback.vertical )
     301                                                        .addClass( feedback.horizontal )
     302                                                        .appendTo( this );
     303                                                }
     304                                        },
     305                                        show: false,
     306                                        hide: false,
     307                                        disabled: false
     308                                } );
    240309                                /*
     310                                .on( 'mouseup', function( event ) {
     311                                        REVAPP._keep_tooltip_open = false;
     312                                        $( this ).find('.ui-slider-tooltip').hide();
     313                                } ).on( 'mousedown', function( event ) {
     314                                        REVAPP._keep_tooltip_open = true;
     315                                } ).on( 'mouseout', function( event ) {
     316                                        if ( REVAPP._keep_tooltip_open)
     317                                                event.stopImmediatePropagation();
     318                                        });
     319                                */
     320                                /*
    241321                                //Options hidden for now, moving to screen options
    242322                                this._revisionsOptions = new wp.revisions.views.Options({
    243323                                        model : this._revisions
     
    252332        wp.revisions.Collection = Backbone.Collection.extend({
    253333                model : wp.revisions.Model,
    254334                url : ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
    255                         '&show_autosaves=false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
     335                        '&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
    256336
    257337                initialize : function() {
    258338                        }
    259339        } );
    260340
    261341        _.extend(wp.revisions.views, {
     342
     343                //Ticks inside slider view
    262344                //
     345                Tickmarks : Backbone.View.extend({
     346                        el : $('#diff-slider-ticks')[0],
     347                        tagName : 'diff-slider-ticks-view',
     348                        className : 'diff-slider-ticks-container',
     349                        template : wp.template('revision-ticks'),
     350                        model : wp.revisions.Model,
     351
     352                        resetticks : function() {
     353                                var slider_max = $( '#slider' ).slider( 'option', 'max');
     354                                var slider_width = $( '#slider' ).width();
     355                                var adjust_max = ( 2 === REVAPP._compareoneortwo ) ? 1 : 0;
     356                                var tick_width = Math.floor( slider_width / ( slider_max - adjust_max ) );
     357
     358                                //TODO: adjust right margins for wider ticks so they stay centered on handle stop point
     359
     360                                tick_width = (tick_width > 50 ) ? 50 : tick_width;
     361                                slider_width = tick_width * (slider_max - adjust_max ) +1;
     362
     363                                $( '#slider' ).width( slider_width );
     364                                $( '.diff-slider-ticks-wrapper' ).width( slider_width );
     365                                $( '#diffslider' ).width( slider_width );
     366                                $( '#diff-slider-ticks' ).width( slider_width );
     367
     368                                var a_tick_width = $( '.revision-tick' ).width();
     369
     370                                if ( tick_width !==  a_tick_width ) { // is the width already set correctly?
     371                                        $( '.revision-tick' ).each( function( ) {
     372                                                $(this).css( 'margin-right', tick_width - 1 + 'px'); //space the ticks out using right margin
     373                                        });
     374
     375                                        if( 2 === REVAPP._compareoneortwo ) {
     376                                                $( '.revision-tick' ).first().remove(); //TODO - remove thie check
     377                                        }
     378                                        $( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin
     379                                }
     380
     381                        },
     382
     383                        //render the options view
     384                        render : function() {
     385                                var self = this;
     386
     387                                if ( null !== self.model ) {
     388                                        //TODO remove this initial model when ticket #16215 rolls because
     389                                        //revisions will then include current version
     390                                        var add_placeholder = ( 2 === REVAPP._compareoneortwo ) ? self.template('') : '';
     391
     392                                        var addhtml = "";//add_placeholder;
     393                                        _.each ( self.model.models, function ( the_model ) {
     394
     395                                                addhtml = addhtml + self.template ( the_model.toJSON() );
     396
     397                                        });
     398                                        self.$el.html( addhtml );
     399
     400                                }
     401                                self.resetticks();
     402                                return self;
     403                        }
     404                }),
     405
     406                //
    263407                //primary revision diff view
    264408                //
    265409                View : Backbone.View.extend({
     
    271415                        comparetwochecked : '',
    272416                        draggingleft : false,
    273417
    274                         initialize : function(){
    275                         },
    276 
    277418                        //
    278419                        //render the revisions
    279420                        //
    280421                        render : function() {
    281422                                var addhtml = '';
    282423                                //compare two revisions mode?
     424
    283425                                if ( 2 === REVAPP._compareoneortwo ) {
    284426                                        this.comparetwochecked = 'checked';
    285427                                        if ( this.draggingleft ) {
     
    291433                                                }
    292434                                        } else { //dragging right handle
    293435                                                var thediff = REVAPP._right_diff;
     436                                                //console.log( thediff )
    294437                                                if ( this.model.at( thediff ) ) {
    295438                                                        addhtml = this.template( _.extend(
    296439                                                                this.model.at( thediff ).toJSON(),
     
    310453                                this.$el.html( addhtml );
    311454                                if ( this.model.length < 3 ) {
    312455                                        $( 'div#comparetworevisions' ).hide(); //don't allow compare two if fewer than three revisions
    313 
    314456                                }
    315457                                //console.log ( (this.model.at( REVAPP._right_diff - 1 )).url());
    316458                                return this;
     
    329471                                if ( $( 'input#comparetwo' ).is( ':checked' ) ) {
    330472                                        REVAPP._compareoneortwo = 2 ;
    331473                                        REVAPP.reloadleftright();
     474
    332475                                } else {
    333476                                        REVAPP._compareoneortwo = 1 ;
    334477                                        REVAPP._revisionView.draggingleft = false;
     
    336479                                        REVAPP.reloadmodelsingle();
    337480                                }
    338481                                REVAPP._revisionsInteractions.render();
     482                                REVAPP._tickmarkView.render();
     483                                REVAPP._revisionView.render();
     484
    339485                        }
    340486                }),
    341487
    342488                //
    343489                //options view for show autosaves and show split view options
    344490                //
     491                /* DISABLED for now
    345492                Options : Backbone.View.extend({
    346493                        el : $('#backbonerevisionsoptions')[0],
    347494                        tagName : 'revisionoptionsview',
    348495                        className : 'revisionoptions-container',
    349496                        template : wp.template('revisionoptions'),
    350497
    351                         initialize : function() {
    352                         },
    353 
    354498                        //render the options view
    355499                        render : function() {
    356500                                var addhtml = this.template;
     
    396540                                REVAPP.reloadmodel();
    397541                        }
    398542                }),
    399 
     543                */
    400544                //
    401545                //main interactions view
    402546                //
     
    405549                        tagName : 'revisionvinteract',
    406550                        className : 'revisionvinteract-container',
    407551                        template : wp.template('revisionvinteract'),
    408                         _restoreword : '',
    409552
    410553                        initialize : function() {
    411                                 this._restoreword = $( 'input#restore' ).attr( 'value' );
    412554                        },
    413555
    414                         reset_restore_button : function() {
    415                                 $( 'input#restore' ).attr( 'value', this._restoreword + ' ' + REVAPP._revisions.at( REVAPP._right_diff - 1 ).get( 'ID' ) );
    416                         },
    417 
    418556                        render : function() {
    419557                                var self = this;
    420558
    421559                                var addhtml = this.template;
    422560                                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();
    427561
    428562                                var modelcount = REVAPP._revisions.length;
    429563
     
    431565                                if ( 1 === REVAPP._compareoneortwo ) {
    432566                                        //set up the slider with a single handle
    433567                                        slider.slider({
    434                                                 value : REVAPP._right_diff-1,
    435                                                 min : 0,
    436                                                 max : modelcount-1,
    437                                                 step : 1,
     568                                                value: REVAPP._right_diff-1,
     569                                                min: 0,
     570                                                max: modelcount-1,
     571                                                step: 1,
    438572
     573
    439574                                                //slide interactions for one handles slider
    440575                                                slide : function( event, ui ) {
    441                                                         if ( REVAPP._right_model_loading ) //left model stoll loading, prevent sliding left handle
    442                                                                                 return false;
    443576
    444                                                         REVAPP._right_diff =( ui.value+1 );
    445                                                         $( '#diff_count' ).html( REVAPP._right_diff );
     577                                                        REVAPP._right_diff = ( ui.value+1 );
    446578                                                        REVAPP._revisionView.render();
    447                                                         self.reset_restore_button();
    448                                                 }
     579                                                        /*
     580                                                        $( 'a.ui-slider-handle' ).tooltip( {
     581                                                                content: REVAPP._revisions.at( ui.value ).get( 'revision_date_author_short' ),
     582                                                                position: {
     583                                                                my: "top-65",
     584                                                                using: function( position, feedback ) {
     585                                                                        $( this ).css( position );
     586                                                                        $( "<div>" )
     587                                                                        .addClass( "arrow" )
     588                                                                        .addClass( feedback.vertical )
     589                                                                        .addClass( feedback.horizontal )
     590                                                                        .appendTo( this );
     591                                                                        }
     592                                                                }
     593                                                        });//.trigger( 'close' ).trigger( 'open' );
     594*/
     595                                                        }
    449596                                        });
    450597                                        $( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
     598
    451599                                } else { //comparing more than one, eg 2
    452600                                        //set up the slider with two handles
    453601                                        slider.slider({
     
    467615                                                                                return false;
    468616
    469617                                                                        if ( REVAPP._revisionView.model !== REVAPP._left_handle_revisions &&
    470                                                                                         null !== REVAPP._left_handle_revisions )
     618                                                                                        null !== REVAPP._left_handle_revisions ) {
    471619                                                                                REVAPP._revisionView.model = REVAPP._left_handle_revisions;
    472 
     620                                                                                REVAPP._tickmarkView.model = REVAPP._left_handle_revisions;
     621                                                                                REVAPP._tickmarkView.render();
     622                                                                        }
    473623                                                                        REVAPP._revisionView.draggingleft = true;
    474624                                                                        REVAPP._left_diff_start = ui.values[ 0 ];
    475625                                                                        break;
    476626
    477627                                                                case 2: //right
    478                                                                         if ( REVAPP._right_model_loading ) //right model stoll loading, prevent sliding right handle
     628                                                                        if ( REVAPP._right_model_loading ) //left model stoll loading, prevent sliding left handle
    479629                                                                                return false;
    480630
    481631                                                                        //one extra spot at left end when comparing two
    482632                                                                        if ( REVAPP._revisionView.model !== REVAPP._right_handle_revisions &&
    483                                                                                         null !== REVAPP._right_handle_revisions )
     633                                                                                        null !== REVAPP._right_handle_revisions ) {
    484634                                                                                REVAPP._revisionView.model = REVAPP._right_handle_revisions;
     635                                                                                REVAPP._tickmarkView.model = REVAPP._right_handle_revisions;
     636                                                                                REVAPP._tickmarkView.render();
     637                                                                        }
    485638
    486639                                                                        REVAPP._revisionView.draggingleft = false;
    487640                                                                        REVAPP._right_diff_start = ui.values[ 1 ];
     
    505658                                                                        break;
    506659
    507660                                                                case 2: //right
    508                                                                         if ( REVAPP._right_model_loading ) //right model still loading, prevent sliding right handle
    509                                                                                 return false;
     661                                                                        REVAPP._right_diff = ui.values[ 1 ];
     662                                                                        //console.log('setting ' + REVAPP._right_diff );
    510663
    511                                                                         REVAPP._right_diff = ui.values[ 1 ] - 1 ;
    512664                                                                        break;
    513665                                                        }
    514666
    515                                                         $( '#diff_count' ).html( REVAPP._right_diff );
    516 
    517667                                                        if ( 0 === REVAPP._left_diff ) {
    518668                                                                $( '.revisiondiffcontainer' ).addClass( 'currentversion' );
    519669
    520670                                                        } else {
    521671                                                                $( '.revisiondiffcontainer' ).removeClass( 'currentversion' );
    522                                                                 $( '#diff_left_count_inner' ).html( REVAPP._left_diff );
    523672                                                        }
    524673
    525                                                         REVAPP._revisionView.render(); //render the diff view
    526                                                         self.reset_restore_button();
     674                                                        REVAPP._revisionView.render();
     675
    527676                                                },
    528677
    529678                                                //when the user stops sliding  in 2 handle mode, recalculate diffs
     
    537686                                                                switch ( index ) {
    538687                                                                        case 1: //left
    539688                                                                                //left handle dragged & changed, reload right handle model
    540                                                                                 if ( ! ( REVAPP._left_diff_start === ui.values[ 0 ] || REVAPP._left_model_loading ) )
     689                                                                                if ( REVAPP._left_diff_start !== ui.values[ 0 ] )
    541690                                                                                        REVAPP.reloadright();
    542691
    543692                                                                                break;
    544693
    545694                                                                        case 2: //right
    546695                                                                                //right handle dragged & changed, reload left handle model if changed
    547                                                                                 if ( ! ( REVAPP._right_diff_start === ui.values[ 1 ] || REVAPP._right_model_loading ) ) {
     696                                                                                if ( REVAPP._right_diff_start !== ui.values[ 1 ] )
    548697                                                                                        REVAPP.reloadleft();
    549                                                                                 }
     698
    550699                                                                                break;
    551700                                                                }
    552701                                                        }
     
    571720
    572721                                REVAPP._revisionView.render();
    573722
    574                                 $( '#diff_count' ).html( REVAPP._right_diff );
    575723                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
    576                                 this.reset_restore_button();
    577724                        },
    578725
    579726                        //go the the previous revision
     
    583730
    584731                                REVAPP._revisionView.render();
    585732
    586                                 $( '#diff_count' ).html( REVAPP._right_diff );
    587733                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
    588                                 this.reset_restore_button();
    589734                        }
    590735                })
    591736        });
  • wp-admin/revision.php

     
    8080        $parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type;
    8181else
    8282        $parent_file = $submenu_file = 'edit.php';
    83 
    8483wp_enqueue_script( 'revisions' );
    8584
    8685require_once( './admin-header.php' );
     
    8988//TODO can we pass the context in a better way
    9089?>
    9190<script type="text/javascript">
    92 var wpRevisionsSettings = <?php echo json_encode( array( 'post_id' => $post->ID, 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ) ) ); ?>;
     91var wpRevisionsSettings = <?php echo json_encode(
     92                                                                        array( 'post_id' => $post->ID,
     93                                                                        'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ),
     94                                                                        'revision_id' => $revision_id ) ); ?>;
    9395</script>
    9496<?php
    9597        $comparetworevisionslink = get_edit_post_link( $revision->ID );
    9698?>
    9799
    98 <div id="backbonerevisionsoptions"></div>
     100<div id="backbonerevisionsoptions">
     101</div>
    99102<div class="wrap">
    100         <div class="icon32 icon32-posts-post" id="icon-edit"><br></div>
     103        <div class="icon32 icon32-posts-post" id="icon-edit">
     104                <br>
     105        </div>
    101106        <div class="revisiondiffcontainer diffsplit currentversion rightmodelloading">
    102                 <div id="modelsloading" class="updated message"><span class="spinner" ></span> <?php _e( 'Calculating revision diffs' ); ?></div>
     107                <div id="modelsloading" class="updated message">
     108                        <span class="spinner" ></span> <?php _e( 'Calculating revision diffs' ); ?>
     109                </div>
    103110                <h2 class="long-header"><?php echo $h2; ?></h2>
    104                 <div id="backbonerevisionsinteract"></div>
    105                 <div id="backbonerevisionsdiff"></div>
     111                <div class="diff-slider-ticks-wrapper">
     112                        <div id="diff-slider-ticks">
     113                        </div>
     114                </div>
     115                <div id="backbonerevisionsinteract">
     116                </div>
     117                <div id="backbonerevisionsdiff">
     118                </div>
    106119                <hr />
    107120        </div>
    108121</div>
    109122
    110123<script id="tmpl-revision" type="text/html">
     124        <div id="diffsubheader" class="diff-left-hand-meta-row">
     125                <div id="diff_from_current_revision">
     126                        <b><?php _e( 'Comparing from:' ); ?></b> <?php _e( 'the current version' ); ?>
     127                </div>
     128                <div id="difftitlefrom"><b><?php _e( 'Comparing from:' ); ?></b> <?php _e( 'revision by' ); ?> {{{ data.revision_from_date_author }}} </div>
     129        </div>
     130
    111131        <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>
     132                <div id="difftitle">
     133                        <strong><?php _e( 'Comparing to:' ); ?></strong> <?php _e( 'revision by' ); ?> {{{ data.revision_date_author }}}
     134                </div>
     135                <div id="diffrestore">
     136                        <input class="button button-primary" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore This Revision' )?>" />
     137                </div>
     138                <div id="comparetworevisions">
     139                        <input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/>
     140                                <label for="comparetwo"><?php esc_attr_e( 'Compare two revisions' ); ?></a></label>
     141                </div>
     142        </div>
     143
    118144        <div id="removedandadded">
    119145                <div id="removed"><?php _e( 'Removed -' ); ?></div>
    120146                <div id="added"><?php _e( 'Added +' ); ?></div>
     
    124150
    125151<script id="tmpl-revisionvinteract" type="text/html">
    126152        <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>
     153                <div id="diffprevious"><input class="button" type="submit" id="previous" value="<?php esc_attr_e( 'Previous' ); ?>" />
    142154                </div>
     155                <div id="diffnext"><input class="button" type="submit" id="next" value="<?php esc_attr_e( 'Next' ); ?>" />
     156                </div>
     157                <div id="diffslider">
     158                        <div id="slider" class="wp-slider">
     159                        </div>
     160                </div>
    143161        </div>
    144162</script>
     163<script id="tmpl-revision-ticks" type="text/html">
     164        <div class="revision-tick revision-toload{{{ data.revision_toload }}} revision-scopeofchanges-{{{ data.scope_of_changes }}}">
     165        </div>
     166</script>
    145167<?php
    146168/*
    147169TODO 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 {
     
    13821383        background-color: #f7f7f7;
    13831384}
    13841385
     1386.comparetwo#diffsubheader.diff-left-hand-meta-row {
     1387        background-color: #fcfcfc;
     1388}
     1389
     1390.revision-tick.revision-toloadtrue {
     1391        background-color: #9999cc;
     1392        background: url(../images/wpspin_light.gif) no-repeat;
     1393        background-position: middle;
     1394        background-size: 1px 10px;
     1395}
     1396
     1397.revision-tick.revision-toloadfalse {
     1398        background-color: #aaa;
     1399}
     1400
    13851401#att-info {
    13861402        background-color: #e4f2Fd;
    13871403}
    13881404
     1405body .ui-tooltip {
     1406        border-color: #d7d7d7;
     1407        background-color: #fff;
     1408}
     1409
    13891410/* jQuery UI Slider */
    13901411.wp-slider.ui-slider {
    13911412        border-color: #d7d7d7;
     
    13931414}
    13941415
    13951416.wp-slider .ui-slider-handle {
    1396         border-color: #d7d7d7;
     1417        border-color: none;
    13971418}
    13981419
     1420.wp-slider .ui-slider-handle {
     1421        /* Slider drag Triangle CSS */
     1422background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA8FBMVEU2dZipwNBJl8VGmcX///+EpLlBgqpymrNFjru3ydNWiKs6eZzY4uuRrL08faPL3OZBjLSBqsCTssRHlMJEf59cj657o7xKl8OEqsE9gag2dJtEkb+ct8iZs8BHmMePq8BejKZAiK5llK5FjrlJl8c6dZdGl8avxdBJlcZ4nbc6ep6XrbpKgZ+Lqr5KmcdIkbqsws1Gk8E+f6c4dptaiadFirRKl8V8pblImcNIl8eGpruVscZCh7BMlsdIlcFImchEkbs9eJpCjbdGjbk8fJ84dp02dpo8gatMlsM2dps8faVAg61Ej71Ek75IksFIlcOaLCw7AAAAUHRSTlP/////AP///////////////////////////////////////////////////////////////////////////////////////////////////xB6m5UAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVcxZD8FAGIXhjxzUVktQgqKmo7ZYhkgsiS1tQuj//zeomo736uS5OFSo2W6UXc/R5hxXW5foxDlXqUKZx0GFZpXynuM4kXhjgjgyJkGzQIjpvi9Fx1uQ0iQUh4GkR/Ini0CQ2IfQ24YC4X8T+Mn0zj8lO1IgnqZpzlxE0m4YhrFsKYJVn126UGV+W1wHf4LdpByuF0goFKI7tv/dAAAAAElFTkSuQmCC');
     1423}
     1424
    13991425.wp-slider .ui-slider-handle.ui-state-hover,
    14001426.wp-slider .ui-slider-handle.ui-state-focus {
    1401         border-color: #aaa;
     1427        border-color: none;
     1428        outline: none;
    14021429}
    14031430
    14041431.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);
     1432        background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA51BMVEUgZpDkzc0yd6f///8mcqFJm8cjbZZzr80mg78lh8BDk8UngLl+s9AmfKk4hrGeweBaoMhNlMORwt4nd6Zdm8BAjMEnf7RYmsMkb50mhsFWlsYhZ5ImhbwocZg0f61Lk8E9i7twqNBgo8VSmMUofLBcm8o3faUpfK8mh8Aia5MgZpFMmcgpeapDmcJjo8sliMEmh70nhLkkcKAqgLF2sc8sc5ojbZsngrMkh8EnfKw1eaUjbpkkapImeKQgaJAohb0mh8MmhcMng7kkcKEpf68iZ48haJMmhb8kicEmc6MibJkia5UnhLsw1mWvAAAATXRSTlP/AP8A/////////////////////////////////////////////////////////////////////////////////////////////////9/iR18AAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVc15D8FAEIfh+Ymj6761LIrSiCNVVyjbRGgifP/PQ6q22/evyZPJDNXzD6G0qNDq5PtO3DJDFyfRpk+po2Eo0h5Qx9U0LRa3SejdlR2rDMLI41yKh6/AtOSzUiuU4kvemSMUDBsRXGuRIHj/CvCXyTNcSXelQBQYY1uBWMY651xfK4KzbdgzqJI73LK7hGC6r0bTB5apIhqIH/YIAAAAAElFTkSuQmCC');
    14121433}
    14131434
    14141435/* edit image */
  • wp-admin/css/wp-admin.css

     
    35543554        margin: 2px;
    35553555}
    35563556
    3557 #diffrestore,
    3558 #diffnext,
    3559 #diffcancel {
     3557#diffnext {
    35603558        float: right;
    35613559        margin-right: 5px;
    35623560}
    35633561
     3562#diffrestore input{
     3563        margin-left: 10px;
     3564}
     3565
    35643566#diffprevious,
    35653567#difftitle,
    35663568#difftitlefrom,
     
    35723574
    35733575#diffprevious,
    35743576#diffnext {
    3575         margin-top: 7px;
    35763577        height: 30px;
    35773578}
    35783579
     
    35843585#diffheader {
    35853586        border-bottom: 1px solid #dfdfdf;
    35863587        width: 100%;
    3587         height: 45px;
    3588         line-height: 45px;
    3589         padding-top: 10px;
     3588        height: 40px;
     3589        line-height: 40px;
     3590        padding-top: 30px;
    35903591}
    35913592
    3592 #diffsubheader {
     3593#diffsubheader,.diff-left-hand-meta-row {
    35933594        border-bottom: 1px solid #dfdfdf;
    35943595        width: 100%;
    35953596        height:35px;
    35963597        line-height: 35px;
     3598        display: block;
    35973599}
    35983600
    3599 #diffslider {
     3601#diffslider{
    36003602        width: 70%;
    36013603        margin-left: auto;
    36023604        margin-right: auto;
    36033605        text-align: center;
    3604         height: 3.5em;
     3606        height: 0.8em;
     3607        margin-top: 20px;
    36053608}
    36063609
     3610.diff-slider-ticks-wrapper {
     3611        margin-left: auto;
     3612        margin-right: auto;
     3613        text-align: center;
     3614}
     3615
     3616#diff-slider-ticks {
     3617        position: absolute;
     3618        margin-top: 50px;
     3619        z-index: 1;
     3620}
     3621
    36073622#revisioncount {
    36083623        width: 50%;
    36093624        margin-left: auto;
     
    36713686
    36723687#comparetworevisions {
    36733688        float: right;
     3689        position: absolute;
     3690        top: 10px;
     3691        right: 10px;
    36743692        line-height: 35px;
    36753693        padding-right: 5px;
    36763694}
     
    37063724.comparetwo #diffprevious,
    37073725.comparetwo #diffnext,
    37083726span#diff_left_current_revision,
    3709 span#diff_from_current_revision,
     3727#diff_from_current_revision,
    37103728.currentversion span#diff_left_count,
    37113729.currentversion span#diff_left_count_inner,
    3712 .currentversion #difftitlefrom,
    3713 .comparetwo.currentversion #difftitlefrom {
     3730.comparetwo.currentversion #diff_from_current_revision,
     3731#diffsubheader.diff-left-hand-meta-row {
    37143732        display: none;
    37153733}
    37163734
     
    37183736span#diff_left_count,
    37193737span#diff_left_count_inner,
    37203738.comparetwo #difftitlefrom,
    3721 .comparetwo.currentversion span#diff_from_current_revision,
    37223739.leftmodelloading #modelsloading,
    37233740.rightmodelloading #modelsloading,
    37243741.leftmodelloading #modelsloading .spinner,
    37253742.rightmodelloading #modelsloading .spinner,
    3726 {
    3727         display: inline;
     3743.comparetwo #diffsubheader.diff-left-hand-meta-row {
     3744        display: block;
    37283745}
    37293746
     3747.revision-tick {
     3748        width: 1px;
     3749        float: left;
     3750        margin-right: 15px;
     3751        height: 11px;
     3752        padding: 0;
     3753        margin-left: 0px;
     3754}
     3755
     3756.revision-tick.revision-scopeofchanges-vsmall {
     3757                width: 1px;
     3758                background-color: #aaa;
     3759}
     3760
     3761.revision-tick.revision-scopeofchanges-small {
     3762                width: 2px;
     3763                background-color: #aaa;
     3764                margin-left: -1px;
     3765}
     3766
     3767.revision-tick.revision-scopeofchanges-med {
     3768                width: 3px;
     3769                margin-left: -2px;
     3770                background-color: #666;
     3771}
     3772
     3773.revision-tick.revision-scopeofchanges-large {
     3774                width: 4px;
     3775                margin-left: -3px;
     3776                background-color: #333;
     3777}
     3778
     3779.revision-tick.revision-scopeofchanges-vlarge {
     3780                margin-left: -3px;
     3781                width: 4px;
     3782                background-color: #111;
     3783}
     3784
    37303785.diff-loading {
    37313786        margin-top: 50px;
    37323787        width: 100%;
     
    37413796        float: none;
    37423797}
    37433798
    3744 #difftitlefrom {
    3745         float: left;
    3746         display: none;
    3747 }
    3748 
    37493799#modelsloading {
    37503800        float: right;
     3801        position: absolute;
    37513802        line-height: 30px;
    37523803        display: none;
    37533804        clear: none;
    3754         margin: 0;
     3805        right: 170px;
    37553806        margin-top: -40px;
    37563807}
    37573808
    37583809#modelsloading .spinner {
    37593810        float: left;
    3760  }
     3811}
    37613812
     3813.ui-tooltip-content img {
     3814        float: left;
     3815        margin-right: 5px;
     3816}
     3817/*  jQuery UI Tooltip 1.10.1 */
     3818
     3819.ui-tooltip {
     3820        padding: 8px;
     3821        position: absolute;
     3822        z-index: 9999;
     3823        max-width: 300px;
     3824        min-width: 130px;
     3825}
     3826
     3827body .ui-tooltip {
     3828        border-width: 1px;
     3829}
     3830
     3831.ui-tooltip, .arrow:after {
     3832        border: 1px solid #d7d7d7;
     3833}
     3834
     3835.ui-tooltip {
     3836        padding: 5px 10px;
     3837}
     3838
     3839.arrow {
     3840        width: 70px;
     3841        height: 16px;
     3842        overflow: hidden;
     3843        position: absolute;
     3844        left: 50%;
     3845        margin-left: -35px;
     3846        bottom: -16px;
     3847        z-index: 99999;
     3848
     3849}
     3850
     3851.arrow.top {
     3852        top: -16px;
     3853        bottom: auto;
     3854}
     3855
     3856.arrow.left {
     3857        left: 20%;
     3858}
     3859
     3860.arrow:after {
     3861        content: "";
     3862        position: absolute;
     3863        left: 20px;
     3864        top: -20px;
     3865        width: 25px;
     3866        height: 25px;
     3867        background-color: #FFF;
     3868        -webkit-transform: rotate(45deg);
     3869        -moz-transform: rotate(45deg);
     3870        -ms-transform: rotate(45deg);
     3871        -o-transform: rotate(45deg);
     3872        tranform: rotate(45deg);
     3873}
     3874
     3875.arrow.top:after {
     3876        bottom: -20px;
     3877        top: auto;
     3878}
     3879
    37623880 /* jQuery UI Slider */
    37633881
    37643882.wp-slider.ui-slider {
     
    37733891.wp-slider .ui-slider-handle {
    37743892        position: absolute;
    37753893        z-index: 2;
    3776         width: 1.2em;
    3777         height: 1.2em;
    3778         border-width: 1px;
    3779         border-style: solid;
    3780         border-radius: 3px;
     3894        width: 17px;
     3895        height: 17px;
     3896        border: none;
    37813897}
    37823898
    37833899.wp-slider .ui-slider-range {