WordPress.org

Make WordPress Core

Ticket #23497: 23497.20.diff

File 23497.20.diff, 53.1 KB (added by adamsilverstein, 16 months ago)
  • 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 
    21612163        //single model fetch mode 
    21622164        if ( 0 != $single_revision_id ) { 
    2163                 $left_revision = get_post( $compare_to ); 
    21642165                $right_revision = get_post( $single_revision_id ); 
    21652166 
    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  
    21812167                // 
    21822168                //make sure the left revision is the most recent 
    21832169                // 
     
    21872173                        $right_revision = $temp; 
    21882174                } 
    21892175 
     2176                $linesadded=0; 
     2177                $linesdeleted=0; 
     2178 
    21902179                // 
    21912180                //compare from left to right, passed from application 
    21922181                // 
     
    22022191                        if ( ! empty( $show_split_view ) ) 
    22032192                                 $args = array( 'show_split_view' => true ); 
    22042193 
    2205                         $content .= wp_text_diff( $left_content, $right_content, $args ); 
     2194                        $diff = wp_text_diff_with_count( $left_content, $right_content, $args ); 
     2195 
     2196                        if ( isset( $diff[ 'html' ] ) ) 
     2197                                $content .= $diff[ 'html' ]; 
     2198 
     2199                        if ( isset( $diff[ 'linesadded' ] ) ) 
     2200                                $linesadded = $linesadded + $diff[ 'linesadded' ]; 
     2201 
     2202                        if ( isset( $diff[ 'linesdeleted' ] ) ) 
     2203                                $linesdeleted = $linesdeleted + $diff[ 'linesdeleted' ]; 
     2204 
     2205 
    22062206                } 
    2207                         $content = '' == $content ? __( 'No difference' ) : $content; 
    2208                         $alltherevisions = array ( 
    2209                                 'revisiondiff' => $content 
    2210                         ); 
     2207                $content = '' == $content ? __( 'No difference' ) : $content; 
     2208 
     2209                $alltherevisions = array ( 
     2210                        'revisiondiff' => $content, 
     2211                        'lines_deleted' => $linesdeleted, 
     2212                        'lines_added' => $linesadded 
     2213                ); 
    22112214                echo json_encode( $alltherevisions ); 
    22122215                exit(); 
    2213         } 
     2216        } //end single model fetch 
    22142217 
     2218        //fetch the list of revisions available 
     2219 
    22152220        //if we are comparing two revisions, the first 'revision' represented by the leftmost 
    22162221        //slider position is the current revision, prepend a comparison to this revision 
    2217         if ( $compare_two_mode )  
     2222        if ( $compare_two_mode && ! wp_first_revision_matches_current_version( $post_id ) ) //revisions don't have current version 
    22182223                array_unshift( $revisions, get_post( $post_id ) ); 
    2219                  
     2224 
     2225        if (! $compare_two_mode && wp_first_revision_matches_current_version( $post_id ) ) //revisions already include current version 
     2226                array_shift( $revisions ); //remove the extra current revisions (comparing to current in one handle mode) 
     2227 
     2228 
    22202229        $count = -1; 
    22212230 
     2231        $revisions = array_reverse( $revisions ); 
     2232 
    22222233        foreach ( $revisions as $revision ) : 
    22232234                if ( ! empty( $show_autosaves ) && wp_is_post_autosave( $revision ) ) 
    22242235                                continue; 
     
    22272238                $count++; 
    22282239                // return blank data for diffs to the left of the left handle (for right handel model) 
    22292240                // 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 )) {  
     2241                if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) || 
     2242                         ( 0 != $right_handle_at && $count > $right_handle_at )) { 
    22322243                        $alltherevisions[] = array ( 
    22332244                                'ID' => $revision->ID, 
    22342245                        ); 
    2235                          
     2246 
    22362247                        continue; 
    22372248                } 
    22382249 
    2239                 $gravatar = get_avatar( $revision->post_author, 18 ); 
     2250                if ( $compare_two_mode ) { 
     2251                        $compare_to_gravatar = get_avatar( $left_revision->post_author, 24 ); 
     2252                        $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author ); 
     2253                        $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) ); 
     2254 
     2255                        $revision_from_date_author = sprintf( 
     2256                                '%s %s, %s %s (%s)', 
     2257                                $compare_to_gravatar, 
     2258                                $compare_to_author, 
     2259                                human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ), 
     2260                                __( ' ago ' ), 
     2261                                $compare_to_date 
     2262                        ); 
     2263                } 
     2264 
     2265                $gravatar = get_avatar( $revision->post_author, 24 ); 
    22402266                $author = get_the_author_meta( 'display_name', $revision->post_author ); 
    22412267                $date = date_i18n( $datef, strtotime( $revision->post_modified ) ); 
    22422268                $revision_date_author = sprintf( 
     
    22472273                        __( ' ago ' ), 
    22482274                        $date 
    22492275                ); 
     2276                $datef2 = __( 'j M @ G:i' ); 
     2277                $date2 = date_i18n( $datef2, strtotime( $revision->post_modified ) ); 
    22502278 
     2279                $revision_date_author_short = sprintf( 
     2280                        '%s <strong>%s</strong><br />%s', 
     2281                        $gravatar, 
     2282                        $author, 
     2283                        $date2 
     2284                ); 
     2285 
    22512286                $restoreaction = wp_nonce_url( 
    22522287                        add_query_arg( 
    22532288                                array( 'revision' => $revision->ID, 
     
    22612296                                'ID' => $revision->ID, 
    22622297                                'revision_date_author' => $revision_date_author, 
    22632298                                'revision_from_date_author' => $revision_from_date_author, 
     2299                                'revision_date_author_short' => $revision_date_author_short, 
    22642300                                'restoreaction' => urldecode( $restoreaction ), 
    22652301                                'revision_toload' => true 
    22662302                        ); 
  • wp-admin/js/revisions.js

     
    88                Model : Backbone.Model.extend({ 
    99                        idAttribute : 'ID', 
    1010                        urlRoot : ajaxurl +     '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id + 
    11                                 '&show_autosaves=false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce, 
     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' 
    1923                        }, 
    2024 
    2125                        url : function() { 
     
    3539                        _revisionsOptions : null, 
    3640                        _left_diff : 0, 
    3741                        _right_diff : 1, 
    38                         _autosaves : false, 
     42                        _autosaves : true, 
    3943                        _show_split_view : true, 
    4044                        _compareoneortwo : 1, 
    4145                        _left_model_loading : false,    //keep track of model loads 
    4246                        _right_model_loading : false,   //disallow slider interaction, also repeat loads, while loading 
     47                        _tickmarkView : null, //the slider tickmarks 
     48                        _keep_tooltip_open : false, 
    4349 
    4450                        //TODO add ability to arrive on specific revision 
    4551                        routes : { 
     
    5460                                var revisions_to_load = model_collection.where( { revision_toload : true } ); 
    5561                                //console.log(revisions_to_load); 
    5662                                var delay=0; 
    57                                 _.each(revisions_to_load, function( the_model ) { 
     63                                //match slider to passed revision_id 
     64                                _.each( revisions_to_load, function( the_model ) { 
     65                                        if ( the_model.get( 'ID' )  == wpRevisionsSettings.revision_id ) { 
     66                                                //console.log ( the_model.get( 'ID' ) +'-' +wpRevisionsSettings.revision_id); 
     67                                                self._right_diff = self._revisions.indexOf( the_model ) + 1; 
     68                                        } 
     69 
     70                                }); 
     71                                _.each( revisions_to_load, function( the_model ) { 
    5872                                                the_model.urlRoot = model_collection.url; 
    5973                                                _.delay( function() { 
    6074                                                        the_model.fetch( { 
     
    6377                                                                remove : false, 
    6478                                                                //async : false, 
    6579                                                                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'); 
     80                                                                        model.set( 'revision_toload', 'false' ); 
     81                                                                        //console.log(model_collection.where( { revision_toload : true } ).length); 
     82                                                                        if ( 0 === model_collection.where( { revision_toload : true } ).length ) 
     83                                                                                self.stop_model_loading_spinner(); 
     84 
     85                                                                        self._tickmarkView.render(); 
     86 
     87                                                                        var total_changes = model.get( 'lines_added' ) + model.get( 'lines_deleted'); 
     88                                                                        //      console.log(total_changes); 
     89                                                                        var scope_of_changes = 'vsmall'; 
     90                                                                        if  ( total_changes > 1 && total_changes <= 3 ) { 
     91                                                                                scope_of_changes = 'small'; 
     92                                                                        } else if(total_changes > 3 && total_changes <= 5 ) { 
     93                                                                                scope_of_changes = 'med'; 
     94                                                                        } else if(total_changes > 5 && total_changes <= 10 ) { 
     95                                                                                scope_of_changes = 'large'; 
     96                                                                        } else if(total_changes > 10 ) { 
     97                                                                                scope_of_changes = 'vlarge'; 
     98                                                                        } 
     99                                                                        model.set( 'scope_of_changes', scope_of_changes ); 
     100 
     101                                                                        if ( model.get( 'ID' ) === self._revisions.at( self._right_diff  ).get( 'ID' ) ) { //reload if current model refreshed 
    69102                                                                                self._revisionView.render(); 
    70103                                                                        } 
    71104                                                                } 
    72105                                                } ); 
    73106                                                }, delay ) ; 
    74                                                 delay = delay + 200; //stagger model loads by 200 ms to avoid hammering server with requests 
     107                                                delay = delay + 150; //stagger model loads to avoid hammering server with requests 
    75108                                        } 
    76109                                ); 
    77110                        }, 
     
    83116 
    84117                        stop_left_model_loading : function() { 
    85118                                this._left_model_loading = false; 
    86                                 $('.revisiondiffcontainer').removeClass('leftmodelloading'); 
    87119                        }, 
    88120 
    89121                        start_right_model_loading : function() { 
     
    93125 
    94126                        stop_right_model_loading : function() { 
    95127                                this._right_model_loading = false; 
     128                        }, 
     129 
     130                        stop_model_loading_spinner : function() { 
    96131                                $('.revisiondiffcontainer').removeClass('rightmodelloading'); 
     132                                $('.revisiondiffcontainer').removeClass('leftmodelloading'); 
    97133                        }, 
    98134 
    99135                        reloadmodel : function() { 
     
    111147                                                                                        '&show_split_view=' +  REVAPP._show_split_view + 
    112148                                                                                        '&nonce=' + wpRevisionsSettings.nonce; 
    113149                                self.start_right_model_loading(); 
    114                                 this._revisions.fetch({ //reload revision data 
     150                                self._revisions.fetch({ //reload revision data 
    115151                                        success : function() { 
    116152                                                self.stop_right_model_loading(); 
    117153                                                var revisioncount = self._revisions.length; 
     
    122158                                                self.reload_toload_revisions( self._revisions ); 
    123159 
    124160                                                $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this, autsaves changed 
     161                                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' ); 
     162                                                REVAPP._tickmarkView.model = self._revisions; 
     163                                                REVAPP._tickmarkView.render(); 
    125164                                        }, 
    126165 
    127166                                        error : function () { 
     
    187226                                        success : function(){ 
    188227                                                self.stop_right_model_loading(); 
    189228                                                self.reload_toload_revisions( self._right_handle_revisions ); 
     229                                                self._tickmarkView.model = self._right_handle_revisions; 
     230 
    190231                                        }, 
    191232 
    192233                                        error : function ( response ) { 
     
    215256 
    216257                                                success : function() { 
    217258                                                        self.stop_right_model_loading(); 
    218                                                         self.revisionDiffSetup(); 
     259                                                        self.completeApplicationSetup(); 
    219260                                                } 
    220261                                        }); 
    221262                                } 
    222263                                return this; 
    223264                        }, 
    224265 
    225                         revisionDiffSetup : function() { 
     266                        completeApplicationSetup : function() { 
    226267                                this._revisionView = new wp.revisions.views.View({ 
    227268                                        model : this._revisions 
    228269                                }); 
    229270                                this._revisionView.render(); 
    230                                 $( '#diff_max, #diff_maxof' ).html( this._revisions.length ); 
    231                                 $( '#diff_count' ).html( REVAPP._right_diff ); 
    232271                                $( '#slider' ).slider( 'option', 'max', this._revisions.length - 1 ); 
    233272 
    234273                                this.reload_toload_revisions( this._revisions ); 
     274 
    235275                                this._revisionsInteractions = new wp.revisions.views.Interact({ 
    236276                                        model : this._revisions 
    237277                                }); 
    238278                                this._revisionsInteractions.render(); 
    239279 
     280                                this._tickmarkView = new wp.revisions.views.Tickmarks({ 
     281                                        model : this._revisions 
     282                                }); 
     283                                this._tickmarkView.render(); 
     284                                this._tickmarkView.resetticks(); 
     285 
     286                                $( 'a.ui-slider-handle' ).attr( 'title', '' ).tooltip({ 
     287                                        track: false, 
     288                                        position: { 
     289                                                my: "top-80", 
     290                                                active: function( position, feedback ) { 
     291                                                        $( this ).css( position ); 
     292                                                        $( "<div>" ) 
     293                                                        .addClass( "arrow" ) 
     294                                                        .addClass( feedback.vertical ) 
     295                                                        .addClass( feedback.horizontal ) 
     296                                                        .appendTo( this ); 
     297                                                } 
     298                                        }, 
     299                                        show: false, 
     300                                        hide: false, 
     301                                        disabled: false 
     302                                } ); 
    240303                                /* 
     304                                .on( 'mouseup', function( event ) { 
     305                                        REVAPP._keep_tooltip_open = false; 
     306                                        $( this ).find('.ui-slider-tooltip').hide(); 
     307                                } ).on( 'mousedown', function( event ) { 
     308                                        REVAPP._keep_tooltip_open = true; 
     309                                } ).on( 'mouseout', function( event ) { 
     310                                        if ( REVAPP._keep_tooltip_open) 
     311                                                event.stopImmediatePropagation(); 
     312                                        }); 
     313                                */ 
     314                                /* 
    241315                                //Options hidden for now, moving to screen options 
    242316                                this._revisionsOptions = new wp.revisions.views.Options({ 
    243317                                        model : this._revisions 
     
    259333        } ); 
    260334 
    261335        _.extend(wp.revisions.views, { 
     336 
     337                //Ticks inside slider view 
    262338                // 
     339                Tickmarks : Backbone.View.extend({ 
     340                        el : $('#diff-slider-ticks')[0], 
     341                        tagName : 'diff-slider-ticks-view', 
     342                        className : 'diff-slider-ticks-container', 
     343                        template : wp.template('revision-ticks'), 
     344                        model : wp.revisions.Model, 
     345 
     346                        resetticks : function() { 
     347                                var slider_max = $( '#slider' ).slider( 'option', 'max'); 
     348                                var slider_width = $( '#slider' ).width(); 
     349                                var adjust_max = ( 2 === REVAPP._compareoneortwo ) ? 1 : 0; 
     350                                var tick_width = Math.floor( slider_width / ( slider_max - adjust_max ) ); 
     351 
     352                                //TODO: adjust right margins for wider ticks so they stay centered on handle stop point 
     353 
     354                                tick_width = (tick_width > 50 ) ? 50 : tick_width; 
     355                                slider_width = tick_width * (slider_max - adjust_max ) +1; 
     356 
     357                                $( '#slider' ).width( slider_width ); 
     358                                $( '.diff-slider-ticks-wrapper' ).width( slider_width ); 
     359                                $( '#diffslider' ).width( slider_width ); 
     360                                $( '#diff-slider-ticks' ).width( slider_width ); 
     361 
     362                                var a_tick_width = $( '.revision-tick' ).width(); 
     363 
     364                                if ( tick_width !==  a_tick_width ) { // is the width already set correctly? 
     365                                        $( '.revision-tick' ).each( function( ) { 
     366                                                $(this).css( 'margin-right', tick_width - 1 + 'px'); //space the ticks out using right margin 
     367                                        }); 
     368 
     369                                        if( 2 === REVAPP._compareoneortwo ) { 
     370                                                $( '.revision-tick' ).first().remove(); //TODO - remove thie check 
     371                                        } 
     372                                        $( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin 
     373                                } 
     374 
     375                        }, 
     376 
     377                        //render the options view 
     378                        render : function() { 
     379                                var self = this; 
     380 
     381                                if ( null !== self.model ) { 
     382                                        //TODO remove this initial model when ticket #16215 rolls because 
     383                                        //revisions will then include current version 
     384                                        var add_placeholder = ( 2 === REVAPP._compareoneortwo ) ? self.template('') : ''; 
     385 
     386                                        var addhtml = "";//add_placeholder; 
     387                                        _.each ( self.model.models, function ( the_model ) { 
     388 
     389                                                addhtml = addhtml + self.template ( the_model.toJSON() ); 
     390 
     391                                        }); 
     392                                        self.$el.html( addhtml ); 
     393 
     394                                } 
     395                                self.resetticks(); 
     396                                return self; 
     397                        } 
     398                }), 
     399 
     400                // 
    263401                //primary revision diff view 
    264402                // 
    265403                View : Backbone.View.extend({ 
     
    271409                        comparetwochecked : '', 
    272410                        draggingleft : false, 
    273411 
    274                         initialize : function(){ 
    275                         }, 
    276  
    277412                        // 
    278413                        //render the revisions 
    279414                        // 
     
    329464                                if ( $( 'input#comparetwo' ).is( ':checked' ) ) { 
    330465                                        REVAPP._compareoneortwo = 2 ; 
    331466                                        REVAPP.reloadleftright(); 
     467 
    332468                                } else { 
    333469                                        REVAPP._compareoneortwo = 1 ; 
    334470                                        REVAPP._revisionView.draggingleft = false; 
     
    336472                                        REVAPP.reloadmodelsingle(); 
    337473                                } 
    338474                                REVAPP._revisionsInteractions.render(); 
     475                                REVAPP._tickmarkView.render(); 
     476 
    339477                        } 
    340478                }), 
    341479 
    342480                // 
    343481                //options view for show autosaves and show split view options 
    344482                // 
     483                /* DISABLED for now 
    345484                Options : Backbone.View.extend({ 
    346485                        el : $('#backbonerevisionsoptions')[0], 
    347486                        tagName : 'revisionoptionsview', 
    348487                        className : 'revisionoptions-container', 
    349488                        template : wp.template('revisionoptions'), 
    350489 
    351                         initialize : function() { 
    352                         }, 
    353  
    354490                        //render the options view 
    355491                        render : function() { 
    356492                                var addhtml = this.template; 
     
    396532                                REVAPP.reloadmodel(); 
    397533                        } 
    398534                }), 
    399  
     535                */ 
    400536                // 
    401537                //main interactions view 
    402538                // 
     
    405541                        tagName : 'revisionvinteract', 
    406542                        className : 'revisionvinteract-container', 
    407543                        template : wp.template('revisionvinteract'), 
    408                         _restoreword : '', 
    409544 
    410545                        initialize : function() { 
    411                                 this._restoreword = $( 'input#restore' ).attr( 'value' ); 
    412546                        }, 
    413547 
    414                         reset_restore_button : function() { 
    415                                 $( 'input#restore' ).attr( 'value', this._restoreword + ' ' + REVAPP._revisions.at( REVAPP._right_diff - 1 ).get( 'ID' ) ); 
    416                         }, 
    417  
    418548                        render : function() { 
    419549                                var self = this; 
    420550 
    421551                                var addhtml = this.template; 
    422552                                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(); 
    427553 
    428554                                var modelcount = REVAPP._revisions.length; 
    429555 
     
    431557                                if ( 1 === REVAPP._compareoneortwo ) { 
    432558                                        //set up the slider with a single handle 
    433559                                        slider.slider({ 
    434                                                 value : REVAPP._right_diff-1, 
    435                                                 min : 0, 
    436                                                 max : modelcount-1, 
    437                                                 step : 1, 
     560                                                value: REVAPP._right_diff-1, 
     561                                                min: 0, 
     562                                                max: modelcount-1, 
     563                                                step: 1, 
    438564 
     565 
    439566                                                //slide interactions for one handles slider 
    440567                                                slide : function( event, ui ) { 
    441                                                         if ( REVAPP._right_model_loading ) //left model stoll loading, prevent sliding left handle 
    442                                                                                 return false; 
    443568 
    444569                                                        REVAPP._right_diff =( ui.value+1 ); 
    445                                                         $( '#diff_count' ).html( REVAPP._right_diff ); 
    446570                                                        REVAPP._revisionView.render(); 
    447                                                         self.reset_restore_button(); 
    448                                                 } 
     571                                                        /* 
     572                                                        $( 'a.ui-slider-handle' ).tooltip( { 
     573                                                                content: REVAPP._revisions.at( ui.value ).get( 'revision_date_author_short' ), 
     574                                                                position: { 
     575                                                                my: "top-65", 
     576                                                                using: function( position, feedback ) { 
     577                                                                        $( this ).css( position ); 
     578                                                                        $( "<div>" ) 
     579                                                                        .addClass( "arrow" ) 
     580                                                                        .addClass( feedback.vertical ) 
     581                                                                        .addClass( feedback.horizontal ) 
     582                                                                        .appendTo( this ); 
     583                                                                        } 
     584                                                                } 
     585                                                        });//.trigger( 'close' ).trigger( 'open' ); 
     586*/ 
     587                                                        } 
    449588                                        }); 
    450589                                        $( '.revisiondiffcontainer' ).removeClass( 'comparetwo' ); 
     590 
    451591                                } else { //comparing more than one, eg 2 
    452592                                        //set up the slider with two handles 
    453593                                        slider.slider({ 
     
    467607                                                                                return false; 
    468608 
    469609                                                                        if ( REVAPP._revisionView.model !== REVAPP._left_handle_revisions && 
    470                                                                                         null !== REVAPP._left_handle_revisions ) 
     610                                                                                        null !== REVAPP._left_handle_revisions ) { 
    471611                                                                                REVAPP._revisionView.model = REVAPP._left_handle_revisions; 
    472  
     612                                                                                REVAPP._tickmarkView.model = REVAPP._left_handle_revisions; 
     613                                                                                REVAPP._tickmarkView.render(); 
     614                                                                        } 
    473615                                                                        REVAPP._revisionView.draggingleft = true; 
    474616                                                                        REVAPP._left_diff_start = ui.values[ 0 ]; 
    475617                                                                        break; 
    476618 
    477619                                                                case 2: //right 
    478                                                                         if ( REVAPP._right_model_loading ) //right model stoll loading, prevent sliding right handle 
    479                                                                                 return false; 
    480620 
    481621                                                                        //one extra spot at left end when comparing two 
    482622                                                                        if ( REVAPP._revisionView.model !== REVAPP._right_handle_revisions && 
    483                                                                                         null !== REVAPP._right_handle_revisions ) 
     623                                                                                        null !== REVAPP._right_handle_revisions ) { 
    484624                                                                                REVAPP._revisionView.model = REVAPP._right_handle_revisions; 
     625                                                                                REVAPP._tickmarkView.model = REVAPP._right_handle_revisions; 
     626                                                                                REVAPP._tickmarkView.render(); 
     627                                                                        } 
    485628 
     629 
    486630                                                                        REVAPP._revisionView.draggingleft = false; 
    487631                                                                        REVAPP._right_diff_start = ui.values[ 1 ]; 
    488632                                                                        break; 
     
    505649                                                                        break; 
    506650 
    507651                                                                case 2: //right 
    508                                                                         if ( REVAPP._right_model_loading ) //right model still loading, prevent sliding right handle 
    509                                                                                 return false; 
    510  
    511652                                                                        REVAPP._right_diff = ui.values[ 1 ] - 1 ; 
    512653                                                                        break; 
    513654                                                        } 
    514655 
    515                                                         $( '#diff_count' ).html( REVAPP._right_diff ); 
    516  
    517656                                                        if ( 0 === REVAPP._left_diff ) { 
    518657                                                                $( '.revisiondiffcontainer' ).addClass( 'currentversion' ); 
    519658 
    520659                                                        } else { 
    521660                                                                $( '.revisiondiffcontainer' ).removeClass( 'currentversion' ); 
    522                                                                 $( '#diff_left_count_inner' ).html( REVAPP._left_diff ); 
    523661                                                        } 
    524662 
    525                                                         REVAPP._revisionView.render(); //render the diff view 
    526                                                         self.reset_restore_button(); 
     663                                                        REVAPP._revisionView.render(); 
     664 
    527665                                                }, 
    528666 
    529667                                                //when the user stops sliding  in 2 handle mode, recalculate diffs 
     
    537675                                                                switch ( index ) { 
    538676                                                                        case 1: //left 
    539677                                                                                //left handle dragged & changed, reload right handle model 
    540                                                                                 if ( ! ( REVAPP._left_diff_start === ui.values[ 0 ] || REVAPP._left_model_loading ) ) 
     678                                                                                if ( REVAPP._left_diff_start !== ui.values[ 0 ] ) 
    541679                                                                                        REVAPP.reloadright(); 
    542680 
    543681                                                                                break; 
    544682 
    545683                                                                        case 2: //right 
    546684                                                                                //right handle dragged & changed, reload left handle model if changed 
    547                                                                                 if ( ! ( REVAPP._right_diff_start === ui.values[ 1 ] || REVAPP._right_model_loading ) ) { 
     685                                                                                if ( REVAPP._right_diff_start !== ui.values[ 1 ] ) 
    548686                                                                                        REVAPP.reloadleft(); 
    549                                                                                 } 
     687 
    550688                                                                                break; 
    551689                                                                } 
    552690                                                        } 
     
    571709 
    572710                                REVAPP._revisionView.render(); 
    573711 
    574                                 $( '#diff_count' ).html( REVAPP._right_diff ); 
    575712                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' ); 
    576                                 this.reset_restore_button(); 
    577713                        }, 
    578714 
    579715                        //go the the previous revision 
     
    583719 
    584720                                REVAPP._revisionView.render(); 
    585721 
    586                                 $( '#diff_count' ).html( REVAPP._right_diff ); 
    587722                                $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' ); 
    588                                 this.reset_restore_button(); 
    589723                        } 
    590724                }) 
    591725        }); 
  • 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 #difftitlefrom, 
     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, 
     3739.comparetwo.currentversion #diff_from_current_revision, 
    37223740.leftmodelloading #modelsloading, 
    37233741.rightmodelloading #modelsloading, 
    37243742.leftmodelloading #modelsloading .spinner, 
    37253743.rightmodelloading #modelsloading .spinner, 
    3726 { 
    3727         display: inline; 
     3744.comparetwo #diffsubheader.diff-left-hand-meta-row { 
     3745        display: block; 
    37283746} 
    37293747 
     3748.revision-tick { 
     3749        width: 1px; 
     3750        float: left; 
     3751        margin-right: 15px; 
     3752        height: 11px; 
     3753        padding: 0; 
     3754        margin-left: 0px; 
     3755} 
     3756 
     3757.revision-tick.revision-scopeofchanges-vsmall { 
     3758                width: 1px; 
     3759                background-color: #aaa; 
     3760} 
     3761 
     3762.revision-tick.revision-scopeofchanges-small { 
     3763                width: 2px; 
     3764                background-color: #aaa; 
     3765                margin-left: -1px; 
     3766} 
     3767 
     3768.revision-tick.revision-scopeofchanges-med { 
     3769                width: 3px; 
     3770                margin-left: -2px; 
     3771                background-color: #666; 
     3772} 
     3773 
     3774.revision-tick.revision-scopeofchanges-large { 
     3775                width: 4px; 
     3776                margin-left: -3px; 
     3777                background-color: #333; 
     3778} 
     3779 
     3780.revision-tick.revision-scopeofchanges-vlarge { 
     3781                margin-left: -3px; 
     3782                width: 4px; 
     3783                background-color: #111; 
     3784} 
     3785 
    37303786.diff-loading { 
    37313787        margin-top: 50px; 
    37323788        width: 100%; 
     
    37413797        float: none; 
    37423798} 
    37433799 
    3744 #difftitlefrom { 
    3745         float: left; 
    3746         display: none; 
    3747 } 
    3748  
    37493800#modelsloading { 
    37503801        float: right; 
     3802        position: absolute; 
    37513803        line-height: 30px; 
    37523804        display: none; 
    37533805        clear: none; 
    3754         margin: 0; 
     3806        right: 170px; 
    37553807        margin-top: -40px; 
    37563808} 
    37573809 
    37583810#modelsloading .spinner { 
    37593811        float: left; 
    3760  } 
     3812} 
    37613813 
     3814.ui-tooltip-content img { 
     3815        float: left; 
     3816        margin-right: 5px; 
     3817} 
     3818/*  jQuery UI Tooltip 1.10.1 */ 
     3819 
     3820.ui-tooltip { 
     3821        padding: 8px; 
     3822        position: absolute; 
     3823        z-index: 9999; 
     3824        max-width: 300px; 
     3825        min-width: 130px; 
     3826} 
     3827 
     3828body .ui-tooltip { 
     3829        border-width: 1px; 
     3830} 
     3831 
     3832.ui-tooltip, .arrow:after { 
     3833        border: 1px solid #d7d7d7; 
     3834} 
     3835 
     3836.ui-tooltip { 
     3837        padding: 5px 10px; 
     3838} 
     3839 
     3840.arrow { 
     3841        width: 70px; 
     3842        height: 16px; 
     3843        overflow: hidden; 
     3844        position: absolute; 
     3845        left: 50%; 
     3846        margin-left: -35px; 
     3847        bottom: -16px; 
     3848        z-index: 99999; 
     3849 
     3850} 
     3851 
     3852.arrow.top { 
     3853        top: -16px; 
     3854        bottom: auto; 
     3855} 
     3856 
     3857.arrow.left { 
     3858        left: 20%; 
     3859} 
     3860 
     3861.arrow:after { 
     3862        content: ""; 
     3863        position: absolute; 
     3864        left: 20px; 
     3865        top: -20px; 
     3866        width: 25px; 
     3867        height: 25px; 
     3868        background-color: #FFF; 
     3869        -webkit-transform: rotate(45deg); 
     3870        -moz-transform: rotate(45deg); 
     3871        -ms-transform: rotate(45deg); 
     3872        -o-transform: rotate(45deg); 
     3873        tranform: rotate(45deg); 
     3874} 
     3875 
     3876.arrow.top:after { 
     3877        bottom: -20px; 
     3878        top: auto; 
     3879} 
     3880 
    37623881 /* jQuery UI Slider */ 
    37633882 
    37643883.wp-slider.ui-slider { 
     
    37733892.wp-slider .ui-slider-handle { 
    37743893        position: absolute; 
    37753894        z-index: 2; 
    3776         width: 1.2em; 
    3777         height: 1.2em; 
    3778         border-width: 1px; 
    3779         border-style: solid; 
    3780         border-radius: 3px; 
     3895        width: 17px; 
     3896        height: 17px; 
     3897        border: none; 
    37813898} 
    37823899 
    37833900.wp-slider .ui-slider-range {