WordPress.org

Make WordPress Core

Changeset 23769


Ignore:
Timestamp:
03/21/2013 03:54:11 PM (7 years ago)
Author:
westi
Message:

Revisions: UI Update.

  • Refines the UI to make it clearer and easier to use
  • Introduces weighted tickmarks
  • Fixes comparison bugs.

See #23497 props adamsilverstein

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/css/colors-fresh.css

    r23727 r23769  
    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));
     
    185184    background-image: linear-gradient(to top, #ececec, #f9f9f9);
    186185}
     186
     187
    187188
    188189.widget .widget-top,
     
    13791380}
    13801381
     1382.diff-to-title {
     1383    color: #0080AA;
     1384}
     1385
    13811386#diffsubheader{
    13821387    background-color: #f7f7f7;
    13831388}
    13841389
     1390.comparetwo#diffsubheader.diff-left-hand-meta-row {
     1391    background-color: #fcfcfc;
     1392}
     1393
     1394.revision-tick.revision-toloadtrue {
     1395    background-color: #9999cc;
     1396    background: url(../images/wpspin_light.gif) no-repeat;
     1397    background-position: middle;
     1398    background-size: 1px 10px;
     1399}
     1400
     1401.revision-tick.revision-toloadfalse {
     1402    background-color: #aaa;
     1403}
     1404
    13851405#att-info {
    13861406    background-color: #e4f2Fd;
     1407}
     1408
     1409body .ui-tooltip {
     1410    border-color: #d7d7d7;
     1411    background-color: #fff;
    13871412}
    13881413
     
    13941419
    13951420.wp-slider .ui-slider-handle {
    1396     border-color: #d7d7d7;
     1421    border-color: none;
     1422}
     1423
     1424.wp-slider .ui-slider-handle.left-handle {
     1425background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAABAlBMVEXR2uHM1dzCzNW4ydOzxtSxw9Gqwc+bs7+Ss8SVscaZrLqQq7yNrMCKqr+EqsGDqb6GpruCpbl8pL15o7t1n7hwnLVika1djq5giqJXiqlYiqNJgp9ieYlDfqA/epw3dpk7dpg2dpo3dZo6dZc4dJY4dJg3cZY2bpE1bosxaIYxZIMrYX0tXnwtXHYsWHEnVW0mTmglT2cjTGIhRVsfQlYaN0kYM0QULDgTKTYRJzQTJzINISoLHCYNGyYKGCEIFxwJEhcJEhsHEhQDDAkHCg8EBwwCBwoEBAQBAwIBAQEBAQMAAgEBAAAAAAQAAQMBAAIAAAICAAEBAQAAAQAAAAD///+62qV+AAAAVnRSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEpNbNkAAAAJcEhZcwAACusAAArrAYKLDVoAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACbSURBVBiVVcvVDoNQEEXRqbu781B3d/dQQknh/P+vtBQKt/tpsnKGEOW4klkQFFvIsqwYzUJUvCts1wJl9gIruxT5hpLEyMBLKG+Z0ToJgrPLTDqOjyCxNN7mcahiaz50uDWsX0Fk+tKahKGJpX55qp1qpAsCY0lt5MdPUD2KoniowBRXn+f5Xp4RZDfCKg1W0D637P/iznn06w0M+083NZW9ZwAAAABJRU5ErkJggg==);
     1426}
     1427
     1428.wp-slider .ui-slider-handle.ui-state-active.left-handle {
     1429background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAAzFBMVEXZ5ejU4eXM3ODG2NzE1tvB1Nq90deux86sxs2qxcynwsqlwcmjwMihvseevMWdvMSbusOXuMGTtb6IrbiHrLeCqbSBqLN/p7J3oa11oKxzn6tvnKhrmaZqmKVpmKVol6RllaJhk6Bej51djptaiZZZiJVYhpNWg5BUf4xSfYlRfIhPeYRMdYBKcXxFaXNDZnA+X2g9XmY8XGU4VV43VFw2U1s0UFgyTVQxS1IwSVAuR00sREosQ0orQkgqQEYpPkQoPkMoPUMoPUL///8pY4MvAAAARHRSTlP/////////////////////////////////////////////////////////////////////////////////////////AHHSjxIAAAAJcEhZcwAACusAAArrAYKLDVoAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACUSURBVBiVVctXEoJQEETRMaIo5qwF5hwxYOY9ev97EiQ43q+pUz2EYk9n5UElU0rpRO016toO79WhxlVysWqkroRgsswSjAsbnasgpGdsMk25gooZvR3K8CQxCuU9jH8FhZ3022rwJTZ4CK9nnwJBbiO8yVpFKDButm1bOn6iLFyZt5igeZLHOrhgfJ8k/yXTVoLrAxo1P5iCdUg7AAAAAElFTkSuQmCC);
     1430}
     1431
     1432.wp-slider .ui-slider-handle {
     1433    /* Slider drag Triangle CSS */
     1434background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA8FBMVEU2dZipwNBJl8VGmcX///+EpLlBgqpymrNFjru3ydNWiKs6eZzY4uuRrL08faPL3OZBjLSBqsCTssRHlMJEf59cj657o7xKl8OEqsE9gag2dJtEkb+ct8iZs8BHmMePq8BejKZAiK5llK5FjrlJl8c6dZdGl8avxdBJlcZ4nbc6ep6XrbpKgZ+Lqr5KmcdIkbqsws1Gk8E+f6c4dptaiadFirRKl8V8pblImcNIl8eGpruVscZCh7BMlsdIlcFImchEkbs9eJpCjbdGjbk8fJ84dp02dpo8gatMlsM2dps8faVAg61Ej71Ek75IksFIlcOaLCw7AAAAUHRSTlP/////AP///////////////////////////////////////////////////////////////////////////////////////////////////xB6m5UAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVcxZD8FAGIXhjxzUVktQgqKmo7ZYhkgsiS1tQuj//zeomo736uS5OFSo2W6UXc/R5hxXW5foxDlXqUKZx0GFZpXynuM4kXhjgjgyJkGzQIjpvi9Fx1uQ0iQUh4GkR/Ini0CQ2IfQ24YC4X8T+Mn0zj8lO1IgnqZpzlxE0m4YhrFsKYJVn126UGV+W1wHf4LdpByuF0goFKI7tv/dAAAAAElFTkSuQmCC);
    13971435}
    13981436
    13991437.wp-slider .ui-slider-handle.ui-state-hover,
    14001438.wp-slider .ui-slider-handle.ui-state-focus {
    1401     border-color: #aaa;
     1439    border-color: none;
     1440    outline: none;
    14021441}
    14031442
    14041443.wp-slider .ui-slider-handle.ui-state-active {
    1405     border-color: #aaa;
    1406     background: #eee;
    1407     background-image: -webkit-gradient(linear, left bottom, left top, from(#f9f9f9), to(#ececec));
    1408     background-image: -webkit-linear-gradient(bottom, #f9f9f9, #ececec);
    1409     background-image:    -moz-linear-gradient(bottom, #f9f9f9, #ececec);
    1410     background-image:      -o-linear-gradient(bottom, #f9f9f9, #ececec);
    1411     background-image: linear-gradient(to top, #f9f9f9, #ececec);
     1444    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA51BMVEUgZpDkzc0yd6f///8mcqFJm8cjbZZzr80mg78lh8BDk8UngLl+s9AmfKk4hrGeweBaoMhNlMORwt4nd6Zdm8BAjMEnf7RYmsMkb50mhsFWlsYhZ5ImhbwocZg0f61Lk8E9i7twqNBgo8VSmMUofLBcm8o3faUpfK8mh8Aia5MgZpFMmcgpeapDmcJjo8sliMEmh70nhLkkcKAqgLF2sc8sc5ojbZsngrMkh8EnfKw1eaUjbpkkapImeKQgaJAohb0mh8MmhcMng7kkcKEpf68iZ48haJMmhb8kicEmc6MibJkia5UnhLsw1mWvAAAATXRSTlP/AP8A/////////////////////////////////////////////////////////////////////////////////////////////////9/iR18AAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVc15D8FAEIfh+Ymj6761LIrSiCNVVyjbRGgifP/PQ6q22/evyZPJDNXzD6G0qNDq5PtO3DJDFyfRpk+po2Eo0h5Qx9U0LRa3SejdlR2rDMLI41yKh6/AtOSzUiuU4kvemSMUDBsRXGuRIHj/CvCXyTNcSXelQBQYY1uBWMY651xfK4KzbdgzqJI73LK7hGC6r0bTB5apIhqIH/YIAAAAAElFTkSuQmCC);
    14121445}
    14131446
  • trunk/wp-admin/css/wp-admin.css

    r23765 r23769  
    35983598}
    35993599
     3600.diff-from-title,
     3601.diff-to-title {
     3602    font-size: 14px;
     3603    font-weight: bold;
     3604    width:60px;
     3605    text-align: right;
     3606    float: left;
     3607    margin-right: 5px;
     3608}
     3609
    36003610.revisiondiffcontainer {
    36013611    width: 96%;
     
    36063616}
    36073617
    3608 #diffrestore,
    3609 #diffnext,
    3610 #diffcancel {
     3618#diffnext {
    36113619    float: right;
    36123620    margin-right: 5px;
     3621}
     3622
     3623#diffrestore input{
     3624    margin-left: 10px;
    36133625}
    36143626
     
    36243636#diffprevious,
    36253637#diffnext {
    3626     margin-top: 7px;
    36273638    height: 30px;
    36283639}
     
    36363647    border-bottom: 1px solid #dfdfdf;
    36373648    width: 100%;
    3638     height: 45px;
    3639     line-height: 45px;
    3640     padding-top: 10px;
    3641 }
    3642 
    3643 #diffsubheader {
    3644     border-bottom: 1px solid #dfdfdf;
     3649    height: 40px;
     3650    line-height: 40px;
     3651    padding-top: 30px;
     3652}
     3653
     3654#diffsubheader,.diff-left-hand-meta-row {
    36453655    width: 100%;
    36463656    height:35px;
    36473657    line-height: 35px;
    3648 }
    3649 
    3650 #diffslider {
     3658    display: block;
     3659}
     3660
     3661#diffslider{
    36513662    width: 70%;
    36523663    margin-left: auto;
    36533664    margin-right: auto;
    36543665    text-align: center;
    3655     height: 3.5em;
     3666    height: 0.8em;
     3667    margin-top: 20px;
     3668}
     3669
     3670.diff-slider-ticks-wrapper {
     3671    margin-left: auto;
     3672    margin-right: auto;
     3673    text-align: center;
     3674}
     3675
     3676#diff-slider-ticks {
     3677    position: absolute;
     3678    margin-top: 50px;
     3679    z-index: 1;
    36563680}
    36573681
     
    37233747#comparetworevisions {
    37243748    float: right;
     3749    position: absolute;
     3750    top: 10px;
     3751    right: 10px;
    37253752    line-height: 35px;
    37263753    padding-right: 5px;
     
    37323759
    37333760#difftitle img,
    3734 #difftitlefrom img {
     3761#difftitlefrom img,
     3762.post-revisions li img {
    37353763    vertical-align: middle;
    37363764    margin-left: 5px;
     3765}
     3766.post-revisions li {
     3767    vertical-align: middle;
     3768    height: 28px;
    37373769}
    37383770
     
    37583790.comparetwo #diffnext,
    37593791span#diff_left_current_revision,
    3760 span#diff_from_current_revision,
     3792#diff_from_current_revision,
    37613793.currentversion span#diff_left_count,
    37623794.currentversion span#diff_left_count_inner,
    3763 .currentversion #difftitlefrom,
    3764 .comparetwo.currentversion #difftitlefrom {
     3795.comparetwo.currentversion #diff_from_current_revision,
     3796#diffsubheader.diff-left-hand-meta-row {
    37653797    display: none;
    37663798}
     
    37703802span#diff_left_count_inner,
    37713803.comparetwo #difftitlefrom,
    3772 .comparetwo.currentversion span#diff_from_current_revision,
    37733804.leftmodelloading #modelsloading,
    37743805.rightmodelloading #modelsloading,
    37753806.leftmodelloading #modelsloading .spinner,
    37763807.rightmodelloading #modelsloading .spinner,
    3777 {
    3778     display: inline;
     3808.comparetwo #diffsubheader.diff-left-hand-meta-row {
     3809    display: block;
     3810}
     3811
     3812.revision-tick {
     3813    width: 1px;
     3814    float: left;
     3815    margin-right: 15px;
     3816    height: 11px;
     3817    padding: 0;
     3818    margin-left: 0px;
     3819}
     3820
     3821.revision-tick.revision-scopeofchanges-vsmall {
     3822        width: 1px;
     3823        background-color: #aaa;
     3824}
     3825
     3826.revision-tick.revision-scopeofchanges-small {
     3827        width: 2px;
     3828        background-color: #aaa;
     3829        margin-left: -1px;
     3830}
     3831
     3832.revision-tick.revision-scopeofchanges-med {
     3833        width: 3px;
     3834        margin-left: -2px;
     3835        background-color: #666;
     3836}
     3837
     3838.revision-tick.revision-scopeofchanges-large {
     3839        width: 4px;
     3840        margin-left: -3px;
     3841        background-color: #333;
     3842}
     3843
     3844.revision-tick.revision-scopeofchanges-vlarge {
     3845        margin-left: -3px;
     3846        width: 4px;
     3847        background-color: #111;
     3848        left: 1;
    37793849}
    37803850
     
    37933863}
    37943864
    3795 #difftitlefrom {
    3796     float: left;
    3797     display: none;
    3798 }
    3799 
    38003865#modelsloading {
    38013866    float: right;
     3867    position: absolute;
    38023868    line-height: 30px;
    38033869    display: none;
    38043870    clear: none;
    3805     margin: 0;
     3871    right: 170px;
    38063872    margin-top: -40px;
    38073873}
     
    38093875#modelsloading .spinner {
    38103876    float: left;
    3811  }
     3877}
     3878
     3879.ui-tooltip-content img {
     3880    float: left;
     3881    margin-right: 5px;
     3882}
     3883
     3884
     3885
     3886/*  jQuery UI Tooltip 1.10.1 */
     3887
     3888.ui-tooltip {
     3889    padding: 8px;
     3890    position: absolute;
     3891    z-index: 9999;
     3892    max-width: 300px;
     3893    min-width: 130px;
     3894}
     3895
     3896body .ui-tooltip {
     3897    border-width: 1px;
     3898}
     3899
     3900.ui-tooltip, .arrow:after {
     3901    border: 1px solid #d7d7d7;
     3902}
     3903
     3904.ui-tooltip {
     3905    padding: 5px 10px;
     3906}
     3907
     3908.arrow {
     3909    width: 70px;
     3910    height: 16px;
     3911    overflow: hidden;
     3912    position: absolute;
     3913    left: 50%;
     3914    margin-left: -35px;
     3915    bottom: -16px;
     3916    z-index: 99999;
     3917
     3918}
     3919
     3920.arrow.top {
     3921    top: -16px;
     3922    bottom: auto;
     3923}
     3924
     3925.arrow.left {
     3926    left: 20%;
     3927}
     3928
     3929.arrow:after {
     3930    content: "";
     3931    position: absolute;
     3932    left: 20px;
     3933    top: -20px;
     3934    width: 25px;
     3935    height: 25px;
     3936    background-color: #FFF;
     3937    -webkit-transform: rotate(45deg);
     3938    -moz-transform: rotate(45deg);
     3939    -ms-transform: rotate(45deg);
     3940    -o-transform: rotate(45deg);
     3941    tranform: rotate(45deg);
     3942}
     3943
     3944.arrow.top:after {
     3945    bottom: -20px;
     3946    top: auto;
     3947}
    38123948
    38133949 /* jQuery UI Slider */
     
    38253961    position: absolute;
    38263962    z-index: 2;
    3827     width: 1.2em;
    3828     height: 1.2em;
    3829     border-width: 1px;
    3830     border-style: solid;
    3831     border-radius: 3px;
     3963    width: 17px;
     3964    height: 17px;
     3965    border: none;
    38323966}
    38333967
  • trunk/wp-admin/includes/ajax-actions.php

    r23743 r23769  
    21242124    $datef = _x( 'j F, Y @ G:i:s', 'revision date format');
    21252125
     2126    $left_revision = get_post( $compare_to );
     2127
    21262128    //single model fetch mode
     2129    //return the diff of a single revision comparison
    21272130    if ( 0 != $single_revision_id ) {
    2128         $left_revision = get_post( $compare_to );
    21292131        $right_revision = get_post( $single_revision_id );
    21302132
     2133        //
     2134        //make sure the left revision is the most recent
     2135        //
     2136
     2137        if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) {
     2138            $temp = $left_revision;
     2139            $left_revision = $right_revision;
     2140            $right_revision = $temp;
     2141        }
     2142
     2143        $linesadded=0;
     2144        $linesdeleted=0;
     2145
     2146        //
     2147        //compare from left to right, passed from application
     2148        //
     2149        $content='';
     2150        foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
     2151            $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' );
     2152            $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' );
     2153
     2154            add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' );
     2155
     2156            $args = array();
     2157
     2158            if ( ! empty( $show_split_view ) )
     2159                 $args = array( 'show_split_view' => true );
     2160
     2161            $diff = wp_text_diff_with_count( $left_content, $right_content, $args );
     2162
     2163            if ( isset( $diff[ 'html' ] ) )
     2164                $content .= $diff[ 'html' ];
     2165
     2166            if ( isset( $diff[ 'linesadded' ] ) )
     2167                $linesadded = $linesadded + $diff[ 'linesadded' ];
     2168
     2169            if ( isset( $diff[ 'linesdeleted' ] ) )
     2170                $linesdeleted = $linesdeleted + $diff[ 'linesdeleted' ];
     2171
     2172
     2173        }
     2174        $content = '' == $content ? __( 'No difference' ) : $content;
     2175
     2176        $alltherevisions = array (
     2177            'revisiondiff' => $content,
     2178            'lines_deleted' => $linesdeleted,
     2179            'lines_added' => $linesadded
     2180        );
     2181        echo json_encode( $alltherevisions );
     2182        exit();
     2183    } //end single model fetch
     2184
     2185    //fetch the list of revisions available
     2186
     2187    //if we are comparing two revisions, the first 'revision' represented by the leftmost
     2188    //slider position is the current revision, prepend a comparison to this revision
     2189    if ( ! wp_first_revision_matches_current_version( $post_id ) ) //revisions don't have current version
     2190        array_unshift( $revisions, get_post( $post_id ) ) ;
     2191    //$revisions->append ( get_post( $post_id ) );
     2192    //error_log( var_dump( $revisions ));
     2193    $count = -1;
     2194
     2195    //reverse the list to start with oldes revision
     2196    $revisions = array_reverse( $revisions );
     2197
     2198    $previous_revision_id = 0;
     2199    foreach ( $revisions as $revision ) :
     2200        //error_log( ( $show_autosaves  ));
     2201        if ( empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
     2202                continue;
     2203
     2204        $revision_from_date_author = '';
     2205        $count++;
     2206        // return blank data for diffs to the left of the left handle (for right handel model)
     2207        // or to the right of the right handle (for left handel model)
     2208        if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) ||
     2209             ( 0 != $right_handle_at && $count > $right_handle_at )) {
     2210            $alltherevisions[] = array (
     2211                'ID' => $revision->ID,
     2212            );
     2213            continue;
     2214        }
     2215
    21312216        if ( $compare_two_mode ) {
    2132             $compare_to_gravatar = get_avatar( $left_revision->post_author, 18 );
     2217            $compare_to_gravatar = get_avatar( $left_revision->post_author, 24 );
    21332218            $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author );
    21342219            $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
     
    21442229        }
    21452230
    2146         //
    2147         //make sure the left revision is the most recent
    2148         //
    2149         if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) {
    2150             $temp = $left_revision;
    2151             $left_revision = $right_revision;
    2152             $right_revision = $temp;
    2153         }
    2154 
    2155         //
    2156         //compare from left to right, passed from application
    2157         //
    2158         $content='';
    2159         foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
    2160             $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' );
    2161             $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' );
    2162 
    2163             add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' );
    2164 
    2165             $args = array();
    2166 
    2167             if ( ! empty( $show_split_view ) )
    2168                  $args = array( 'show_split_view' => true );
    2169 
    2170             $content .= wp_text_diff( $left_content, $right_content, $args );
    2171         }
    2172             $content = '' == $content ? __( 'No difference' ) : $content;
    2173             $alltherevisions = array (
    2174                 'revisiondiff' => $content
    2175             );
    2176         echo json_encode( $alltherevisions );
    2177         exit();
    2178     }
    2179 
    2180     //if we are comparing two revisions, the first 'revision' represented by the leftmost
    2181     //slider position is the current revision, prepend a comparison to this revision
    2182     if ( $compare_two_mode )
    2183         array_unshift( $revisions, get_post( $post_id ) );
    2184        
    2185     $count = -1;
    2186 
    2187     foreach ( $revisions as $revision ) :
    2188         if ( ! empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
    2189                 continue;
    2190 
    2191         $revision_from_date_author = '';
    2192         $count++;
    2193         // return blank data for diffs to the left of the left handle (for right handel model)
    2194         // or to the right of the right handle (for left handel model)
    2195         if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) ||
    2196              ( 0 != $right_handle_at && $count > $right_handle_at )) {
    2197             $alltherevisions[] = array (
    2198                 'ID' => $revision->ID,
    2199             );
    2200            
    2201             continue;
    2202         }
    2203 
    2204         $gravatar = get_avatar( $revision->post_author, 18 );
     2231        $gravatar = get_avatar( $revision->post_author, 24 );
    22052232        $author = get_the_author_meta( 'display_name', $revision->post_author );
    22062233        $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
     
    22142241        );
    22152242
     2243        $autosavef = __( '%1$s [Autosave]' );
     2244        $currentf  = __( '%1$s [Current Revision]' );
     2245
     2246        if ( ! $post = get_post( $post_id))
     2247            exit();
     2248
     2249        if ( $left_revision->post_modified === $post->post_modified )
     2250            $revision_from_date_author = sprintf( $currentf, $revision_from_date_author );
     2251        elseif ( wp_is_post_autosave( $left_revision ) )
     2252            $revision_from_date_author = sprintf( $autosavef, $revision_from_date_author );
     2253
     2254        if ( $revision->post_modified === $post->post_modified )
     2255            $revision_date_author = sprintf( $currentf, $revision_date_author );
     2256        elseif ( wp_is_post_autosave( $revision ) )
     2257            $revision_date_author = sprintf( $autosavef, $revision_date_author );
     2258
     2259        $date_short_format = __( 'j M @ G:i' );
     2260        $date_short = date_i18n( $date_short_format, strtotime( $revision->post_modified ) );
     2261
     2262        $revision_date_author_short = sprintf(
     2263            '%s <strong>%s</strong><br />%s',
     2264            $gravatar,
     2265            $author,
     2266            $date_short
     2267        );
     2268
    22162269        $restoreaction = wp_nonce_url(
    22172270            add_query_arg(
     
    22202273                    admin_url( 'revision.php' )
    22212274            ),
    2222             "restore-post_{$compare_to}|{$revision->ID}"
     2275            "restore-post_{$revision->ID}"
    22232276        );
    2224 
    2225         $alltherevisions[] = array (
     2277        // if this is a left handled calculation swap data
     2278        if ( 0 != $right_handle_at ) {
     2279            $tmp = $revision_from_date_author;
     2280            $revision_from_date_author = $revision_date_author;
     2281            $revision_date_author = $tmp;
     2282        }
     2283        if ( ( $compare_two_mode || 0 !== $previous_revision_id ) ) {
     2284            $alltherevisions[] = array (
    22262285                'ID' => $revision->ID,
    22272286                'revision_date_author' => $revision_date_author,
    22282287                'revision_from_date_author' => $revision_from_date_author,
     2288                'revision_date_author_short' => $revision_date_author_short,
    22292289                'restoreaction' => urldecode( $restoreaction ),
    2230                 'revision_toload' => true
     2290                'revision_toload' => true,
     2291                'previous_revision_id' => $previous_revision_id
    22312292            );
     2293        }
     2294        $previous_revision_id = $revision->ID;
    22322295
    22332296    endforeach;
  • trunk/wp-admin/js/revisions.js

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

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

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

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

    r23735 r23769  
    405405    }
    406406}
     407
     408/**
     409 * Determines if the specified post's most recent revision matches the post (by checking post_modified).
     410 *
     411 * @package WordPress
     412 * @subpackage Post_Revisions
     413 * @since 3.6.0
     414 *
     415 * @param int|object $post Post ID or post object.
     416 * @return bool false if not a match, otherwise true.
     417 */
     418function wp_first_revision_matches_current_version( $post ) {
     419
     420        if ( ! $post = get_post( $post ) )
     421                return false;
     422
     423        if ( ! $revisions = wp_get_post_revisions( $post->ID ) )
     424                return false;
     425
     426        $last_revision = array_shift( $revisions );
     427
     428        if ( ! ($last_revision->post_modified == $post->post_modified ) )
     429                return false;
     430
     431        return true;
     432}
  • trunk/wp-includes/script-loader.php

    r23729 r23769  
    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 );
Note: See TracChangeset for help on using the changeset viewer.