" )
- .addClass( "arrow" )
- .addClass( feedback.vertical )
- .addClass( feedback.horizontal )
- .appendTo( $( this ) );
- }
- },
- show: false,
- hide: false,
- content: function() {
- return message;
- }
+ /**
+ * ========================================================================
+ * VIEWS
+ * ========================================================================
+ */
- } );
- },
-/**/
+ /**
+ * wp.revisions.view.Slider
+ *
+ * The slider
+ */
+ revisions.view.Slider = Backbone.View.extend({
+ el: $( '#slider' ),
+ singleRevision: true,
- completeApplicationSetup: function() {
- this._revisionView = new wp.revisions.views.View({
- model: this._revisions
- });
- this._revisionView.render();
- $( '#slider' ).slider( 'option', 'max', this._revisions.length - 1 );
+ initialize: function( options ) {
+ this.options = _.defaults( options || {}, {
+ value: 0,
+ min: 0,
+ max: 1,
+ step: 1
+ });
+ },
- this.reloadToLoadRevisions( this._revisions );
+ slide: function( event, ui ) {
+ if ( this.singleRevision ) {
+ Diff.rightDiff = ( ui.value + 1 );
+ Diff.revisionView.render();
+ } else {
+ if ( ui.values[0] === ui.values[1] ) // prevent compare to self
+ return false;
- this._revisionsInteractions = new wp.revisions.views.Interact({
- model: this._revisions
- });
- this._revisionsInteractions.render();
+ if ( $( ui.handle ).hasClass( 'left-handle' ) ) {
+ // Left handler
+ if ( Diff.leftModelLoading ) // left model still loading, prevent sliding left handle
+ return false;
- this._tickmarkView = new wp.revisions.views.Tickmarks({
- model: this._revisions
- });
- this._tickmarkView.render();
- this._tickmarkView.resetTicks();
+ Diff.leftDiff = ui.values[0];
+ } else {
+ // Right handler
+ if ( Diff.rightModelLoading ) // right model still loading, prevent sliding right handle
+ return false;
+ Diff.rightDiff = ui.values[1];
+ }
- /*
- .on( 'mouseup', function( event ) {
- REVAPP._keep_tooltip_open = false;
- $( this ).find('.ui-slider-tooltip').hide();
- } ).on( 'mousedown', function( event ) {
- REVAPP._keep_tooltip_open = true;
- } ).on( 'mouseout', function( event ) {
- if ( REVAPP._keep_tooltip_open)
- event.stopImmediatePropagation();
- });
- */
- /*
- // Options hidden for now, moving to screen options
- this._revisionsOptions = new wp.revisions.views.Options({
- model: this._revisions
- });
- this._revisionsOptions.render();
- */
+ if ( 0 === Diff.leftDiff ) {
+ $( '.revisiondiffcontainer' ).addClass( 'currentversion' );
+ } else {
+ $( '.revisiondiffcontainer' ).removeClass( 'currentversion' );
+ }
+ Diff.revisionView.render();
}
- })
- };
+ },
- wp.revisions.Collection = Backbone.Collection.extend({
- model: wp.revisions.Model,
- url: ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
- '&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
+ start: function( event, ui ) {
+ // Not needed in one mode
+ if ( this.singleRevision )
+ return;
- initialize: function() {
- }
- } );
+ if ( $( ui.handle ).hasClass( 'left-handle' ) ) {
+ // Left handler
+ if ( Diff.leftModelLoading ) // left model still loading, prevent sliding left handle
+ return false;
- _.extend(wp.revisions.views, {
+ Diff.revisionView.draggingLeft = true;
- // Ticks inside slider view
- Tickmarks: Backbone.View.extend({
- el: $('#diff-slider-ticks')[0],
- tagName: 'diff-slider-ticks-view',
- className: 'diff-slider-ticks-container',
- template: wp.template('revision-ticks'),
- model: wp.revisions.Model,
+ if ( Diff.revisionView.model !== Diff.leftHandleRevisions &&
+ null !== Diff.leftHandleRevisions ) {
+ Diff.revisionView.model = Diff.leftHandleRevisions;
+ Diff.tickmarkView.model = Diff.leftHandleRevisions;
+ Diff.tickmarkView.render();
+ }
- resetTicks: function() {
- var sliderMax = $( '#slider' ).slider( 'option', 'max');
- var sliderWidth = $( '#slider' ).width();
- var adjustMax = ( 2 === REVAPP._compareOneOrTwo ) ? 1 : 0;
- var tickWidth = Math.floor( sliderWidth / ( sliderMax - adjustMax ) );
+ Diff.leftDiffStart = ui.values[ 0 ];
- // TODO: adjust right margins for wider ticks so they stay centered on handle stop point
+ } else {
+ // Right handler
+ if ( Diff.rightModelLoading || 0 === Diff.rightHandleRevisions.length) // right model still loading, prevent sliding right handle
+ return false;
- // set minimum and maximum widths for tick marks
- tickWidth = (tickWidth > 50 ) ? 50 : tickWidth;
- tickWidth = (tickWidth < 10 ) ? 10 : tickWidth;
+ if ( Diff.revisionView.model !== Diff.rightHandleRevisions &&
+ null !== Diff.rightHandleRevisions ) {
+ Diff.revisionView.model = Diff.rightHandleRevisions;
+ Diff.tickmarkView.model = Diff.rightHandleRevisions;
+ Diff.tickmarkView.render();
+ }
- sliderWidth = tickWidth * (sliderMax - adjustMax ) + 1;
+ Diff.revisionView.draggingLeft = false;
+ Diff.rightDiffStart = ui.values[1];
+ }
+ },
- $( '#slider' ).width( sliderWidth );
- $( '.diff-slider-ticks-wrapper' ).width( sliderWidth );
- $( '#diffslider' ).width( sliderWidth );
- $( '#diff-slider-ticks' ).width( sliderWidth );
+ stop: function( event, ui ) {
+ // Not needed in one mode
+ if ( this.singleRevision )
+ return;
- var aTickWidth = $( '.revision-tick' ).width();
+ // calculate and generate a diff for comparing to the left handle
+ // and the right handle, swap out when dragging
+ if ( $( ui.handle ).hasClass( 'left-handle' ) ) {
+ // Left hadnler
+ if ( Diff.leftDiffStart !== ui.values[0] )
+ Diff.reloadRight();
+ } else {
+ // Right handler
+ if ( Diff.rightDiffStart !== ui.values[1] )
+ Diff.reloadLeft();
+ }
+ },
- if ( tickWidth !== aTickWidth ) { // is the width already set correctly?
- $( '.revision-tick' ).each( function( ) {
- $(this).css( 'margin-right', tickWidth - 1 + 'px'); // space the ticks out using right margin
- });
+ addTooltip: function( handle, message ) {
- if( 2 === REVAPP._compareOneOrTwo ) {
- $( '.revision-tick' ).first().remove(); // TODO - remove the check
+ handle.attr( 'title', '' ).tooltip({
+ track: false,
+
+ position: {
+ my: "left-30 top-66",
+ at: "top left",
+ using: function( position, feedback ) {
+ $( this ).css( position );
+ $( "
" )
+ .addClass( "arrow" )
+ .addClass( feedback.vertical )
+ .addClass( feedback.horizontal )
+ .appendTo( $( this ) );
}
- $( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin
+ },
+ show: false,
+ hide: false,
+ content: function() {
+ return message;
}
- },
+ } );
+ },
- // render the tickmark view
- render: function() {
- var self = this;
+ width: function() {
+ return $( '#slider' ).width();
+ },
- if ( null !== self.model ) {
- var addHtml = "";
- _.each ( self.model.models, function( theModel ) {
- addHtml = addHtml + self.template ( theModel.toJSON() );
- });
- self.$el.html( addHtml );
+ setWidth: function( width ) {
+ return $( '#slider' ).width( width );
+ },
- }
- self.resetTicks();
- return self;
- }
- }),
+ refresh: function( options, slide ) {
+ $( '#slider' ).slider( 'option', options );
- // primary revision diff view
- View: Backbone.View.extend({
- el: $('#backbonerevisionsdiff')[0],
- tagName: 'revisionvview',
- className: 'revisionview-container',
- template: wp.template('revision'),
- comparetwochecked: '',
- draggingLeft: false,
+ // Triggers the slide event
+ if ( slide )
+ $( '#slider' ).trigger( 'slide' );
+ },
- // render the revisions
- render: function() {
- var addHtml = '';
- var thediff;
- // compare two revisions mode?
+ option: function( key ) {
+ return $( '#slider' ).slider( 'option', key );
+ },
- if ( 2 === REVAPP._compareOneOrTwo ) {
+ render: function() {
+ var self = this;
+ // this.$el doesn't work, why?
+ $( '#slider' ).slider( {
+ slide: $.proxy( self.slide, self ),
+ start: $.proxy( self.start, self ),
+ stop: $.proxy( self.stop, self )
+ } );
- this.comparetwochecked = 'checked';
- if ( this.draggingLeft ) {
- thediff = REVAPP._leftDiff -1;
- if ( this.model.at( thediff ) ) {
- addHtml = this.template( _.extend(
- this.model.at( thediff ).toJSON(),
- { comparetwochecked: this.comparetwochecked } // keep the checkmark checked
- ) );
- }
- } else { // dragging right handle
- thediff = REVAPP._rightDiff -1;
- if ( this.model.at( thediff ) ) {
- addHtml = this.template( _.extend(
- this.model.at( thediff ).toJSON(),
- { comparetwochecked: this.comparetwochecked } // keep the checkmark checked
- ) );
- }
- }
- } else { // end compare two revisions mode, eg only one slider handle
- this.comparetwochecked = '';
- if ( this.model.at( REVAPP._rightDiff - 1 ) ) {
- addHtml = this.template( _.extend(
- this.model.at( REVAPP._rightDiff - 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
- }
- if ( this.model.length < 2 ) {
- $( 'div#diffslider' ).hide(); // don't allow compare two if fewer than three revisions
- $( 'div.diff-slider-ticks-wrapper' ).hide();
- }
+ // Set options
+ this.refresh( this.options );
+ }
+ });
- // add tooltips to the handles
- if ( 2 === REVAPP._compareOneOrTwo ) {
- REVAPP.addTooltip ( $( 'a.ui-slider-handle.left-handle' ),
- ( REVAPP._leftDiff < 0 ) ? '' : REVAPP._revisions.at( REVAPP._leftDiff - 1 ).get( 'revision_date_author_short' ) );
- REVAPP.addTooltip ( $( 'a.ui-slider-handle.right-handle' ),
- ( REVAPP._rightDiff > REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._rightDiff - 1 ).get( 'revision_date_author_short' ) );
- } else {
- REVAPP.addTooltip ( $( 'a.ui-slider-handle' ),
- ( REVAPP._rightDiff > REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._rightDiff - 1 ).get( 'revision_date_author_short' ) );
- }
+ /**
+ * wp.revisions.view.Tickmarks
+ *
+ * The slider tickmarks.
+ */
+ revisions.view.Tickmarks = Backbone.View.extend({
+ el: $('#diff-slider-ticks'),
+ template: wp.template('revision-ticks'),
+ model: Revision,
- // hide the restore button when on the last sport/current post data
- if ( REVAPP._rightDiff === REVAPP._revisions.length ){
- $( '.restore-button' ).hide();
- } else {
- $( '.restore-button' ).show();
- }
+ resetTicks: function() {
+ var sliderMax = Diff.slider.option( 'max' );
+ var sliderWidth = Diff.slider.width();
+ var adjustMax = Diff.singleRevision ? 0 : 1;
+ var tickWidth = Math.floor( sliderWidth / ( sliderMax - adjustMax ) );
- return this;
- },
+ // TODO: adjust right margins for wider ticks so they stay centered on handle stop point
- // the compare two button is in this view, add the interaction here
- events: {
- 'click #comparetwo': 'clickcomparetwo'
- },
+ // set minimum and maximum widths for tick marks
+ tickWidth = (tickWidth > 50 ) ? 50 : tickWidth;
+ tickWidth = (tickWidth < 10 ) ? 10 : tickWidth;
- // turn on/off the compare two mmode
- clickcomparetwo: function(){
- self = this;
+ sliderWidth = tickWidth * (sliderMax - adjustMax ) + 1;
- if ( $( 'input#comparetwo' ).is( ':checked' ) ) { // compare 2 mode
- REVAPP._compareOneOrTwo = 2 ;
+ Diff.slider.setWidth( sliderWidth );
+ $( '.diff-slider-ticks-wrapper' ).width( sliderWidth );
+ $( '#diffslider' ).width( sliderWidth );
+ $( '#diff-slider-ticks' ).width( sliderWidth );
- if ( 1 === REVAPP._rightDiff )
- REVAPP._rightDiff = 2;
- REVAPP._revisionView.draggingLeft = false;
+ var aTickWidth = $( '.revision-tick' ).width();
- wpRevisionsSettings.revision_id = ''; // reset passed revision id so switching back to one handle mode doesn't re-select revision
- REVAPP.reloadLeftRight();
- REVAPP._revisionView.model = REVAPP._rightHandleRevisions;
+ if ( tickWidth !== aTickWidth ) { // is the width already set correctly?
+ $( '.revision-tick' ).each( function( ) {
+ $(this).css( 'margin-right', tickWidth - 1 + 'px'); // space the ticks out using right margin
+ });
- } else { // compare one mode
- REVAPP._compareOneOrTwo = 1 ;
- REVAPP._revisionView.draggingLeft = false;
- // REVAPP._leftDiff = 0;
- // REVAPP._rightDiff = (REVAPP._revisions.length <= REVAPP._rightDiff ) ? REVAPP._rightDiff + 1 : REVAPP._rightDiff + 1;
- REVAPP.reloadModelSingle();
- }
- // REVAPP._revisionView.render();
- REVAPP._revisionsInteractions.render();
- REVAPP._tickmarkView.render();
-
+ if( ! Diff.singleRevision ) {
+ $( '.revision-tick' ).first().remove(); // TODO - remove the check
+ }
+ $( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin
}
- }),
- // options view for show autosaves and show split view options
- /* DISABLED for now
- Options: Backbone.View.extend({
- el: $('#backbonerevisionsoptions')[0],
- tagName: 'revisionoptionsview',
- className: 'revisionoptions-container',
- template: wp.template('revisionoptions'),
+ },
- // render the options view
- render: function() {
- var addHtml = this.template;
- this.$el.html( addHtml );
- return this;
- },
+ // render the tickmark view
+ render: function() {
+ var self = this;
- // add options interactions
- events: {
- 'click #toggleshowautosaves': 'toggleshowautosaves',
- 'click #showsplitview': 'showsplitview'
- },
+ if ( null !== self.model ) {
+ var addHtml = "";
+ _.each ( self.model.models, function( theModel ) {
+ addHtml = addHtml + self.template ( theModel.toJSON() );
+ });
+ self.$el.html( addHtml );
- // toggle include autosaves
- toggleshowautosaves: function() {
- var self = this;
- if ( $( '#toggleshowautosaves' ).is( ':checked' ) ) {
- REVAPP._autosaves = true ;
- } else {
- REVAPP._autosaves = false ;
- }
+ }
+ self.resetTicks();
+ return self;
+ }
+ });
- // refresh the model data
- REVAPP.reloadModel();
- },
+ /**
+ * wp.revisions.view.Interact
+ *
+ * Next/Prev buttons and the slider
+ */
+ // TODO: Change Interact to something else.
+ revisions.view.Interact = Backbone.View.extend({
+ el: $('#backbonerevisionsinteract'),
+ template: wp.template('revision-interact'),
- // toggle showing the split diff view
- showsplitview: function() {
- var self = this;
+ // next and previous buttons, only available in compare one mode
+ events: {
+ 'click #next': 'nextRevision',
+ 'click #previous': 'previousRevision'
+ },
- if ( $( 'input#showsplitview' ).is( ':checked' ) ) {
- REVAPP._showSplitView = 'true';
- $('.revisiondiffcontainer').addClass('diffsplit');
- } else {
- REVAPP._showSplitView = '';
- $('.revisiondiffcontainer').removeClass('diffsplit');
- }
+ render: function() {
+ var self = this;
- REVAPP.reloadModel();
- }
- }),
- */
- // main interactions view
- Interact: Backbone.View.extend({
- el: $('#backbonerevisionsinteract')[0],
- tagName: 'revisionvinteract',
- className: 'revisionvinteract-container',
- template: wp.template('revisionvinteract'),
+ var addHtml = this.template;
+ this.$el.html( addHtml );
- initialize: function() {
- },
+ var modelcount = Diff.revisions.length;
- render: function() {
- var self = this;
+ Diff.slider.singleRevision = Diff.singleRevision;
+ Diff.slider.render();
- var addHtml = this.template;
- this.$el.html( addHtml );
+ if ( Diff.singleRevision ) {
+ Diff.slider.refresh({
+ value: Diff.rightDiff - 1,
+ min: 0,
+ max: modelcount - 1
+ });
- var modelcount = REVAPP._revisions.length;
+ $( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
- slider = $( "#slider" );
- if ( 1 === REVAPP._compareOneOrTwo ) {
- // set up the slider with a single handle
- slider.slider({
- value: REVAPP._rightDiff - 1,
- min: 0,
- max: modelcount - 1,
- step: 1,
+ } else {
+ Diff.slider.refresh({
+ values: [ Diff.leftDiff, Diff.rightDiff + 1 ],
+ min: 1,
+ max: modelcount + 1,
+ range: true
+ });
+ $( '.revisiondiffcontainer' ).addClass( 'comparetwo' );
+ $( '#diffslider a.ui-slider-handle' ).first().addClass( 'left-handle' );
+ $( '#diffslider a.ui-slider-handle' ).last().addClass( 'right-handle' );
- // slide interactions for one handles slider
- slide: function( event, ui ) {
+ }
- REVAPP._rightDiff = ( ui.value + 1 );
- REVAPP._revisionView.render();
- /*
- $( 'a.ui-slider-handle' ).tooltip( {
- content: REVAPP._revisions.at( ui.value ).get( 'revision_date_author_short' ),
- position: {
- my: "top-65",
- using: function( position, feedback ) {
- $( this ).css( position );
- $( "
" )
- .addClass( "arrow" )
- .addClass( feedback.vertical )
- .addClass( feedback.horizontal )
- .appendTo( this );
- }
- }
- });// .trigger( 'close' ).trigger( 'open' );
-*/
- }
- });
- $( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
+ return this;
+ },
- } else { // comparing more than one, eg 2
- // set up the slider with two handles
- slider.slider({
- values: [ REVAPP._leftDiff, REVAPP._rightDiff + 1 ],
- min: 1,
- max: modelcount + 1,
- step: 1,
- range: true,
+ // go to the next revision
+ nextRevision: function() {
+ if ( Diff.rightDiff < this.model.length ) // unless at right boundry
+ Diff.rightDiff = Diff.rightDiff + 1 ;
- // in two handled mode when user starts dragging, swap in precalculated diff for handle
- start: function(event, ui ) {
- var index = $( ui.handle ).index(); // 0 (left) or 1 (right)
- switch ( index ) {
- case 1: // left handle drag
- if ( REVAPP._leftModelLoading ) // left model still loading, prevent sliding left handle
- return false;
+ Diff.revisionView.render();
- REVAPP._revisionView.draggingLeft = true;
+ Diff.slider.refresh({
+ value: Diff.rightDiff - 1
+ }, true );
+ },
- if ( REVAPP._revisionView.model !== REVAPP._leftHandleRevisions &&
- null !== REVAPP._leftHandleRevisions ) {
- REVAPP._revisionView.model = REVAPP._leftHandleRevisions;
- REVAPP._tickmarkView.model = REVAPP._leftHandleRevisions;
- REVAPP._tickmarkView.render();
- }
+ // go the the previous revision
+ previousRevision: function() {
+ if ( Diff.rightDiff > 1 ) // unless at left boundry
+ Diff.rightDiff = Diff.rightDiff - 1 ;
- REVAPP._leftDiffStart = ui.values[ 0 ];
- break;
+ Diff.revisionView.render();
- case 2: // right
- if ( REVAPP._rightModelLoading || 0 === REVAPP._rightHandleRevisions.length) // right model still loading, prevent sliding right handle
- return false;
+ Diff.slider.refresh({
+ value: Diff.rightDiff - 1
+ }, true );
+ }
+ });
- if ( REVAPP._revisionView.model !== REVAPP._rightHandleRevisions &&
- null !== REVAPP._rightHandleRevisions ) {
- REVAPP._revisionView.model = REVAPP._rightHandleRevisions;
- REVAPP._tickmarkView.model = REVAPP._rightHandleRevisions;
- REVAPP._tickmarkView.render();
- }
+ /**
+ * wp.revisions.view.Diff
+ *
+ * Next/Prev buttons and the slider
+ */
+ revisions.view.Diff = Backbone.View.extend({
+ el: $('#backbonerevisionsdiff'),
+ template: wp.template('revision'),
+ draggingLeft: false,
- REVAPP._revisionView.draggingLeft = false;
- REVAPP._rightDiffStart = ui.values[1];
- break;
- }
- },
+ // the compare two button is in this view, add the interaction here
+ events: {
+ 'click #comparetwo': 'compareTwo',
+ 'click #restore': 'restore'
+ },
- // when sliding in two handled mode change appropriate value
- slide: function( event, ui ) {
- if ( ui.values[0] === ui.values[1] ) // prevent compare to self
- return false;
+ // render the revisions
+ render: function() {
+ var addHtml = '';
+ var thediff;
- var index = $( ui.handle ).index(); // 0 (left) or 1 (right)
+ // compare two revisions mode?
+ if ( ! Diff.singleRevision ) {
+ if ( this.draggingLeft ) {
+ thediff = Diff.leftDiff - 1;
+ if ( this.model.at( thediff ) ) {
+ addHtml = this.template( this.model.at( thediff ).toJSON() );
+ }
+ } else { // dragging right handle
+ thediff = Diff.rightDiff -1;
+ if ( this.model.at( thediff ) ) {
+ addHtml = this.template( this.model.at( thediff ).toJSON() );
+ }
+ }
+ } else { // end compare two revisions mode, eg only one slider handle
+ this.comparetwochecked = '';
+ if ( this.model.at( Diff.rightDiff - 1 ) ) {
+ addHtml = this.template( this.model.at( Diff.rightDiff - 1 ).toJSON() );
+ }
+ }
+ this.$el.html( addHtml );
- switch ( index ) {
- case 1: // left
- if ( REVAPP._leftModelLoading ) // left model still loading, prevent sliding left handle
- return false;
+ if ( this.model.length < 2 ) {
+ $( '#diffslider' ).hide(); // don't allow compare two if fewer than three revisions
+ $( '.diff-slider-ticks-wrapper' ).hide();
+ }
- REVAPP._leftDiff = ui.values[0];
- break;
+ // add tooltips to the handles
+ if ( ! Diff.singleRevision ) {
+ Diff.slider.addTooltip ( $( 'a.ui-slider-handle.left-handle' ),
+ ( Diff.leftDiff < 0 ) ? '' : Diff.revisions.at( Diff.leftDiff - 1 ).get( 'titleTooltip' ) );
+ Diff.slider.addTooltip ( $( 'a.ui-slider-handle.right-handle' ),
+ ( Diff.rightDiff > Diff.revisions.length ) ? '' : Diff.revisions.at( Diff.rightDiff - 1 ).get( 'titleTooltip' ) );
+ } else {
+ Diff.slider.addTooltip ( $( 'a.ui-slider-handle' ),
+ ( Diff.rightDiff > Diff.revisions.length ) ? '' : Diff.revisions.at( Diff.rightDiff - 1 ).get( 'titleTooltip' ) );
+ }
- case 2: // right
- if ( REVAPP._rightModelLoading ) // right model still loading, prevent sliding right handle
- return false;
+ this.toogleCompareTwoCheckbox();
- REVAPP._rightDiff = ui.values[1];
- break;
- }
+ // hide the restore button when on the last sport/current post data
+ if ( Diff.rightDiff === Diff.revisions.length ){
+ $( '#restore' ).hide();
+ } else {
+ $( '#restore' ).show();
+ }
- if ( 0 === REVAPP._leftDiff ) {
- $( '.revisiondiffcontainer' ).addClass( 'currentversion' );
+ return this;
+ },
- } else {
- $( '.revisiondiffcontainer' ).removeClass( 'currentversion' );
- }
+ toogleCompareTwoCheckbox: function() {
+ // don't allow compare two if fewer than three revisions
+ if ( this.model.length < 3 )
+ $( '#comparetworevisions' ).hide();
- REVAPP._revisionView.render();
+ $( '#comparetwo' ).prop( 'checked', ! Diff.singleRevision );
+ },
- },
+ // turn on/off the compare two mode
+ compareTwo: function() {
+ if ( $( 'input#comparetwo' ).is( ':checked' ) ) { // compare 2 mode
+ Diff.singleRevision = false ;
- // when the user stops sliding in 2 handle mode, recalculate diffs
- stop: function( event, ui ) {
- if ( 2 === REVAPP._compareOneOrTwo ) {
- // calculate and generate a diff for comparing to the left handle
- // and the right handle, swap out when dragging
+ if ( 1 === Diff.rightDiff )
+ Diff.rightDiff = 2;
- var index = $( ui.handle ).index(); // 0 (left) or 1 (right)
+ Diff.revisionView.draggingLeft = false;
- switch ( index ) {
- case 1: // left
+ revisions.model.settings.revision_id = ''; // reset passed revision id so switching back to one handle mode doesn't re-select revision
+ Diff.reloadLeftRight();
+ Diff.revisionView.model = Diff.rightHandleRevisions;
- // left handle dragged & changed, reload right handle model
- if ( REVAPP._leftDiffStart !== ui.values[0] )
- REVAPP.reloadRight();
+ } else { // compare one mode
+ Diff.singleRevision = true;
+ Diff.revisionView.draggingLeft = false;
+ Diff.reloadModelSingle();
+ }
+ Diff.revisionsInteractions.render();
+ Diff.tickmarkView.render();
+ },
- break;
+ restore: function() {
+ document.location = $( '#restore' ).data( 'restoreLink' );
+ }
+ });
- case 2: // right
- // REVAPP._rightDiff = ( 1 >= REVAPP._rightDiff ) ? 1 : REVAPP._rightDiff - 1;
- // right handle dragged & changed, reload left handle model if changed
- if ( REVAPP._rightDiffStart !== ui.values[1] )
- REVAPP.reloadLeft();
- break;
- }
- }
- }
- });
- $( '.revisiondiffcontainer' ).addClass( 'comparetwo' );
- $( '#diffslider a.ui-slider-handle' ).first().addClass( 'left-handle' ).next().addClass( 'right-handle' );
- }
+ /**
+ * ========================================================================
+ * MODELS
+ * ========================================================================
+ */
- return this;
- },
+ /**
+ * wp.revisions.Revision
+ */
+ Revision = revisions.model.Revision = Backbone.Model.extend({
+ idAttribute: 'ID',
+ urlRoot: ajaxurl + '?action=revisions-data' +
+ '&show_autosaves=true&show_split_view=true&nonce=' + revisions.model.settings.nonce,
+ defaults: {
+ ID: 0,
+ titleTo: '',
+ titleTooltip: '',
+ titleFrom: '',
+ diff: '
',
+ restoreLink: '',
+ revision_toload: false,
+ lines_added: 0,
+ lines_deleted: 0,
+ scope_of_changes: 'none',
+ previous_revision_id: 0
+ },
- // next and previous buttons, only available in compare one mode
- events: {
- 'click #next': 'nextRevision',
- 'click #previous': 'previousRevision'
- },
+ url: function() {
+ if ( Diff.singleRevision ) {
+ return this.urlRoot +
+ '&single_revision_id=' + this.id +
+ '&compare_to=' + this.get( 'previous_revision_id' ) +
+ '&post_id=' + revisions.model.settings.post_id;
+ } else {
+ return this.urlRoot + '&single_revision_id=' + this.id;
+ }
- // go to the next revision
- nextRevision: function() {
- if ( REVAPP._rightDiff < this.model.length ) // unless at right boundry
- REVAPP._rightDiff = REVAPP._rightDiff + 1 ;
+ }
+ });
- REVAPP._revisionView.render();
+ /**
+ * wp.revisions.Revisions
+ */
+ Revisions = revisions.Revisions = Backbone.Collection.extend({
+ model: Revision,
+ urlRoot: ajaxurl + '?action=revisions-data',
- $( '#slider' ).slider( 'value', REVAPP._rightDiff - 1 ).trigger( 'slide' );
- },
+ initialize: function( models, options ) {
+ this.options = _.defaults( options || {}, {
+ 'compareTo': revisions.model.settings.post_id,
+ 'post_id': revisions.model.settings.post_id,
+ 'showAutosaves': true,
+ 'showSplitView': true,
+ 'rightHandleAt': 0,
+ 'leftHandleAt': 0,
+ 'nonce': revisions.model.settings.nonce
+ });
+ },
- // go the the previous revision
- previousRevision: function() {
- if ( REVAPP._rightDiff > 1 ) // unless at left boundry
- REVAPP._rightDiff = REVAPP._rightDiff - 1 ;
+ url: function() {
+ return this.urlRoot +
+ '&compare_to=' + this.options.compareTo +
+ '&post_id=' + this.options.post_id +
+ '&show_autosaves=' + this.options.showAutosaves +
+ '&show_split_view=' + this.options.showSplitView +
+ '&right_handle_at=' + this.options.rightHandleAt +
+ '&left_handle_at=' + this.options.leftHandleAt +
+ '&nonce=' + this.options.nonce;
+ },
- REVAPP._revisionView.render();
+ reload: function( options ) {
+ this.options = _.defaults( options || {}, this.options );
- $( '#slider' ).slider( 'value', REVAPP._rightDiff - 1 ).trigger( 'slide' );
- }
- })
- });
+ // TODO
+ //this.fetch();
+ }
- // instantiate Revision Application
- REVAPP = new wp.revisions.App();
+ } );
+ $( wp.revisions );
+
}(jQuery));
Index: wp-admin/revision.php
===================================================================
--- wp-admin/revision.php (revision 23893)
+++ wp-admin/revision.php (working copy)
@@ -79,13 +79,21 @@
require_once( './admin-header.php' );
-//TODO - Some of the translations below split things into multiple strings that are contextually related and this makes it pretty impossible for RTL translation.
-//TODO can we pass the context in a better way
-$wpRevisionsSettings = array( 'post_id' => $post->ID,
- 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ),
- 'revision_id' => $revision_id );
-wp_localize_script( 'revisions', 'wpRevisionsSettings', $wpRevisionsSettings );
+$strings = array(
+ 'diffFromTitle' => _x( 'From: %s', 'revision from title' ),
+ 'diffToTitle' => _x( 'To: %s', 'revision to title' )
+);
+$settings = array(
+ 'post_id' => $post->ID,
+ 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ),
+ 'revision_id' => $revision_id
+);
+
+$strings['settings'] = $settings;
+
+wp_localize_script( 'revisions', 'wpRevisionsL10n', $strings );
+
$comparetworevisionslink = get_edit_post_link( $revision->ID );
?>
@@ -112,36 +120,39 @@
-
+
-
-
-*/
-require_once( './admin-footer.php' );
\ No newline at end of file
+require_once( './admin-footer.php' );