PluginProbe
Extendify / 3.1.0
Extendify v3.1.0
3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 0.7.0 All 126 releases
extendify / src / Library / components / BlockPreviewButton.jsx

BlockPreviewButton.jsx in Extendify 3.1.0, at src/Library/components/BlockPreviewButton.jsx

58 lines 1.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { usePreviewIframe } from '@library/hooks/usePreviewIframe';
2 import { BlockPreview } from '@wordpress/block-editor';
3 import { rawHandler } from '@wordpress/blocks';
4 import { useEffect, useMemo, useRef, useState } from '@wordpress/element';
5 import { __ } from '@wordpress/i18n';
6 import classNames from 'classnames';
7
8 export const BlockPreviewButton = ({ insertPattern, code }) => {
9 const [ready, setReady] = useState(false);
10 const blockRef = useRef();
11 const blocks = useMemo(
12 () => rawHandler({ HTML: lowerImageQuality(code) }),
13 [code],
14 );
15 const { ready: show } = usePreviewIframe({
16 container: blockRef.current,
17 ready,
18 onIFrameLoaded: () => undefined,
19 loadDelay: 50,
20 });
21
22 useEffect(() => setReady(true), []);
23
24 return (
25 <button
26 ref={blockRef}
27 type="button"
28 aria-label={__('Insert Pattern', 'extendify-local')}
29 className={classNames(
30 'library-pattern relative z-10 m-0 mb-8 inline-block w-full border bg-transparent p-0 focus:shadow-xs focus:outline-hidden focus:ring-wp focus:ring-design-main focus:ring-offset-2 focus:ring-offset-[#FAFAFA]',
31 {
32 'border-transparent opacity-0': !show,
33 'border-gray-400 opacity-100': show,
34 },
35 )}
36 onClick={() => insertPattern(blocks)}
37 >
38 <BlockPreview
39 blocks={blocks}
40 live={false}
41 viewportWidth={1400}
42 additionalStyles={[
43 {
44 css: '.rich-text [data-rich-text-placeholder]:after { content: "" }',
45 },
46 ]}
47 />
48 </button>
49 );
50 };
51
52 const lowerImageQuality = (html) => {
53 return html.replace(
54 /(https?:\/\/\S+\?w=\d+)/gi,
55 '$1&q=10&auto=format,compress&fm=avif',
56 );
57 };
58