WordPress.org

Make WordPress Core

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

File 23216-small-heartbeat-changes.2.diff, 3.6 KB (added by carldanley, 5 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 ) {