PluginProbe ʕ •ᴥ•ʔ
AlphaListing / 4.4.0
AlphaListing v4.4.0
trunk 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0
alphalisting / scripts / blocks / shortcode-upgrader.js
alphalisting / scripts / blocks Last commit date
attributes.json 1 month ago constants.js 1 month ago edit.js 1 month ago index.js 1 month ago shortcode-attributes.js 1 month ago shortcode-upgrader.js 1 month ago
shortcode-upgrader.js
48 lines
1 import { createBlock } from '@wordpress/blocks';
2 import { subscribe, select, dispatch } from '@wordpress/data';
3
4 import { parseShortcodeAttributes } from './shortcode-attributes';
5
6 const validBlocks = ( blocks ) => Array.isArray( blocks ) && blocks.length > 0;
7
8 const isAlphaListingShortcode = ( shortcodeText ) => {
9 return typeof shortcodeText === 'string' && /^\s*\[alphalisting(?:\s|\]|$)/.test( shortcodeText );
10 };
11
12 const blockHandler = ( block ) => {
13 const attributes = parseShortcodeAttributes( block.attributes.text.trim() );
14 return createBlock( 'alphalisting/block', attributes );
15 };
16
17 const transform = ( block ) => {
18 if (
19 block.name === 'core/shortcode' &&
20 isAlphaListingShortcode( block.attributes.text )
21 ) {
22 dispatch( 'core/block-editor' ).replaceBlocks( [ block.clientId ], [ blockHandler( block ) ] );
23 return;
24 }
25
26 if ( validBlocks( block.innerBlocks ) ) {
27 convertBlocks( block.innerBlocks );
28 }
29 };
30
31 const convertBlocks = ( blocks ) => {
32 for ( const block of blocks ) {
33 transform( block );
34 }
35 };
36
37 export default () => {
38 const unsubscribe = subscribe( () => {
39 const coreEditor = select( 'core/block-editor' );
40 const blocks = coreEditor.getBlocks();
41
42 if ( validBlocks( blocks ) ) {
43 unsubscribe();
44 convertBlocks( blocks );
45 }
46 } );
47 };
48