Make WordPress Core

Ticket #23216: 23216-small-heartbeat-changes.2.diff

File 23216-small-heartbeat-changes.2.diff, 3.6 KB (added by carldanley, 11 years ago)
  • wp-includes/js/heartbeat.js

     
    4040                        isUserActive,
    4141                        userActiveEvents,
    4242                        winBlurTimeout,
    43                         frameBlurTimeout = -1;
     43                        frameBlurTimeout = -1,
     44                        hasActiveConnection = true;
    4445
    45                 this.autostart = true;
    46                 this.connectionLost = false;
     46                /**
     47                 * If a value is specified, this function will set the internal value of the `hasActiveConnection` setting.
     48                 * Always returns the value of `hasActiveConnection`
     49                 *
     50                 * @param value (optional)
     51                 * @returns boolean
     52                 * @private
     53                 */
     54                this.hasActiveConnection = function( value ) {
     55                        if ( typeof value === 'boolean' ) {
     56                                return hasActiveConnection = value;
     57                        }
    4758
     59                        return hasActiveConnection;
     60                };
     61
    4862                if ( typeof( window.heartbeatSettings ) == 'object' ) {
    4963                        settings = $.extend( {}, window.heartbeatSettings );
    5064
     
    121135                                                break;
    122136                                }
    123137
    124                                 if ( trigger && ! self.connectionLost ) {
    125                                         self.connectionLost = true;
     138                                if ( trigger && self.hasActiveConnection() === true ) {
     139                                        self.hasActiveConnection( false );
    126140                                        $(document).trigger( 'heartbeat-connection-lost', [error] );
    127141                                }
    128                         } else if ( self.connectionLost ) {
     142                        } else if ( self.hasActiveConnection() === false ) {
    129143                                errorcount = 0;
    130                                 self.connectionLost = false;
     144                                self.hasActiveConnection( true );
    131145                                $(document).trigger( 'heartbeat-connection-restored' );
    132146                        }
    133147                }
     
    152166
    153167                        // If nothing to send (nothing is expecting a response),
    154168                        // schedule the next tick and bail
    155                         if ( empty && ! self.connectionLost ) {
     169                        if ( empty && self.hasActiveConnection() === true ) {
    156170                                connecting = false;
    157171                                next();
    158172                                return;
     
    179193                                        return errorstate( 'empty' );
    180194
    181195                                // Clear error state
    182                                 if ( self.connectionLost )
     196                                if ( self.hasActiveConnection() === false )
    183197                                        errorstate();
    184198
    185199                                if ( response.nonces_expired ) {
     
    205219                                errorstate( textStatus || 'unknown' );
    206220                                self.error( jqXHR, textStatus, error );
    207221                        });
    208                 };
     222                }
    209223
    210224                function next() {
    211225                        var delta = time() - tick, t = interval;
     
    332346
    333347                // Check for user activity every 30 seconds.
    334348                window.setInterval( function(){ checkUserActive(); }, 30000 );
     349                $(document).ready( function() {
     350                        // Start one tick (15 sec) after DOM ready
     351                        running = true;
     352                        tick = time();
     353                        next();
     354                });
    335355
    336                 if ( this.autostart ) {
    337                         $(document).ready( function() {
    338                                 // Start one tick (15 sec) after DOM ready
    339                                 running = true;
    340                                 tick = time();
    341                                 next();
    342                         });
    343                 }
    344 
    345356                this.hasFocus = function() {
    346357                        return hasFocus;
    347                 }
     358                };
    348359
    349360                /**
    350361                 * Get/Set the interval
     
    401412                        return tempInterval ? tempInterval / 1000 : interval / 1000;
    402413                };
    403414
    404                 // Start. Has no effect if heartbeat is already running
    405                 this.start = function() {
    406                         if ( running )
    407                                 return false;
    408 
    409                         running = true;
    410                         connect();
    411                         return true;
    412                 };
    413 
    414                 // Stop. If a XHR is in progress, abort it
    415                 this.stop = function() {
    416                         if ( self.xhr && self.xhr.readyState != 4 )
    417                                 self.xhr.abort();
    418 
    419                         // Reset the error state
    420                         errorstate();
    421                         running = false;
    422                         return true;
    423                 }
    424 
    425415                /**
    426416                 * Enqueue data to send with the next XHR
    427417                 *
     
    447437                                return true;
    448438                        }
    449439                        return false;
    450                 }
     440                };
    451441
    452442                /**
    453443                 * Check if data with a particular handle is queued
     
    457447                 */
    458448                this.isQueued = function( handle ) {
    459449                        return queue[handle];
    460                 }
    461         }
     450                };
     451        };
    462452
    463453        $.extend( Heartbeat.prototype, {
    464454                tick: function( data, textStatus, jqXHR ) {