Files
e-ticket/assets/app.js
Serreau Jovann 6b009a4511 Add social sharing buttons and QR code for events
Public event page:
- Share buttons: X (Twitter), Facebook, Instagram (copy link), TikTok (copy link), copy link
- Buttons use url_encode for share URLs with event title + URL
- Instagram/TikTok copy to clipboard (no direct share URL support)
- Consistent brutal design with aria-labels

Organizer dashboard:
- Share X, Facebook, copy link buttons per event in events list
- QR code download button per event
- Route /mon-compte/evenement/{id}/qrcode: generates 400px PNG QR code via Endroid
- QR code points to public event URL, downloaded as qrcode-{slug}.png

JS module:
- assets/modules/share.js: initShare() handles data-share-copy buttons
- Copies URL to clipboard, shows checkmark for 1.5s then restores icon
- 4 tests (no buttons, copy, checkmark restore, multiple buttons)

Social icons already displayed via _social_icons.html.twig component

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:11:53 +01:00

37 lines
1.2 KiB
JavaScript

import "./app.scss"
import { initMobileMenu } from "./modules/mobile-menu.js"
import { initTabs } from "./modules/tabs.js"
import { registerEditor } from "./modules/editor.js"
import { initCookieConsent } from "./modules/cookie-consent.js"
import { initEventMap } from "./modules/event-map.js"
import { initCopyUrl } from "./modules/copy-url.js"
import { initSortable } from "./modules/sortable.js"
import { initBilletDesigner } from "./modules/billet-designer.js"
import { initCommissionCalculator } from "./modules/commission-calculator.js"
import { initCart } from "./modules/cart.js"
import { initStripePayment } from "./modules/stripe-payment.js"
import { initShare } from "./modules/share.js"
document.addEventListener('DOMContentLoaded', () => {
initMobileMenu()
initTabs()
registerEditor()
initCookieConsent()
initCopyUrl()
initEventMap()
initSortable()
initBilletDesigner()
initCommissionCalculator()
initCart()
initStripePayment()
initShare()
document.querySelectorAll('[data-confirm]').forEach(form => {
form.addEventListener('submit', (e) => {
if (!globalThis.confirm(form.dataset.confirm)) {
e.preventDefault()
}
})
})
})