diff --git a/wp-admin/css/wp-admin.css b/wp-admin/css/wp-admin.css
index a9c5070c17..6e9ef72883 100644
--- a/wp-admin/css/wp-admin.css
+++ b/wp-admin/css/wp-admin.css
@@ -3722,10 +3722,25 @@ span#diff_left_count_inner,
.leftmodelloading #modelsloading,
.rightmodelloading #modelsloading,
.leftmodelloading #modelsloading .spinner,
-.rightmodelloading #modelsloading .spinner {
+.rightmodelloading #modelsloading .spinner,
+{
display: inline;
}
+.diff-loading {
+ margin-top: 50px;
+ width: 100%;
+ height: 200px;
+}
+.diff-loading .spinner
+{
+ clear: both;
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+ float: none;
+}
+
#difftitlefrom {
float: left;
display: none;
diff --git a/wp-admin/includes/ajax-actions.php b/wp-admin/includes/ajax-actions.php
index 8581c9edc3..0c57781b71 100644
--- a/wp-admin/includes/ajax-actions.php
+++ b/wp-admin/includes/ajax-actions.php
@@ -2131,132 +2131,139 @@ function wp_ajax_nopriv_heartbeat() {
function wp_ajax_revisions_data() {
check_ajax_referer( 'revisions-ajax-nonce', 'nonce' );
- $compareto = isset( $_GET['compareto'] ) ? absint( $_GET['compareto'] ) : 0;
- $showautosaves = isset( $_GET['showautosaves'] ) ? $_GET['showautosaves'] : '';
- $showsplitview = isset( $_GET['showsplitview'] ) ? $_GET['showsplitview'] : '';
- $postid = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : '';
+ $compare_to = isset( $_GET['compare_to'] ) ? absint( $_GET['compare_to'] ) : 0;
+ $show_autosaves = isset( $_GET['show_autosaves'] ) ? $_GET['show_autosaves'] : '';
+ $show_split_view = isset( $_GET['show_split_view'] ) ? $_GET['show_split_view'] : '';
+ $post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : '';
+ $right_handle_at = isset( $_GET['right_handle_at'] ) ? $_GET['right_handle_at'] : 0;
+ $left_handle_at = isset( $_GET['left_handle_at'] ) ? $_GET['left_handle_at'] : 0;
+ $single_revision_id = isset( $_GET['single_revision_id'] ) ? $_GET['single_revision_id'] : 0;
- $comparetwomode = ( '' == $postid ) ? false : true;
+ $compare_two_mode = ( '' == $post_id ) ? false : true;
//
- //TODO: currently code returns all possible comparisons for the indicated 'compareto' revision
+ //TODO: currently code returns all possible comparisons for the indicated 'compare_to' revision
//however, the front end prevents users from pulling the right handle past the left or the left pass the right,
//so only the possible diffs need be generated
//
$alltherevisions = array();
- if ( '' == $postid )
- $postid = $compareto;
+ if ( '' == $post_id )
+ $post_id = $compare_to;
- if ( ! current_user_can( 'read_post', $postid ) )
+ if ( ! current_user_can( 'read_post', $post_id ) )
continue;
- if ( ! $revisions = wp_get_post_revisions( $postid ) )
+ if ( ! $revisions = wp_get_post_revisions( $post_id ) )
return;
-
- //if we are comparing two revisions, the first 'revision' represented by the leftmost
- //slider position is the current revision, prepend a comparison to this revision
- if ( $comparetwomode )
- array_unshift( $revisions, get_post( $postid ) );
-
- $count = 1;
- foreach ( $revisions as $revision ) :
- if ( 'true' != $showautosaves && wp_is_post_autosave( $revision ) )
- continue;
-
- $revision_from_date_author = '';
-
-
- $left_revision = get_post( $compareto );
- $right_revision = get_post( $revision );
-
- $author = get_the_author_meta( 'display_name', $revision->post_author );
/* translators: revision date format, see http://php.net/date */
$datef = _x( 'j F, Y @ G:i:s', 'revision date format');
- $gravatar = get_avatar( $revision->post_author, 18 );
+ //single model fetch mode
+ if ( 0 != $single_revision_id ) {
+ $left_revision = get_post( $compare_to );
+ $right_revision = get_post( $single_revision_id );
- $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
- $revision_date_author = sprintf(
- '%s %s, %s %s (%s)',
- $gravatar,
- $author,
- human_time_diff( strtotime( $revision->post_modified ), current_time( 'timestamp' ) ),
- __( ' ago ' ),
- $date
- );
+ if ( $compare_two_mode ) {
+ $compare_to_gravatar = get_avatar( $left_revision->post_author, 18 );
+ $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author );
+ $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
- if ( $comparetwomode ) {
- $compareto_gravatar = get_avatar( $left_revision->post_author, 18 );
- $compareto_author = get_the_author_meta( 'display_name', $left_revision->post_author );
- $compareto_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
+ $revision_from_date_author = sprintf(
+ '%s %s, %s %s (%s)',
+ $compare_to_gravatar,
+ $compare_to_author,
+ human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
+ __( ' ago ' ),
+ $compare_to_date
+ );
+ }
- $revision_from_date_author = sprintf(
+ //
+ //make sure the left revision is the most recent
+ //
+ if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) {
+ $temp = $left_revision;
+ $left_revision = $right_revision;
+ $right_revision = $temp;
+ }
+
+ //
+ //compare from left to right, passed from application
+ //
+ $content='';
+ foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
+ $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' );
+ $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' );
+
+ add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' );
+
+ $args = array();
+
+ if ( ! empty( $show_split_view ) )
+ $args = array( 'show_split_view' => true );
+
+ $content .= wp_text_diff( $left_content, $right_content, $args );
+ }
+ $content = '' == $content ? __( 'No difference' ) : $content;
+ $alltherevisions = array (
+ 'revisiondiff' => $content
+ );
+ echo json_encode( $alltherevisions );
+ exit();
+ }
+
+ //if we are comparing two revisions, the first 'revision' represented by the leftmost
+ //slider position is the current revision, prepend a comparison to this revision
+ if ( $compare_two_mode )
+ array_unshift( $revisions, get_post( $post_id ) );
+
+ $count = -1;
+
+ foreach ( $revisions as $revision ) :
+ if ( ! empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
+ continue;
+
+ $revision_from_date_author = '';
+ $count++;
+ // return blank data for diffs to the left of the left handle (for right handel model)
+ // or to the right of the right handle (for left handel model)
+ if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) ||
+ ( 0 != $right_handle_at && $count > $right_handle_at )) {
+ $alltherevisions[] = array (
+ 'ID' => $revision->ID,
+ );
+
+ continue;
+ }
+
+ $gravatar = get_avatar( $revision->post_author, 18 );
+ $author = get_the_author_meta( 'display_name', $revision->post_author );
+ $date = date_i18n( $datef, strtotime( $revision->post_modified ) );
+ $revision_date_author = sprintf(
'%s %s, %s %s (%s)',
- $compareto_gravatar,
- $compareto_author,
- human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
+ $gravatar,
+ $author,
+ human_time_diff( strtotime( $revision->post_modified ), current_time( 'timestamp' ) ),
__( ' ago ' ),
- $compareto_date
+ $date
);
- }
- $restoreaction = wp_nonce_url(
- add_query_arg(
- array( 'revision' => $revision->ID,
- 'action' => 'restore' ),
- '/wp-admin/revision.php'
- ),
- "restore-post_{$compareto}|{$revision->ID}"
- );
+ $restoreaction = wp_nonce_url(
+ add_query_arg(
+ array( 'revision' => $revision->ID,
+ 'action' => 'restore' ),
+ admin_url( 'revision.php' )
+ ),
+ "restore-post_{$compare_to}|{$revision->ID}"
+ );
- //
- //make sure the left revision is the most recent
- //
- if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) {
- $temp = $left_revision;
- $left_revision = $right_revision;
- $right_revision = $temp;
- }
-
- //
- //compare from left to right, passed from application
- //
- $content='';
- foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
- $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' );
- $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' );
-
- add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' );
-
- $args = array();
-
- if ( 'true' == $showsplitview )
- $args = array( 'showsplitview' => 'true' );
-
- $content .= wp_text_diff( $left_content, $right_content, $args );
- }
-
- //if we are comparing two revisions
- //and we are on the matching revision
- //add an error revision indicating unable to compare to self
- if ( $comparetwomode && $compareto == $revision->ID )
$alltherevisions[] = array (
- 'ID' => $revision->ID,
- 'revision_date_author' => $revision_date_author,
- 'revisiondiff' => sprintf('
%s
', __( 'Cannot compare revision to itself' ) ),
- 'restoreaction' => urldecode( $restoreaction ),
- 'revision_from_date_author' => ''
- );
-
- //add to the return data only if there is a difference
- if ( '' != $content )
- $alltherevisions[] = array (
- 'ID' => $revision->ID,
- 'revision_date_author' => $revision_date_author,
- 'revisiondiff' => $content,
- 'restoreaction' => urldecode( $restoreaction ),
- 'revision_from_date_author' => $revision_from_date_author
- );
+ 'ID' => $revision->ID,
+ 'revision_date_author' => $revision_date_author,
+ 'revision_from_date_author' => $revision_from_date_author,
+ 'restoreaction' => urldecode( $restoreaction ),
+ 'revision_toload' => true
+ );
endforeach;
diff --git a/wp-admin/js/revisions.js b/wp-admin/js/revisions.js
index 78628f33df..882500f05e 100644
--- a/wp-admin/js/revisions.js
+++ b/wp-admin/js/revisions.js
@@ -6,16 +6,22 @@ window.wp = window.wp || {};
views : {},
Model : Backbone.Model.extend({
+ idAttribute : 'ID',
+ urlRoot : ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
+ '&show_autosaves=false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
defaults: {
ID : 0,
revision_date_author : '',
- revisiondiff : '',
- restoreaction: '',
- diff_max : 0,
- diff_count : 0,
- diff_revision_to : 0,
+ revisiondiff : '',
+ restoreaction : '',
revision_from_date_author : '',
+ revision_toload : false
+ },
+
+ url : function() {
+ return this.urlRoot + '&single_revision_id=' + this.id;
}
+
}),
app: _.extend({}, Backbone.Events),
@@ -30,42 +36,68 @@ window.wp = window.wp || {};
_left_diff : 0,
_right_diff : 1,
_autosaves : false,
- _showsplitview : true,
+ _show_split_view : true,
_compareoneortwo : 1,
- left_model_loading : false, //keep track of model loads
- right_model_loading : false, //disallow slider interaction, also repeat loads, while loading
+ _left_model_loading : false, //keep track of model loads
+ _right_model_loading : false, //disallow slider interaction, also repeat loads, while loading
//TODO add ability to arrive on specific revision
routes : {
- "viewrevision/:revision": "viewrevision",
},
viewrevision : function( revision ) {
//coming soon
},
+ reload_toload_revisions : function( model_collection, reverse_direction ) {
+ var self = this;
+ var revisions_to_load = model_collection.where( { revision_toload : true } );
+ //console.log(revisions_to_load);
+ var delay=0;
+ _.each(revisions_to_load, function( the_model ) {
+ the_model.urlRoot = model_collection.url;
+ _.delay( function() {
+ the_model.fetch( {
+ update : true,
+ add : false,
+ remove : false,
+ //async : false,
+ success : function( model ) {
+ //console.log(model.get( 'ID' ) +'-'+self._revisions.at( self._right_diff ).get( 'ID' ));
+ if ( model.get( 'ID' ) === self._revisions.at( self._right_diff - 1 ).get( 'ID' ) ) { //reload if current model refreshed
+ //console.log('render');
+ self._revisionView.render();
+ }
+ }
+ } );
+ }, delay ) ;
+ delay = delay + 200; //stagger model loads by 200 ms to avoid hammering server with requests
+ }
+ );
+ },
+
start_left_model_loading : function() {
- this.left_model_loading = true;
+ this._left_model_loading = true;
$('.revisiondiffcontainer').addClass('leftmodelloading');
},
stop_left_model_loading : function() {
- this.left_model_loading = false;
+ this._left_model_loading = false;
$('.revisiondiffcontainer').removeClass('leftmodelloading');
},
start_right_model_loading : function() {
- this.right_model_loading = true;
+ this._right_model_loading = true;
$('.revisiondiffcontainer').addClass('rightmodelloading');
},
stop_right_model_loading : function() {
- this.right_model_loading = false;
+ this._right_model_loading = false;
$('.revisiondiffcontainer').removeClass('rightmodelloading');
},
reloadmodel : function() {
- if ( 2 == this._compareoneortwo ) {
+ if ( 2 === this._compareoneortwo ) {
this.reloadleftright();
} else {
this.reloadmodelsingle();
@@ -74,9 +106,9 @@ window.wp = window.wp || {};
reloadmodelsingle : function() {
var self = this;
- self._revisions.url = ajaxurl + '?action=revisions-data&compareto=' + wpRevisionsSettings.post_id +
- '&showautosaves=' + self.self_autosaves +
- '&showsplitview=' + REVAPP._showsplitview +
+ self._revisions.url = ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
+ '&show_autosaves=' + self._autosaves +
+ '&show_split_view=' + REVAPP._show_split_view +
'&nonce=' + wpRevisionsSettings.nonce;
self.start_right_model_loading();
this._revisions.fetch({ //reload revision data
@@ -85,92 +117,89 @@ window.wp = window.wp || {};
var revisioncount = self._revisions.length;
if ( self._right_diff > revisioncount ) //if right handle past rightmost, move
self._right_diff = revisioncount;
- //TODO add a test for matchind left revision and push left, testing
- //also reset the slider values here
self._revisionView.render();
- $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this
+ self.reload_toload_revisions( self._revisions );
+
+ $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this, autsaves changed
},
error : function () {
self.stop_right_model_loading();
- window.console && console.log( 'Error loading revision data' );
+ //console.log( 'Error loading revision data' );
}
});
},
- reloadleftright : function() {
+ reloadleft : function() {
var self = this;
self.start_left_model_loading();
- self.start_right_model_loading();
-
self._left_handle_revisions = new wp.revisions.Collection();
- self._right_handle_revisions = new wp.revisions.Collection();
+ self._left_handle_revisions.url =
+ ajaxurl +
+ '?action=revisions-data&compare_to=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) +
+ '&post_id=' + wpRevisionsSettings.post_id +
+ '&show_autosaves=' + self._autosaves +
+ '&show_split_view=' + self._show_split_view +
+ '&nonce=' + wpRevisionsSettings.nonce +
+ '&right_handle_at=' + ( self._right_diff );
- if ( 0 == self._left_diff ) {
+ self._left_handle_revisions.fetch({
+
+ success : function(){
+ self.stop_left_model_loading();
+ self.reload_toload_revisions( self._left_handle_revisions );
+ },
+
+ error : function () {
+ //console.log( 'Error loading revision data' );
+ self.stop_left_model_loading();
+ }
+ });
+ },
+
+ reloadright : function() {
+ var self = this;
+ self.start_right_model_loading();
+ self._right_handle_revisions = new wp.revisions.Collection();
+ if ( 0 === self._left_diff ) {
self._right_handle_revisions.url =
ajaxurl +
- '?action=revisions-data&compareto=' + wpRevisionsSettings.post_id +
+ '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
'&post_id=' + wpRevisionsSettings.post_id +
- '&showautosaves=' + self._autosaves +
- '&showsplitview=' + self._showsplitview +
+ '&show_autosaves=' + self._autosaves +
+ '&show_split_view=' + self._show_split_view +
'&nonce=' + wpRevisionsSettings.nonce;
} else {
self._right_handle_revisions.url =
ajaxurl +
- '?action=revisions-data&compareto=' + self._revisions.at( self._left_diff - 1 ).get( 'ID' ) +
+ '?action=revisions-data&compare_to=' + self._revisions.at( self._left_diff - 1 ).get( 'ID' ) +
'&post_id=' + wpRevisionsSettings.post_id +
- '&showautosaves=' + self._autosaves +
- '&showsplitview=' + self._showsplitview +
- '&nonce=' + wpRevisionsSettings.nonce;
+ '&show_autosaves=' + self._autosaves +
+ '&show_split_view=' + self._show_split_view +
+ '&nonce=' + wpRevisionsSettings.nonce +
+ '&left_handle_at=' + (self._left_diff ) ;
}
- self._left_handle_revisions.url =
- ajaxurl +
- '?action=revisions-data&compareto=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) +
- '&post_id=' + wpRevisionsSettings.post_id +
- '&showautosaves=' + self._autosaves +
- '&showsplitview=' + self._showsplitview +
- '&nonce=' + wpRevisionsSettings.nonce;
-
- self._left_handle_revisions.fetch({
-
- xhr: function() {
- var xhr = $.ajaxSettings.xhr();
- xhr.onprogress = self.handleProgress;
- return xhr;
- },
-
- handleProgress: function(evt){
- var percentComplete = 0;
- if (evt.lengthComputable) {
- percentComplete = evt.loaded / evt.total;
- window.console && console.log( Math.round( percentComplete * 100) + "%" );
- }
- },
-
- success : function(){
- self.stop_left_model_loading();
- },
-
- error : function () {
- window.console && console.log( 'Error loading revision data' );
- self.stop_left_model_loading();
- }
- });
-
self._right_handle_revisions.fetch({
-
+
success : function(){
self.stop_right_model_loading();
+ self.reload_toload_revisions( self._right_handle_revisions );
},
- error : function () {
- window.console && console.log( 'Error loading revision data' );
+ error : function ( response ) {
+ //console.log( 'Error loading revision data - ' + response.toSource() );
self.stop_right_model_loading();
}
});
+
+ },
+
+ reloadleftright : function() {
+ this.reloadleft();
+ this.reloadright();
},
/*
@@ -194,22 +223,27 @@ window.wp = window.wp || {};
},
revisionDiffSetup : function() {
- var self = this, slider;
-
this._revisionView = new wp.revisions.views.View({
model : this._revisions
});
this._revisionView.render();
+ $( '#diff_max, #diff_maxof' ).html( this._revisions.length );
+ $( '#diff_count' ).html( REVAPP._right_diff );
+ $( '#slider' ).slider( 'option', 'max', this._revisions.length - 1 );
+ this.reload_toload_revisions( this._revisions );
this._revisionsInteractions = new wp.revisions.views.Interact({
model : this._revisions
});
this._revisionsInteractions.render();
+ /*
+ //Options hidden for now, moving to screen options
this._revisionsOptions = new wp.revisions.views.Options({
model : this._revisions
});
this._revisionsOptions.render();
+ */
}
})
@@ -217,8 +251,12 @@ window.wp = window.wp || {};
wp.revisions.Collection = Backbone.Collection.extend({
model : wp.revisions.Model,
- url : ajaxurl + '?action=revisions-data&compareto=' + wpRevisionsSettings.post_id + '&showautosaves=false&showsplitview=true&nonce=' + wpRevisionsSettings.nonce
- });
+ url : ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
+ '&show_autosaves=false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
+
+ initialize : function() {
+ }
+ } );
_.extend(wp.revisions.views, {
//
@@ -242,7 +280,7 @@ window.wp = window.wp || {};
render : function() {
var addhtml = '';
//compare two revisions mode?
- if ( 2 == REVAPP._compareoneortwo ) {
+ if ( 2 === REVAPP._compareoneortwo ) {
this.comparetwochecked = 'checked';
if ( this.draggingleft ) {
if ( this.model.at( REVAPP._left_diff ) ) {
@@ -260,16 +298,21 @@ window.wp = window.wp || {};
) );
}
}
- } else { //end compare two revisions mode, eg only one slider handel
+ } else { //end compare two revisions mode, eg only one slider handle
this.comparetwochecked = '';
if ( this.model.at( REVAPP._right_diff - 1 ) ) {
addhtml = this.template( _.extend(
- this.model.at( REVAPP._right_diff-1 ).toJSON(),
- { comparetwochecked : this.comparetwochecked } //keep the checkmark checked
+ this.model.at( REVAPP._right_diff - 1 ).toJSON(),
+ { comparetwochecked : this.comparetwochecked } //keep the checkmark unchecked
) );
}
}
this.$el.html( addhtml );
+ if ( this.model.length < 3 ) {
+ $( 'div#comparetworevisions' ).hide(); //don't allow compare two if fewer than three revisions
+
+ }
+ //console.log ( (this.model.at( REVAPP._right_diff - 1 )).url());
return this;
},
@@ -322,7 +365,7 @@ window.wp = window.wp || {};
},
//
- //toggle include autosaves
+ //toggle include autosaves
//
toggleshowautosaves : function() {
var self = this;
@@ -331,11 +374,9 @@ window.wp = window.wp || {};
} else {
REVAPP._autosaves = false ;
}
- //refresh the model data
+ //refresh the model data
REVAPP.reloadmodel();
- //TODO check for two handle mode
-
},
//
@@ -345,10 +386,10 @@ window.wp = window.wp || {};
var self = this;
if ( $( 'input#showsplitview' ).is( ':checked' ) ) {
- REVAPP._showsplitview = 'true';
+ REVAPP._show_split_view = 'true';
$('.revisiondiffcontainer').addClass('diffsplit');
} else {
- REVAPP._showsplitview = '';
+ REVAPP._show_split_view = '';
$('.revisiondiffcontainer').removeClass('diffsplit');
}
@@ -364,8 +405,14 @@ window.wp = window.wp || {};
tagName : 'revisionvinteract',
className : 'revisionvinteract-container',
template : wp.template('revisionvinteract'),
+ _restoreword : '',
initialize : function() {
+ this._restoreword = $( 'input#restore' ).attr( 'value' );
+ },
+
+ reset_restore_button : function() {
+ $( 'input#restore' ).attr( 'value', this._restoreword + ' ' + REVAPP._revisions.at( REVAPP._right_diff - 1 ).get( 'ID' ) );
},
render : function() {
@@ -375,12 +422,13 @@ window.wp = window.wp || {};
this.$el.html( addhtml );
$( '#diff_max, #diff_maxof' ).html( this.model.length );
$( '#diff_count' ).html( REVAPP._right_diff );
- $( '#diff_left_count_inner' ).html( 0 == REVAPP._left_diff ? '' : 'revision' + REVAPP._left_diff );
+ $( '#diff_left_count_inner' ).html( 0 === REVAPP._left_diff ? '' : 'revision' + REVAPP._left_diff );
+ self.reset_restore_button();
var modelcount = REVAPP._revisions.length;
- slider = $("#slider");
- if ( 1 == REVAPP._compareoneortwo ) {
+ slider = $( "#slider" );
+ if ( 1 === REVAPP._compareoneortwo ) {
//set up the slider with a single handle
slider.slider({
value : REVAPP._right_diff-1,
@@ -390,12 +438,13 @@ window.wp = window.wp || {};
//slide interactions for one handles slider
slide : function( event, ui ) {
- if ( REVAPP.right_model_loading ) //left model stoll loading, prevent sliding left handle
+ if ( REVAPP._right_model_loading ) //left model stoll loading, prevent sliding left handle
return false;
REVAPP._right_diff =( ui.value+1 );
$( '#diff_count' ).html( REVAPP._right_diff );
REVAPP._revisionView.render();
+ self.reset_restore_button();
}
});
$( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
@@ -414,57 +463,58 @@ window.wp = window.wp || {};
switch ( index ) {
case 1: //left handle drag
- if ( REVAPP.left_model_loading ) //left model stoll loading, prevent sliding left handle
+ if ( REVAPP._left_model_loading ) //left model stoll loading, prevent sliding left handle
return false;
if ( REVAPP._revisionView.model !== REVAPP._left_handle_revisions &&
- null != REVAPP._left_handle_revisions )
+ null !== REVAPP._left_handle_revisions )
REVAPP._revisionView.model = REVAPP._left_handle_revisions;
REVAPP._revisionView.draggingleft = true;
+ REVAPP._left_diff_start = ui.values[ 0 ];
break;
case 2: //right
- if ( REVAPP.right_model_loading ) //right model stoll loading, prevent sliding right handle
+ if ( REVAPP._right_model_loading ) //right model stoll loading, prevent sliding right handle
return false;
//one extra spot at left end when comparing two
if ( REVAPP._revisionView.model !== REVAPP._right_handle_revisions &&
- null != REVAPP._right_handle_revisions )
+ null !== REVAPP._right_handle_revisions )
REVAPP._revisionView.model = REVAPP._right_handle_revisions;
REVAPP._revisionView.draggingleft = false;
- REVAPP._right_diff = ui.values[1] - 1 ;
+ REVAPP._right_diff_start = ui.values[ 1 ];
break;
}
},
//when sliding in two handled mode change appropriate value
slide : function( event, ui ) {
- if ( ui.values[0] == ui.values[1] ) //prevent compare to self
+ if ( ui.values[ 0 ] === ui.values[ 1 ] ) //prevent compare to self
return false;
var index = $( ui.handle ).index(); //0 (left) or 1 (right)
switch ( index ) {
case 1: //left
- if ( REVAPP.left_model_loading ) //left model stoll loading, prevent sliding left handle
+ if ( REVAPP._left_model_loading ) //left model still loading, prevent sliding left handle
return false;
- REVAPP._left_diff = ui.values[0] - 1; //one extra spot at left end when comparing two
+ REVAPP._left_diff = ui.values[ 0 ] - 1; //one extra spot at left end when comparing two
break;
case 2: //right
- if ( REVAPP.right_model_loading ) //right model stoll loading, prevent sliding right handle
+ if ( REVAPP._right_model_loading ) //right model still loading, prevent sliding right handle
return false;
- REVAPP._right_diff = ui.values[1] - 1 ;
+ REVAPP._right_diff = ui.values[ 1 ] - 1 ;
break;
}
$( '#diff_count' ).html( REVAPP._right_diff );
- if ( 0 == REVAPP._left_diff ) {
+ if ( 0 === REVAPP._left_diff ) {
$( '.revisiondiffcontainer' ).addClass( 'currentversion' );
} else {
@@ -473,15 +523,31 @@ window.wp = window.wp || {};
}
REVAPP._revisionView.render(); //render the diff view
+ self.reset_restore_button();
},
//when the user stops sliding in 2 handle mode, recalculate diffs
stop : function( event, ui ) {
- if ( 2 == REVAPP._compareoneortwo ) {
+ if ( 2 === REVAPP._compareoneortwo ) {
//calculate and generate a diff for comparing to the left handle
//and the right handle, swap out when dragging
- if ( ! (REVAPP.left_model_loading && REVAPP.right_model.loading ) ) {
- REVAPP.reloadleftright();
+
+ var index = $( ui.handle ).index(); //0 (left) or 1 (right)
+
+ switch ( index ) {
+ case 1: //left
+ //left handle dragged & changed, reload right handle model
+ if ( ! ( REVAPP._left_diff_start === ui.values[ 0 ] || REVAPP._left_model_loading ) )
+ REVAPP.reloadright();
+
+ break;
+
+ case 2: //right
+ //right handle dragged & changed, reload left handle model if changed
+ if ( ! ( REVAPP._right_diff_start === ui.values[ 1 ] || REVAPP._right_model_loading ) ) {
+ REVAPP.reloadleft();
+ }
+ break;
}
}
}
@@ -507,6 +573,7 @@ window.wp = window.wp || {};
$( '#diff_count' ).html( REVAPP._right_diff );
$( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
+ this.reset_restore_button();
},
//go the the previous revision
@@ -518,6 +585,7 @@ window.wp = window.wp || {};
$( '#diff_count' ).html( REVAPP._right_diff );
$( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
+ this.reset_restore_button();
}
})
});
@@ -525,6 +593,6 @@ window.wp = window.wp || {};
//instantiate Revision Application
REVAPP = new wp.revisions.App();
//TODO consider enable back button to step back thru states?
- Backbone.history.start();
+ //Backbone.history.start({pushState: true});
}(jQuery));
diff --git a/wp-admin/revision.php b/wp-admin/revision.php
index 0d8c09fd71..bf8f6dfe42 100644
--- a/wp-admin/revision.php
+++ b/wp-admin/revision.php
@@ -10,37 +10,45 @@
require_once('./admin.php');
wp_reset_vars( array( 'revision', 'action' ) );
-$revision_id = absint($revision);
+$revision_id = absint( $revision );
$redirect = 'edit.php';
switch ( $action ) :
case 'restore' :
- if ( !$revision = wp_get_post_revision( $revision_id ) )
+ if ( ! $revision = wp_get_post_revision( $revision_id ) )
break;
- if ( !current_user_can( 'edit_post', $revision->post_parent ) )
+ if ( ! current_user_can( 'edit_post', $revision->post_parent ) )
break;
- if ( !$post = get_post( $revision->post_parent ) )
+ if ( ! $post = get_post( $revision->post_parent ) )
break;
// Revisions disabled and we're not looking at an autosave
- if ( ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
+ if ( ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) ) && ! wp_is_post_autosave( $revision ) ) {
$redirect = 'edit.php?post_type=' . $post->post_type;
break;
}
check_admin_referer( "restore-post_{$post->ID}|{$revision->ID}" );
+ //store revision event in post meta
+ $restore_details = array(
+ 'restored_revision_id' => $revision->ID,
+ 'restored_by_user' => get_current_user_id(),
+ 'restored_time' => time()
+ );
+ update_post_meta( $post->ID, '_post_restored_from', $restore_details );
+
wp_restore_post_revision( $revision->ID );
$redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) );
break;
case 'view' :
case 'edit' :
default :
- if ( !$revision = wp_get_post_revision( $revision_id ) )
+ if ( ! $revision = wp_get_post_revision( $revision_id ) )
break;
- if ( !$post = get_post( $revision->post_parent ) )
+ if ( ! $post = get_post( $revision->post_parent ) )
break;
- if ( !current_user_can( 'read_post', $revision->ID ) || !current_user_can( 'read_post', $post->ID ) )
+ if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'read_post', $post->ID ) )
break;
// Revisions disabled and we're not looking at an autosave
@@ -59,16 +67,16 @@ default :
endswitch;
// Empty post_type means either malformed object found, or no valid parent was found.
-if ( !$redirect && empty($post->post_type) )
+if ( ! $redirect && empty( $post->post_type ) )
$redirect = 'edit.php';
-if ( !empty($redirect) ) {
+if ( ! empty( $redirect ) ) {
wp_redirect( $redirect );
exit;
}
// This is so that the correct "Edit" menu item is selected.
-if ( !empty($post->post_type) && 'post' != $post->post_type )
+if ( ! empty( $post->post_type ) && 'post' != $post->post_type )
$parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type;
else
$parent_file = $submenu_file = 'edit.php';
@@ -83,10 +91,11 @@ require_once( './admin-header.php' );
+ID );
+?>
-
-
@@ -94,10 +103,7 @@ var wpRevisionsSettings = $post->ID,
-
-ID );
-?>
+
@@ -107,9 +113,8 @@ var wpRevisionsSettings = $post->ID,
{{{ data.revision_from_date_author }}}
{{{ data.revision_date_author }}}
-
-
-
+
+
@@ -119,8 +124,8 @@ var wpRevisionsSettings = $post->ID,