b461343b23
Build and Deploy Verso / deploy (push) Successful in 14m3s
- Search bar overflow: min-width:0 on form prevents input min-content from overflowing flex container on narrow screens - Remove duplicate New Project button from header row (tableTopArea already provides it for mobile) - Simplify tableTopArea: single button+search layout regardless of isLibraryEnabled flag - 2-line project rows on mobile: merge dash-cell-date-owner + dash-cell-tag into a single dash-cell-meta so date/owner/tags flow inline on line 2 below the project name - Footer mobile: hide language-picker-text on mobile (icon only) to prevent 3rd line in 2-row footer - Language picker: use mousedown instead of click for outside-close handler — click bubbling is unreliable on iOS for non-interactive elements; mousedown fires for all taps Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
57 lines
1.9 KiB
Plaintext
57 lines
1.9 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('mousedown', function (e) {
|
|
if (!picker || !picker.contains(e.target)) close()
|
|
})
|
|
document.addEventListener('keydown', function (e) {
|
|
if (e.key === 'Escape') { close(); toggle.focus() }
|
|
})
|
|
})()
|