PluginProbe ʕ •ᴥ•ʔ
VK Blocks / 1.123.0
VK Blocks v1.123.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 / columns / style.js
vk-blocks / src / extensions / core / columns Last commit date
style.js 2 months ago style.scss 2 months ago
style.js
214 lines
1 /**
2 * columns-style block type
3 *
4 */
5 import { __ } from '@wordpress/i18n';
6 import { addFilter } from '@wordpress/hooks';
7 import { PanelBody, ToggleControl, ToolbarGroup } from '@wordpress/components';
8 import { createHigherOrderComponent } from '@wordpress/compose';
9 import { InspectorControls, BlockControls } from '@wordpress/block-editor';
10 import classnames from 'classnames';
11 import LinkToolbar from '@vkblocks/components/link-toolbar';
12
13 /**
14 * Internal dependencies
15 */
16 import { VkPanelIcon } from '@vkblocks/components/vk-icon';
17
18 const isColumnsBlock = (name) => name === 'core/columns';
19 const isColumnBlock = (name) => name === 'core/column';
20
21 export const enhanceColumnBlock = createHigherOrderComponent((BlockEdit) => {
22 return (props) => {
23 const { attributes, setAttributes } = props;
24 const {
25 reverse,
26 className,
27 linkUrl,
28 linkTarget,
29 relAttribute,
30 linkDescription,
31 } = attributes;
32
33 if (isColumnsBlock(props.name) && props.isSelected) {
34 // カラムの方向設定
35 return (
36 <>
37 <BlockEdit {...props} />
38 <InspectorControls>
39 <PanelBody
40 title={__('Column Direction', 'vk-blocks')}
41 icon={<VkPanelIcon isActive={reverse} />}
42 initialOpen={false}
43 >
44 <ToggleControl
45 label={__('Reverse', 'vk-blocks')}
46 checked={reverse}
47 onChange={(checked) => {
48 // 既存のクラス名
49 const existClass = className
50 ? className.split(' ')
51 : [];
52 let newClassNameArray = [];
53 if (existClass) {
54 // いったん削除
55 newClassNameArray = existClass.filter(
56 (item) => {
57 return !item.match(
58 /is-vk-row-reverse/
59 );
60 }
61 );
62 }
63
64 // reverse クラスを付与
65 const rereverseClass = [
66 {
67 'is-vk-row-reverse': checked,
68 },
69 ];
70 newClassNameArray = classnames(
71 newClassNameArray,
72 rereverseClass
73 );
74
75 setAttributes({
76 className: newClassNameArray,
77 reverse: checked,
78 });
79 }}
80 />
81 </PanelBody>
82 </InspectorControls>
83 </>
84 );
85 }
86
87 if (isColumnBlock(props.name) && props.isSelected) {
88 // カラムのリンク設定(URL指定のみ。投稿へのリンクは非対応)
89 return (
90 <>
91 <BlockEdit {...props} />
92 <BlockControls>
93 <ToolbarGroup>
94 <LinkToolbar
95 linkUrl={linkUrl}
96 setLinkUrl={(url) =>
97 setAttributes({ linkUrl: url })
98 }
99 linkTarget={linkTarget}
100 setLinkTarget={(target) =>
101 setAttributes({ linkTarget: target })
102 }
103 relAttribute={relAttribute}
104 setRelAttribute={(rel) =>
105 setAttributes({ relAttribute: rel })
106 }
107 linkDescription={linkDescription}
108 setLinkDescription={(description) =>
109 setAttributes({
110 linkDescription: description,
111 })
112 }
113 />
114 </ToolbarGroup>
115 </BlockControls>
116 </>
117 );
118 }
119
120 return <BlockEdit {...props} />;
121 };
122 }, 'addMyCustomBlockControls');
123
124 const extendColumnBlock = (settings, name) => {
125 if (!isColumnBlock(name) && !isColumnsBlock(name)) {
126 return settings;
127 }
128
129 if (isColumnsBlock(settings.name)) {
130 settings.attributes = {
131 ...settings.attributes,
132 reverse: {
133 type: 'boolean',
134 default: false,
135 },
136 };
137 }
138
139 if (isColumnBlock(settings.name)) {
140 settings.attributes = {
141 ...settings.attributes,
142 linkUrl: {
143 type: 'string',
144 default: '',
145 },
146 linkTarget: {
147 type: 'string',
148 default: '',
149 },
150 relAttribute: {
151 type: 'string',
152 default: '',
153 },
154 linkDescription: {
155 type: 'string',
156 default: '',
157 },
158 };
159 }
160
161 return {
162 ...settings,
163 attributes: {
164 ...settings.attributes,
165 },
166 edit: enhanceColumnBlock(settings.edit),
167 save:
168 isColumnBlock(name) && settings.save
169 ? (props) => {
170 const { attributes } = props;
171 const {
172 linkUrl: colLinkUrl,
173 linkTarget: colLinkTarget,
174 relAttribute: colRelAttribute,
175 linkDescription: colLinkDescription,
176 } = attributes;
177 const saveElement = settings.save(props);
178
179 if (!colLinkUrl) {
180 return saveElement;
181 }
182
183 return (
184 <div {...saveElement.props}>
185 <a
186 href={colLinkUrl}
187 {...(colLinkTarget
188 ? { target: colLinkTarget }
189 : {})}
190 {...(colRelAttribute
191 ? { rel: colRelAttribute }
192 : {})}
193 className="wp-block-column-vk-link"
194 >
195 <span className="screen-reader-text">
196 {colLinkDescription
197 ? colLinkDescription
198 : __('Column link', 'vk-blocks')}
199 </span>
200 </a>
201 {saveElement.props.children}
202 </div>
203 );
204 }
205 : settings.save,
206 };
207 };
208
209 addFilter(
210 'blocks.registerBlockType',
211 'custom/extend-column-block',
212 extendColumnBlock
213 );
214