( function( window, factory ) {
    const globalInstall = function() {
        factory( window.lazySizes );
        window.removeEventListener( 'lazyunveilread', globalInstall, true );
    };
    factory = factory.bind( null, window, window.document );

    if ( window.lazySizes ) {
        globalInstall();
    } else {
        window.addEventListener( 'lazyunveilread', globalInstall, true );
    }
}( window, ( window, document, lazySizes ) => {
    if ( ! window.addEventListener ) {
        return;
    }

    const getCSS = function( elem ) {
        return ( window.getComputedStyle( elem, null ) || {} );
    };

    const objectFitCover = {
        calculateSize( element, width ) {
            const CSS = getCSS( element );

            if ( CSS && CSS.objectFit && 'cover' === CSS.objectFit ) {
                const blockHeight = parseInt( element.getAttribute( 'height' ), 10 );
                const blockWidth = parseInt( element.getAttribute( 'width' ), 10 );

                if ( blockHeight ) {
                    if ( blockWidth / blockHeight > element.clientWidth / element.clientHeight ) {
                        width = parseInt( ( element.clientHeight * blockWidth ) / blockHeight, 10 );
                    }
                }
            }

            return width;
        },
    };

    lazySizes.objectFitCover = objectFitCover;

    document.addEventListener( 'lazybeforesizes', ( e ) => {
        if ( e.defaultPrevented || e.detail.instance !== lazySizes ) {
            return;
        }

        const element = e.target;
        e.detail.width = objectFitCover.calculateSize( element, e.detail.width );
    } );
} ) );
