Ticket #25073: 25073.diff
File 25073.diff, 6.1 KB (added by , 12 years ago) |
---|
-
src/wp-includes/js/heartbeat.js
26 26 window.wp = window.wp || {}; 27 27 28 28 (function($){ 29 var $document = $(document); 30 29 31 var Heartbeat = function() { 30 32 var self = this, 31 33 running, 32 34 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 : '', 35 37 settings, 36 38 tick = 0, 37 39 queue = {}, … … 82 84 $.extend( this, settings ); 83 85 } 84 86 85 function time(s) {86 if ( s )87 return parseInt( (new Date()).getTime() / 1000 );88 89 return (new Date()).getTime();90 }91 92 87 function isLocalFrame( frame ) { 93 88 var origin, src = frame.src; 94 89 … … 134 129 135 130 if ( trigger && ! self.hasConnectionError() ) { 136 131 hasConnectionError = true; 137 $ (document).trigger( 'heartbeat-connection-lost', [error] );132 $document.trigger( 'heartbeat-connection-lost', [error] ); 138 133 } 139 134 } else if ( self.hasConnectionError() ) { 140 135 errorcount = 0; 141 136 hasConnectionError = false; 142 $ (document).trigger( 'heartbeat-connection-restored' );137 $document.trigger( 'heartbeat-connection-restored' ); 143 138 } 144 139 } 145 140 146 141 function connect() { 147 142 var send = {}, data, i, empty = true, 148 143 nonce = typeof window.heartbeatSettings == 'object' ? window.heartbeatSettings.nonce : ''; 149 tick = time();144 tick = Date.now(); 150 145 151 146 data = $.extend( {}, queue ); 152 147 // Clear the data queue, anything added after this point will be send on the next tick 153 148 queue = {}; 154 149 155 $ (document).trigger( 'heartbeat-send', [data] );150 $document.trigger( 'heartbeat-send', [data] ); 156 151 157 152 for ( i in data ) { 158 153 if ( data.hasOwnProperty( i ) ) { … … 194 189 errorstate(); 195 190 196 191 if ( response.nonces_expired ) { 197 $ (document).trigger( 'heartbeat-nonces-expired' );192 $document.trigger( 'heartbeat-nonces-expired' ); 198 193 return; 199 194 } 200 195 … … 219 214 } 220 215 221 216 function next() { 222 var delta = time() - tick, t = interval;217 var delta = Date.now() - tick, t = interval; 223 218 224 219 if ( ! running ) 225 220 return; … … 237 232 beat = window.setTimeout( 238 233 function(){ 239 234 if ( running ) 240 connect();235 self.connect(); 241 236 }, 242 237 t - delta 243 238 ); 244 239 } else { 245 connect();240 self.connect(); 246 241 } 247 242 } 248 243 … … 259 254 window.clearTimeout(frameBlurTimeout); 260 255 winBlurTimeout = frameBlurTimeout = 0; 261 256 262 isUserActive = time();257 isUserActive = Date.now(); 263 258 264 259 if ( hasFocus ) 265 260 return; … … 281 276 282 277 $.data( frame, 'wp-heartbeat-focus', 1 ); 283 278 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 }); 290 285 }); 291 286 } 292 287 293 $(window).on( 'blur.wp-heartbeat-focus', function( e) {288 $(window).on( 'blur.wp-heartbeat-focus', function() { 294 289 setFrameEvents(); 295 winBlurTimeout = window.setTimeout( function(){ blurred(); }, 500 );290 winBlurTimeout = window.setTimeout( blurred, 500 ); 296 291 }).on( 'focus.wp-heartbeat-focus', function() { 297 292 $('iframe').each( function( i, frame ) { 298 293 if ( !isLocalFrame( frame ) ) … … 307 302 308 303 function userIsActive() { 309 304 userActiveEvents = false; 310 $ (document).off( '.wp-heartbeat-active' );305 $document.off( '.wp-heartbeat-active' ); 311 306 $('iframe').each( function( i, frame ) { 312 307 if ( ! isLocalFrame( frame ) ) 313 308 return; … … 321 316 // Set 'hasFocus = true' if user is active and the window is in the background. 322 317 // Set 'hasFocus = false' if the user has been inactive (no mouse or keyboard activity) for 5 min. even when the window has focus. 323 318 function checkUserActive() { 324 var lastActive = isUserActive ? time() - isUserActive : 0;319 var lastActive = isUserActive ? Date.now() - isUserActive : 0; 325 320 326 321 // Throttle down when no mouse or keyboard activity for 5 min 327 322 if ( lastActive > 300000 && hasFocus ) 328 323 blurred(); 329 324 330 325 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 ); 332 327 333 328 $('iframe').each( function( i, frame ) { 334 329 if ( ! isLocalFrame( frame ) ) 335 330 return; 336 331 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 ); 338 333 }); 339 334 340 335 userActiveEvents = true; … … 342 337 } 343 338 344 339 // 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() { 347 342 // Start one tick (15 sec) after DOM ready 348 343 running = true; 349 tick = time();344 tick = Date.now(); 350 345 next(); 351 346 }); 352 347 … … 383 378 // Allow long polling, (experimental) 384 379 interval = 0; 385 380 return 0; 386 break;387 381 default: 388 382 seconds = 15; 389 383 countdown = 0; … … 449 443 450 444 $.extend( Heartbeat.prototype, { 451 445 tick: function( data, textStatus, jqXHR ) { 452 $ (document).trigger( 'heartbeat-tick', [data, textStatus, jqXHR] );446 $document.trigger( 'heartbeat-tick', [data, textStatus, jqXHR] ); 453 447 }, 454 448 error: function( jqXHR, textStatus, error ) { 455 $ (document).trigger( 'heartbeat-error', [jqXHR, textStatus, error] );449 $document.trigger( 'heartbeat-error', [jqXHR, textStatus, error] ); 456 450 } 457 451 }); 458 452 459 w p.heartbeat = new Heartbeat();453 window.wp.heartbeat = new Heartbeat(); 460 454 461 455 }(jQuery));