- WordPress core y plugins - Tema Twenty Twenty-Four configurado - Plugin allow-unfiltered-html.php simplificado - .gitignore configurado para excluir wp-config.php y uploads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
266 lines
5.7 KiB
JavaScript
Executable File
266 lines
5.7 KiB
JavaScript
Executable File
import {__} from '@wordpress/i18n';
|
|
import {registerBlockType} from '@wordpress/blocks';
|
|
import {PanelBody, PanelRow} from '@wordpress/components';
|
|
import {InspectorControls} from '@wordpress/block-editor';
|
|
import ultLogo from './logo';
|
|
|
|
import {
|
|
tveOuterHeight,
|
|
getPreviewLink,
|
|
renderCampaignSelect,
|
|
renderDesignSelect,
|
|
} from './utils';
|
|
|
|
/* global TVU_Data */
|
|
|
|
const createElement = wp.element.createElement;
|
|
|
|
registerBlockType( 'thrive/ultimatum-block', {
|
|
title: __( 'Thrive Ultimatum Countdown', 'thrive-ult' ),
|
|
icon: ultLogo,
|
|
description: __( 'Add Thrive Ultimatum countdown!', 'thrive-ult' ),
|
|
category: 'thrive',
|
|
attributes: {
|
|
selectedCampaign: {
|
|
type: 'number',
|
|
default: 0,
|
|
},
|
|
selectedDesign: {
|
|
type: 'number',
|
|
default: 0,
|
|
},
|
|
previewImage: {
|
|
type: 'boolean',
|
|
default: false,
|
|
},
|
|
},
|
|
example: {
|
|
attributes: {
|
|
previewImage: true,
|
|
},
|
|
},
|
|
edit: ( props ) => {
|
|
const campaign = props.attributes.selectedCampaign,
|
|
selectedDesign = props.attributes.selectedDesign,
|
|
className = props.className;
|
|
|
|
/**
|
|
* Render for the block preview while hovering the block
|
|
*/
|
|
if ( props.attributes.previewImage ) {
|
|
return [
|
|
wp.element.createElement( 'img', {
|
|
src: TVU_Data.block_preview,
|
|
} ),
|
|
];
|
|
}
|
|
|
|
const campaignOptions = [
|
|
{
|
|
value: 0,
|
|
label: __( '-- Select a campaign --', 'thrive-ult' ),
|
|
},
|
|
],
|
|
designOptions = [
|
|
{
|
|
value: 0,
|
|
label: __( '-- Select shortcode --', 'thrive-ult' ),
|
|
},
|
|
];
|
|
|
|
Object.keys( TVU_Data.campaigns ).forEach( ( campaignID ) => {
|
|
campaignOptions.push( {
|
|
value: parseInt( campaignID ),
|
|
label: TVU_Data.campaigns[ campaignID ].post_title,
|
|
} );
|
|
} );
|
|
|
|
if ( campaign && TVU_Data.campaigns[ campaign ] ) {
|
|
Object.keys( TVU_Data.campaigns[ campaign ].designs ).forEach(
|
|
( designID ) => {
|
|
designOptions.push( {
|
|
value: parseInt(
|
|
TVU_Data.campaigns[ campaign ].designs[ designID ]
|
|
.id
|
|
),
|
|
label:
|
|
TVU_Data.campaigns[ campaign ].designs[ designID ]
|
|
.post_title,
|
|
} );
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* render preview & setting options while the block is already selected
|
|
*/
|
|
if ( selectedDesign && campaign ) {
|
|
let designData;
|
|
if ( TVU_Data.campaigns[ campaign ] && TVU_Data.campaigns[ campaign ].designs ) {
|
|
Object.keys( TVU_Data.campaigns[ campaign ].designs ).forEach(
|
|
( designID ) => {
|
|
if (
|
|
parseInt(
|
|
TVU_Data.campaigns[ campaign ].designs[ designID ]
|
|
.id
|
|
) === selectedDesign
|
|
) {
|
|
designData =
|
|
TVU_Data.campaigns[ campaign ].designs[ designID ];
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
const editLink = designData ? designData.tcb_edit_url : '';
|
|
let previewLink = designData ? designData.tcb_preview_url : '';
|
|
if ( previewLink ) {
|
|
previewLink = getPreviewLink( previewLink );
|
|
}
|
|
|
|
return [
|
|
createElement(
|
|
InspectorControls,
|
|
null,
|
|
|
|
createElement(
|
|
PanelBody,
|
|
{
|
|
title: __( 'Block settings', 'thrive-ult' ),
|
|
initialOpen: true,
|
|
},
|
|
createElement(
|
|
PanelRow,
|
|
{},
|
|
|
|
createElement(
|
|
'a',
|
|
{
|
|
class: 'tvu-sidebar-edit-button',
|
|
href: editLink,
|
|
target: '_blank',
|
|
},
|
|
__( 'Edit Ultimatum timer', 'thrive-ult' )
|
|
)
|
|
),
|
|
createElement(
|
|
PanelRow,
|
|
{},
|
|
renderCampaignSelect(
|
|
campaignOptions,
|
|
props,
|
|
'Change Ultimatum campaign'
|
|
)
|
|
),
|
|
createElement(
|
|
PanelRow,
|
|
{},
|
|
renderDesignSelect(
|
|
designOptions,
|
|
props,
|
|
'Change Ultimatum shortcode'
|
|
)
|
|
)
|
|
)
|
|
),
|
|
createElement( 'iframe', {
|
|
src: previewLink,
|
|
id: `tvu-block-${selectedDesign}`,
|
|
class: `${className} tvu-block-preview tvu-block-${selectedDesign}`,
|
|
scrolling: 'no',
|
|
onLoad() {
|
|
const iframes = document.getElementsByClassName(
|
|
`tvu-block-${selectedDesign}`
|
|
);
|
|
|
|
/**
|
|
* in case of duplicate / copy-paste
|
|
*/
|
|
Array.prototype.forEach.call( iframes, iframe => {
|
|
const iframeDocument = iframe.contentDocument,
|
|
setHeight = () => {
|
|
const height = tveOuterHeight(
|
|
iframeDocument.body
|
|
);
|
|
iframe.style.setProperty(
|
|
'height',
|
|
`${height}px`
|
|
);
|
|
iframe.parentNode.style.setProperty(
|
|
'height',
|
|
`${height}px`
|
|
);
|
|
};
|
|
iframe.style.setProperty(
|
|
'pointer-events',
|
|
'none'
|
|
);
|
|
setHeight();
|
|
if ( iframe.contentWindow.TVE_Dash ) {
|
|
iframe.contentWindow.TVE_Dash.forceImageLoad(
|
|
iframeDocument
|
|
);
|
|
}
|
|
|
|
setTimeout( () => {
|
|
setHeight()
|
|
}, 3000 );
|
|
} );
|
|
},
|
|
} ),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Render add block functionality
|
|
*/
|
|
return [
|
|
createElement(
|
|
'div',
|
|
{
|
|
class: 'tvu-new-block-container',
|
|
},
|
|
ultLogo(),
|
|
createElement(
|
|
'div',
|
|
{
|
|
class: 'tvu-block-title',
|
|
},
|
|
createElement( 'h2', {}, 'Thrive Ultimatum Shortcode' )
|
|
),
|
|
createElement(
|
|
'div',
|
|
{
|
|
class: 'tvu-new-block-description',
|
|
},
|
|
__( 'Choose your Thrive Ultimatum Shortcode', 'thrive-ult' )
|
|
),
|
|
createElement(
|
|
'div',
|
|
{class: 'tvu-block-content'},
|
|
renderCampaignSelect( campaignOptions, props ),
|
|
renderDesignSelect( designOptions, props )
|
|
),
|
|
createElement(
|
|
'div',
|
|
{
|
|
class: 'tvu-go-dash',
|
|
},
|
|
__( 'Go to the ', 'thrive-ult' ),
|
|
createElement(
|
|
'a',
|
|
{
|
|
href: TVU_Data.dashboard_url,
|
|
target: '_blank',
|
|
},
|
|
__( 'Ultimatum Shortcodes Dashboard', 'thrive-ult' )
|
|
)
|
|
)
|
|
),
|
|
];
|
|
}, // How our block renders on the frontend
|
|
save: () => {
|
|
return null;
|
|
},
|
|
} );
|