PluginProbe ʕ •ᴥ•ʔ
VK Blocks / trunk
VK Blocks vtrunk
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 / balloon / save.js
vk-blocks / src / blocks / balloon Last commit date
deprecated 2 months ago block.json 1 month ago edit.js 2 weeks ago icon.svg 2 months ago index.js 2 months ago index.php 2 months ago save.js 2 weeks ago style.scss 1 month ago
save.js
314 lines
1 import { RichText, InnerBlocks, useBlockProps } from '@wordpress/block-editor';
2 import { isHexColor } from '@vkblocks/utils/is-hex-color';
3 import { sanitizeSlug } from '@vkblocks/utils/sanitizeSlug';
4
5 export default function save({ attributes }) {
6 const {
7 balloonName,
8 balloonType,
9 balloonBorder,
10 balloonFullWidth,
11 balloonIconDisplay,
12 balloonImageBorder,
13 balloonBorderColor,
14 balloonBgColor,
15 balloonAlign,
16 IconImage,
17 balloonImageType,
18 balloonAnimation,
19 } = attributes;
20
21 let contentBorderClass = '';
22 let iconImageBorderClass = '';
23 let contentBackgroundClass = '';
24 let iconImageColorStyle = {};
25 let contentColorStyle = {};
26 let triangleBorderColorBeforeClass = '';
27 let triangleBorderColorAfterClass = '';
28 let triangleBorderColorBeforeStyle = {};
29 let triangleBorderColorAfterStyle = {};
30
31 // 後方互換 (カスタムカラー選択時 インラインcssをcontentとiconに分ける)
32 const colorStyle = {};
33 if (colorStyle) {
34 contentColorStyle = colorStyle;
35 iconImageColorStyle = colorStyle;
36 }
37 if ('background' in iconImageColorStyle) {
38 delete iconImageColorStyle.background;
39 }
40
41 const defaultAvatar =
42 typeof img_path !== 'undefined' && !!img_path.full_path // eslint-disable-line no-undef
43 ? img_path.full_path // eslint-disable-line no-undef
44 : '';
45
46 //吹き出しに枠線を追加オン
47 if (balloonBorder === true) {
48 contentBorderClass += 'vk_balloon_content-border-true';
49
50 if (balloonImageBorder === true) {
51 iconImageBorderClass += 'vk_balloon_icon_image-border-true';
52 } else {
53 iconImageBorderClass = '';
54 }
55
56 //iconImageBorderClass
57 //contentBorderClass
58 if (balloonBorderColor !== undefined) {
59 iconImageBorderClass += ` has-text-color`;
60 contentBorderClass += ` has-text-color`;
61 //カラーパレットの時
62 if (!isHexColor(balloonBorderColor)) {
63 iconImageBorderClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
64 contentBorderClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
65 }
66 }
67
68 //colorStyle
69 //カスタム*パレット
70 if (isHexColor(balloonBorderColor) && !isHexColor(balloonBgColor)) {
71 contentColorStyle = {
72 borderColor: `${balloonBorderColor}`,
73 };
74 iconImageColorStyle = {
75 borderColor: `${balloonBorderColor}`,
76 };
77 //パレット*カスタム
78 } else if (
79 !isHexColor(balloonBorderColor) &&
80 isHexColor(balloonBgColor)
81 ) {
82 contentColorStyle = {
83 background: `${balloonBgColor}`,
84 };
85 //カスタム*カスタム
86 } else if (
87 isHexColor(balloonBorderColor) &&
88 isHexColor(balloonBgColor)
89 ) {
90 contentColorStyle = {
91 borderColor: `${balloonBorderColor}`,
92 background: `${balloonBgColor}`,
93 };
94 iconImageColorStyle = {
95 borderColor: `${balloonBorderColor}`,
96 };
97 }
98
99 // 吹き出しの�
100 �置 左
101 if (balloonAlign === 'position-left') {
102 // 吹き出しの矢印 Class
103 // カラーパレットの時
104 // 吹き出しの時
105 if ('type-speech' === balloonType) {
106 if (balloonBgColor !== undefined) {
107 triangleBorderColorBeforeClass += ` has-text-color`;
108 if (!isHexColor(balloonBgColor)) {
109 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
110 }
111 }
112 if (balloonBorderColor !== undefined) {
113 triangleBorderColorAfterClass += ` has-text-color`;
114 if (!isHexColor(balloonBorderColor)) {
115 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
116 }
117 }
118 //もくもくの時
119 } else if ('type-think' === balloonType) {
120 if (balloonBorderColor !== undefined) {
121 triangleBorderColorBeforeClass += ` has-text-color`;
122 if (!isHexColor(balloonBorderColor)) {
123 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
124 }
125 }
126 if (balloonBorderColor !== undefined) {
127 triangleBorderColorAfterClass += ` has-text-color`;
128 if (!isHexColor(balloonBorderColor)) {
129 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
130 }
131 }
132 }
133
134 //吹き出しの矢印 Style
135 //カスタムカラーの時
136 if (isHexColor(balloonBorderColor)) {
137 triangleBorderColorAfterStyle = {
138 borderColor: `transparent transparent transparent ${balloonBgColor}`,
139 };
140 }
141 if (isHexColor(balloonBgColor)) {
142 triangleBorderColorBeforeStyle = {
143 borderColor: `transparent ${balloonBgColor} transparent transparent`,
144 };
145 }
146
147 // 吹き出しの�
148 �置 右
149 } else if (balloonAlign === 'position-right') {
150 // 吹き出しの時
151 // カラーパレットの時
152 if ('type-speech' === balloonType) {
153 if (balloonBgColor !== undefined) {
154 triangleBorderColorBeforeClass += ` has-text-color`;
155 if (!isHexColor(balloonBgColor)) {
156 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
157 }
158 }
159 if (balloonBorderColor !== undefined) {
160 triangleBorderColorAfterClass += ` has-text-color`;
161 if (!isHexColor(balloonBorderColor)) {
162 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
163 }
164 }
165 // もくもくの時
166 // カラーパレットの時
167 } else if ('type-think' === balloonType) {
168 if (balloonBorderColor !== undefined) {
169 triangleBorderColorBeforeClass += ` has-text-color`;
170 triangleBorderColorAfterClass += ` has-text-color`;
171 if (!isHexColor(balloonBorderColor)) {
172 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
173 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
174 }
175 }
176 }
177
178 //吹き出しの矢印 Style
179 //カスタムカラーの時
180 if (isHexColor(balloonBorderColor)) {
181 triangleBorderColorAfterStyle = {
182 borderColor: `transparent ${balloonBorderColor} transparent transparent`,
183 };
184 }
185 if (isHexColor(balloonBgColor)) {
186 triangleBorderColorBeforeStyle = {
187 borderColor: `transparent transparent transparent ${balloonBgColor}`,
188 };
189 }
190 }
191
192 //吹き出しに枠線を追加オフ
193 } else if (balloonBgColor !== undefined) {
194 iconImageBorderClass = '';
195
196 // 吹き出しの背景色 Style
197 if (balloonBgColor !== undefined) {
198 //カスタムカラーの時
199 if (isHexColor(balloonBgColor)) {
200 contentColorStyle = {
201 background: `${balloonBgColor}`,
202 };
203 }
204 }
205
206 if (balloonAlign === 'position-left') {
207 // 吹き出しの矢印 Class
208 // カラーパレットの時
209 // 吹き出しの時
210 if ('type-speech' === balloonType) {
211 if (balloonBgColor !== undefined) {
212 triangleBorderColorBeforeClass += ` has-text-color`;
213 if (!isHexColor(balloonBgColor)) {
214 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
215 }
216 }
217 }
218
219 //吹き出しの矢印 Style
220 //カスタムカラーの時
221 if (isHexColor(balloonBorderColor)) {
222 triangleBorderColorAfterStyle = {
223 borderColor: `transparent transparent transparent ${balloonBgColor}`,
224 };
225 }
226 if (isHexColor(balloonBgColor)) {
227 triangleBorderColorBeforeStyle = {
228 borderColor: `transparent ${balloonBgColor} transparent transparent`,
229 };
230 }
231 } else if (balloonAlign === 'position-right') {
232 // 吹き出しの矢印 Class
233 // カラーパレットの時
234 // 吹き出しの時
235 if ('type-speech' === balloonType) {
236 if (balloonBgColor !== undefined) {
237 triangleBorderColorBeforeClass += ` has-text-color`;
238 if (!isHexColor(balloonBgColor)) {
239 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
240 }
241 }
242 }
243
244 //吹き出しの矢印 Style
245 //カスタムカラーの時
246 if (isHexColor(balloonBgColor)) {
247 triangleBorderColorBeforeStyle = {
248 borderColor: `transparent transparent transparent ${balloonBgColor}`,
249 };
250 }
251 }
252 }
253
254 // 吹き出しの背景色 Class
255 if (balloonBgColor !== undefined) {
256 contentBackgroundClass += ` has-background-color`;
257 //カラーパレットの時
258 if (!isHexColor(balloonBgColor)) {
259 contentBackgroundClass += ` has-${sanitizeSlug(balloonBgColor)}-background-color`;
260 }
261 }
262
263 // 吹き出しの�
264 Class
265 if (!!balloonFullWidth) {
266 contentBorderClass += ` vk_balloon_content_fullwidth`;
267 }
268
269 const blockProps = useBlockProps.save({
270 className: `vk_balloon vk_balloon-${balloonAlign} vk_balloon-${balloonType} vk_balloon-animation-${balloonAnimation}`,
271 });
272
273 return (
274 <div {...blockProps}>
275 <div className={`vk_balloon_icon`}>
276 {balloonIconDisplay ||
277 (balloonIconDisplay === 'undefined' && IconImage) ? (
278 <figure>
279 <img
280 className={`vk_balloon_icon_image vk_balloon_icon_image-type-${balloonImageType} ${iconImageBorderClass}`}
281 style={iconImageColorStyle}
282 src={IconImage ? IconImage : defaultAvatar}
283 alt=""
284 />
285 <RichText.Content
286 tagName="figcaption"
287 className={'vk_balloon_icon_name'}
288 value={balloonName}
289 />
290 </figure>
291 ) : (
292 ''
293 )}
294 </div>
295 <div className={`vk_balloon_content_outer`}>
296 <div
297 className={`vk_balloon_content ${contentBackgroundClass} ${contentBorderClass}`}
298 style={contentColorStyle}
299 >
300 <span
301 className={`vk_balloon_content_before ${triangleBorderColorBeforeClass}`}
302 style={triangleBorderColorBeforeStyle}
303 ></span>
304 <span
305 className={`vk_balloon_content_after ${triangleBorderColorAfterClass}`}
306 style={triangleBorderColorAfterStyle}
307 ></span>
308 <InnerBlocks.Content />
309 </div>
310 </div>
311 </div>
312 );
313 }
314