@kids-reporter/draft-renderer 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/block-render-map.js +183 -0
- package/lib/block-renderer-fn.js +15 -74
- package/lib/block-renderers/embedded-code-block.js +16 -20
- package/lib/block-renderers/image-block.js +90 -46
- package/lib/block-renderers/index.js +2 -31
- package/lib/block-renderers/info-box-block.js +2 -115
- package/lib/block-renderers/multimedia.js +127 -0
- package/lib/block-renderers/slideshow-block.js +574 -199
- package/lib/draft-renderer.js +10 -194
- package/lib/entity-decorators/annotation-decorator.js +58 -100
- package/lib/entity-decorators/index.js +17 -6
- package/lib/entity-decorators/link-decorator.js +4 -7
- package/lib/index.js +39 -14
- package/lib/theme/index.js +0 -11
- package/package.json +10 -6
- package/lib/assets/annotation-arrow.png +0 -0
- package/lib/assets/audio-pause.png +0 -0
- package/lib/assets/audio-play.png +0 -0
- package/lib/assets/citation-download.png +0 -0
- package/lib/assets/default-og-img.png +0 -0
- package/lib/assets/slideshow-arrow-down-dark.png +0 -0
- package/lib/assets/slideshow-arrow-down.png +0 -0
- package/lib/assets/slideshow-arrow-up.png +0 -0
- package/lib/assets/slideshow-close-cross.png +0 -0
- package/lib/block-renderers/audio-block.js +0 -162
- package/lib/block-renderers/background-image-block.js +0 -257
- package/lib/block-renderers/background-video-block.js +0 -272
- package/lib/block-renderers/color-box-block.js +0 -94
- package/lib/block-renderers/divider-block.js +0 -27
- package/lib/block-renderers/media-block.js +0 -65
- package/lib/block-renderers/related-post-block.js +0 -73
- package/lib/block-renderers/side-index-block.js +0 -49
- package/lib/block-renderers/table-block.js +0 -455
- package/lib/block-renderers/video-block.js +0 -37
- package/lib/components/slideshow-lightbox.js +0 -134
- package/lib/components/slideshow-sidebar.js +0 -148
- package/lib/const.js +0 -10
- package/lib/entity-decorator.js +0 -18
- package/lib/public/07d1287fd390346af0c15b930148a5e4.png +0 -0
- package/lib/public/5b3cb1a908786c8750f1041860699cc1.png +0 -0
- package/lib/public/679d63b1846e81ada28c2f76edbd2931.png +0 -0
- package/lib/public/722f90c535fa64c27555ec6ee5f22393.png +0 -0
- package/lib/public/903cf84ef5c5ad76634c30bdc0ff8c49.png +0 -0
- package/lib/public/dc249b3412c5af890a004508287a3c3d.png +0 -0
- package/lib/public/dd45f0788d9c70cabe72430bf08e7413.png +0 -0
- package/lib/public/f96d4b486ba2061c460962ae694f4670.png +0 -0
- package/lib/shared-style/content-type.js +0 -163
- package/lib/shared-style/index.js +0 -108
- package/lib/types/index.js +0 -32
- package/lib/utils/common.js +0 -44
- package/lib/utils/post.js +0 -147
|
@@ -4,15 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.SlideshowBlock = SlideshowBlock;
|
|
7
|
-
exports.
|
|
7
|
+
exports.SlideshowInArticleBody = SlideshowInArticleBody;
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _multimedia = _interopRequireDefault(require("./multimedia"));
|
|
10
10
|
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _mediaQuery = _interopRequireDefault(require("@twreporter/core/lib/utils/media-query"));
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
16
16
|
|
|
17
17
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
18
18
|
|
|
@@ -20,234 +20,609 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
20
20
|
|
|
21
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
23
|
+
// @ts-ignore pkg does not contain ts header file
|
|
24
|
+
const mockup = {
|
|
25
|
+
mobile: {
|
|
26
|
+
container: {
|
|
27
|
+
width: 375 // px
|
|
28
|
+
|
|
29
|
+
},
|
|
30
|
+
slide: {
|
|
31
|
+
width: 339,
|
|
32
|
+
// px
|
|
33
|
+
height: 189,
|
|
34
|
+
// px
|
|
35
|
+
paddingRight: 2 // px
|
|
36
|
+
|
|
37
|
+
},
|
|
38
|
+
offset: {
|
|
39
|
+
left: 18 // px
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
tablet: {
|
|
44
|
+
container: {
|
|
45
|
+
width: 768 // px
|
|
46
|
+
|
|
47
|
+
},
|
|
48
|
+
slide: {
|
|
49
|
+
width: 687,
|
|
50
|
+
// px
|
|
51
|
+
height: 387,
|
|
52
|
+
// px
|
|
53
|
+
paddingRight: 4 // px
|
|
54
|
+
|
|
55
|
+
},
|
|
56
|
+
offset: {
|
|
57
|
+
left: 41 // px
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
desktop: {
|
|
62
|
+
container: {
|
|
63
|
+
width: 752 // px
|
|
64
|
+
|
|
65
|
+
},
|
|
66
|
+
slide: {
|
|
67
|
+
width: 688,
|
|
68
|
+
// px
|
|
69
|
+
height: 387,
|
|
70
|
+
// px
|
|
71
|
+
paddingRight: 4 // px
|
|
72
|
+
|
|
73
|
+
},
|
|
74
|
+
offset: {
|
|
75
|
+
left: 32 // px
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
hd: {
|
|
80
|
+
container: {
|
|
81
|
+
width: 1034 // px
|
|
82
|
+
|
|
83
|
+
},
|
|
84
|
+
slide: {
|
|
85
|
+
width: 944,
|
|
86
|
+
// px
|
|
87
|
+
height: 531,
|
|
88
|
+
// px
|
|
89
|
+
paddingRight: 4 // px
|
|
49
90
|
|
|
50
|
-
|
|
51
|
-
|
|
91
|
+
},
|
|
92
|
+
offset: {
|
|
93
|
+
left: 45 // px
|
|
94
|
+
|
|
95
|
+
}
|
|
52
96
|
}
|
|
97
|
+
}; // Assuming there are three images [ A, B, C ] for slideshow.
|
|
98
|
+
// If image B is rendered in the center,
|
|
99
|
+
// users can see part of image A(left side) and image C(right side) with masks.
|
|
100
|
+
// When users click right button to see image C, which means, C is in the center,
|
|
101
|
+
// users still can see part of image B(left side) and image A(right side) with masks.
|
|
102
|
+
//
|
|
103
|
+
// Hence, there are four images rendered arround B at the beginning.
|
|
104
|
+
// The image array should be [ C, A, B, C, A ].
|
|
105
|
+
//
|
|
106
|
+
// `slidesOffset` indicates how many slides rendered before/after image B, which is, 2 (A and C).
|
|
107
|
+
//
|
|
108
|
+
|
|
109
|
+
const slidesOffset = 2; // duration of transition of transform(translateX(?px))
|
|
110
|
+
|
|
111
|
+
const duration = 300; // current index to indicate which image should be rendered in the center
|
|
112
|
+
|
|
113
|
+
const defaultCurIndex = 0;
|
|
114
|
+
const SlidesSection = _styledComponents.default.div`
|
|
115
|
+
flex-shrink: 0;
|
|
116
|
+
flex-basis: 100%;
|
|
117
|
+
overflow: hidden;
|
|
118
|
+
position: relative;
|
|
119
|
+
|
|
120
|
+
${_mediaQuery.default.tabletAndBelow`
|
|
121
|
+
order: 2;
|
|
122
|
+
`}
|
|
123
|
+
|
|
124
|
+
${_mediaQuery.default.mobileOnly`
|
|
125
|
+
padding-bottom: calc(${mockup.mobile.slide.height}/${mockup.mobile.container.width}*100%);
|
|
126
|
+
`}
|
|
127
|
+
|
|
128
|
+
${_mediaQuery.default.tabletOnly`
|
|
129
|
+
padding-bottom: calc(${mockup.tablet.slide.height}/${mockup.tablet.container.width}*100%);
|
|
130
|
+
`}
|
|
131
|
+
|
|
132
|
+
${_mediaQuery.default.desktopOnly`
|
|
133
|
+
padding-bottom: calc(${mockup.desktop.slide.height}/${mockup.desktop.container.width}*100%);
|
|
134
|
+
`}
|
|
135
|
+
|
|
136
|
+
${_mediaQuery.default.hdOnly`
|
|
137
|
+
padding-bottom: calc(${mockup.hd.slide.height}/${mockup.hd.container.width}*100%);
|
|
138
|
+
`}
|
|
53
139
|
`;
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
140
|
+
const PrevNextSection = _styledComponents.default.div`
|
|
141
|
+
margin-top: 20px;
|
|
142
|
+
|
|
143
|
+
${_mediaQuery.default.tabletAndBelow`
|
|
144
|
+
order: 3;
|
|
145
|
+
`}
|
|
146
|
+
|
|
147
|
+
${_mediaQuery.default.mobileOnly`
|
|
148
|
+
margin-left: 25px;
|
|
149
|
+
`}
|
|
150
|
+
|
|
151
|
+
${_mediaQuery.default.tabletOnly`
|
|
152
|
+
margin-left: 47px;
|
|
153
|
+
`}
|
|
154
|
+
`;
|
|
155
|
+
const PrevButton = _styledComponents.default.div`
|
|
156
|
+
cursor: pointer;
|
|
157
|
+
width: 59px;
|
|
158
|
+
height: 59px;
|
|
159
|
+
display: inline-flex;
|
|
160
|
+
border: solid 1px;
|
|
57
161
|
|
|
58
|
-
|
|
59
|
-
margin
|
|
162
|
+
> svg {
|
|
163
|
+
margin: auto;
|
|
164
|
+
width: 21px;
|
|
60
165
|
}
|
|
61
166
|
|
|
62
|
-
${
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
flex: 1 0 calc((100% - ${SpacingBetweenSlideImages * 2}px) / 3);
|
|
66
|
-
min-width: ${SlideShowDesktopSize / 3 - 8}px;
|
|
167
|
+
${_mediaQuery.default.hdOnly`
|
|
168
|
+
width: 83px;
|
|
169
|
+
height: 83px;
|
|
67
170
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
filter: brightness(15%);
|
|
71
|
-
transition: 0.3s;
|
|
171
|
+
> svg {
|
|
172
|
+
width: 31px;
|
|
72
173
|
}
|
|
174
|
+
`}
|
|
73
175
|
|
|
74
|
-
|
|
75
|
-
|
|
176
|
+
&:hover {
|
|
177
|
+
> svg {
|
|
178
|
+
transform: translateX(-5px);
|
|
179
|
+
transition: transform 0.3s ease;
|
|
76
180
|
}
|
|
77
181
|
}
|
|
78
182
|
`;
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
line-height: 23px;
|
|
82
|
-
color: #000928;
|
|
83
|
-
opacity: 0.5;
|
|
84
|
-
${({
|
|
85
|
-
theme
|
|
86
|
-
}) => theme.fontSize.xs};
|
|
87
|
-
padding: 8px 20px 20px 20px;
|
|
88
|
-
|
|
89
|
-
${({
|
|
90
|
-
theme
|
|
91
|
-
}) => theme.breakpoint.md} {
|
|
92
|
-
${({
|
|
93
|
-
theme
|
|
94
|
-
}) => theme.fontSize.sm};
|
|
95
|
-
}
|
|
183
|
+
const NextButton = (0, _styledComponents.default)(PrevButton)`
|
|
184
|
+
border-left: none;
|
|
96
185
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
186
|
+
&:hover {
|
|
187
|
+
> svg {
|
|
188
|
+
transform: translateX(5px);
|
|
189
|
+
}
|
|
101
190
|
}
|
|
102
191
|
`;
|
|
103
|
-
const
|
|
104
|
-
display:
|
|
192
|
+
const ImageNumberCircle = _styledComponents.default.div`
|
|
193
|
+
display: inline-block;
|
|
194
|
+
width: 80px;
|
|
195
|
+
height: 80px;
|
|
196
|
+
border-radius: 50%;
|
|
197
|
+
vertical-align: top;
|
|
105
198
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
display: block;
|
|
199
|
+
position: relative;
|
|
200
|
+
|
|
201
|
+
&::after {
|
|
202
|
+
content: '';
|
|
111
203
|
position: absolute;
|
|
112
|
-
width:
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
rgba(255, 255, 255, 0) 648px,
|
|
119
|
-
rgba(255, 255, 255, 1) 960px
|
|
120
|
-
);
|
|
204
|
+
width: 62px;
|
|
205
|
+
border-top: solid 1px;
|
|
206
|
+
transform: rotate(-45deg);
|
|
207
|
+
transform-origin: bottom left;
|
|
208
|
+
top: 67px;
|
|
209
|
+
left: 7px;
|
|
121
210
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
&:hover::after,
|
|
145
|
-
&:active::after {
|
|
146
|
-
bottom: -30px;
|
|
147
|
-
transition: all 0.2s;
|
|
148
|
-
}
|
|
211
|
+
|
|
212
|
+
${_mediaQuery.default.tabletAndBelow`
|
|
213
|
+
order: 1;
|
|
214
|
+
|
|
215
|
+
/* align right */
|
|
216
|
+
margin-left: auto;
|
|
217
|
+
/* 10px is the border-right width of body */
|
|
218
|
+
margin-right: 10px;
|
|
219
|
+
`}
|
|
220
|
+
|
|
221
|
+
${_mediaQuery.default.desktopAndAbove`
|
|
222
|
+
margin-top: 6px;
|
|
223
|
+
|
|
224
|
+
/* align right */
|
|
225
|
+
margin-left: auto;
|
|
226
|
+
`}
|
|
227
|
+
|
|
228
|
+
${_mediaQuery.default.hdOnly`
|
|
229
|
+
margin-right: -18px;
|
|
230
|
+
width: 110px;
|
|
231
|
+
height: 110px;
|
|
149
232
|
|
|
150
233
|
&::after {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
left: 50%;
|
|
155
|
-
transform: translate(-50%, 0%);
|
|
156
|
-
width: 14px;
|
|
157
|
-
height: 13px;
|
|
158
|
-
background-image: url(${arrowDown});
|
|
159
|
-
background-repeat: no-repeat;
|
|
160
|
-
background-position: center center;
|
|
161
|
-
background-size: 14px;
|
|
234
|
+
width: 89px;
|
|
235
|
+
top: 93px;
|
|
236
|
+
left: 10px;
|
|
162
237
|
}
|
|
163
|
-
}
|
|
164
|
-
`;
|
|
238
|
+
`}
|
|
239
|
+
`;
|
|
240
|
+
const ImageNumber = _styledComponents.default.span`
|
|
241
|
+
position: absolute;
|
|
242
|
+
top: 25px;
|
|
243
|
+
left: 9px;
|
|
244
|
+
font-size: 24px;
|
|
245
|
+
font-weight: bold;
|
|
246
|
+
line-height: 0.79;
|
|
165
247
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
248
|
+
${_mediaQuery.default.hdOnly`
|
|
249
|
+
top: 35px;
|
|
250
|
+
left: 10px;
|
|
251
|
+
`}
|
|
252
|
+
`;
|
|
253
|
+
const ImageTotal = (0, _styledComponents.default)(ImageNumber)`
|
|
254
|
+
top: 46px;
|
|
255
|
+
left: 36px;
|
|
256
|
+
|
|
257
|
+
${_mediaQuery.default.hdOnly`
|
|
258
|
+
top: 71px;
|
|
259
|
+
left: 50px;
|
|
260
|
+
`}
|
|
171
261
|
`;
|
|
172
|
-
const
|
|
262
|
+
const Desc = (0, _styledComponents.default)(_multimedia.default.Caption)`
|
|
263
|
+
align-self: flex-start;
|
|
264
|
+
display: inline-block;
|
|
265
|
+
|
|
266
|
+
/* overwrite Multimedia.Caption styles */
|
|
267
|
+
margin-bottom: 0;
|
|
268
|
+
|
|
269
|
+
${_mediaQuery.default.tabletAndBelow`
|
|
270
|
+
order: 4;
|
|
271
|
+
padding-top: 15px;
|
|
272
|
+
`}
|
|
273
|
+
|
|
274
|
+
${_mediaQuery.default.mobileOnly`
|
|
275
|
+
width: calc(180/355*100%);
|
|
276
|
+
`}
|
|
277
|
+
|
|
278
|
+
${_mediaQuery.default.desktopAndAbove`
|
|
279
|
+
padding-top: 30px;
|
|
280
|
+
|
|
281
|
+
/* overwrite Multimedia.Caption styles */
|
|
282
|
+
float: none;
|
|
283
|
+
`}
|
|
284
|
+
`;
|
|
285
|
+
const EmptyDesc = (0, _styledComponents.default)(Desc)`
|
|
286
|
+
&::after {
|
|
287
|
+
border-bottom: none;
|
|
288
|
+
}
|
|
289
|
+
`;
|
|
290
|
+
const SlidesFlexBox = _styledComponents.default.div`
|
|
291
|
+
position: absolute;
|
|
292
|
+
top: 0;
|
|
293
|
+
left: 0;
|
|
294
|
+
display: flex;
|
|
295
|
+
flex-wrap: nowrap;
|
|
173
296
|
width: 100%;
|
|
297
|
+
height: 100%;
|
|
298
|
+
${props => {
|
|
299
|
+
if (props.isSliding) {
|
|
300
|
+
return `transition: transform ${props.duration}ms ease-in-out;`;
|
|
301
|
+
}
|
|
302
|
+
}}
|
|
303
|
+
|
|
304
|
+
${_mediaQuery.default.mobileOnly`
|
|
305
|
+
transform: translateX(${props => getTranslateX(mockup.mobile, props.translateXUint) / getContainerWidth(mockup.mobile) * 100}%);
|
|
306
|
+
`}
|
|
307
|
+
|
|
308
|
+
${_mediaQuery.default.tabletOnly`
|
|
309
|
+
transform: translateX(${props => getTranslateX(mockup.tablet, props.translateXUint) / getContainerWidth(mockup.tablet) * 100}%);
|
|
310
|
+
`}
|
|
311
|
+
|
|
312
|
+
${_mediaQuery.default.desktopOnly`
|
|
313
|
+
transform: translateX(${props => getTranslateX(mockup.desktop, props.translateXUint)}px);
|
|
314
|
+
`}
|
|
315
|
+
|
|
316
|
+
${_mediaQuery.default.hdOnly`
|
|
317
|
+
transform: translateX(${props => getTranslateX(mockup.hd, props.translateXUint)}px);
|
|
318
|
+
`}
|
|
319
|
+
`;
|
|
320
|
+
const SlideFlexItem = _styledComponents.default.div`
|
|
321
|
+
height: 100%;
|
|
322
|
+
flex-shrink: 0;
|
|
323
|
+
|
|
324
|
+
${_mediaQuery.default.mobileOnly`
|
|
325
|
+
flex-basis: calc(${getSlideWidth(mockup.mobile)}/${getContainerWidth(mockup.mobile)}*100%);
|
|
326
|
+
padding-right: calc(${mockup.mobile.slide.paddingRight}/${getContainerWidth(mockup.mobile)}*100%);
|
|
327
|
+
`}
|
|
328
|
+
|
|
329
|
+
${_mediaQuery.default.tabletOnly`
|
|
330
|
+
flex-basis: calc(${getSlideWidth(mockup.tablet)}/${getContainerWidth(mockup.tablet)}*100%);
|
|
331
|
+
padding-right: calc(${mockup.tablet.slide.paddingRight}/${getContainerWidth(mockup.tablet)}*100%);
|
|
332
|
+
`}
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
${_mediaQuery.default.desktopOnly`
|
|
336
|
+
flex-basis: ${getSlideWidth(mockup.desktop)}px;
|
|
337
|
+
padding-right: ${mockup.desktop.slide.paddingRight}px;
|
|
338
|
+
`}
|
|
339
|
+
|
|
340
|
+
${_mediaQuery.default.hdOnly`
|
|
341
|
+
flex-basis: ${getSlideWidth(mockup.hd)}px;
|
|
342
|
+
padding-right: ${mockup.hd.slide.paddingRight}px;
|
|
343
|
+
`}
|
|
344
|
+
`;
|
|
345
|
+
const SlideMask = _styledComponents.default.div`
|
|
346
|
+
position: absolute;
|
|
347
|
+
top: 0;
|
|
348
|
+
height: 100%;
|
|
349
|
+
opacity: 0.55;
|
|
350
|
+
`;
|
|
351
|
+
const LeftSlideMask = (0, _styledComponents.default)(SlideMask)`
|
|
352
|
+
left: 0;
|
|
353
|
+
|
|
354
|
+
${_mediaQuery.default.mobileOnly`
|
|
355
|
+
width: ${getLeftMaskWidth(mockup.mobile) / getContainerWidth(mockup.mobile) * 100}%;
|
|
356
|
+
`}
|
|
357
|
+
|
|
358
|
+
${_mediaQuery.default.tabletOnly`
|
|
359
|
+
width: ${getLeftMaskWidth(mockup.tablet) / getContainerWidth(mockup.tablet) * 100}%;
|
|
360
|
+
`}
|
|
361
|
+
|
|
362
|
+
${_mediaQuery.default.desktopOnly`
|
|
363
|
+
width: ${getLeftMaskWidth(mockup.desktop)}px;
|
|
364
|
+
`}
|
|
365
|
+
|
|
366
|
+
${_mediaQuery.default.hdOnly`
|
|
367
|
+
width: ${getLeftMaskWidth(mockup.hd)}px;
|
|
368
|
+
`}
|
|
174
369
|
`;
|
|
370
|
+
const RightSlideMask = (0, _styledComponents.default)(SlideMask)`
|
|
371
|
+
right: 0;
|
|
175
372
|
|
|
176
|
-
|
|
177
|
-
|
|
373
|
+
${_mediaQuery.default.mobileOnly`
|
|
374
|
+
width: ${getRightMaskWidth(mockup.mobile) / getContainerWidth(mockup.mobile) * 100}%;
|
|
375
|
+
`}
|
|
178
376
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
alt: images === null || images === void 0 ? void 0 : (_images$2 = images[0]) === null || _images$2 === void 0 ? void 0 : _images$2.name,
|
|
183
|
-
onError: e => {
|
|
184
|
-
var _images$3, _images$3$imageFile;
|
|
377
|
+
${_mediaQuery.default.tabletOnly`
|
|
378
|
+
width: ${getRightMaskWidth(mockup.tablet) / getContainerWidth(mockup.tablet) * 100}%;
|
|
379
|
+
`}
|
|
185
380
|
|
|
186
|
-
|
|
381
|
+
${_mediaQuery.default.desktopOnly`
|
|
382
|
+
width: ${getRightMaskWidth(mockup.desktop)}px;
|
|
383
|
+
`}
|
|
384
|
+
|
|
385
|
+
${_mediaQuery.default.hdOnly`
|
|
386
|
+
width: ${getRightMaskWidth(mockup.hd)}px;
|
|
387
|
+
`}
|
|
388
|
+
`;
|
|
389
|
+
const SlideshowFlexBox = _styledComponents.default.div`
|
|
390
|
+
${PrevButton} {
|
|
391
|
+
border-color: #d8d8d8;
|
|
392
|
+
}
|
|
393
|
+
${ImageNumberCircle} {
|
|
394
|
+
background-color: #d0a67d;
|
|
395
|
+
&::after {
|
|
396
|
+
border-color: #fff;
|
|
187
397
|
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
398
|
+
}
|
|
399
|
+
${ImageNumber} {
|
|
400
|
+
color: #fff;
|
|
401
|
+
}
|
|
402
|
+
${SlideMask} {
|
|
403
|
+
background-color: #d0a67d;
|
|
404
|
+
}
|
|
190
405
|
|
|
406
|
+
width: 100%;
|
|
407
|
+
display: flex;
|
|
408
|
+
justify-content: space-between;
|
|
409
|
+
flex-wrap: wrap;
|
|
410
|
+
|
|
411
|
+
${_mediaQuery.default.tabletAndBelow`
|
|
412
|
+
width: 100%;
|
|
413
|
+
`}
|
|
414
|
+
|
|
415
|
+
${_mediaQuery.default.desktopOnly`
|
|
416
|
+
width: ${mockup.desktop.container.width}px;
|
|
417
|
+
`}
|
|
418
|
+
|
|
419
|
+
${_mediaQuery.default.hdOnly`
|
|
420
|
+
width: ${mockup.hd.container.width}px;
|
|
421
|
+
`}
|
|
422
|
+
`;
|
|
423
|
+
|
|
424
|
+
function getTranslateX(deviceMockup, unit) {
|
|
425
|
+
const slideWidth = getSlideWidth(deviceMockup); // total slides width including padding
|
|
426
|
+
|
|
427
|
+
let translateX = unit * slideWidth; // add left mask width and padding
|
|
428
|
+
|
|
429
|
+
translateX = translateX + deviceMockup.offset.left;
|
|
430
|
+
return translateX; // px
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* @param {DeviceMockup} deviceMockup
|
|
434
|
+
* @return {number}
|
|
435
|
+
*/
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
function getContainerWidth(deviceMockup) {
|
|
439
|
+
return deviceMockup.container.width;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* @param {DeviceMockup} deviceMockup
|
|
443
|
+
* @return {number}
|
|
444
|
+
*/
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
function getSlideWidth(deviceMockup) {
|
|
448
|
+
return deviceMockup.slide.width + deviceMockup.slide.paddingRight;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* @param {DeviceMockup} deviceMockup
|
|
452
|
+
* @return {number}
|
|
453
|
+
*/
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
function getLeftMaskWidth(deviceMockup) {
|
|
457
|
+
return deviceMockup.offset.left - deviceMockup.slide.paddingRight; // px
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* @param {DeviceMockup} deviceMockup
|
|
461
|
+
* @return {number}
|
|
462
|
+
*/
|
|
191
463
|
|
|
192
|
-
function SlideshowBlockV2(entity) {
|
|
193
|
-
const {
|
|
194
|
-
images
|
|
195
|
-
} = entity.getData();
|
|
196
|
-
const [expandSlideShow, setExpandSlideShow] = (0, _react.useState)(false);
|
|
197
|
-
const [showLightBox, setShowLightBox] = (0, _react.useState)(false);
|
|
198
|
-
const [focusImageIndex, setFocusImageIndex] = (0, _react.useState)(0);
|
|
199
|
-
const imagesRefs = (0, _react.useRef)(Array(images.length).fill(null));
|
|
200
|
-
(0, _react.useEffect)(() => {
|
|
201
|
-
const focusedImageRef = imagesRefs === null || imagesRefs === void 0 ? void 0 : imagesRefs.current[focusImageIndex];
|
|
202
464
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
465
|
+
function getRightMaskWidth(deviceMockup) {
|
|
466
|
+
return deviceMockup.container.width - deviceMockup.offset.left - getSlideWidth(deviceMockup); // px
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
function SlideshowBlock({
|
|
470
|
+
className = '',
|
|
471
|
+
data
|
|
472
|
+
}) {
|
|
473
|
+
var _images$curSlideIndex;
|
|
474
|
+
|
|
475
|
+
const defaultTranslateXUnit = -slidesOffset; // value of curSlideIndex would be in [ 0 ~ props.data.content.length ] range,
|
|
476
|
+
// it indicates which image should be placed in the center
|
|
477
|
+
|
|
478
|
+
const [curSlideIndex, setCurSlideIndex] = (0, _react.useState)(defaultCurIndex);
|
|
479
|
+
const [slideTo, setSlideTo] = (0, _react.useState)(''); // '', 'previous' or 'next'. '' means no sliding.
|
|
480
|
+
|
|
481
|
+
const [translateXUnit, setTranslateXUnit] = (0, _react.useState)(defaultTranslateXUnit);
|
|
482
|
+
const images = ((data === null || data === void 0 ? void 0 : data.images) || []).filter(img => {
|
|
483
|
+
var _img$imageFile;
|
|
484
|
+
|
|
485
|
+
return img === null || img === void 0 ? void 0 : (_img$imageFile = img.imageFile) === null || _img$imageFile === void 0 ? void 0 : _img$imageFile.url;
|
|
486
|
+
});
|
|
487
|
+
const total = images === null || images === void 0 ? void 0 : images.length;
|
|
488
|
+
const desc = images === null || images === void 0 ? void 0 : (_images$curSlideIndex = images[curSlideIndex]) === null || _images$curSlideIndex === void 0 ? void 0 : _images$curSlideIndex.desc;
|
|
489
|
+
const appendedClassName = className + ' avoid-break';
|
|
490
|
+
const slides = (0, _react.useMemo)(() => {
|
|
491
|
+
// add last `slidesOffset` elements into top of images array.
|
|
492
|
+
// add first `slidesOffset` elements into bottom of images array.
|
|
493
|
+
// EX:
|
|
494
|
+
// slidesOffset: 2
|
|
495
|
+
// input images: [ a, b, c, d ]
|
|
496
|
+
// output images: [c, d, a, b, c, d, a, b]
|
|
497
|
+
const _images = [...images.slice(-slidesOffset), ...images, ...images.slice(defaultCurIndex, slidesOffset)];
|
|
498
|
+
return _images === null || _images === void 0 ? void 0 : _images.map((img, index) => {
|
|
499
|
+
var _img$resized, _img$resized2, _img$resized3, _img$resized4;
|
|
500
|
+
|
|
501
|
+
const width = img.imageFile.width ?? 0;
|
|
502
|
+
const height = img.imageFile.height ?? 0;
|
|
503
|
+
const imgSrc = ((_img$resized = img.resized) === null || _img$resized === void 0 ? void 0 : _img$resized.medium) ?? img.imageFile.url;
|
|
504
|
+
const imgSrcSetArr = [];
|
|
505
|
+
|
|
506
|
+
if ((_img$resized2 = img.resized) !== null && _img$resized2 !== void 0 && _img$resized2.small) {
|
|
507
|
+
imgSrcSetArr.push(`${img.resized.medium} 600w`);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
if ((_img$resized3 = img.resized) !== null && _img$resized3 !== void 0 && _img$resized3.medium) {
|
|
511
|
+
imgSrcSetArr.push(`${img.resized.medium} 1200w`);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
if ((_img$resized4 = img.resized) !== null && _img$resized4 !== void 0 && _img$resized4.large) {
|
|
515
|
+
imgSrcSetArr.push(`${img.resized.large} 2000w`);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
const objectFit = width > height ? 'cover' : 'contain';
|
|
519
|
+
return (
|
|
520
|
+
/*#__PURE__*/
|
|
521
|
+
// since the items of _images would have the same id,
|
|
522
|
+
// hence, we append `index` on the key
|
|
523
|
+
_react.default.createElement(SlideFlexItem, {
|
|
524
|
+
key: `slide_${img.id}_${index}`
|
|
525
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
526
|
+
srcSet: imgSrcSetArr.join(','),
|
|
527
|
+
src: imgSrc,
|
|
528
|
+
style: {
|
|
529
|
+
objectFit,
|
|
530
|
+
width: '100%'
|
|
531
|
+
},
|
|
532
|
+
sizes: "(max-width: 768px) 100vw, (min-width: 1400px) 1000px, 500px"
|
|
533
|
+
}))
|
|
534
|
+
);
|
|
535
|
+
});
|
|
536
|
+
}, [images]);
|
|
537
|
+
|
|
538
|
+
const slideToPrev = () => {
|
|
539
|
+
setSlideTo('previous');
|
|
540
|
+
setTranslateXUnit(translateXUnit + 1);
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
const slideToNext = () => {
|
|
544
|
+
setSlideTo('next');
|
|
545
|
+
setTranslateXUnit(translateXUnit - 1);
|
|
546
|
+
};
|
|
547
|
+
|
|
548
|
+
(0, _react.useEffect)(() => {
|
|
549
|
+
if (slideTo === '') {
|
|
550
|
+
return;
|
|
208
551
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
name
|
|
218
|
-
} = image;
|
|
219
|
-
return /*#__PURE__*/_react.default.createElement(SlideShowImage, {
|
|
220
|
-
className: "slideshow-image",
|
|
221
|
-
key: id,
|
|
222
|
-
onClick: () => {
|
|
223
|
-
setShowLightBox(!showLightBox);
|
|
224
|
-
setFocusImageIndex(index);
|
|
552
|
+
|
|
553
|
+
let _curSlideIndex;
|
|
554
|
+
|
|
555
|
+
if (slideTo === 'previous') {
|
|
556
|
+
_curSlideIndex = curSlideIndex - 1;
|
|
557
|
+
|
|
558
|
+
if (_curSlideIndex < defaultCurIndex) {
|
|
559
|
+
_curSlideIndex = total + _curSlideIndex;
|
|
225
560
|
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
},
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
561
|
+
} else if (slideTo === 'next') {
|
|
562
|
+
_curSlideIndex = curSlideIndex + 1;
|
|
563
|
+
|
|
564
|
+
if (_curSlideIndex >= total) {
|
|
565
|
+
_curSlideIndex = _curSlideIndex % total;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
setTimeout(() => {
|
|
570
|
+
setSlideTo('');
|
|
571
|
+
setCurSlideIndex(_curSlideIndex);
|
|
572
|
+
setTranslateXUnit(defaultTranslateXUnit - _curSlideIndex);
|
|
573
|
+
}, duration * 2);
|
|
574
|
+
}, [slideTo, curSlideIndex, translateXUnit]);
|
|
575
|
+
const isSliding = slideTo !== '';
|
|
576
|
+
return /*#__PURE__*/_react.default.createElement(SlideshowFlexBox, {
|
|
577
|
+
className: appendedClassName
|
|
578
|
+
}, /*#__PURE__*/_react.default.createElement(SlidesSection, null, /*#__PURE__*/_react.default.createElement(SlidesFlexBox, {
|
|
579
|
+
translateXUint: translateXUnit,
|
|
580
|
+
duration: duration,
|
|
581
|
+
isSliding: isSliding
|
|
582
|
+
}, slides), /*#__PURE__*/_react.default.createElement(LeftSlideMask, null), /*#__PURE__*/_react.default.createElement(RightSlideMask, null)), /*#__PURE__*/_react.default.createElement(PrevNextSection, null, /*#__PURE__*/_react.default.createElement(PrevButton, {
|
|
583
|
+
onClick: isSliding ? undefined : slideToPrev
|
|
584
|
+
}, /*#__PURE__*/_react.default.createElement(PreArrowSvg, null)), /*#__PURE__*/_react.default.createElement(NextButton, {
|
|
585
|
+
onClick: isSliding ? undefined : slideToNext
|
|
586
|
+
}, /*#__PURE__*/_react.default.createElement(NextArrowSvg, null))), /*#__PURE__*/_react.default.createElement(ImageNumberCircle, null, /*#__PURE__*/_react.default.createElement(ImageNumber, null, curSlideIndex + 1), /*#__PURE__*/_react.default.createElement(ImageTotal, null, total)), desc ? /*#__PURE__*/_react.default.createElement(Desc, null, desc) : /*#__PURE__*/_react.default.createElement(EmptyDesc, null));
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
function NextArrowSvg() {
|
|
590
|
+
return /*#__PURE__*/_react.default.createElement("svg", {
|
|
591
|
+
viewBox: "0 0 31 17",
|
|
592
|
+
width: "31",
|
|
593
|
+
height: "17",
|
|
594
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
595
|
+
}, /*#__PURE__*/_react.default.createElement("path", {
|
|
596
|
+
d: "M29.33 7.854H0v1h29.256l-7.11 7.148.708.705 8-8.042-.001-.707-8-7.958-.706.709 7.183 7.145z",
|
|
597
|
+
fill: "gray",
|
|
598
|
+
fillRule: "nonzero"
|
|
599
|
+
}));
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
function PreArrowSvg() {
|
|
603
|
+
return /*#__PURE__*/_react.default.createElement("svg", {
|
|
604
|
+
viewBox: "0 0 31 17",
|
|
605
|
+
width: "31",
|
|
606
|
+
height: "17",
|
|
607
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
608
|
+
}, /*#__PURE__*/_react.default.createElement("path", {
|
|
609
|
+
d: "M2.17 8.5H31.5v1H2.244l7.11 7.147-.708.706-8-8.042.001-.707 8-7.958.706.708L2.17 8.5z",
|
|
610
|
+
fill: "gray"
|
|
611
|
+
}));
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
const ArticleBodyContainer = _styledComponents.default.div`
|
|
615
|
+
width: fit-content;
|
|
616
|
+
margin: 0 auto 27px auto;
|
|
617
|
+
`;
|
|
618
|
+
|
|
619
|
+
function SlideshowInArticleBody({
|
|
620
|
+
className = '',
|
|
621
|
+
data
|
|
622
|
+
}) {
|
|
623
|
+
return /*#__PURE__*/_react.default.createElement(ArticleBodyContainer, {
|
|
624
|
+
className: className
|
|
625
|
+
}, /*#__PURE__*/_react.default.createElement(SlideshowBlock, {
|
|
626
|
+
data: data
|
|
252
627
|
}));
|
|
253
628
|
}
|