{"version":3,"sources":["bildDialog.mjs"],"names":["optimaleBildGroesse","setBild","_setBild","setBildTexte","maximaleKantenlaenge","Number","parseInt","document","scripts","filter","s","src","length","url","endsWith","dataset","bildModalBauen","modalDiv","querySelector","content","cloneNode","children","classList","add","bsTheme","remove","bild","bildGroesse","width","height","removeAttribute","bildDialogOeffnen","bildunterschrift","urheber","modalBody","addEventListener","modalBodyRect","getBoundingClientRect","aktuelleBildGroesse","wrapper","createElement","append","style","top","img","bildGroesseAendern","neueBildGroesse","breite","hoehe","resizeAborter","AbortController","resizeTimeout","window","clearTimeout","setTimeout","signal","abort","modal","bootstrap","Modal","focus","keyboard","dispose","show","evt","key","hide","initBildDialoge","container","documentElement","querySelectorAll","forEach","elem","preventDefault","parentElement","textContent"],"mappings":"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","file":"bildDialog.mjs","sourcesContent":["import { optimaleBildGroesse, setBild as _setBild, setBildTexte } from './bildHelper.mjs';\n\nconst maximaleKantenlaenge = Number.parseInt([...document.scripts].filter(s => s.src.length > 1 && import.meta.url.endsWith(s.src))[0].dataset.maximaleKantenlaenge ?? '4000', 10);\n\n/**\n * @returns {HTMLDivElement}\n */\nfunction bildModalBauen() {\n\t/** @type {HTMLDivElement} */\n\tconst modalDiv = document.querySelector('template[data-template-id=\"empty-bs-modal\"]').content.cloneNode(true).children[0];\n\tmodalDiv.classList.add('jjk-bild-dialog');\n\tmodalDiv.dataset.bsTheme = 'dark';\n\tmodalDiv.querySelector('.modal-dialog').classList.add('modal-fullscreen');\n\tmodalDiv.querySelector('.modal-footer').remove();\n\treturn modalDiv;\n}\n\n/**\n * @param {string} url\n * @param {HTMLImageElement} bild\n * @param {{ breite: number, hoehe: number }} bildGroesse\n * @returns {void}\n */\nfunction setBild(url, bild, bildGroesse) {\n\t// Größe über Maximum, damit immer bildGroesse verwendet wird. Ansonsten müsste an allen Stellen (bspw. beim Import), die echte Bild-Größe mit ins HTML geschrieben werden.\n\tbild.width = maximaleKantenlaenge + 1;\n\tbild.height = maximaleKantenlaenge + 1;\n\t_setBild(url, bild, bildGroesse, true, false);\n\tbild.removeAttribute('width');\n\tbild.removeAttribute('height');\n}\n\n/**\n * @param {HTMLImageElement} bild\n * @param {string} bildunterschrift\n * @param {string} urheber\n */\nfunction bildDialogOeffnen(bild, bildunterschrift, urheber) {\n\tconst modalDiv = bildModalBauen();\n\tconst modalBody = modalDiv.querySelector('.modal-body');\n\tmodalDiv.addEventListener('shown.bs.modal', () => {\n\t\tconst modalBodyRect = modalBody.getBoundingClientRect();\n\t\tconst bildGroesse = optimaleBildGroesse(modalBodyRect, maximaleKantenlaenge);\n\t\tlet aktuelleBildGroesse = bildGroesse;\n\t\tconst wrapper = document.createElement('div');\n\t\twrapper.classList.add('jjk-bild-dialog-bild-wrapper');\n\t\tmodalBody.append(wrapper);\n\t\twrapper.style.height = `calc(100vh - ${modalBodyRect.top}px)`;\n\t\tconst img = document.createElement('img');\n\t\tsetBild(bild.src, img, bildGroesse);\n\t\twrapper.append(img);\n\t\tsetBildTexte(bildunterschrift, urheber, wrapper);\n\t\tconst bildGroesseAendern = () => {\n\t\t\tconst neueBildGroesse = optimaleBildGroesse(modalBody.getBoundingClientRect(), maximaleKantenlaenge);\n\t\t\tif (neueBildGroesse.breite <= aktuelleBildGroesse.breite && neueBildGroesse.hoehe <= aktuelleBildGroesse.hoehe) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetBild(bild.src, bild, neueBildGroesse);\n\t\t\taktuelleBildGroesse = neueBildGroesse;\n\t\t};\n\t\tconst resizeAborter = new AbortController();\n\t\tlet resizeTimeout = false;\n\t\twindow.addEventListener(\n\t\t\t'resize',\n\t\t\t() => {\n\t\t\t\twindow.clearTimeout(resizeTimeout);\n\t\t\t\tresizeTimeout = window.setTimeout(bildGroesseAendern, 250);\n\t\t\t},\n\t\t\t{ signal: resizeAborter.signal }\n\t\t);\n\t\tmodalDiv.addEventListener('hide.bs.modal', () => resizeAborter.abort());\n\t});\n\tconst modal = new window.bootstrap.Modal(modalDiv, { focus: true, keyboard: true });\n\tmodalDiv.addEventListener('hidden.bs.modal', () => {\n\t\tmodal.dispose();\n\t\tmodalDiv.remove();\n\t});\n\tmodal.show();\n\twindow.addEventListener('keydown', evt => {\n\t\tif (evt.key === 'Escape') {\n\t\t\tmodal.hide();\n\t\t}\n\t});\n}\n\nwindow.bildDialogOeffnen = bildDialogOeffnen;\n\nwindow.initBildDialoge = (container = document.documentElement) => {\n\tcontainer.querySelectorAll('figure.bodytext-imported-figure > a').forEach(elem => {\n\t\telem.addEventListener('click', evt => {\n\t\t\tevt.preventDefault();\n\t\t\twindow.bildDialogOeffnen(elem.querySelector('img'), elem.parentElement.querySelector('.bild-beschreibung')?.textContent, elem.parentElement.querySelector('.bild-urheber')?.textContent);\n\t\t});\n\t});\n\tcontainer.querySelectorAll('.media-container .tab.image .splide__slide > a').forEach(elem => {\n\t\telem.addEventListener('click', evt => {\n\t\t\tevt.preventDefault();\n\t\t\twindow.bildDialogOeffnen(elem.querySelector('img'), elem.parentElement.querySelector('.foto-beschreibung')?.textContent, elem.parentElement.querySelector('.foto-urheber')?.textContent);\n\t\t});\n\t});\n};\n"]}