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 / pr-blocks / save.js
vk-blocks / src / blocks / pr-blocks Last commit date
deprecated 2 months ago block.json 1 month ago edit.js 2 months ago icon.svg 2 months ago index.js 2 months ago index.php 2 months ago save.js 2 months ago style.scss 2 months ago
save.js
224 lines
1 import { useBlockProps, RichText } from '@wordpress/block-editor';
2 import { isNotJSON } from '@vkblocks/utils/is-not-json';
3 import { Component } from '@wordpress/element';
4 import { fixBrokenUnicode } from '@vkblocks/utils/fixBrokenUnicode';
5 import parse from 'html-react-parser';
6 import { isHexColor } from '@vkblocks/utils/is-hex-color';
7 import { sanitizeSlug } from '@vkblocks/utils/sanitizeSlug';
8
9 export default function save(props) {
10 const { attributes } = props;
11 const containerClass = `vk_prBlocks row`;
12
13 const blockProps = useBlockProps.save({
14 className: containerClass,
15 });
16
17 return (
18 <div {...blockProps}>
19 <ComponentBlockSave attributes={attributes} blockNum={1} />
20 <ComponentBlockSave attributes={attributes} blockNum={2} />
21 <ComponentBlockSave attributes={attributes} blockNum={3} />
22 </div>
23 );
24 }
25
26 export class ComponentBlockSave extends Component {
27 render() {
28 const {
29 heading1,
30 heading2,
31 heading3,
32 content1,
33 content2,
34 content3,
35 url1,
36 url2,
37 url3,
38 urlOpenType1,
39 urlOpenType2,
40 urlOpenType3,
41 icon1,
42 icon2,
43 icon3,
44 color1,
45 color2,
46 color3,
47 bgType1,
48 bgType2,
49 bgType3,
50 insertImage1,
51 insertImage2,
52 insertImage3,
53 } = this.props.attributes;
54 const blockNum = this.props.blockNum;
55 const blockNumArrIndex = this.props.blockNum - 1;
56
57 const heading = [heading1, heading2, heading3];
58 const content = [content1, content2, content3];
59 const url = [url1, url2, url3];
60 const urlOpenType = [urlOpenType1, urlOpenType2, urlOpenType3];
61 const icon = [icon1, icon2, icon3];
62 const color = [color1, color2, color3];
63 const bgType = [bgType1, bgType2, bgType3];
64 const insertImage = [insertImage1, insertImage2, insertImage3];
65
66 let richTextH1Save = '';
67 let richTextPSave = '';
68
69 const renderSaveAltImage = (Image) => {
70 if (isNotJSON(Image)) {
71 return <img src={Image} alt="" />;
72 }
73 const IconImageParse = JSON.parse(fixBrokenUnicode(Image));
74 return (
75 <img
76 src={IconImageParse.sizes.full.url}
77 alt={IconImageParse.alt}
78 />
79 );
80 };
81
82 const renderItemImage = (Image) => {
83 const bgImage = Image[blockNumArrIndex];
84 if (isNotJSON(bgImage)) {
85 return {
86 backgroundImage: `url(${bgImage})`,
87 backgroundRepeat: 'no-repeat 50% center',
88 backgroundSize: 'cover',
89 };
90 }
91 const bgImageParse = JSON.parse(fixBrokenUnicode(bgImage));
92 return {
93 backgroundImage: `url(${bgImageParse.sizes.full.url})`,
94 backgroundRepeat: 'no-repeat 50% center',
95 backgroundSize: 'cover',
96 };
97 };
98
99 const drawElement = (() => {
100 if (insertImage[blockNumArrIndex]) {
101 return (
102 <div
103 className="vk_prBlocks_item_image"
104 style={renderItemImage(insertImage)}
105 >
106 {renderSaveAltImage(insertImage[blockNumArrIndex])}
107 </div>
108 );
109 }
110
111 let iconOuterClass = '';
112 let iconOuterInlineStyle = {};
113 let iconColor = '';
114 if (color[blockNumArrIndex] !== undefined) {
115 // アイコン背景:ベタ塗り
116 if (bgType[blockNumArrIndex] === '0') {
117 //カスタムカラーの時
118 if (isHexColor(color[blockNumArrIndex])) {
119 iconOuterClass = `has-background `;
120 iconOuterInlineStyle = {
121 backgroundColor: `${color[blockNumArrIndex]}`,
122 };
123 //カラーパレットの時
124 } else {
125 iconOuterClass = `has-background has-${sanitizeSlug(color[blockNumArrIndex])}-background-color`;
126 }
127 // アイコン背景:背景なし
128 } else if (bgType[blockNumArrIndex] === '1') {
129 //カスタムカラーの時
130 if (isHexColor(color[blockNumArrIndex])) {
131 iconOuterClass = `has-text-color`;
132 iconOuterInlineStyle = {
133 border: `1px solid ${color[blockNumArrIndex]}`,
134 };
135 iconColor = color[blockNumArrIndex];
136 //カラーパレットの時
137 } else {
138 iconOuterClass = `has-text-color has-${sanitizeSlug(color[blockNumArrIndex])}-color`;
139 }
140 }
141 }
142
143 let faIcon = icon[blockNumArrIndex];
144 if (faIcon) {
145 faIcon = fixBrokenUnicode(faIcon);
146 }
147 //過去バージョンをリカバリーした時にiconを正常に表示する
148 if (faIcon && !faIcon.match(/<i/)) {
149 faIcon = `<i class="${faIcon}"></i>`;
150 }
151 if (!faIcon) {
152 return null;
153 }
154 //add class and inline css
155 const faIconFragment = faIcon.split(' ');
156 if (iconColor !== '') {
157 faIconFragment[0] =
158 faIconFragment[0] + ` style="color:${iconColor}" `;
159 } else {
160 faIconFragment[0] = faIconFragment[0] + ` `;
161 }
162 faIconFragment[1] = faIconFragment[1] + ` vk_prBlocks_item_icon `;
163 const faIconTag = faIconFragment.join('');
164
165 return (
166 <div
167 className={`vk_prBlocks_item_icon_outer ${iconOuterClass}`}
168 style={iconOuterInlineStyle}
169 >
170 {parse(faIconTag)}
171 </div>
172 );
173 })();
174
175 // アイコン背景:背景なし
176 let iconOutlineClass = '';
177 if (bgType[blockNumArrIndex] === '1') {
178 iconOutlineClass = 'is-style-outline';
179 }
180
181 richTextH1Save = (
182 <RichText.Content
183 className={`vk_prBlocks_item_title vk_prBlocks_item_title-${blockNum}`}
184 tagName={'h3'}
185 value={heading[blockNumArrIndex]}
186 />
187 );
188 richTextPSave = (
189 <RichText.Content
190 className={`vk_prBlocks_item_summary vk_prBlocks_item_summary-${blockNum}`}
191 tagName={'p'}
192 value={content[blockNumArrIndex]}
193 />
194 );
195 if (url[blockNumArrIndex]) {
196 return (
197 <div
198 className={`vk_prBlocks_item col-sm-4 ${iconOutlineClass}`}
199 >
200 <a
201 href={url[blockNumArrIndex]}
202 className="vk_prBlocks_item_link"
203 target={
204 urlOpenType[blockNumArrIndex] ? '_blank' : '_self'
205 }
206 rel="noopener noreferrer"
207 >
208 {drawElement}
209 {richTextH1Save}
210 {richTextPSave}
211 </a>
212 </div>
213 );
214 }
215 return (
216 <div className={`vk_prBlocks_item col-sm-4 ${iconOutlineClass}`}>
217 {drawElement}
218 {richTextH1Save}
219 {richTextPSave}
220 </div>
221 );
222 }
223 }
224