Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .config/webpack.config.dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ module.exports = [
'frontend_block_progress_bar': path.resolve( __dirname, '../src/block/progress-bar/frontend-progress-bar.js' ),
'frontend_block_horizontal_scroller': path.resolve( __dirname, '../src/block/horizontal-scroller/frontend-horizontal-scroller.js' ),
'frontend_block_tabs': path.resolve( __dirname, '../src/block/tabs/frontend-tabs.js' ),
'frontend_image_optimizer_polyfill': path.resolve( __dirname, '../src/block-components/image/image-optimizer-polyfill.js' ),
},

output: {
Expand Down
1 change: 1 addition & 0 deletions .config/webpack.config.prod.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ module.exports = [
'frontend_block_progress_bar': path.resolve( __dirname, '../src/block/progress-bar/frontend-progress-bar.js' ),
'frontend_block_horizontal_scroller': path.resolve( __dirname, '../src/block/horizontal-scroller/frontend-horizontal-scroller.js' ),
'frontend_block_tabs': path.resolve( __dirname, '../src/block/tabs/frontend-tabs.js' ),
'frontend_image_optimizer_polyfill': path.resolve( __dirname, '../src/block-components/image/image-optimizer-polyfill.js' ),
},

output: {
Expand Down
1 change: 1 addition & 0 deletions plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ function is_frontend() {
require_once( plugin_dir_path( __FILE__ ) . 'src/block/columns/index.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/block/timeline/index.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/block/icon-label/deprecated.php' );
require_once( plugin_dir_path( __FILE__ ) . 'src/block-components/image/index.php' );
}

/**
Expand Down
37 changes: 37 additions & 0 deletions src/block-components/image/image-optimizer-polyfill.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/**
* WordPress dependencies
*/
import domReady from '@wordpress/dom-ready'

class ImageOptimizerPolyfill {
init = () => {
const imgs = document.querySelectorAll( '.stk-block img' )
imgs.forEach( img => {
if ( img.hasAttribute( 'srcset' ) ) {
let srcset = img.getAttribute( 'srcset' )
const pattern = /https?:\/\/[^\s,]+/g
const urls = srcset.match( pattern )

urls.forEach( url => {
const index = url.indexOf( '&fit' )
if ( index !== -1 ) {
const newUrl = url.slice( 0, index )
srcset = srcset.replace( url, newUrl )
}
} )

img.setAttribute( 'srcset', srcset )
}

if ( img.getAttribute( 'src' ).indexOf( '&fit' ) !== -1 ) {
const src = img.getAttribute( 'src' )
const index = src.indexOf( '&fit' )
const newSrc = src.slice( 0, index )
img.setAttribute( 'src', newSrc )
}
} )
}
}

window.ImageOptimizerPolyfill = new ImageOptimizerPolyfill()
domReady( window.ImageOptimizerPolyfill.init )
27 changes: 27 additions & 0 deletions src/block-components/image/index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}

if ( ! function_exists( 'stackable_load_image_optimizer_polyfill_frontend_script' ) ) {
function stackable_load_image_optimizer_polyfill_frontend_script( $block_content, $block ) {
if ( ! is_admin() ) {
wp_enqueue_script(
'stk-frontend-image-optimizer-polyfill',
plugins_url( 'dist/frontend_image_optimizer_polyfill.js', STACKABLE_FILE ),
array(),
STACKABLE_VERSION,
true
);

// Only do this once.
remove_action( 'stackable/enqueue_scripts', 'stackable_load_image_optimizer_polyfill_frontend_script', 10 );
}
}

if ( ! is_admin() ) {
add_action( 'stackable/enqueue_scripts', 'stackable_load_image_optimizer_polyfill_frontend_script', 10, 2 );
}
}
Loading