framework7 8.0.0-beta.6 → 8.0.0-beta.8
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/components/photo-browser/photo-browser-class.js +89 -4
- package/components/photo-browser/photo-browser-rtl.css +1 -1
- package/components/photo-browser/photo-browser-vars.less +2 -3
- package/components/photo-browser/photo-browser.css +1 -1
- package/components/photo-browser/photo-browser.d.ts +7 -1
- package/components/photo-browser/photo-browser.js +4 -1
- package/components/photo-browser/photo-browser.less +94 -15
- package/framework7-bundle-rtl.css +99 -22
- package/framework7-bundle-rtl.min.css +3 -3
- package/framework7-bundle.css +99 -22
- package/framework7-bundle.esm.js +2 -2
- package/framework7-bundle.js +289 -8
- package/framework7-bundle.js.map +1 -1
- package/framework7-bundle.less +2 -2
- package/framework7-bundle.min.css +3 -3
- package/framework7-bundle.min.js +3 -3
- package/framework7-bundle.min.js.map +1 -1
- package/framework7-lite-bundle.esm.js +2 -2
- package/framework7-lite.esm.js +2 -2
- package/framework7-rtl.css +2 -2
- package/framework7-rtl.min.css +2 -2
- package/framework7.css +2 -2
- package/framework7.esm.js +2 -2
- package/framework7.less +2 -2
- package/framework7.min.css +2 -2
- package/modules/component/component-class.js +193 -1
- package/modules/component/component.d.ts +16 -0
- package/modules/component/parse-component.js +1 -0
- package/package.json +2 -2
|
@@ -185,12 +185,31 @@ class PhotoBrowser extends Framework7Class {
|
|
|
185
185
|
class: "photo-browser-of"
|
|
186
186
|
}, pb.params.navbarOfText), $jsx("span", {
|
|
187
187
|
class: "photo-browser-total"
|
|
188
|
-
})), isPopup && $jsx("div", {
|
|
188
|
+
})), isPopup && (pb.params.popupCloseLinkText || pb.params.popupCloseLinkIcon) && $jsx("div", {
|
|
189
189
|
class: "right"
|
|
190
190
|
}, $jsx("a", {
|
|
191
191
|
class: "link popup-close",
|
|
192
192
|
"data-popup": ".photo-browser-popup"
|
|
193
|
-
}, $jsx("
|
|
193
|
+
}, pb.params.popupCloseLinkIcon && pb.app.theme === 'ios' && $jsx("i", null, $jsx("svg", {
|
|
194
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
195
|
+
width: "56",
|
|
196
|
+
height: "56",
|
|
197
|
+
viewBox: "0 0 56 56"
|
|
198
|
+
}, $jsx("path", {
|
|
199
|
+
fill: "currentColor",
|
|
200
|
+
d: "M 10.0234 43.0234 C 9.2266 43.8203 9.2031 45.1797 10.0234 45.9766 C 10.8438 46.7734 12.1797 46.7734 13.0000 45.9766 L 28.0000 30.9766 L 43.0000 45.9766 C 43.7969 46.7734 45.1563 46.7969 45.9766 45.9766 C 46.7734 45.1562 46.7734 43.8203 45.9766 43.0234 L 30.9531 28.0000 L 45.9766 13.0000 C 46.7734 12.2031 46.7969 10.8437 45.9766 10.0469 C 45.1328 9.2266 43.7969 9.2266 43.0000 10.0469 L 28.0000 25.0469 L 13.0000 10.0469 C 12.1797 9.2266 10.8203 9.2031 10.0234 10.0469 C 9.2266 10.8672 9.2266 12.2031 10.0234 13.0000 L 25.0234 28.0000 Z"
|
|
201
|
+
}))), pb.params.popupCloseLinkIcon && pb.app.theme === 'md' && $jsx("i", null, $jsx("svg", {
|
|
202
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
203
|
+
height: "24px",
|
|
204
|
+
viewBox: "0 0 24 24",
|
|
205
|
+
width: "24px",
|
|
206
|
+
fill: "currentColor"
|
|
207
|
+
}, $jsx("path", {
|
|
208
|
+
d: "M0 0h24v24H0V0z",
|
|
209
|
+
fill: "none"
|
|
210
|
+
}), $jsx("path", {
|
|
211
|
+
d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"
|
|
212
|
+
}))), pb.params.popupCloseLinkText && $jsx("span", null, pb.params.popupCloseLinkText)))));
|
|
194
213
|
}
|
|
195
214
|
renderToolbar() {
|
|
196
215
|
const pb = this;
|
|
@@ -210,6 +229,16 @@ class PhotoBrowser extends Framework7Class {
|
|
|
210
229
|
class: `icon icon-forward ${iconsColor ? `color-${iconsColor}` : ''}`
|
|
211
230
|
}))));
|
|
212
231
|
}
|
|
232
|
+
renderThumbs() {
|
|
233
|
+
const pb = this;
|
|
234
|
+
return $jsx("div", {
|
|
235
|
+
class: "toolbar toolbar-bottom photo-browser-thumbs"
|
|
236
|
+
}, $jsx("div", {
|
|
237
|
+
class: "swiper"
|
|
238
|
+
}, $jsx("div", {
|
|
239
|
+
class: "swiper-wrapper"
|
|
240
|
+
}, pb.params.thumbs.map((thumb, index) => pb.renderThumb(thumb, index)))));
|
|
241
|
+
}
|
|
213
242
|
renderCaption(caption, index) {
|
|
214
243
|
const pb = this;
|
|
215
244
|
if (pb.params.renderCaption) return pb.params.renderCaption.call(pb, caption, index);
|
|
@@ -253,6 +282,18 @@ class PhotoBrowser extends Framework7Class {
|
|
|
253
282
|
src: photo.url ? photo.url : photo
|
|
254
283
|
})));
|
|
255
284
|
}
|
|
285
|
+
renderThumb(thumb, index) {
|
|
286
|
+
const pb = this;
|
|
287
|
+
const url = typeof thumb === 'string' ? thumb : thumb.url;
|
|
288
|
+
if (pb.params.renderThumb) return pb.params.renderThumb.call(pb, thumb, index);
|
|
289
|
+
return $jsx("div", {
|
|
290
|
+
class: "photo-browser-thumbs-slide swiper-slide",
|
|
291
|
+
"data-swiper-slide-index": index
|
|
292
|
+
}, url && $jsx("img", {
|
|
293
|
+
src: url,
|
|
294
|
+
loading: "lazy"
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
256
297
|
render() {
|
|
257
298
|
const pb = this;
|
|
258
299
|
if (pb.params.render) return pb.params.render.call(pb, pb.params);
|
|
@@ -263,7 +304,7 @@ class PhotoBrowser extends Framework7Class {
|
|
|
263
304
|
}, $jsx("div", {
|
|
264
305
|
class: `page photo-browser-page photo-browser-page-${pb.params.theme} no-toolbar ${!pb.params.navbar ? 'no-navbar' : ''}`,
|
|
265
306
|
"data-name": "photo-browser-page"
|
|
266
|
-
}, pb.params.navbar && pb.renderNavbar(), pb.params.toolbar && pb.renderToolbar(), $jsx("div", {
|
|
307
|
+
}, pb.params.navbar && pb.renderNavbar(), pb.params.toolbar && pb.renderToolbar(), pb.params.thumbs && pb.params.thumbs.length && pb.renderThumbs(), $jsx("div", {
|
|
267
308
|
class: `photo-browser-captions photo-browser-captions-${pb.params.captionsTheme || pb.params.theme}`
|
|
268
309
|
}, pb.params.photos.map((photo, index) => {
|
|
269
310
|
if (photo.caption) return pb.renderCaption(photo.caption, index);
|
|
@@ -316,11 +357,15 @@ class PhotoBrowser extends Framework7Class {
|
|
|
316
357
|
pb.slides = pb.$el.find('.photo-browser-slide');
|
|
317
358
|
pb.$captionsContainerEl = pb.$el.find('.photo-browser-captions');
|
|
318
359
|
pb.captions = pb.$el.find('.photo-browser-caption');
|
|
360
|
+
const hasThumbs = pb.params.thumbs && pb.params.thumbs.length > 0;
|
|
319
361
|
|
|
320
362
|
// Init Swiper
|
|
321
363
|
let clickTimeout;
|
|
364
|
+
let preventThumbsSlide;
|
|
365
|
+
let preventMainSlide;
|
|
366
|
+
const initialSlide = pb.activeIndex;
|
|
322
367
|
const swiperParams = extend({}, pb.params.swiper, {
|
|
323
|
-
initialSlide
|
|
368
|
+
initialSlide,
|
|
324
369
|
// cssMode:
|
|
325
370
|
// typeof pb.params.swiper.cssMode === 'undefined' && (app.device.ios || app.device.android)
|
|
326
371
|
// ? true
|
|
@@ -343,6 +388,13 @@ class PhotoBrowser extends Framework7Class {
|
|
|
343
388
|
},
|
|
344
389
|
slideChange() {
|
|
345
390
|
const swiper = this;
|
|
391
|
+
if (hasThumbs && pb.thumbsSwiper && !preventMainSlide) {
|
|
392
|
+
preventThumbsSlide = true;
|
|
393
|
+
pb.thumbsSwiper.slideTo(pb.swiper.activeIndex);
|
|
394
|
+
setTimeout(() => {
|
|
395
|
+
preventThumbsSlide = false;
|
|
396
|
+
});
|
|
397
|
+
}
|
|
346
398
|
pb.onSlideChange(swiper);
|
|
347
399
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
348
400
|
args[_key] = arguments[_key];
|
|
@@ -414,6 +466,34 @@ class PhotoBrowser extends Framework7Class {
|
|
|
414
466
|
if (pb.activeIndex === 0 || pb.params.virtualSlides) {
|
|
415
467
|
pb.onSlideChange(pb.swiper);
|
|
416
468
|
}
|
|
469
|
+
if (hasThumbs) {
|
|
470
|
+
const thumbsSwiperParams = {
|
|
471
|
+
el: pb.$el.find('.photo-browser-thumbs .swiper')[0],
|
|
472
|
+
slidesPerView: 'auto',
|
|
473
|
+
centeredSlides: true,
|
|
474
|
+
spaceBetween: 4,
|
|
475
|
+
watchSlidesProgress: true,
|
|
476
|
+
initialSlide,
|
|
477
|
+
on: {
|
|
478
|
+
touchMove() {
|
|
479
|
+
preventMainSlide = true;
|
|
480
|
+
},
|
|
481
|
+
touchEnd() {
|
|
482
|
+
preventMainSlide = false;
|
|
483
|
+
},
|
|
484
|
+
slideChange(s) {
|
|
485
|
+
if (preventThumbsSlide) return;
|
|
486
|
+
pb.swiper.slideTo(s.activeIndex, 0);
|
|
487
|
+
},
|
|
488
|
+
click(s) {
|
|
489
|
+
if (!s.clickedSlide) return;
|
|
490
|
+
const index = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);
|
|
491
|
+
s.slideTo(index, 0);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
};
|
|
495
|
+
pb.thumbsSwiper = app.swiper ? app.swiper.create(thumbsSwiperParams) : new window.Swiper(thumbsSwiperParams);
|
|
496
|
+
}
|
|
417
497
|
if (pb.$el) {
|
|
418
498
|
pb.$el.trigger('photobrowser:open');
|
|
419
499
|
}
|
|
@@ -439,6 +519,11 @@ class PhotoBrowser extends Framework7Class {
|
|
|
439
519
|
pb.swiper = null;
|
|
440
520
|
delete pb.swiper;
|
|
441
521
|
}
|
|
522
|
+
if (pb.thumbsSwiper && pb.thumbsSwiper.destroy) {
|
|
523
|
+
pb.thumbsSwiper.destroy(true, false);
|
|
524
|
+
pb.thumbsSwiper = null;
|
|
525
|
+
delete pb.thumbsSwiper;
|
|
526
|
+
}
|
|
442
527
|
if (pb.$el) {
|
|
443
528
|
pb.$el.trigger('photobrowser:close');
|
|
444
529
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--f7-photobrowser-bg-color:#fff;--f7-photobrowser-bars-bg-color:rgba(var(--f7-bars-bg-color-rgb), 0.95);--f7-photobrowser-bars-text-color:var(--f7-bars-text-color);--f7-photobrowser-bars-link-color:var(--f7-bars-link-color);--f7-photobrowser-caption-font-size:
|
|
1
|
+
:root{--f7-photobrowser-bg-color:#fff;--f7-photobrowser-bars-bg-color:rgba(var(--f7-bars-bg-color-rgb), 0.95);--f7-photobrowser-bars-text-color:var(--f7-bars-text-color);--f7-photobrowser-bars-link-color:var(--f7-bars-link-color);--f7-photobrowser-caption-font-size:13px;--f7-photobrowser-caption-font-weight:500;--f7-photobrowser-caption-light-text-color:#000;--f7-photobrowser-caption-dark-text-color:#fff;--f7-photobrowser-exposed-bg-color:#000;--f7-photobrowser-dark-bg-color:#000;--f7-photobrowser-dark-bars-bg-color:rgba(27, 27, 27, 0.8);--f7-photobrowser-dark-bars-text-color:#fff;--f7-photobrowser-dark-bars-link-color:#fff}.photo-browser{position:absolute;left:0;top:0;width:100%;height:100%;z-index:400}.photo-browser-standalone.modal-in{transition-duration:0s;animation:photo-browser-in .4s}.photo-browser-standalone.modal-out{transition-duration:0s;animation:photo-browser-out .4s!important}.photo-browser-standalone.modal-out.swipe-close-to-bottom,.photo-browser-standalone.modal-out.swipe-close-to-top{animation:none!important}.photo-browser-standalone.photo-browser-transitioning{transition:.4s;animation:none!important}.photo-browser-popup.modal-out.swipe-close-to-bottom,.photo-browser-popup.modal-out.swipe-close-to-top{transition-duration:.3s}.photo-browser-popup.modal-out.swipe-close-to-bottom{transform:translate3d(0,100vh,0)}.photo-browser-popup.modal-out.swipe-close-to-top{transform:translate3d(0,-100vh,0)}.photo-browser-page{background:0 0}.photo-browser-page .toolbar{transform:none}.photo-browser-popup{background:0 0}.photo-browser-of{margin:0 5px}.photo-browser-captions{pointer-events:none;position:absolute;left:0;width:100%;bottom:var(--f7-safe-area-bottom);z-index:10;opacity:1;transition-duration:.4s}.photo-browser-captions.photo-browser-captions-exposed{opacity:0}.toolbar~.toolbar.photo-browser-thumbs{bottom:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom))}.page~.photo-browser-page:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs,.photo-browser-popup:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs,.photo-browser-standalone:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs{height:var(--f7-toolbar-height)}.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs{transform:translate3d(0,calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom,0)),0)}.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs .swiper{height:calc(100% - var(--f7-safe-area-bottom,0))}.navbar+.toolbar.photo-browser-thumbs .swiper{height:calc(100% - var(--f7-safe-area-bottom,0))}.toolbar~.photo-browser-captions{bottom:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom));transform:translate3d(0,0px,0)}.toolbar~.photo-browser-captions.photo-browser-captions-exposed{transform:translate3d(0,0px,0)}.toolbar~.toolbar~.photo-browser-captions{bottom:calc(var(--f7-toolbar-height) * 2 + var(--f7-safe-area-bottom))}.toolbar~.toolbar~.photo-browser-captions.photo-browser-captions-exposed{transform:translate3d(0,var(--f7-toolbar-height),0)}.photo-browser-thumbs{transition-property:transform,background-color,color}.photo-browser-thumbs .swiper{width:100%;height:100%}.photo-browser-thumbs .swiper-slide{width:auto;display:flex;align-items:center;justify-content:center}.photo-browser-thumbs img{width:auto;height:75%;display:block;border-radius:2px;min-width:4px}.photo-browser-thumbs .swiper-slide img{transform:translateX(-4px);transition-duration:150ms}.photo-browser-thumbs .swiper-slide-active img{transform:scale(1.2)}.photo-browser-thumbs .swiper-slide-active~.swiper-slide img{transform:translateX(4px)}.photo-browser-caption{box-sizing:border-box;transition-duration:.4s;position:absolute;bottom:0;left:0;opacity:0;padding:4px 5px;width:100%;text-align:center;font-size:var(--f7-photobrowser-caption-font-size);font-weight:var(--f7-photobrowser-caption-font-weight)}@supports ((-webkit-backdrop-filter:blur(20px)) or (backdrop-filter:blur(20px))){.ios-translucent-bars .photo-browser-caption{-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.photo-browser-caption:empty{display:none}.photo-browser-caption.photo-browser-caption-active{opacity:1}.photo-browser-captions-light .photo-browser-caption{color:var(--f7-photobrowser-caption-light-text-color)}.dark .photo-browser-caption,.photo-browser-captions-dark .photo-browser-caption{color:var(--f7-photobrowser-caption-dark-text-color)}.photo-browser-swiper-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;background:var(--f7-photobrowser-bg-color);transition:.4s;transition-property:background-color;touch-action:pan-x pan-y}.photo-browser-next.swiper-button-disabled,.photo-browser-prev.swiper-button-disabled{opacity:.3;pointer-events:none}.photo-browser-slide{width:100%;height:100%;position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;flex-shrink:0;box-sizing:border-box}.photo-browser-slide span.swiper-zoom-container{display:none}.photo-browser-slide img{width:auto;height:auto;max-width:100%;max-height:100%;display:none}.photo-browser-slide.swiper-slide-active span.swiper-zoom-container,.photo-browser-slide.swiper-slide-next span.swiper-zoom-container,.photo-browser-slide.swiper-slide-prev span.swiper-zoom-container{display:flex}.photo-browser-slide.swiper-slide-active img,.photo-browser-slide.swiper-slide-next img,.photo-browser-slide.swiper-slide-prev img{display:inline}.photo-browser-slide.swiper-slide-active.photo-browser-slide-lazy .preloader,.photo-browser-slide.swiper-slide-next.photo-browser-slide-lazy .preloader,.photo-browser-slide.swiper-slide-prev.photo-browser-slide-lazy .preloader{display:block}.photo-browser-slide iframe{width:100%;height:100%}.photo-browser-slide .preloader{display:none;position:absolute;width:42px;height:42px;margin-left:-21px;margin-top:-21px;left:50%;top:50%}.navbar-photo-browser .right .link i,.navbar-photo-browser .right .link svg{width:24px;height:24px;display:block}.navbar-photo-browser .navbar-bg,.photo-browser-caption,.photo-browser-page .navbar-bg,.photo-browser-page .toolbar{background-color:var(--f7-photobrowser-bars-bg-color,rgba(var(--f7-bars-bg-color-rgb),.95))}.photo-browser-page{touch-action:manipulation}.photo-browser-page .navbar,.photo-browser-page .toolbar{transform:translate3d(0,0,0);transition-duration:.4s;color:var(--f7-photobrowser-bars-text-color,var(--f7-bars-text-color))}.photo-browser-page .navbar a,.photo-browser-page .toolbar a{color:var(--f7-photobrowser-bars-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.photo-browser-exposed .navbar,.photo-browser-exposed .toolbar:not(.photo-browser-thumbs){opacity:0;visibility:hidden;pointer-events:none}.photo-browser-exposed .toolbar:not(.photo-browser-thumbs)~.photo-browser-captions,.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs~.photo-browser-captions{transform:translate3d(0,var(--f7-toolbar-height),0)}.photo-browser-exposed .photo-browser-swiper-container{background:var(--f7-photobrowser-exposed-bg-color)}.photo-browser-dark .photo-browser-thumbs,.photo-browser-dark .toolbar,.photo-browser-exposed .photo-browser-thumbs,.photo-browser-exposed .toolbar{background-color:var(--f7-photobrowser-dark-bars-bg-color)}.photo-browser-dark .photo-browser-caption,.photo-browser-exposed .photo-browser-caption{color:var(--f7-photobrowser-caption-dark-text-color);background-color:var(--f7-photobrowser-dark-bars-bg-color)}.view.with-photo-browser-page-exposed .navbar{opacity:0;pointer-events:none}.photo-browser-page .toolbar:after,.photo-browser-page .toolbar:before{display:none!important}.navbar-photo-browser-dark .navbar-bg,.photo-browser-page-dark .navbar-bg{background:var(--f7-photobrowser-dark-bars-bg-color)}.navbar-photo-browser-dark .navbar-bg:after,.navbar-photo-browser-dark .navbar-bg:before,.photo-browser-page-dark .navbar-bg:after,.photo-browser-page-dark .navbar-bg:before{display:none!important}.navbar-photo-browser-dark,.photo-browser-dark .navbar,.photo-browser-dark .toolbar,.photo-browser-page-dark .navbar,.photo-browser-page-dark .toolbar{color:var(--f7-photobrowser-dark-bars-text-color)}.navbar-photo-browser-dark a,.photo-browser-dark .navbar a,.photo-browser-dark .toolbar a,.photo-browser-page-dark .navbar a,.photo-browser-page-dark .toolbar a{color:var(--f7-photobrowser-dark-bars-link-color)}.photo-browser-dark .photo-browser-swiper-container,.photo-browser-page-dark .photo-browser-swiper-container{background:var(--f7-photobrowser-dark-bg-color)}@keyframes photo-browser-in{0%{transform:translate3d(0,0,0) scale(.5);opacity:0}50%{transform:translate3d(0,0,0) scale(1.05);opacity:1}100%{transform:translate3d(0,0,0) scale(1);opacity:1}}@keyframes photo-browser-out{0%{transform:translate3d(0,0,0) scale(1);opacity:1}50%{transform:translate3d(0,0,0) scale(1.05);opacity:1}100%{transform:translate3d(0,0,0) scale(.5);opacity:0}}
|
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
--f7-photobrowser-bars-bg-color: rgba(var(--f7-bars-bg-color-rgb), 0.95);
|
|
4
4
|
--f7-photobrowser-bars-text-color: var(--f7-bars-text-color);
|
|
5
5
|
--f7-photobrowser-bars-link-color: var(--f7-bars-link-color);
|
|
6
|
-
--f7-photobrowser-caption-font-size:
|
|
6
|
+
--f7-photobrowser-caption-font-size: 13px;
|
|
7
|
+
--f7-photobrowser-caption-font-weight: 500;
|
|
7
8
|
--f7-photobrowser-caption-light-text-color: #000;
|
|
8
|
-
--f7-photobrowser-caption-light-bg-color: rgba(255, 255, 255, 0.8);
|
|
9
9
|
--f7-photobrowser-caption-dark-text-color: #fff;
|
|
10
|
-
--f7-photobrowser-caption-dark-bg-color: rgba(0, 0, 0, 0.8);
|
|
11
10
|
--f7-photobrowser-exposed-bg-color: #000;
|
|
12
11
|
|
|
13
12
|
--f7-photobrowser-dark-bg-color: #000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--f7-photobrowser-bg-color:#fff;--f7-photobrowser-bars-bg-color:rgba(var(--f7-bars-bg-color-rgb), 0.95);--f7-photobrowser-bars-text-color:var(--f7-bars-text-color);--f7-photobrowser-bars-link-color:var(--f7-bars-link-color);--f7-photobrowser-caption-font-size:
|
|
1
|
+
:root{--f7-photobrowser-bg-color:#fff;--f7-photobrowser-bars-bg-color:rgba(var(--f7-bars-bg-color-rgb), 0.95);--f7-photobrowser-bars-text-color:var(--f7-bars-text-color);--f7-photobrowser-bars-link-color:var(--f7-bars-link-color);--f7-photobrowser-caption-font-size:13px;--f7-photobrowser-caption-font-weight:500;--f7-photobrowser-caption-light-text-color:#000;--f7-photobrowser-caption-dark-text-color:#fff;--f7-photobrowser-exposed-bg-color:#000;--f7-photobrowser-dark-bg-color:#000;--f7-photobrowser-dark-bars-bg-color:rgba(27, 27, 27, 0.8);--f7-photobrowser-dark-bars-text-color:#fff;--f7-photobrowser-dark-bars-link-color:#fff}.photo-browser{position:absolute;left:0;top:0;width:100%;height:100%;z-index:400}.photo-browser-standalone.modal-in{transition-duration:0s;animation:photo-browser-in .4s}.photo-browser-standalone.modal-out{transition-duration:0s;animation:photo-browser-out .4s!important}.photo-browser-standalone.modal-out.swipe-close-to-bottom,.photo-browser-standalone.modal-out.swipe-close-to-top{animation:none!important}.photo-browser-standalone.photo-browser-transitioning{transition:.4s;animation:none!important}.photo-browser-popup.modal-out.swipe-close-to-bottom,.photo-browser-popup.modal-out.swipe-close-to-top{transition-duration:.3s}.photo-browser-popup.modal-out.swipe-close-to-bottom{transform:translate3d(0,100vh,0)}.photo-browser-popup.modal-out.swipe-close-to-top{transform:translate3d(0,-100vh,0)}.photo-browser-page{background:0 0}.photo-browser-page .toolbar{transform:none}.photo-browser-popup{background:0 0}.photo-browser-of{margin:0 5px}.photo-browser-captions{pointer-events:none;position:absolute;left:0;width:100%;bottom:var(--f7-safe-area-bottom);z-index:10;opacity:1;transition-duration:.4s}.photo-browser-captions.photo-browser-captions-exposed{opacity:0}.toolbar~.toolbar.photo-browser-thumbs{bottom:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom))}.page~.photo-browser-page:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs,.photo-browser-popup:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs,.photo-browser-standalone:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs{height:var(--f7-toolbar-height)}.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs{transform:translate3d(0,calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom,0)),0)}.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs .swiper{height:calc(100% - var(--f7-safe-area-bottom,0))}.navbar+.toolbar.photo-browser-thumbs .swiper{height:calc(100% - var(--f7-safe-area-bottom,0))}.toolbar~.photo-browser-captions{bottom:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom));transform:translate3d(0,0px,0)}.toolbar~.photo-browser-captions.photo-browser-captions-exposed{transform:translate3d(0,0px,0)}.toolbar~.toolbar~.photo-browser-captions{bottom:calc(var(--f7-toolbar-height) * 2 + var(--f7-safe-area-bottom))}.toolbar~.toolbar~.photo-browser-captions.photo-browser-captions-exposed{transform:translate3d(0,var(--f7-toolbar-height),0)}.photo-browser-thumbs{transition-property:transform,background-color,color}.photo-browser-thumbs .swiper{width:100%;height:100%}.photo-browser-thumbs .swiper-slide{width:auto;display:flex;align-items:center;justify-content:center}.photo-browser-thumbs img{width:auto;height:75%;display:block;border-radius:2px;min-width:4px}.photo-browser-thumbs .swiper-slide img{transform:translateX(-4px);transition-duration:150ms}.photo-browser-thumbs .swiper-slide-active img{transform:scale(1.2)}.photo-browser-thumbs .swiper-slide-active~.swiper-slide img{transform:translateX(4px)}.photo-browser-caption{box-sizing:border-box;transition-duration:.4s;position:absolute;bottom:0;left:0;opacity:0;padding:4px 5px;width:100%;text-align:center;font-size:var(--f7-photobrowser-caption-font-size);font-weight:var(--f7-photobrowser-caption-font-weight)}@supports ((-webkit-backdrop-filter:blur(20px)) or (backdrop-filter:blur(20px))){.ios-translucent-bars .photo-browser-caption{-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.photo-browser-caption:empty{display:none}.photo-browser-caption.photo-browser-caption-active{opacity:1}.photo-browser-captions-light .photo-browser-caption{color:var(--f7-photobrowser-caption-light-text-color)}.dark .photo-browser-caption,.photo-browser-captions-dark .photo-browser-caption{color:var(--f7-photobrowser-caption-dark-text-color)}.photo-browser-swiper-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;background:var(--f7-photobrowser-bg-color);transition:.4s;transition-property:background-color;touch-action:pan-x pan-y}.photo-browser-next.swiper-button-disabled,.photo-browser-prev.swiper-button-disabled{opacity:.3;pointer-events:none}.photo-browser-slide{width:100%;height:100%;position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;flex-shrink:0;box-sizing:border-box}.photo-browser-slide span.swiper-zoom-container{display:none}.photo-browser-slide img{width:auto;height:auto;max-width:100%;max-height:100%;display:none}.photo-browser-slide.swiper-slide-active span.swiper-zoom-container,.photo-browser-slide.swiper-slide-next span.swiper-zoom-container,.photo-browser-slide.swiper-slide-prev span.swiper-zoom-container{display:flex}.photo-browser-slide.swiper-slide-active img,.photo-browser-slide.swiper-slide-next img,.photo-browser-slide.swiper-slide-prev img{display:inline}.photo-browser-slide.swiper-slide-active.photo-browser-slide-lazy .preloader,.photo-browser-slide.swiper-slide-next.photo-browser-slide-lazy .preloader,.photo-browser-slide.swiper-slide-prev.photo-browser-slide-lazy .preloader{display:block}.photo-browser-slide iframe{width:100%;height:100%}.photo-browser-slide .preloader{display:none;position:absolute;width:42px;height:42px;margin-left:-21px;margin-top:-21px;left:50%;top:50%}.navbar-photo-browser .right .link i,.navbar-photo-browser .right .link svg{width:24px;height:24px;display:block}.navbar-photo-browser .navbar-bg,.photo-browser-caption,.photo-browser-page .navbar-bg,.photo-browser-page .toolbar{background-color:var(--f7-photobrowser-bars-bg-color,rgba(var(--f7-bars-bg-color-rgb),.95))}.photo-browser-page{touch-action:manipulation}.photo-browser-page .navbar,.photo-browser-page .toolbar{transform:translate3d(0,0,0);transition-duration:.4s;color:var(--f7-photobrowser-bars-text-color,var(--f7-bars-text-color))}.photo-browser-page .navbar a,.photo-browser-page .toolbar a{color:var(--f7-photobrowser-bars-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.photo-browser-exposed .navbar,.photo-browser-exposed .toolbar:not(.photo-browser-thumbs){opacity:0;visibility:hidden;pointer-events:none}.photo-browser-exposed .toolbar:not(.photo-browser-thumbs)~.photo-browser-captions,.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs~.photo-browser-captions{transform:translate3d(0,var(--f7-toolbar-height),0)}.photo-browser-exposed .photo-browser-swiper-container{background:var(--f7-photobrowser-exposed-bg-color)}.photo-browser-dark .photo-browser-thumbs,.photo-browser-dark .toolbar,.photo-browser-exposed .photo-browser-thumbs,.photo-browser-exposed .toolbar{background-color:var(--f7-photobrowser-dark-bars-bg-color)}.photo-browser-dark .photo-browser-caption,.photo-browser-exposed .photo-browser-caption{color:var(--f7-photobrowser-caption-dark-text-color);background-color:var(--f7-photobrowser-dark-bars-bg-color)}.view.with-photo-browser-page-exposed .navbar{opacity:0;pointer-events:none}.photo-browser-page .toolbar:after,.photo-browser-page .toolbar:before{display:none!important}.navbar-photo-browser-dark .navbar-bg,.photo-browser-page-dark .navbar-bg{background:var(--f7-photobrowser-dark-bars-bg-color)}.navbar-photo-browser-dark .navbar-bg:after,.navbar-photo-browser-dark .navbar-bg:before,.photo-browser-page-dark .navbar-bg:after,.photo-browser-page-dark .navbar-bg:before{display:none!important}.navbar-photo-browser-dark,.photo-browser-dark .navbar,.photo-browser-dark .toolbar,.photo-browser-page-dark .navbar,.photo-browser-page-dark .toolbar{color:var(--f7-photobrowser-dark-bars-text-color)}.navbar-photo-browser-dark a,.photo-browser-dark .navbar a,.photo-browser-dark .toolbar a,.photo-browser-page-dark .navbar a,.photo-browser-page-dark .toolbar a{color:var(--f7-photobrowser-dark-bars-link-color)}.photo-browser-dark .photo-browser-swiper-container,.photo-browser-page-dark .photo-browser-swiper-container{background:var(--f7-photobrowser-dark-bg-color)}@keyframes photo-browser-in{0%{transform:translate3d(0,0,0) scale(.5);opacity:0}50%{transform:translate3d(0,0,0) scale(1.05);opacity:1}100%{transform:translate3d(0,0,0) scale(1);opacity:1}}@keyframes photo-browser-out{0%{transform:translate3d(0,0,0) scale(1);opacity:1}50%{transform:translate3d(0,0,0) scale(1.05);opacity:1}100%{transform:translate3d(0,0,0) scale(.5);opacity:0}}
|
|
@@ -18,6 +18,8 @@ export namespace PhotoBrowser {
|
|
|
18
18
|
interface Parameters {
|
|
19
19
|
/** Array with URLs of photos or array of objects with "url" (or "html") and "caption" properties. */
|
|
20
20
|
photos?: Photo[] | string[];
|
|
21
|
+
/** Array with URLs of thumbs. If not specified or empty array will not render thumbs */
|
|
22
|
+
thumbs?: string[];
|
|
21
23
|
/** Enable disable exposition mode when clicking on Photo Browser. (default true) */
|
|
22
24
|
exposition?: boolean;
|
|
23
25
|
/** Set to true if you also want to hide captions in exposition mode (default false) */
|
|
@@ -44,7 +46,9 @@ export namespace PhotoBrowser {
|
|
|
44
46
|
toolbar?: boolean;
|
|
45
47
|
/** Text on back link in Photo Browser's navbar (default "Back") */
|
|
46
48
|
pageBackLinkText?: string;
|
|
47
|
-
/**
|
|
49
|
+
/** Close icon (x mark) in Photo Browser's navbar when opened in Popup or as Standalone (default true) */
|
|
50
|
+
popupCloseLinkIcon?: boolean;
|
|
51
|
+
/** Text on close link in Photo Browser's navbar when opened in Popup or as Standalone (default undefined) */
|
|
48
52
|
popupCloseLinkText?: string;
|
|
49
53
|
/** Text of "of" in photos counter: "3 of 5" (default "of") */
|
|
50
54
|
navbarOfText?: string;
|
|
@@ -73,6 +77,8 @@ export namespace PhotoBrowser {
|
|
|
73
77
|
renderLazyPhoto?: (photo: Photo | string, index: number) => string;
|
|
74
78
|
/** Function to render photo as a swiper slide, must return slide HTML string */
|
|
75
79
|
renderPhoto?: (photo: Photo | string, index: number) => string;
|
|
80
|
+
/** Function to render thumb image as a swiper slide, must return slide HTML string */
|
|
81
|
+
renderThumb?: (thumbUrl: string, index: number) => string;
|
|
76
82
|
/** Function to render photobrowser page, must return full page HTML layout string */
|
|
77
83
|
renderPage?: () => string;
|
|
78
84
|
/** Function to render photobrowser popup, must return full popup HTML layout string */
|
|
@@ -5,6 +5,7 @@ export default {
|
|
|
5
5
|
params: {
|
|
6
6
|
photoBrowser: {
|
|
7
7
|
photos: [],
|
|
8
|
+
thumbs: [],
|
|
8
9
|
exposition: true,
|
|
9
10
|
expositionHideCaptions: false,
|
|
10
11
|
type: 'standalone',
|
|
@@ -16,7 +17,8 @@ export default {
|
|
|
16
17
|
popupPush: false,
|
|
17
18
|
swipeToClose: true,
|
|
18
19
|
pageBackLinkText: 'Back',
|
|
19
|
-
popupCloseLinkText:
|
|
20
|
+
popupCloseLinkText: undefined,
|
|
21
|
+
popupCloseLinkIcon: true,
|
|
20
22
|
navbarOfText: 'of',
|
|
21
23
|
navbarShowCount: undefined,
|
|
22
24
|
view: undefined,
|
|
@@ -31,6 +33,7 @@ export default {
|
|
|
31
33
|
renderObject: undefined,
|
|
32
34
|
renderLazyPhoto: undefined,
|
|
33
35
|
renderPhoto: undefined,
|
|
36
|
+
renderThumb: undefined,
|
|
34
37
|
renderPage: undefined,
|
|
35
38
|
renderPopup: undefined,
|
|
36
39
|
renderStandalone: undefined,
|
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
}
|
|
25
25
|
&.photo-browser-transitioning {
|
|
26
26
|
transition: 400ms;
|
|
27
|
-
transition-property: transform;
|
|
28
27
|
animation: none !important;
|
|
29
28
|
}
|
|
30
29
|
}
|
|
@@ -64,11 +63,30 @@
|
|
|
64
63
|
bottom: var(--f7-safe-area-bottom);
|
|
65
64
|
z-index: 10;
|
|
66
65
|
opacity: 1;
|
|
67
|
-
transition: 400ms;
|
|
66
|
+
transition-duration: 400ms;
|
|
68
67
|
&.photo-browser-captions-exposed {
|
|
69
68
|
opacity: 0;
|
|
70
69
|
}
|
|
71
70
|
}
|
|
71
|
+
.toolbar ~ .toolbar.photo-browser-thumbs {
|
|
72
|
+
bottom: calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom));
|
|
73
|
+
.page ~ .photo-browser-page:not(.photo-browser-exposed) &,
|
|
74
|
+
.photo-browser-popup:not(.photo-browser-exposed) &,
|
|
75
|
+
.photo-browser-standalone:not(.photo-browser-exposed) & {
|
|
76
|
+
height: var(--f7-toolbar-height);
|
|
77
|
+
}
|
|
78
|
+
.photo-browser-exposed & {
|
|
79
|
+
transform: translate3d(0, calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom, 0)), 0);
|
|
80
|
+
.swiper {
|
|
81
|
+
height: calc(100% - var(--f7-safe-area-bottom, 0));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
.navbar + .toolbar.photo-browser-thumbs {
|
|
86
|
+
.swiper {
|
|
87
|
+
height: calc(100% - var(--f7-safe-area-bottom, 0));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
72
90
|
.toolbar ~ .photo-browser-captions {
|
|
73
91
|
bottom: calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom));
|
|
74
92
|
transform: translate3d(0, 0px, 0);
|
|
@@ -76,10 +94,45 @@
|
|
|
76
94
|
transform: translate3d(0, 0px, 0);
|
|
77
95
|
}
|
|
78
96
|
}
|
|
79
|
-
|
|
97
|
+
.toolbar ~ .toolbar ~ .photo-browser-captions {
|
|
98
|
+
bottom: calc(var(--f7-toolbar-height) * 2 + var(--f7-safe-area-bottom));
|
|
99
|
+
&.photo-browser-captions-exposed {
|
|
100
|
+
transform: translate3d(0, var(--f7-toolbar-height), 0);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
.photo-browser-thumbs {
|
|
104
|
+
transition-property: transform, background-color, color;
|
|
105
|
+
.swiper {
|
|
106
|
+
width: 100%;
|
|
107
|
+
height: 100%;
|
|
108
|
+
}
|
|
109
|
+
.swiper-slide {
|
|
110
|
+
width: auto;
|
|
111
|
+
display: flex;
|
|
112
|
+
align-items: center;
|
|
113
|
+
justify-content: center;
|
|
114
|
+
}
|
|
115
|
+
img {
|
|
116
|
+
width: auto;
|
|
117
|
+
height: 75%;
|
|
118
|
+
display: block;
|
|
119
|
+
border-radius: 2px;
|
|
120
|
+
min-width: 4px;
|
|
121
|
+
}
|
|
122
|
+
.swiper-slide img {
|
|
123
|
+
transform: translateX(-4px);
|
|
124
|
+
transition-duration: 150ms;
|
|
125
|
+
}
|
|
126
|
+
.swiper-slide-active img {
|
|
127
|
+
transform: scale(1.2);
|
|
128
|
+
}
|
|
129
|
+
.swiper-slide-active ~ .swiper-slide img {
|
|
130
|
+
transform: translateX(4px);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
80
133
|
.photo-browser-caption {
|
|
81
134
|
box-sizing: border-box;
|
|
82
|
-
transition:
|
|
135
|
+
transition-duration: 400ms;
|
|
83
136
|
position: absolute;
|
|
84
137
|
bottom: 0;
|
|
85
138
|
left: 0;
|
|
@@ -88,6 +141,13 @@
|
|
|
88
141
|
width: 100%;
|
|
89
142
|
text-align: center;
|
|
90
143
|
font-size: var(--f7-photobrowser-caption-font-size);
|
|
144
|
+
font-weight: var(--f7-photobrowser-caption-font-weight);
|
|
145
|
+
.ios-translucent-bars & {
|
|
146
|
+
@supports (backdrop-filter: blur(20px)) {
|
|
147
|
+
backdrop-filter: saturate(180%) blur(var(--f7-bars-translucent-blur));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
91
151
|
&:empty {
|
|
92
152
|
display: none;
|
|
93
153
|
}
|
|
@@ -96,11 +156,10 @@
|
|
|
96
156
|
}
|
|
97
157
|
.photo-browser-captions-light & {
|
|
98
158
|
color: var(--f7-photobrowser-caption-light-text-color);
|
|
99
|
-
background: var(--f7-photobrowser-caption-light-bg-color);
|
|
100
159
|
}
|
|
101
|
-
.photo-browser-captions-dark
|
|
160
|
+
.photo-browser-captions-dark &,
|
|
161
|
+
.dark & {
|
|
102
162
|
color: var(--f7-photobrowser-caption-dark-text-color);
|
|
103
|
-
background: var(--f7-photobrowser-caption-dark-bg-color);
|
|
104
163
|
}
|
|
105
164
|
}
|
|
106
165
|
|
|
@@ -114,6 +173,7 @@
|
|
|
114
173
|
background: var(--f7-photobrowser-bg-color);
|
|
115
174
|
transition: 400ms;
|
|
116
175
|
transition-property: background-color;
|
|
176
|
+
touch-action: pan-x pan-y;
|
|
117
177
|
}
|
|
118
178
|
|
|
119
179
|
.photo-browser-prev,
|
|
@@ -173,16 +233,26 @@
|
|
|
173
233
|
top: 50%;
|
|
174
234
|
}
|
|
175
235
|
}
|
|
236
|
+
.navbar-photo-browser .right .link {
|
|
237
|
+
svg,
|
|
238
|
+
i {
|
|
239
|
+
width: 24px;
|
|
240
|
+
height: 24px;
|
|
241
|
+
display: block;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
176
244
|
.photo-browser-page .navbar-bg,
|
|
177
245
|
.navbar-photo-browser .navbar-bg,
|
|
178
|
-
.photo-browser-page .toolbar
|
|
246
|
+
.photo-browser-page .toolbar,
|
|
247
|
+
.photo-browser-caption {
|
|
179
248
|
background-color: var(--f7-photobrowser-bars-bg-color, rgba(var(--f7-bars-bg-color-rgb), 0.95));
|
|
180
249
|
}
|
|
181
250
|
.photo-browser-page {
|
|
251
|
+
touch-action: manipulation;
|
|
182
252
|
.navbar,
|
|
183
253
|
.toolbar {
|
|
184
254
|
transform: translate3d(0, 0, 0);
|
|
185
|
-
transition: 400ms;
|
|
255
|
+
transition-duration: 400ms;
|
|
186
256
|
color: var(--f7-photobrowser-bars-text-color, var(--f7-bars-text-color));
|
|
187
257
|
a {
|
|
188
258
|
color: var(
|
|
@@ -194,20 +264,28 @@
|
|
|
194
264
|
}
|
|
195
265
|
.photo-browser-exposed {
|
|
196
266
|
.navbar,
|
|
197
|
-
.toolbar {
|
|
267
|
+
.toolbar:not(.photo-browser-thumbs) {
|
|
198
268
|
opacity: 0;
|
|
199
269
|
visibility: hidden;
|
|
200
270
|
pointer-events: none;
|
|
201
271
|
}
|
|
202
|
-
.toolbar ~ .photo-browser-captions
|
|
272
|
+
.toolbar:not(.photo-browser-thumbs) ~ .photo-browser-captions,
|
|
273
|
+
.toolbar ~ .toolbar.photo-browser-thumbs ~ .photo-browser-captions {
|
|
203
274
|
transform: translate3d(0, var(--f7-toolbar-height), 0);
|
|
204
275
|
}
|
|
205
276
|
.photo-browser-swiper-container {
|
|
206
277
|
background: var(--f7-photobrowser-exposed-bg-color);
|
|
207
278
|
}
|
|
279
|
+
}
|
|
280
|
+
.photo-browser-exposed,
|
|
281
|
+
.photo-browser-dark {
|
|
282
|
+
.photo-browser-thumbs,
|
|
283
|
+
.toolbar {
|
|
284
|
+
background-color: var(--f7-photobrowser-dark-bars-bg-color);
|
|
285
|
+
}
|
|
208
286
|
.photo-browser-caption {
|
|
209
287
|
color: var(--f7-photobrowser-caption-dark-text-color);
|
|
210
|
-
background: var(--f7-photobrowser-
|
|
288
|
+
background-color: var(--f7-photobrowser-dark-bars-bg-color);
|
|
211
289
|
}
|
|
212
290
|
}
|
|
213
291
|
.view.with-photo-browser-page-exposed {
|
|
@@ -216,10 +294,11 @@
|
|
|
216
294
|
pointer-events: none;
|
|
217
295
|
}
|
|
218
296
|
}
|
|
219
|
-
|
|
297
|
+
.photo-browser-page .toolbar {
|
|
298
|
+
.hairline-remove-top-bottom();
|
|
299
|
+
}
|
|
220
300
|
.photo-browser-page-dark .navbar-bg,
|
|
221
|
-
.navbar-photo-browser-dark .navbar-bg
|
|
222
|
-
.photo-browser-page-dark .toolbar {
|
|
301
|
+
.navbar-photo-browser-dark .navbar-bg {
|
|
223
302
|
background: var(--f7-photobrowser-dark-bars-bg-color);
|
|
224
303
|
.hairline-remove-top-bottom();
|
|
225
304
|
}
|