window.addEventListener( 'load', () => { const FRONTEND_SELECTOR = '.wp-block-jetpack-contact-form-container'; const EDITOR_SELECTOR = '[data-type="jetpack/contact-form"]'; const observer = new MutationObserver( () => { generateStyleVariables( FRONTEND_SELECTOR ); generateStyleVariables( EDITOR_SELECTOR ); } ); observer.observe( document.querySelector( 'body' ), { childList: true, subtree: true, } ); //Make sure to execute at least once if not triggered by the observer setTimeout( () => { generateStyleVariables( FRONTEND_SELECTOR ); generateStyleVariables( EDITOR_SELECTOR ); }, 300 ); } ); function generateStyleVariables( selector, outputSelector = 'body' ) { const STYLE_PROBE_CLASS = 'contact-form__style-probe'; const STYLE_PROBE_STYLE = 'position: absolute; z-index: -1; width: 1px; height: 1px; visibility: hidden'; const HTML = `
`; const iframeCanvas = document.querySelector( 'iframe[name="editor-canvas"]' ); const doc = iframeCanvas ? iframeCanvas.contentDocument : document; if ( ! doc.querySelectorAll( selector ).length || doc.querySelectorAll( `.${ STYLE_PROBE_CLASS }` ).length ) { return; } const styleProbe = doc.createElement( 'div' ); styleProbe.className = STYLE_PROBE_CLASS; styleProbe.style = STYLE_PROBE_STYLE; styleProbe.innerHTML = HTML; const container = doc.querySelector( selector ); container.appendChild( styleProbe ); const bodyNode = doc.querySelector( 'body' ); const buttonNode = styleProbe.querySelector( '.wp-block-button__link' ); const inputNode = styleProbe.querySelector( 'input[type="text"]' ); const backgroundColor = window.getComputedStyle( bodyNode ).backgroundColor; const primaryColor = window.getComputedStyle( buttonNode ).borderColor; const { color: textColor, padding: inputPadding, backgroundColor: inputBackground, border, borderColor, borderWidth, borderStyle, borderRadius, fontSize, fontFamily, lineHeight, } = window.getComputedStyle( inputNode ); const outputContainer = doc.querySelector( outputSelector ); outputContainer.style.setProperty( '--jetpack--contact-form--primary-color', primaryColor ); outputContainer.style.setProperty( '--jetpack--contact-form--background-color', backgroundColor ); outputContainer.style.setProperty( '--jetpack--contact-form--text-color', textColor ); outputContainer.style.setProperty( '--jetpack--contact-form--border', border ); outputContainer.style.setProperty( '--jetpack--contact-form--border-color', borderColor ); outputContainer.style.setProperty( '--jetpack--contact-form--border-size', borderWidth ); outputContainer.style.setProperty( '--jetpack--contact-form--border-style', borderStyle ); outputContainer.style.setProperty( '--jetpack--contact-form--border-radius', borderRadius ); outputContainer.style.setProperty( '--jetpack--contact-form--input-background', inputBackground ); outputContainer.style.setProperty( '--jetpack--contact-form--input-padding', inputPadding ); outputContainer.style.setProperty( '--jetpack--contact-form--font-size', fontSize ); outputContainer.style.setProperty( '--jetpack--contact-form--font-family', fontFamily ); outputContainer.style.setProperty( '--jetpack--contact-form--line-height', lineHeight ); }