Build and Deploy Verso / deploy (push) Has been cancelled
- Mobile vertical layout: add key= based on direction so react-resizable-panels remounts cleanly when switching between horizontal and vertical; also use isVertical (not just pdfLayout) for the autoSaveId to avoid restoring a mismatched layout from localStorage - Language picker: replace stopPropagation pattern with a containment check on the document click handler — more robust on React pages where Bootstrap JS or React's event delegation can interfere with stopPropagation - Presentation download dropdown: use popperConfig strategy:'fixed' so the menu escapes overflow:hidden table cells; remove forced drop='up' and let Popper choose; defer URL.revokeObjectURL by 10 s to give the browser time to start the download before the blob URL is released Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
57 lines
1.8 KiB
Plaintext
57 lines
1.8 KiB
Plaintext
li.language-picker
|
|
.dropdown
|
|
button#language-picker-toggle.btn-inline-link(
|
|
type='button'
|
|
aria-haspopup='true'
|
|
aria-expanded='false'
|
|
aria-label=translate('select_a_language')
|
|
translate='no'
|
|
)
|
|
span.material-symbols translate
|
|
|
|
|
span.language-picker-text= settings.translatedLanguages[currentLngCode] || currentLngCode
|
|
ul.dropdown-menu.dropdown-menu-sm-width(
|
|
role='menu'
|
|
aria-labelledby='language-picker-toggle'
|
|
translate='no'
|
|
)
|
|
each lngCode in availableLanguages
|
|
if settings.translatedLanguages[lngCode]
|
|
li(role='none')
|
|
a.dropdown-item(
|
|
role='menuitem'
|
|
data-lng=lngCode
|
|
class=lngCode === currentLngCode ? 'active' : ''
|
|
)= settings.translatedLanguages[lngCode]
|
|
script.
|
|
(function () {
|
|
var toggle = document.getElementById('language-picker-toggle')
|
|
var menu = toggle && toggle.parentElement.querySelector('.dropdown-menu')
|
|
if (!toggle || !menu) return
|
|
// Build return_to at runtime so the href reflects the actual current path
|
|
menu.querySelectorAll('a[data-lng]').forEach(function (a) {
|
|
var lng = a.getAttribute('data-lng')
|
|
a.href =
|
|
'/set-language?lng=' +
|
|
encodeURIComponent(lng) +
|
|
'&return_to=' +
|
|
encodeURIComponent(window.location.pathname)
|
|
})
|
|
var picker = toggle.closest('.language-picker')
|
|
function close() {
|
|
menu.classList.remove('show')
|
|
toggle.setAttribute('aria-expanded', 'false')
|
|
}
|
|
toggle.addEventListener('click', function () {
|
|
var opening = !menu.classList.contains('show')
|
|
menu.classList.toggle('show', opening)
|
|
toggle.setAttribute('aria-expanded', String(opening))
|
|
})
|
|
document.addEventListener('click', function (e) {
|
|
if (!picker || !picker.contains(e.target)) close()
|
|
})
|
|
document.addEventListener('keydown', function (e) {
|
|
if (e.key === 'Escape') { close(); toggle.focus() }
|
|
})
|
|
})()
|