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 / button / save.js
vk-blocks / src / blocks / button Last commit date
deprecated 1 week ago block.json 1 week ago component.js 2 weeks ago edit.js 1 week ago icon.svg 3 months ago index.js 1 week ago index.php 3 months ago save.js 1 week ago style.scss 1 week ago transforms.js 3 months ago
save.js
191 lines
1 import { VKBButton } from './component';
2 import { RichText, useBlockProps } from '@wordpress/block-editor';
3 import { isHexColor } from '@vkblocks/utils/is-hex-color';
4 import { toPresetSpacingVar } from '@vkblocks/utils/to-preset-spacing-var';
5
6 export default function save(props) {
7 const { attributes } = props;
8 const {
9 content,
10 subCaption,
11 buttonUrl,
12 buttonTarget,
13 relAttribute,
14 linkToPost,
15 linkToCustomField,
16 buttonSize,
17 buttonType,
18 buttonEffect,
19 buttonColor,
20 buttonTextColorCustom,
21 buttonColorCustom,
22 buttonBorderColorCustom,
23 buttonHoverBorderColorCustom,
24 buttonHoverBgColorCustom,
25 buttonHoverTextColorCustom,
26 buttonAlign,
27 buttonWidthMobile,
28 buttonWidthTablet,
29 buttonWidth,
30 outerGap,
31 fontAwesomeIconBefore,
32 fontAwesomeIconAfter,
33 iconSizeBefore,
34 iconSizeAfter,
35 inlineStyle,
36 borderRadius,
37 blockId,
38 fontSizeValue,
39 } = attributes;
40
41 const effectiveUrl = linkToPost || linkToCustomField ? '' : buttonUrl;
42 const hasButtonBorderColor =
43 (buttonType === '0' || buttonType === null || buttonType === '1') &&
44 buttonBorderColorCustom !== undefined &&
45 buttonBorderColorCustom !== null &&
46 buttonBorderColorCustom !== '';
47 const hasButtonHoverBorderColor =
48 (buttonType === '0' || buttonType === null || buttonType === '1') &&
49 buttonHoverBorderColorCustom !== undefined &&
50 buttonHoverBorderColorCustom !== null &&
51 buttonHoverBorderColorCustom !== '';
52
53 let containerClass = '';
54 // カスタム色・枠線色・アウターのギャップ・ホバー色のいずれかを使う場合
55 // Add the block-specific class for custom colors, a border color, an outer gap, or hover colors.
56 if (
57 (buttonColorCustom !== undefined && isHexColor(buttonColorCustom)) ||
58 (buttonTextColorCustom !== undefined &&
59 isHexColor(buttonTextColorCustom)) ||
60 hasButtonBorderColor ||
61 hasButtonHoverBorderColor ||
62 outerGap ||
63 (buttonHoverBgColorCustom !== undefined &&
64 buttonHoverBgColorCustom !== '') ||
65 (buttonHoverTextColorCustom !== undefined &&
66 buttonHoverTextColorCustom !== '')
67 ) {
68 containerClass = `vk_button vk_button-color-custom vk_button-${blockId}`;
69 } else {
70 containerClass = `vk_button vk_button-color-custom`;
71 }
72
73 if (buttonWidthMobile || buttonWidthTablet || buttonWidth) {
74 // 横並びボタンで�
75 が指定されている
76 if (buttonWidthMobile) {
77 containerClass += ` vk_button-width-mobile-${buttonWidthMobile}`;
78 }
79 if (buttonWidthTablet) {
80 containerClass += ` vk_button-width-tablet-${buttonWidthTablet}`;
81 }
82 if (buttonWidth) {
83 containerClass += ` vk_button-width-${buttonWidth}`;
84 }
85 } else {
86 containerClass += ` vk_button-align-${buttonAlign}`;
87 }
88
89 // エフェクト
90 if (buttonEffect !== '') {
91 containerClass += ` is-style-${buttonEffect}`;
92 }
93
94 // コア spacing.padding は useBlockProps.save が wrapper (.vk_button) の
95 // インライン style に自動注�
96 �するが、ボタンの「�
97 側余白」というユーザー期�
98
99 // <a> 自体の padding なので、wrapper 側の padding 系プロパティを取り除き、
100 // 同じ値を <a> 側に転写する。
101 // プリセット値 (var:preset|spacing|XX) は toPresetSpacingVar で var() に変換する。
102 // useBlockProps.save will inject the core spacing.padding as inline style on the
103 // wrapper (.vk_button), but users expect the inner padding of the <a>. So we
104 // strip the padding properties from the wrapper style and forward them onto <a>.
105 const spacingPadding = attributes?.style?.spacing?.padding;
106 const hasSpacingPadding =
107 spacingPadding &&
108 (spacingPadding.top ||
109 spacingPadding.right ||
110 spacingPadding.bottom ||
111 spacingPadding.left);
112
113 const blockProps = useBlockProps.save({
114 className: containerClass,
115 });
116
117 if (hasSpacingPadding && blockProps.style) {
118 // 既存ユーザー(padding 未設定)の出力は完�
119 �不変にするため、
120 // 設定がある時だけ wrapper 側 padding を取り除く。
121 // Strip the wrapper padding only when the user actually set one,
122 // so that the existing output stays byte-identical for legacy blocks.
123 const {
124 paddingTop: _pt,
125 paddingRight: _pr,
126 paddingBottom: _pb,
127 paddingLeft: _pl,
128 ...restWrapperStyle
129 } = blockProps.style;
130 blockProps.style = restWrapperStyle;
131 }
132
133 // inlineStyleからborderRadius・コアpaddingを含む新しいスタイルオブジェクトを構築
134 const btnInlineStyle = { ...inlineStyle };
135 if (borderRadius) {
136 btnInlineStyle.borderRadius = borderRadius;
137 }
138 if (hasSpacingPadding) {
139 if (spacingPadding.top) {
140 btnInlineStyle.paddingTop = toPresetSpacingVar(spacingPadding.top);
141 }
142 if (spacingPadding.right) {
143 btnInlineStyle.paddingRight = toPresetSpacingVar(
144 spacingPadding.right
145 );
146 }
147 if (spacingPadding.bottom) {
148 btnInlineStyle.paddingBottom = toPresetSpacingVar(
149 spacingPadding.bottom
150 );
151 }
152 if (spacingPadding.left) {
153 btnInlineStyle.paddingLeft = toPresetSpacingVar(
154 spacingPadding.left
155 );
156 }
157 }
158
159 return (
160 <div {...blockProps}>
161 <VKBButton
162 lbTextColorCustom={buttonTextColorCustom}
163 lbColorCustom={buttonColorCustom}
164 lbColor={buttonColor}
165 lbType={buttonType}
166 lbAlign={buttonAlign}
167 lbSize={buttonSize}
168 lbUrl={effectiveUrl}
169 lbTarget={buttonTarget}
170 lbLinkToPost={linkToPost}
171 lbLinkToCustomField={linkToCustomField}
172 lbRelAttribute={relAttribute}
173 lbFontAwesomeIconBefore={fontAwesomeIconBefore}
174 lbFontAwesomeIconAfter={fontAwesomeIconAfter}
175 lbIconSizeBefore={iconSizeBefore}
176 lbIconSizeAfter={iconSizeAfter}
177 lbsubCaption={subCaption}
178 lbFontSizeValue={fontSizeValue}
179 inlineStyle={btnInlineStyle}
180 lbRichtext={
181 <RichText.Content
182 tagName={'span'}
183 className={'vk_button_link_txt'}
184 value={content}
185 />
186 }
187 />
188 </div>
189 );
190 }
191