%PDF- %PDF-
Direktori : /home/tradesc/www/relax/wp-content/plugins/wp-rocket/assets/js/ |
Current File : /home/tradesc/www/relax/wp-content/plugins/wp-rocket/assets/js/browser-checker.js |
class RocketBrowserCompatibilityChecker { constructor( options ) { this.passiveSupported = false; this._checkPassiveOption( this ); this.options = this.passiveSupported ? options : false; } /** * Initializes browser check for addEventListener passive option. * * @link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support * @private * * @param self Instance of this object. * @returns {boolean} */ _checkPassiveOption( self ) { try { const options = { // This function will be called when the browser attempts to access the passive property. get passive() { self.passiveSupported = true; return false; } }; window.addEventListener( 'test', null, options ); window.removeEventListener( 'test', null, options ); } catch ( err ) { self.passiveSupported = false; } } /** * Checks if the browser supports requestIdleCallback and cancelIdleCallback. If no, shims its behavior with a polyfills. * * @link @link https://developers.google.com/web/updates/2015/08/using-requestidlecallback */ initRequestIdleCallback() { if ( ! 'requestIdleCallback' in window ) { window.requestIdleCallback = ( cb ) => { const start = Date.now(); return setTimeout( () => { cb( { didTimeout: false, timeRemaining: function timeRemaining() { return Math.max( 0, 50 - ( Date.now() - start ) ); } } ); }, 1 ); }; } if ( ! 'cancelIdleCallback' in window ) { window.cancelIdleCallback = ( id ) => clearTimeout( id ); } } /** * Detects if data saver mode is on. * * @link https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/save-data/#detecting_the_save-data_setting * * @returns {boolean|boolean} */ isDataSaverModeOn() { return ( 'connection' in navigator && true === navigator.connection.saveData ); } /** * Checks if the browser supports link prefetch. * * @returns {boolean|boolean} */ supportsLinkPrefetch() { const elem = document.createElement( 'link' ); return ( elem.relList && elem.relList.supports && elem.relList.supports( 'prefetch' ) && window.IntersectionObserver && 'isIntersecting' in IntersectionObserverEntry.prototype ); } isSlowConnection() { return ( 'connection' in navigator && 'effectiveType' in navigator.connection && ( '2g' === navigator.connection.effectiveType || 'slow-2g' === navigator.connection.effectiveType ) ) } }