PluginProbe ʕ •ᴥ•ʔ
VK Blocks / 1.126.3
VK Blocks v1.126.3
1.126.4 1.126.3 1.126.1 1.126.2 1.126.0 1.125.0 1.124.0 1.123.0 1.122.0 1.121.0 1.120.0 1.119.2 1.119.1 1.119.0 1.118.7 1.82.0.0 1.82.0.1 1.83.0.0 1.83.0.1 1.84.0.0 1.84.0.1 1.85.0.2 1.85.0.3 1.85.1.0 1.85.1.1 1.86.0.0 1.86.0.1 1.86.1.0 1.87.0.0 1.87.0.1 1.88.0.1 1.88.0.2 1.89.0.0 1.9.2 1.90.0.0 1.90.0.1 1.90.1.1 1.91.0.0 1.91.1.1 1.92.0.0 1.92.0.1 1.92.1.0 1.92.1.1 1.93.0.0 trunk 1.93.0.1 0.1.1 1.93.1.0 0.10.3 1.93.1.1 0.11.0 1.94.0.0 0.12.6 1.94.0.1 0.15.1 1.94.1.0 0.16.2 1.94.2.1 0.17.6 1.94.2.2 0.2.2 1.95.0.3 0.22.4 1.95.0.4 0.26.7 1.96.2.0 0.3.2 1.96.2.1 0.31.0 1.97.0.1 0.35.5 1.97.0.2 0.37.5 1.99.0.0 0.38.8 1.99.0.1 0.39.4 0.4.7 0.41.0 0.42.0 0.44.13 0.45.2 0.46.1 0.47.0 0.48.0 0.49.8 0.5.2 0.50.3 0.51.0 0.52.2 0.53.2 0.54.0 0.55.0 0.56.2 0.56.3 0.57.6 0.58.10 0.59.0 0.6.0 0.60.1 0.61.2 0.7.1 0.8.2 1.0.16 1.10.0 1.100.0.0 1.100.0.1 1.102.0.0 1.102.0.1 1.103.0.0 1.104.0.0 1.104.0.1 1.105.1.0 1.105.1.1 1.106.0.0 1.106.0.1 1.107.0.0 1.107.0.1 1.107.0.2 1.108.0.0 1.108.0.1 1.109.0.0 1.109.0.1 1.11.4 1.110.0.0 1.110.0.1 1.111.0.0 1.111.0.1 1.111.0.2 1.112.0.0 1.112.0.1 1.113.0.0 1.113.0.1 1.114.0.0 1.114.0.1 1.114.2.0 1.114.2.1 1.115.0.0 1.115.0.1 1.115.1.0 1.115.1.1 1.115.2.0 1.115.2.1 1.116.0.0 1.116.0.1 1.116.1.0 1.116.1.1 1.116.2.0 1.117.0.0 1.117.0.1 1.117.1.0 1.118.2 1.118.5 1.12.0 1.13.2 1.14.1 1.15.1 1.16.11 1.17.0 1.18.6 1.19.0 1.19.1 1.2.3 1.20.7 1.21.0 1.22.4 1.23.0 1.24.5 1.25.1 1.26.2 1.27.7.2 1.28.0.1 1.29.2.0 1.3.9 1.30.0.1 1.31.0.1 1.32.0.2 1.33.2.1 1.36.1.5 1.37.0.0 1.39.2.1 1.4.6 1.40.0.1 1.40.1.0 1.40.1.1 1.41.0.0 1.41.0.1 1.41.2.2 1.41.2.3 1.43.0.0 1.43.0.1 1.43.0.2 1.44.0.0 1.44.0.1 1.45.0.0 1.45.0.1 1.46.0.0 1.46.0.1 1.47.0.0 1.47.0.1 1.47.1.0 1.48.0.0 1.48.0.1 1.48.0.2 1.48.1.0 1.48.1.1 1.5.0 1.50.0.0 1.50.0.1 1.51.0.0 1.51.0.1 1.52.0.0 1.52.0.1 1.53.0.0 1.53.0.1 1.54.0.0 1.54.0.1 1.55.0.0 1.55.0.1 1.56.0.0 1.56.0.1 1.57.0.0 1.57.0.2 1.57.0.3 1.57.0.4 1.57.0.5 1.57.1.0 1.57.1.1 1.57.1.2 1.58.0.0 1.58.0.1 1.59.0.0 1.59.0.1 1.6.0 1.60.0.0 1.60.0.1 1.63.0.0 1.63.0.1 1.64.0.0 1.64.0.1 1.64.1.0 1.64.1.2 1.67.0.0 1.67.0.1 1.68.0.0 1.68.0.1 1.69.0.0 1.69.0.1 1.69.1.1 1.69.1.2 1.7.1 1.70.0.0 1.70.0.1 1.71.0.0 1.71.0.1 1.72.0.0 1.72.1.0 1.72.1.1 1.73.0.0 1.73.0.1 1.74.0.0 1.74.0.1 1.75.0.0 1.75.1.0 1.75.1.1 1.76.0.0 1.76.0.1 1.76.1.0 1.76.1.1 1.76.2.0 1.76.2.1 1.77.0.0 1.77.0.1 1.78.0.0 1.78.0.1 1.79.0.0 1.79.0.1 1.79.0.2 1.79.0.3 1.79.1.0 1.79.1.1 1.8.2 1.80.1.0 1.80.1.1 1.80.1.2 1.81.0.1 1.81.0.2
vk-blocks / src / blocks / ancestor-page-list / edit.js
vk-blocks / src / blocks / ancestor-page-list Last commit date
block.json 3 months ago edit.js 3 months ago icon.svg 3 months ago index.js 3 months ago index.php 3 months ago style.scss 3 months ago
edit.js
157 lines
1 // import WordPress Scripts
2 import { __ } from '@wordpress/i18n';
3 import {
4 PanelBody,
5 SelectControl,
6 ToggleControl,
7 TextControl,
8 } from '@wordpress/components';
9 import ServerSideRender from '@wordpress/server-side-render';
10 import { InspectorControls, useBlockProps } from '@wordpress/block-editor';
11 import { useEffect } from '@wordpress/element';
12
13 // 正規表現を定数として定義
14 const TITLE_TAG_REGEX = /^(h[2-6]).*/;
15 const CLASS_NAME_REGEX = /[^a-zA-Z0-9-_ ]/g;
16
17 export default function AncestorPageListEdit(props) {
18 const { attributes, setAttributes } = props;
19 const {
20 ancestorTitleDisplay,
21 ancestorTitleTagName,
22 ancestorTitleClassName,
23 ancestorTitleLink,
24 displayHasChildOnly,
25 hiddenGrandChild,
26 } = attributes;
27
28 const blockProps = useBlockProps();
29
30 // タイトルタグのバリデーション関数
31 const validateTitleTag = (value) => {
32 const matches = value?.match(TITLE_TAG_REGEX);
33 return matches ? matches[1] : 'h4'; // デフォルト値を設定
34 };
35
36 // クラス名のサニタイズ関数
37 const sanitizeClassName = (value) => {
38 return value?.replace(CLASS_NAME_REGEX, '') || '';
39 };
40
41 // useEffectを使ってレンダリング後にstateを更新
42 useEffect(() => {
43 const validatedTag = validateTitleTag(ancestorTitleTagName);
44 const sanitizedValue = sanitizeClassName(ancestorTitleClassName);
45 const updates = {};
46 if (validatedTag !== ancestorTitleTagName) {
47 updates.ancestorTitleTagName = validatedTag;
48 }
49 if (sanitizedValue !== ancestorTitleClassName) {
50 updates.ancestorTitleClassName = sanitizedValue;
51 }
52 if (Object.keys(updates).length > 0) {
53 setAttributes(updates);
54 }
55 }, [ancestorTitleTagName, ancestorTitleClassName]);
56
57 return (
58 <>
59 <InspectorControls>
60 <PanelBody
61 title={__('Ancestor Page List Setting', 'vk-blocks')}
62 >
63 <ToggleControl
64 label={__('Display Ancestor Page Title', 'vk-blocks')}
65 checked={ancestorTitleDisplay}
66 onChange={(checked) =>
67 setAttributes({ ancestorTitleDisplay: checked })
68 }
69 />
70 <SelectControl
71 label={__('Ancestor title tag', 'vk-blocks')}
72 value={ancestorTitleTagName}
73 onChange={(value) => {
74 setAttributes({
75 ancestorTitleTagName: validateTitleTag(value),
76 });
77 }}
78 options={[
79 {
80 value: 'h2',
81 label: __('h2', 'vk-blocks'),
82 },
83 {
84 value: 'h3',
85 label: __('h3', 'vk-blocks'),
86 },
87 {
88 value: 'h4',
89 label: __('h4', 'vk-blocks'),
90 },
91 {
92 value: 'h5',
93 label: __('h5', 'vk-blocks'),
94 },
95 {
96 value: 'h6',
97 label: __('h6', 'vk-blocks'),
98 },
99 ]}
100 />
101 <TextControl
102 label={__(
103 'Ancestor page title class name',
104 'vk-blocks'
105 )}
106 value={ancestorTitleClassName || ''}
107 className={`mt-0 mb-3`}
108 onChange={(value) => {
109 setAttributes({
110 ancestorTitleClassName:
111 sanitizeClassName(value),
112 });
113 }}
114 />
115 <ToggleControl
116 label={__(
117 'Add link to ancestor page title',
118 'vk-blocks'
119 )}
120 checked={ancestorTitleLink}
121 onChange={(checked) =>
122 setAttributes({ ancestorTitleLink: checked })
123 }
124 />
125 <hr />
126 <ToggleControl
127 label={__(
128 'If there is no child page, the block itself is not displayed',
129 'vk-blocks'
130 )}
131 checked={displayHasChildOnly}
132 onChange={(checked) =>
133 setAttributes({ displayHasChildOnly: checked })
134 }
135 />
136 <ToggleControl
137 label={__(
138 "Don't display inactive grand child pages",
139 'vk-blocks'
140 )}
141 checked={hiddenGrandChild}
142 onChange={(checked) =>
143 setAttributes({ hiddenGrandChild: checked })
144 }
145 />
146 </PanelBody>
147 </InspectorControls>
148 <div {...blockProps}>
149 <ServerSideRender
150 block="vk-blocks/ancestor-page-list"
151 attributes={attributes}
152 />
153 </div>
154 </>
155 );
156 }
157