PluginProbe ʕ •ᴥ•ʔ
VK Blocks / 1.124.0
VK Blocks v1.124.0
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 / extensions / core / navigation / style.js
vk-blocks / src / extensions / core / navigation Last commit date
style.js 2 months ago style.scss 2 months ago
style.js
157 lines
1 /**
2 * navigation block extension
3 *
4 * Add an option to display the menu item description on the core/navigation block.
5 * core/navigation ブロックにメニュー�
6 目の説明を表示するオプションを追加する拡張。
7 */
8 import { __ } from '@wordpress/i18n';
9 import { addFilter } from '@wordpress/hooks';
10 import { PanelBody, ToggleControl } from '@wordpress/components';
11 import { createHigherOrderComponent } from '@wordpress/compose';
12 import { InspectorControls } from '@wordpress/block-editor';
13 import classnames from 'classnames';
14
15 /**
16 * Internal dependencies
17 */
18 import { VkPanelIcon } from '@vkblocks/components/vk-icon';
19
20 // トグル ON 時にブロックの最外殻へ付与するブロック単位クラス
21 // Block-scoped class added to the block wrapper when the toggle is ON.
22 export const VK_NAV_SHOW_DESCRIPTION_CLASS = 'vk-navigation-show-description';
23
24 const isNavigationBlock = (name) => name === 'core/navigation';
25
26 /**
27 * Add the inspector control (PanelBody + ToggleControl) to the
28 * core/navigation block.
29 *
30 * core/navigation ブロックにインスペクター(PanelBody + ToggleControl)を追加する。
31 */
32 export const enhanceNavigationBlock = createHigherOrderComponent(
33 (BlockEdit) => {
34 return (props) => {
35 const { attributes, setAttributes } = props;
36 const { showDescription } = attributes;
37
38 if (!isNavigationBlock(props.name) || !props.isSelected) {
39 return <BlockEdit {...props} />;
40 }
41
42 return (
43 <>
44 <BlockEdit {...props} />
45 <InspectorControls>
46 <PanelBody
47 title={__('Menu Item Description', 'vk-blocks')}
48 icon={<VkPanelIcon isActive={showDescription} />}
49 initialOpen={false}
50 >
51 <ToggleControl
52 label={__(
53 'Show menu item description',
54 'vk-blocks'
55 )}
56 checked={!!showDescription}
57 onChange={(checked) => {
58 setAttributes({ showDescription: checked });
59 }}
60 help={__(
61 'When enabled, the description set for each menu item is displayed. Depending on your theme, the description may be shown regardless of this setting.',
62 'vk-blocks'
63 )}
64 />
65 </PanelBody>
66 </InspectorControls>
67 </>
68 );
69 };
70 },
71 'addVkNavigationShowDescriptionControl'
72 );
73
74 /**
75 * Add the block-scoped class to the editor block wrapper so that the
76 * description preview works inside the editor as well.
77 *
78 * エディタープレビューでも説明が表示されるよう、ブロックの最外殻へ
79 * ブロック単位クラスを付与する。
80 */
81 export const addNavigationEditorClass = createHigherOrderComponent(
82 (BlockListBlock) => {
83 return (props) => {
84 const { name, attributes } = props;
85
86 if (!isNavigationBlock(name) || !attributes?.showDescription) {
87 return <BlockListBlock {...props} />;
88 }
89
90 // 既存の wrapperProps.className を保持しつつブロック単位クラスを追加。
91 // classnames が falsy 値を無視するため null/undefined でも安�
92 �。
93 const wrapperProps = {
94 ...props.wrapperProps,
95 className: classnames(
96 props.wrapperProps?.className,
97 VK_NAV_SHOW_DESCRIPTION_CLASS
98 ),
99 };
100
101 return <BlockListBlock {...props} wrapperProps={wrapperProps} />;
102 };
103 },
104 'addVkNavigationShowDescriptionEditorClass'
105 );
106
107 /**
108 * Extend the core/navigation block with the showDescription attribute.
109 *
110 * Only the attribute registration is handled here. The inspector control is
111 * added separately via the `editor.BlockEdit` filter, because wrapping
112 * `settings.edit` does not render the panel for core/navigation.
113 *
114 * showDescription 属性の登録のみを�
115 う。インスペクターは別途
116 * `editor.BlockEdit` フィルタで追加する。core/navigation では
117 * `settings.edit` のラップではパネルが描画されないため。
118 *
119 * @param {Object} settings Block settings.
120 * @param {string} name Block name.
121 * @return {Object} Modified settings.
122 */
123 const extendNavigationBlock = (settings, name) => {
124 if (!isNavigationBlock(name)) {
125 return settings;
126 }
127
128 return {
129 ...settings,
130 attributes: {
131 ...settings.attributes,
132 showDescription: {
133 type: 'boolean',
134 default: false,
135 },
136 },
137 };
138 };
139
140 addFilter(
141 'blocks.registerBlockType',
142 'vk-blocks/extend-navigation-block',
143 extendNavigationBlock
144 );
145
146 addFilter(
147 'editor.BlockEdit',
148 'vk-blocks/navigation-show-description',
149 enhanceNavigationBlock
150 );
151
152 addFilter(
153 'editor.BlockListBlock',
154 'vk-blocks/navigation-editor-class',
155 addNavigationEditorClass
156 );
157