Ticket #24758: 24758.7.diff
File 24758.7.diff, 5.8 KB (added by , 11 years ago) |
---|
-
wp-admin/css/wp-admin.css
body.revision-php { 3554 3554 height: 140px; 3555 3555 } 3556 3556 3557 .revisions .diff-error { 3558 position: absolute; 3559 text-align: center; 3560 margin: 0 auto; 3561 width: 100%; 3562 display: none; 3563 } 3564 3565 .revisions.diff-error .diff-error { 3566 display: block; 3567 } 3568 3557 3569 .revisions .loading-indicator { 3558 3570 position: absolute; 3559 3571 text-align: center; … … body.revision-php { 3561 3573 opacity: 0; 3562 3574 margin: 0 auto; 3563 3575 width: 100%; 3564 height: 32px;3576 height: 16px; 3565 3577 top: 3em; 3566 background: #fff url(../images/wpspin_light -2x.gif) no-repeat center top;3578 background: #fff url(../images/wpspin_light.gif) no-repeat center top; 3567 3579 -webkit-transition: opacity 0.5s; 3568 3580 -moz-transition: opacity 0.5s; 3569 3581 -ms-transition: opacity 0.5s; … … body.revision-php { 3587 3599 opacity: 0.5; 3588 3600 } 3589 3601 3602 .revisions.diff-error .diff { 3603 display: none; 3604 } 3605 3590 3606 .revisions-meta { 3591 3607 margin-top: 15px; 3592 3608 } -
wp-admin/includes/ajax-actions.php
function wp_ajax_get_revision_diffs() { 2113 2113 'fields' => wp_get_revision_ui_diff( $post, $compare_from, $compare_to ), 2114 2114 ); 2115 2115 } 2116 sleep( rand(0, 3) ); 2117 if ( rand(0, 3) === 0 ) 2118 die(); 2116 2119 wp_send_json_success( $return ); 2117 2120 } -
wp-admin/js/revisions.js
window.wp = window.wp || {}; 233 233 234 234 request.done( _.bind( function() { 235 235 deferred.resolveWith( context, [ this.get( id ) ] ); 236 }, this ) ); 236 }, this ) ).fail( _.bind( function() { 237 deferred.reject(); 238 }) ); 237 239 } 238 240 239 241 return deferred.promise(); … … window.wp = window.wp || {}; 256 258 diffs = _.first( this.getClosestUnloaded( allRevisionIds, centerId ), num ); 257 259 if ( _.size( diffs ) > 0 ) { 258 260 this.load( diffs ).done( function() { 259 deferred.resolve(); 260 self._loadAll( allRevisionIds, centerId, num ); 261 self._loadAll( allRevisionIds, centerId, num ).done( function() { 262 deferred.resolve(); 263 }); 264 }).fail( function() { 265 if ( 1 === num ) { // Already tried 1. This just isn't working. Give up. 266 deferred.reject(); 267 } else { // Request fewer diffs this time 268 self._loadAll( allRevisionIds, centerId, Math.ceil( num / 2 ) ).done( function() { 269 deferred.resolve(); 270 }); 271 } 261 272 }); 262 return deferred.promise();263 273 } else { 264 return deferred.reject().promise();274 deferred.resolve(); 265 275 } 276 return deferred; 266 277 }, 267 278 268 279 load: function( comparisons ) { … … window.wp = window.wp || {}; 314 325 revisions.model.FrameState = Backbone.Model.extend({ 315 326 defaults: { 316 327 loading: false, 328 error: false, 317 329 compareTwoMode: false 318 330 }, 319 331 320 332 initialize: function( attributes, options ) { 321 333 var properties = {}; 322 334 335 _.bindAll( this, 'receiveDiff' ); 323 336 this._debouncedEnsureDiff = _.debounce( this._ensureDiff, 200 ); 324 337 325 338 this.revisions = options.revisions; … … window.wp = window.wp || {}; 351 364 }, 352 365 353 366 updateLoadingStatus: function() { 367 this.set( 'error', false ); 354 368 this.set( 'loading', ! this.diff() ); 355 369 }, 356 370 … … window.wp = window.wp || {}; 399 413 400 414 // If we already have the diff, then immediately trigger the update. 401 415 if ( diff ) { 402 this. trigger( 'update:diff',diff );416 this.receiveDiff( diff ); 403 417 return $.Deferred().resolve().promise(); 404 418 // Otherwise, fetch the diff. 405 419 } else { … … window.wp = window.wp || {}; 418 432 this.updateDiff(); 419 433 }, 420 434 435 receiveDiff: function( diff ) { 436 // Did we actually get a diff? 437 if ( _.isUndefined( diff ) || _.isUndefined( diff.id ) ) { 438 this.set({ 439 loading: false, 440 error: true 441 }); 442 } else if ( this._diffId === diff.id ) { // Make sure the current diff didn't change 443 this.trigger( 'update:diff', diff ); 444 } 445 }, 446 421 447 _ensureDiff: function() { 422 return this.diffs.ensure( this._diffId, this ).done( function( diff ) { 423 // Make sure the current diff didn't change while the request was in flight. 424 if ( this._diffId === diff.id ) 425 this.trigger( 'update:diff', diff ); 426 }); 448 return this.diffs.ensure( this._diffId, this ).always( this.receiveDiff ); 427 449 } 428 450 }); 429 451 … … window.wp = window.wp || {}; 443 465 this.listenTo( this.model, 'update:diff', this.renderDiff ); 444 466 this.listenTo( this.model, 'change:compareTwoMode', this.updateCompareTwoMode ); 445 467 this.listenTo( this.model, 'change:loading', this.updateLoadingStatus ); 468 this.listenTo( this.model, 'change:error', this.updateErrorStatus ); 446 469 447 470 this.views.set( '.revisions-control-frame', new revisions.view.Controls({ 448 471 model: this.model … … window.wp = window.wp || {}; 470 493 this.$el.toggleClass( 'loading', this.model.get('loading') ); 471 494 }, 472 495 496 updateErrorStatus: function() { 497 this.$el.toggleClass( 'diff-error', this.model.get('error') ); 498 }, 499 473 500 updateCompareTwoMode: function() { 474 501 this.$el.toggleClass( 'comparing-two-revisions', this.model.get('compareTwoMode') ); 475 502 } -
wp-admin/revision.php
require_once( './admin-header.php' ); 187 187 188 188 <script id="tmpl-revisions-diff" type="text/html"> 189 189 <div class="loading-indicator"></div> 190 <div class="diff-error"><?php _e( 'Sorry, something went wrong. The requested comparison could not be loaded.' ); ?></div> 190 191 <div class="diff"> 191 192 <# _.each( data.fields, function( field ) { #> 192 193 <h3>{{ field.name }}</h3>