2024-06-12 19:51:59 +02:00
|
|
|
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
|
|
|
|
|
|
|
|
|
document.addEventListener('livewire:navigated', () => {
|
|
|
|
|
const lightbox = new PhotoSwipeLightbox({
|
|
|
|
|
gallery: '#album',
|
|
|
|
|
children: 'a',
|
|
|
|
|
bgOpacity: 1,
|
|
|
|
|
arrowPrevSVG: '<svg class="w-12 h-12 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m15 19-7-7 7-7"/></svg>',
|
|
|
|
|
arrowNextSVG: '<svg class="w-12 h-12 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/></svg>',
|
2024-06-21 19:27:40 +02:00
|
|
|
closeSVG: '<div class="bg-transparent w-full h-full justify-around inline-flex items-center hover:bg-gray-100 rounded-lg dark:bg-gray-800 dark:hover:bg-gray-700"><svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18 17.94 6M18 18 6.06 6"/></svg></div>',
|
|
|
|
|
zoomSVG: '<div class="bg-transparent w-full h-full justify-around inline-flex items-center hover:bg-gray-100 rounded-lg dark:bg-gray-800 dark:hover:bg-gray-700"><svg class="pswp__zoom-icn-bar-v w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="m21 21-3.5-3.5M10 7v6m-3-3h6m4 0a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z"/></svg><svg class="pswp__zoom-icn-bar-b hidden w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="m21 21-3.5-3.5M7 10h6m4 0a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z"/></svg></div>',
|
2024-06-12 19:51:59 +02:00
|
|
|
pswpModule: () => import('photoswipe')
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
lightbox.on('uiRegister', function() {
|
|
|
|
|
lightbox.pswp.ui.registerElement({
|
|
|
|
|
name: 'download-button',
|
|
|
|
|
order: 9,
|
|
|
|
|
isButton: true,
|
|
|
|
|
tagName: 'button',
|
2024-06-21 19:27:40 +02:00
|
|
|
html: '<div class="bg-transparent w-full h-full justify-around inline-flex items-center hover:bg-gray-100 rounded-lg dark:bg-gray-800 dark:hover:bg-gray-700"><svg class="w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 13V4M7 14H5a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1h-2m-1-5-4 5-4-5m9 8h.01"/></svg></div>',
|
2024-06-12 19:51:59 +02:00
|
|
|
|
|
|
|
|
onInit: (el, pswp) => {
|
|
|
|
|
el.setAttribute('download', '');
|
|
|
|
|
el.setAttribute('target', '_blank');
|
|
|
|
|
el.setAttribute('rel', 'noopener');
|
|
|
|
|
|
|
|
|
|
pswp.on('change', () => {
|
|
|
|
|
el.href = pswp.currSlide.data.element.dataset.pswpDownload;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2024-06-21 19:27:40 +02:00
|
|
|
lightbox.pswp.ui.registerElement({
|
|
|
|
|
name: 'makeCover',
|
|
|
|
|
ariaLabel: 'Make this Image the Album Cover',
|
|
|
|
|
order: 8,
|
|
|
|
|
isButton: true,
|
|
|
|
|
html: '<div class="w-full h-full bg-transparent inline-flex items-center justify-around hover:bg-gray-100 rounded-lg dark:bg-gray-800 dark:hover:bg-gray-700"><svg class="no-cover w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="2" d="M11.083 5.104c.35-.8 1.485-.8 1.834 0l1.752 4.022a1 1 0 0 0 .84.597l4.463.342c.9.069 1.255 1.2.556 1.771l-3.33 2.723a1 1 0 0 0-.337 1.016l1.03 4.119c.214.858-.71 1.552-1.474 1.106l-3.913-2.281a1 1 0 0 0-1.008 0L7.583 20.8c-.764.446-1.688-.248-1.474-1.106l1.03-4.119A1 1 0 0 0 6.8 14.56l-3.33-2.723c-.698-.571-.342-1.702.557-1.771l4.462-.342a1 1 0 0 0 .84-.597l1.753-4.022Z"/></svg><svg class="is-cover hidden w-6 h-6 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 24 24"><path d="M13.849 4.22c-.684-1.626-3.014-1.626-3.698 0L8.397 8.387l-4.552.361c-1.775.14-2.495 2.331-1.142 3.477l3.468 2.937-1.06 4.392c-.413 1.713 1.472 3.067 2.992 2.149L12 19.35l3.897 2.354c1.52.918 3.405-.436 2.992-2.15l-1.06-4.39 3.468-2.938c1.353-1.146.633-3.336-1.142-3.477l-4.552-.36-1.754-4.17Z"/></svg></div>',
|
|
|
|
|
onInit: (el, pswp) => {
|
|
|
|
|
pswp.on('change', () => {
|
|
|
|
|
el.querySelector('.is-cover').classList.toggle('hidden', pswp.currSlide.data.element.dataset.isCover === 'false')
|
|
|
|
|
el.querySelector('.no-cover').classList.toggle('hidden', pswp.currSlide.data.element.dataset.isCover === 'true')
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
onClick: (event, el) => {
|
|
|
|
|
Livewire.dispatch(`image.makeCover`, {
|
|
|
|
|
image_id: pswp.currSlide.data.element.dataset.id
|
|
|
|
|
});
|
|
|
|
|
pswp.currSlide.data.element.dataset.isCover = 'true';
|
|
|
|
|
el.querySelector('.is-cover').classList.toggle('hidden', pswp.currSlide.data.element.dataset.isCover === 'false')
|
|
|
|
|
el.querySelector('.no-cover').classList.toggle('hidden', pswp.currSlide.data.element.dataset.isCover === 'true')
|
|
|
|
|
|
|
|
|
|
ToastinTakin.success("Das Cover wurde ausgetauscht");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2024-06-12 19:51:59 +02:00
|
|
|
lightbox.pswp.ui.registerElement({
|
|
|
|
|
name: 'rotate-button-cw',
|
|
|
|
|
ariaLabel: 'Rotate clockwise',
|
2024-06-21 19:27:40 +02:00
|
|
|
order: 7,
|
2024-06-12 19:51:59 +02:00
|
|
|
isButton: true,
|
2024-06-21 19:27:40 +02:00
|
|
|
html: '<div class="bg-transparent w-full h-full justify-around inline-flex items-center hover:bg-gray-100 rounded-lg dark:bg-gray-800 dark:hover:bg-gray-700"><svg xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true" class="w-6 h-6 text-gray-800 dark:text-white" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="-1 -1 23 23"><path d="M19.407 11.376a7.552 7.552 0 1 1-2.212-5.34"/><path d="M17.555 2.612v4h-4"/></svg></div>',
|
2024-06-12 19:51:59 +02:00
|
|
|
onClick: (event, el) => {
|
|
|
|
|
pswp.close();
|
|
|
|
|
Livewire.dispatch(`image.rotate`, {
|
|
|
|
|
image_id: pswp.currSlide.data.element.dataset.id,
|
|
|
|
|
direction: 'cw'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
lightbox.pswp.ui.registerElement({
|
|
|
|
|
name: 'rotate-button-ccw',
|
|
|
|
|
ariaLabel: 'Rotate counter-clockwise',
|
2024-06-21 19:27:40 +02:00
|
|
|
order: 6,
|
2024-06-12 19:51:59 +02:00
|
|
|
isButton: true,
|
2024-06-21 19:27:40 +02:00
|
|
|
html: '<div class="bg-transparent w-full h-full justify-around inline-flex items-center hover:bg-gray-100 rounded-lg dark:bg-gray-800 dark:hover:bg-gray-700"><svg xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true" class="w-6 h-6 text-gray-800 dark:text-white scale-x-[-1]" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="-1 -1 23 23"><path d="M19.407 11.376a7.552 7.552 0 1 1-2.212-5.34"/><path d="M17.555 2.612v4h-4"/></svg></div>',
|
2024-06-12 19:51:59 +02:00
|
|
|
onClick: (event, el) => {
|
|
|
|
|
pswp.close();
|
|
|
|
|
Livewire.dispatch(`image.rotate`, {
|
|
|
|
|
image_id: pswp.currSlide.data.element.dataset.id,
|
|
|
|
|
direction: 'cw'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
lightbox.init();
|
|
|
|
|
|
|
|
|
|
document.addEventListener('livewire:init', () => {
|
|
|
|
|
Livewire.hook('morph.added', ({ el }) => {
|
|
|
|
|
if(el.dataset.pswpWidth !== undefined) {
|
|
|
|
|
if(lightbox.pswp !== undefined) {
|
|
|
|
|
lightbox.pswp.options.dataSource.items.push(el);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|