[Back] import $ from 'jquery';
import rafSchd from 'raf-schd';
import { throttle } from 'throttle-debounce';
const { elementorFrontend, VPAdminElementorVariables: variables } = window;
const $wnd = $(window);
$wnd.on('elementor/frontend/init', ($data) => {
if (!variables) {
return;
}
const { target: elementorWindow } = $data;
// add fake iframe width, so @media styles will work fine.
function maybeResizePreviews() {
const elementorWidth = elementorWindow
.jQuery(elementorWindow.document)
.width();
elementorWindow.jQuery
.find('.visual-portfolio-elementor-preview iframe')
.forEach((item) => {
const $this = $(item);
const parentWidth = $this.parent().width();
$this.css({
width: elementorWidth,
});
if (item.iFrameResizer) {
item.iFrameResizer.sendMessage({
name: 'resize',
width: parentWidth,
});
item.iFrameResizer.resize();
}
});
}
// window resize.
$wnd.on('resize', throttle(300, rafSchd(maybeResizePreviews)));
// added/changed widget.
elementorFrontend.hooks.addAction(
'frontend/element_ready/visual-portfolio.default',
($scope) => {
const $block = $($scope).find(
'.visual-portfolio-elementor-preview'
);
const $frame = $block.find('iframe');
const id = $block.attr('data-id');
const iframeURL = `${
variables.preview_url +
(variables.preview_url.split('?')[1] ? '&' : '?')
}vp_preview_frame=true&vp_preview_type=elementor&vp_preview_frame_id=${id}&vp_preview_nonce=${
variables.nonce
}`;
$frame.attr('src', iframeURL);
// resize iframe
if ($.fn.iFrameResize) {
$frame.iFrameResize({
onInit() {
maybeResizePreviews();
},
onMessage({ message }) {
// select current block on click message.
if (message === 'clicked') {
// Select current widget to display settings.
$frame
.closest('.elementor-element')
.find('.elementor-editor-element-edit')
.click();
window.focus();
}
},
});
}
}
);
});