PluginProbe
GutSlider – All in One Slider and Carousel Blocks for Gutenberg / 2.11.0
GutSlider – All in One Slider and Carousel Blocks for Gutenberg v2.11.0
3.1.0 3.0.0 2.13.2 2.13.1 2.13.0 trunk 1.0.0 2.1.0 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.1 2.5.3 2.5.4 2.5.5 2.6.1 All 56 releases
slider-blocks / src / blocks / before-after / edit.js

edit.js in GutSlider – All in One Slider and Carousel Blocks for Gutenberg 2.11.0, at src/blocks/before-after/edit.js

241 lines 11.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* eslint-disable no-undef */
2 /* eslint-disable camelcase */
3 /**
4 * WordPress dependencies
5 */
6 import { BlockControls, MediaUpload, RichText, useBlockProps } from '@wordpress/block-editor';
7 import { Button, ToolbarButton, ToolbarGroup } from '@wordpress/components';
8 import { ReactCompareSlider, ReactCompareSliderImage } from 'react-compare-slider';
9 const { Fragment, useEffect } = wp.element;
10 const { __ } = wp.i18n;
11
12 // editor style
13 import './editor.scss';
14
15 /**
16 * Internal dependencies
17 */
18 import Inspector from './inspector';
19 const { SidebarOpener } = window.gutSliderModules;
20
21 /**
22 * Style
23 */
24 import classNames from 'classnames';
25 import Style from './style';
26
27 /**
28 * Edit function
29 */
30
31 export default function Edit(props) {
32 const { attributes, setAttributes, clientId } = props;
33 const { uniqueId, preview, beforeImage, afterImage, sliderOptions, comparisonOptions, showCaption, sliderCaption, captionTag } =
34 attributes;
35
36 // Unique ID
37 useEffect(() => {
38 setAttributes({
39 uniqueId: 'gutslider-' + clientId.slice(0, 8)
40 });
41 }, []);
42
43 // block preview
44 if (preview) {
45 return (
46 <div className="gutslider-preview">
47 <img src={gutslider_preview.before_after} alt="before after slider preview" />
48 </div>
49 );
50 }
51
52 // Block Props
53 const blockProps = useBlockProps({
54 className: classNames(uniqueId, `${sliderOptions?.labelsVisibility}`)
55 });
56
57 return (
58 <Fragment>
59 <Inspector attributes={attributes} setAttributes={setAttributes} />
60 <Style {...props} />
61 {((beforeImage && beforeImage.id) || (afterImage && afterImage.id)) && (
62 <BlockControls>
63 {beforeImage && beforeImage.id && (
64 <ToolbarGroup>
65 <MediaUpload
66 onSelect={media => {
67 setAttributes({
68 beforeImage: media
69 });
70 }}
71 type="image"
72 value={beforeImage && beforeImage.id}
73 render={({ open }) => (
74 <ToolbarButton
75 className="icgbp__upload_btn"
76 onClick={open}
77 icon="edit"
78 title={__('Edit Before Image', 'image-comparision-block')}
79 />
80 )}
81 />
82 </ToolbarGroup>
83 )}
84 {afterImage && afterImage.id && (
85 <ToolbarGroup>
86 <MediaUpload
87 onSelect={media => {
88 setAttributes({
89 afterImage: media
90 });
91 }}
92 type="image"
93 value={afterImage && afterImage.id}
94 render={({ open }) => (
95 <ToolbarButton
96 className="icgbp__upload_btn"
97 onClick={open}
98 icon="edit"
99 title={__('Edit After Image', 'image-comparision-block')}
100 />
101 )}
102 />
103 </ToolbarGroup>
104 )}
105 </BlockControls>
106 )}
107
108 <div {...blockProps}>
109 <SidebarOpener />
110 <div className="gutslider-compare-block">
111 {beforeImage && beforeImage.url && afterImage && afterImage.url ? (
112 <ReactCompareSlider
113 portrait={comparisonOptions?.slideMode !== 'horizontal' ? true : false}
114 changePositionOnHover={comparisonOptions?.swipeMode !== 'drag' ? true : false}
115 onlyHandleDraggable={comparisonOptions?.onlyHandleDraggable}
116 disabled={comparisonOptions?.disableSliding}
117 position={comparisonOptions?.initialPosition}
118 itemOne={
119 <div className={classNames('gutslider-before', 'gutslider-ba-item', `${sliderOptions?.labelsVisibility}`)}>
120 {sliderOptions?.showLabels && (
121 <div
122 className={classNames(
123 'gutslider-label',
124 'before-label',
125 `${sliderOptions?.labelsVisibility === 'hover' ? sliderOptions?.hoverAnimation : ''}`,
126 `${comparisonOptions?.slideMode}`,
127 `${
128 comparisonOptions?.slideMode === 'horizontal'
129 ? sliderOptions?.labelVPosition
130 : sliderOptions?.labelHPosition
131 }`
132 )}
133 >
134 {sliderOptions?.beforeLabel}
135 </div>
136 )}
137 <ReactCompareSliderImage
138 src={beforeImage && beforeImage.url}
139 alt={(beforeImage && beforeImage.alt) || 'Before Slider Photo'}
140 />
141 </div>
142 }
143 itemTwo={
144 <div className={classNames('gutslider-after', 'gutslider-ba-item', `${sliderOptions?.labelsVisibility}`)}>
145 {sliderOptions?.showLabels && (
146 <div
147 className={classNames(
148 'gutslider-label',
149 'after-label',
150 `${sliderOptions?.labelsVisibility === 'hover' ? sliderOptions?.hoverAnimation : ''}`,
151 `${comparisonOptions?.slideMode}`,
152 `${
153 comparisonOptions?.slideMode === 'horizontal'
154 ? sliderOptions?.labelVPosition
155 : sliderOptions?.labelHPosition
156 }`
157 )}
158 >
159 {sliderOptions?.afterLabel}
160 </div>
161 )}
162 <ReactCompareSliderImage
163 src={afterImage && afterImage.url}
164 alt={(afterImage && afterImage.alt) || 'After Slider Photo'}
165 />
166 </div>
167 }
168 />
169 ) : (
170 <div className="gutslider-compare-block--loaded">
171 <div className="gutslider-placeholder">
172 {beforeImage && beforeImage.id ? (
173 <img src={beforeImage.url} alt={beforeImage.alt} />
174 ) : (
175 <MediaUpload
176 onSelect={media => {
177 setAttributes({
178 beforeImage: {
179 id: media.id,
180 url: media.url,
181 alt: media.alt
182 }
183 });
184 }}
185 type="image"
186 value={beforeImage && beforeImage.id}
187 render={({ open }) => (
188 <Button className="icgbp__upload_btn" onClick={open}>
189 {__('Add Before Image', 'image-comparision-block')}
190 </Button>
191 )}
192 />
193 )}
194 </div>
195 <div className="gutslider-placeholder">
196 {afterImage && afterImage.id ? (
197 <img src={afterImage.url} alt={afterImage.alt} />
198 ) : (
199 <MediaUpload
200 onSelect={media => {
201 setAttributes({
202 afterImage: {
203 id: media.id,
204 url: media.url,
205 alt: media.alt
206 }
207 });
208 }}
209 type="image"
210 value={afterImage && afterImage.id}
211 render={({ open }) => (
212 <Button className="icgbp__upload_btn" onClick={open}>
213 {__('Add After Image', 'image-comparision-block')}
214 </Button>
215 )}
216 />
217 )}
218 </div>
219 </div>
220 )}
221 </div>
222 {showCaption && (
223 <figcaption className="gutslider-caption">
224 <RichText
225 tagName={captionTag}
226 className="gutslider-caption-text"
227 value={sliderCaption}
228 onChange={v =>
229 setAttributes({
230 sliderCaption: v
231 })
232 }
233 placeholder={__('Enter caption here', 'image-comparision-block')}
234 />
235 </figcaption>
236 )}
237 </div>
238 </Fragment>
239 );
240 }
241