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 / cover / style.js
vk-blocks / src / extensions / core / cover Last commit date
style.js 2 months ago style.scss 2 months ago
style.js
166 lines
1 /**
2 * cover-style block type
3 *
4 * @package
5 */
6 import { addFilter } from '@wordpress/hooks';
7 import { createHigherOrderComponent } from '@wordpress/compose';
8 import { BlockControls } from '@wordpress/block-editor';
9 import { ToolbarGroup } from '@wordpress/components';
10 import { Fragment } from '@wordpress/element';
11 import LinkToolbar from '@vkblocks/components/link-toolbar';
12 import { __ } from '@wordpress/i18n';
13
14 // コアの Cover ブロックかどうかを判定
15 const isCoverBlock = (name) => name === 'core/cover';
16
17 // Cover ブロックを拡張する HOC
18 const enhanceCoverBlock = createHigherOrderComponent((BlockEdit) => {
19 return (props) => {
20 if (!isCoverBlock(props.name)) {
21 return <BlockEdit {...props} />;
22 }
23
24 const {
25 attributes: {
26 linkUrl,
27 linkTarget,
28 relAttribute,
29 linkDescription,
30 linkToPost,
31 },
32 setAttributes,
33 context,
34 } = props;
35
36 const isDescendentOfQueryLoop =
37 typeof context?.queryId === 'number' &&
38 Number.isFinite(context?.queryId);
39
40 return (
41 <Fragment>
42 <BlockEdit {...props} />
43 <BlockControls>
44 <ToolbarGroup>
45 <LinkToolbar
46 linkUrl={linkUrl}
47 setLinkUrl={(url) =>
48 setAttributes({ linkUrl: url })
49 }
50 linkTarget={linkTarget}
51 setLinkTarget={(target) =>
52 setAttributes({ linkTarget: target })
53 }
54 relAttribute={relAttribute}
55 setRelAttribute={(rel) =>
56 setAttributes({ relAttribute: rel })
57 }
58 linkDescription={linkDescription}
59 setLinkDescription={(description) =>
60 setAttributes({ linkDescription: description })
61 }
62 isDescendentOfQueryLoop={isDescendentOfQueryLoop}
63 linkToPost={linkToPost}
64 setLinkToPost={(checked) =>
65 setAttributes({ linkToPost: !!checked })
66 }
67 />
68 </ToolbarGroup>
69 </BlockControls>
70 </Fragment>
71 );
72 };
73 }, 'enhanceCoverBlock');
74
75 const extendCoverBlock = (settings, name) => {
76 if (!isCoverBlock(name)) {
77 return settings;
78 }
79
80 const save = (props) => {
81 const { attributes } = props;
82 const {
83 linkUrl,
84 linkTarget,
85 relAttribute,
86 linkDescription,
87 linkToPost,
88 } = attributes;
89
90 // �
91 �のブロックの `save` を取得
92 const saveElement = settings.save(props);
93
94 const hasLink = linkUrl || linkToPost;
95 const effectiveUrl = linkToPost ? '' : linkUrl;
96
97 if (!saveElement || !hasLink) {
98 return saveElement;
99 }
100
101 const existingClassName = saveElement.props.className || '';
102 const classNameWithLink = `${existingClassName} has-link`.trim();
103 const existingStyle = saveElement.props.style || {};
104
105 return (
106 <div className={classNameWithLink} style={existingStyle}>
107 {saveElement.props.children}
108 <a
109 href={effectiveUrl}
110 {...(linkToPost ? { 'data-vk-link-to-post': '1' } : {})}
111 {...(linkTarget ? { target: linkTarget } : {})}
112 {...(relAttribute ? { rel: relAttribute } : {})}
113 className="wp-block-cover-vk-link"
114 >
115 <span className="screen-reader-text">
116 {linkDescription
117 ? linkDescription
118 : __('Cover link', 'vk-blocks')}
119 </span>
120 </a>
121 </div>
122 );
123 };
124
125 return {
126 ...settings,
127 attributes: {
128 ...settings.attributes,
129 linkUrl: {
130 type: 'string',
131 default: '',
132 },
133 linkTarget: {
134 type: 'string',
135 default: '',
136 },
137 relAttribute: {
138 type: 'string',
139 default: '',
140 },
141 linkDescription: {
142 type: 'string',
143 default: '',
144 },
145 linkToPost: {
146 type: 'boolean',
147 default: false,
148 },
149 },
150 usesContext: [
151 ...(settings.usesContext || []),
152 'postId',
153 'postType',
154 'queryId',
155 ],
156 edit: enhanceCoverBlock(settings.edit),
157 save, // 修正した `save` を適用
158 };
159 };
160
161 addFilter(
162 'blocks.registerBlockType',
163 'custom/extend-cover-block',
164 extendCoverBlock
165 );
166