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 / slider / index.js
vk-blocks / src / blocks / slider Last commit date
deprecated 2 weeks ago _swiper._scss 2 months ago block.json 2 weeks ago edit-multiItem.js 2 weeks ago edit-slider.js 2 weeks ago edit.js 1 day ago icon.svg 2 months ago index.js 2 months ago index.php 2 months ago loop-min-slides.js 2 months ago pause-button.js 1 day ago save.js 1 day ago style.scss 2 months ago view.js 1 day ago
index.js
183 lines
1 /**
2 * Slider block type
3 *
4 */
5 import { ReactComponent as Icon } from './icon.svg';
6 import { createHigherOrderComponent } from '@wordpress/compose';
7 import { addFilter } from '@wordpress/hooks';
8
9 import deprecatedHooks from './deprecated/hooks';
10 import deprecated from './deprecated/save';
11 import edit from './edit';
12 import metadata from './block.json';
13 import save from './save';
14
15 const { name } = metadata;
16
17 export { metadata, name };
18
19 export const settings = {
20 icon: <Icon />,
21 edit,
22 save,
23 deprecated,
24 };
25
26 const generateHeightCss = (attributes, cssSelector = '') => {
27 const { blockId, mobile, tablet, pc, unit } = attributes;
28 let css = '';
29 if (unit !== undefined && unit !== null) {
30 if (mobile !== undefined && mobile !== null && !isNaN(mobile)) {
31 css += `@media (max-width: 575.98px) {
32 ${cssSelector}
33 .vk_slider_${blockId} .vk_slider_item{
34 height:${mobile}${unit}!important;
35 }
36 }`;
37 }
38 if (tablet !== undefined && tablet !== null && !isNaN(tablet)) {
39 css += `@media (min-width: 576px) and (max-width: 991.98px) {
40 ${cssSelector}
41 .vk_slider_${blockId} .vk_slider_item{
42 height:${tablet}${unit}!important;
43 }
44 }`;
45 }
46 if (pc !== undefined && pc !== null && !isNaN(pc)) {
47 css += `@media (min-width: 992px) {
48 ${cssSelector}
49 .vk_slider_${blockId} .vk_slider_item{
50 height:${pc}${unit}!important;
51 }
52 }`;
53 }
54 }
55
56 return css;
57 };
58
59 const generateZoomAnimationCss = (attributes = '') => {
60 const {
61 blockId,
62 zoomAnimation,
63 zoomInitialScale,
64 zoomFinalScale,
65 autoPlayDelay,
66 speed,
67 } = attributes;
68
69 let css = '';
70
71 if (zoomAnimation) {
72 // ズーム用のセレクターは ::before 専用にして、親要素への副作用を防ぐ
73 const zoomSelector = `.vk_slider_${blockId}`;
74
75 css += `
76 ${zoomSelector} .vk_slider_item {
77 position: relative;
78 overflow: hidden;
79 }
80
81 ${zoomSelector} .vk_slider_item::before {
82 content: "";
83 position: absolute;
84 top: 0;
85 left: 0;
86 width: 100%;
87 height: 100%;
88 background-size: cover;
89 background-position: center;
90 background-image: var(--vk-slider-item-bg-image, inherit);
91 will-change: transform;
92 transform: scale(${zoomInitialScale !== undefined ? zoomInitialScale : 1});
93 transition: transform ${(autoPlayDelay + speed + autoPlayDelay * 0.5) / 1000 || 6}s linear;
94 }
95
96 ${zoomSelector} .vk_slider_item.swiper-slide-active::before,
97 ${zoomSelector} .vk_slider_item.swiper-slide-duplicate-active::before {
98 transform: scale(${zoomFinalScale !== undefined ? zoomFinalScale : 1.25});
99 }
100
101 ${zoomSelector} .vk_slider_item.swiper-slide-prev::before,
102 ${zoomSelector} .vk_slider_item.swiper-slide-next::before {
103 transform: scale(${zoomInitialScale !== undefined ? zoomInitialScale : 1});
104 }
105 `;
106 }
107
108 return css;
109 };
110
111 // Add column css for editor.
112 const vkbwithClientIdClassName = createHigherOrderComponent(
113 (BlockListBlock) => {
114 return (props) => {
115 if ('vk-blocks/slider' === props.name) {
116 const heightCss = generateHeightCss(props.attributes, '');
117 const zoomCss = generateZoomAnimationCss(props.attributes, '');
118 const cssTag = heightCss + zoomCss;
119 return (
120 <>
121 <BlockListBlock {...props} />
122 {(() => {
123 if (cssTag) {
124 return <style type="text/css">{cssTag}</style>;
125 }
126 })()}
127 </>
128 );
129 }
130 return <BlockListBlock {...props} />;
131 };
132 },
133 'vkbwithClientIdClassName'
134 );
135 addFilter(
136 'editor.BlockListBlock',
137 'vk-blocks/slider',
138 vkbwithClientIdClassName
139 );
140
141 /**
142 * Swiperの設定をフロント側に出力するフィルター。
143 * 0.49.8で、jSをfooterに出力するよう構造変更。CSSは継続して出力。
144 *
145 * @param {*} el
146 * @param {*} type
147 * @param {*} attributes
148 */
149 const addSwiperConfig = (el, type, attributes) => {
150 if ('vk-blocks/slider' === type.name) {
151 //現在実行されている deprecated�
152 save関数のindexを取得
153 const deprecatedFuncIndex = deprecated.findIndex(
154 (item) => item.save === type.save
155 );
156
157 // 最新版
158 if (-1 === deprecatedFuncIndex) {
159 const cssSelector = `.vk_slider_${attributes.blockId},`;
160 const heightCss = generateHeightCss(attributes, cssSelector);
161 const zoomCss = generateZoomAnimationCss(attributes, cssSelector);
162 const cssTag = heightCss + zoomCss;
163 return (
164 <>
165 {el}
166 {(() => {
167 if (cssTag) {
168 return <style type="text/css">{cssTag}</style>;
169 }
170 })()}
171 </>
172 );
173
174 //後方互換
175 }
176 const DeprecatedHook = deprecatedHooks[deprecatedFuncIndex];
177 return <DeprecatedHook el={el} attributes={attributes} />;
178 }
179 // Slider以外のブロック
180 return el;
181 };
182 addFilter('blocks.getSaveElement', 'vk-blocks/slider', addSwiperConfig, 11);
183