Make WordPress Core

Ticket #25073: 25073.diff

File 25073.diff, 6.1 KB (added by evansolomon, 12 years ago)
  • src/wp-includes/js/heartbeat.js

     
    2626window.wp = window.wp || {};
    2727
    2828(function($){
     29        var $document = $(document);
     30
    2931        var Heartbeat = function() {
    3032                var self = this,
    3133                        running,
    3234                        beat,
    33                         screenId = typeof pagenow != 'undefined' ? pagenow : '',
    34                         url = typeof ajaxurl != 'undefined' ? ajaxurl : '',
     35                        screenId = typeof window.pagenow != 'undefined' ? window.pagenow : '',
     36                        url = typeof window.ajaxurl != 'undefined' ? window.ajaxurl : '',
    3537                        settings,
    3638                        tick = 0,
    3739                        queue = {},
     
    8284                        $.extend( this, settings );
    8385                }
    8486
    85                 function time(s) {
    86                         if ( s )
    87                                 return parseInt( (new Date()).getTime() / 1000 );
    88 
    89                         return (new Date()).getTime();
    90                 }
    91 
    9287                function isLocalFrame( frame ) {
    9388                        var origin, src = frame.src;
    9489
     
    134129
    135130                                if ( trigger && ! self.hasConnectionError() ) {
    136131                                        hasConnectionError = true;
    137                                         $(document).trigger( 'heartbeat-connection-lost', [error] );
     132                                        $document.trigger( 'heartbeat-connection-lost', [error] );
    138133                                }
    139134                        } else if ( self.hasConnectionError() ) {
    140135                                errorcount = 0;
    141136                                hasConnectionError = false;
    142                                 $(document).trigger( 'heartbeat-connection-restored' );
     137                                $document.trigger( 'heartbeat-connection-restored' );
    143138                        }
    144139                }
    145140
    146141                function connect() {
    147142                        var send = {}, data, i, empty = true,
    148143                        nonce = typeof window.heartbeatSettings == 'object' ? window.heartbeatSettings.nonce : '';
    149                         tick = time();
     144                        tick = Date.now();
    150145
    151146                        data = $.extend( {}, queue );
    152147                        // Clear the data queue, anything added after this point will be send on the next tick
    153148                        queue = {};
    154149
    155                         $(document).trigger( 'heartbeat-send', [data] );
     150                        $document.trigger( 'heartbeat-send', [data] );
    156151
    157152                        for ( i in data ) {
    158153                                if ( data.hasOwnProperty( i ) ) {
     
    194189                                        errorstate();
    195190
    196191                                if ( response.nonces_expired ) {
    197                                         $(document).trigger( 'heartbeat-nonces-expired' );
     192                                        $document.trigger( 'heartbeat-nonces-expired' );
    198193                                        return;
    199194                                }
    200195
     
    219214                }
    220215
    221216                function next() {
    222                         var delta = time() - tick, t = interval;
     217                        var delta = Date.now() - tick, t = interval;
    223218
    224219                        if ( ! running )
    225220                                return;
     
    237232                                beat = window.setTimeout(
    238233                                        function(){
    239234                                                if ( running )
    240                                                         connect();
     235                                                        self.connect();
    241236                                        },
    242237                                        t - delta
    243238                                );
    244239                        } else {
    245                                 connect();
     240                                self.connect();
    246241                        }
    247242                }
    248243
     
    259254                        window.clearTimeout(frameBlurTimeout);
    260255                        winBlurTimeout = frameBlurTimeout = 0;
    261256
    262                         isUserActive = time();
     257                        isUserActive = Date.now();
    263258
    264259                        if ( hasFocus )
    265260                                return;
     
    281276
    282277                                $.data( frame, 'wp-heartbeat-focus', 1 );
    283278
    284                                 $( frame.contentWindow ).on( 'focus.wp-heartbeat-focus', function(e) {
    285                                         focused();
    286                                 }).on('blur.wp-heartbeat-focus', function(e) {
    287                                         setFrameEvents();
    288                                         frameBlurTimeout = window.setTimeout( function(){ blurred(); }, 500 );
    289                                 });
     279                                $( frame.contentWindow )
     280                                        .on( 'focus.wp-heartbeat-focus', focused )
     281                                        .on( 'blur.wp-heartbeat-focus', function() {
     282                                                setFrameEvents();
     283                                                frameBlurTimeout = window.setTimeout( blurred, 500 );
     284                                        });
    290285                        });
    291286                }
    292287
    293                 $(window).on( 'blur.wp-heartbeat-focus', function(e) {
     288                $(window).on( 'blur.wp-heartbeat-focus', function() {
    294289                        setFrameEvents();
    295                         winBlurTimeout = window.setTimeout( function(){ blurred(); }, 500 );
     290                        winBlurTimeout = window.setTimeout( blurred, 500 );
    296291                }).on( 'focus.wp-heartbeat-focus', function() {
    297292                        $('iframe').each( function( i, frame ) {
    298293                                if ( !isLocalFrame( frame ) )
     
    307302
    308303                function userIsActive() {
    309304                        userActiveEvents = false;
    310                         $(document).off( '.wp-heartbeat-active' );
     305                        $document.off( '.wp-heartbeat-active' );
    311306                        $('iframe').each( function( i, frame ) {
    312307                                if ( ! isLocalFrame( frame ) )
    313308                                        return;
     
    321316                // Set 'hasFocus = true' if user is active and the window is in the background.
    322317                // Set 'hasFocus = false' if the user has been inactive (no mouse or keyboard activity) for 5 min. even when the window has focus.
    323318                function checkUserActive() {
    324                         var lastActive = isUserActive ? time() - isUserActive : 0;
     319                        var lastActive = isUserActive ? Date.now() - isUserActive : 0;
    325320
    326321                        // Throttle down when no mouse or keyboard activity for 5 min
    327322                        if ( lastActive > 300000 && hasFocus )
    328                                  blurred();
     323                                blurred();
    329324
    330325                        if ( ! userActiveEvents ) {
    331                                 $(document).on( 'mouseover.wp-heartbeat-active keyup.wp-heartbeat-active', function(){ userIsActive(); } );
     326                                $document.on( 'mouseover.wp-heartbeat-active keyup.wp-heartbeat-active', userIsActive );
    332327
    333328                                $('iframe').each( function( i, frame ) {
    334329                                        if ( ! isLocalFrame( frame ) )
    335330                                                return;
    336331
    337                                         $( frame.contentWindow ).on( 'mouseover.wp-heartbeat-active keyup.wp-heartbeat-active', function(){ userIsActive(); } );
     332                                        $( frame.contentWindow ).on( 'mouseover.wp-heartbeat-active keyup.wp-heartbeat-active', userIsActive );
    338333                                });
    339334
    340335                                userActiveEvents = true;
     
    342337                }
    343338
    344339                // Check for user activity every 30 seconds.
    345                 window.setInterval( function(){ checkUserActive(); }, 30000 );
    346                 $(document).ready( function() {
     340                window.setInterval( checkUserActive, 30000 );
     341                $document.ready( function() {
    347342                        // Start one tick (15 sec) after DOM ready
    348343                        running = true;
    349                         tick = time();
     344                        tick = Date.now();
    350345                        next();
    351346                });
    352347
     
    383378                                                // Allow long polling, (experimental)
    384379                                                interval = 0;
    385380                                                return 0;
    386                                                 break;
    387381                                        default:
    388382                                                seconds = 15;
    389383                                                countdown = 0;
     
    449443
    450444        $.extend( Heartbeat.prototype, {
    451445                tick: function( data, textStatus, jqXHR ) {
    452                         $(document).trigger( 'heartbeat-tick', [data, textStatus, jqXHR] );
     446                        $document.trigger( 'heartbeat-tick', [data, textStatus, jqXHR] );
    453447                },
    454448                error: function( jqXHR, textStatus, error ) {
    455                         $(document).trigger( 'heartbeat-error', [jqXHR, textStatus, error] );
     449                        $document.trigger( 'heartbeat-error', [jqXHR, textStatus, error] );
    456450                }
    457451        });
    458452
    459         wp.heartbeat = new Heartbeat();
     453        window.wp.heartbeat = new Heartbeat();
    460454
    461455}(jQuery));