fix: language picker links, dropdown position, and editor layout defaults
Build and Deploy Verso / deploy (push) Successful in 14m34s
Build and Deploy Verso / deploy (push) Successful in 14m34s
Language picker: - Add fallback href in Pug so language links navigate even if JS fails - Anchor dropdown to right edge (right:0) so it stays on-screen when the picker is near the right side of the footer on mobile Editor layout: - Read stored pdfLayout from localStorage on init so the last-used layout is remembered across sessions - Default to verticalSplit (top/bottom) on mobile when no preference is stored, so the editor opens in a sensible layout on phones Translations: - Add top_bottom_split_view key to all 16 locales that were missing it Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,7 @@ li.language-picker
|
||||
li(role='none')
|
||||
a.dropdown-item(
|
||||
role='menuitem'
|
||||
href='/set-language?lng=' + encodeURIComponent(lngCode) + '&return_to=/'
|
||||
data-lng=lngCode
|
||||
class=lngCode === currentLngCode ? 'active' : ''
|
||||
)= settings.translatedLanguages[lngCode]
|
||||
|
||||
@@ -85,6 +85,17 @@ function setLayoutInLocalStorage(pdfLayout: IdeLayout) {
|
||||
)
|
||||
}
|
||||
|
||||
const MOBILE_MQ = '(max-width: 767px)'
|
||||
|
||||
function getInitialLayout(): IdeLayout {
|
||||
const stored = localStorage.getItem('pdf.layout')
|
||||
if (stored === 'vertical') return 'verticalSplit'
|
||||
if (stored === 'flat') return 'flat'
|
||||
if (stored === 'split') return 'sideBySide'
|
||||
// No stored preference — default to vertical split on mobile
|
||||
return window.matchMedia(MOBILE_MQ).matches ? 'verticalSplit' : 'sideBySide'
|
||||
}
|
||||
|
||||
const reviewPanelStorageKey = `ui.reviewPanelOpen.${getMeta('ol-project_id')}`
|
||||
|
||||
export const LayoutProvider: FC<React.PropsWithChildren> = ({ children }) => {
|
||||
@@ -196,7 +207,7 @@ export const LayoutProvider: FC<React.PropsWithChildren> = ({ children }) => {
|
||||
)
|
||||
|
||||
// whether to display the editor and preview side-by-side or full-width ("flat")
|
||||
const [pdfLayout, setPdfLayout] = useState<IdeLayout>('sideBySide')
|
||||
const [pdfLayout, setPdfLayout] = useState<IdeLayout>(getInitialLayout)
|
||||
|
||||
// whether stylesheet on theme is loading
|
||||
const [loadingStyleSheet, setLoadingStyleSheet] = useState(false)
|
||||
|
||||
@@ -246,9 +246,12 @@ footer.site-footer {
|
||||
}
|
||||
|
||||
.language-picker .dropdown-menu {
|
||||
// Open upward — Popper.js isn't available on all page layouts
|
||||
// Open upward, anchored to the right edge so it doesn't overflow off-screen
|
||||
// when the picker is near the right side of the footer
|
||||
top: auto;
|
||||
bottom: 100%;
|
||||
left: auto;
|
||||
right: 0;
|
||||
margin-bottom: var(--spacing-02);
|
||||
|
||||
.dropdown-item {
|
||||
|
||||
Binary file not shown.
@@ -337,5 +337,6 @@
|
||||
"your_plan": "Váš tarif",
|
||||
"your_projects": "Vaše projekty",
|
||||
"your_subscription_has_expired": "Vaše předplatné vypršelo.",
|
||||
"top_bottom_split_view": "Horní/dolní rozdělené zobrazení",
|
||||
"your_subscriptions": "Vaše předplatná"
|
||||
}
|
||||
|
||||
@@ -2165,5 +2165,6 @@
|
||||
"zotero_reference_loading_error": "Fejl, kunne ikke indlæse referencer fra Zotero",
|
||||
"zotero_reference_loading_error_expired": "Zotero nøgle udløbet, genforbind venligst din konto",
|
||||
"zotero_reference_loading_error_forbidden": "Kunne ikke indlæse referencer fra Zotero, genforbind venligst din konto og prøv igen",
|
||||
"top_bottom_split_view": "Øverste/nedre delt visning",
|
||||
"zotero_sync_description": "Via Zotero-integrationen kan du importere dine referencer fra Zotero ind i dine __appName__-projekter."
|
||||
}
|
||||
|
||||
@@ -2506,6 +2506,7 @@
|
||||
"spellcheck_language": "Sprache der Rechtschreibprüfung",
|
||||
"spelling_and_language": "Rechtschreibung und Sprache",
|
||||
"split_view": "Geteilte Ansicht",
|
||||
"top_bottom_split_view": "Oben/unten teilen",
|
||||
"sso": "SSO",
|
||||
"sso_account_already_linked": "Das Konto ist bereits mit einem anderen __appName__-Nutzer verknüpft",
|
||||
"sso_active": "SSO aktiv",
|
||||
|
||||
@@ -2486,6 +2486,7 @@
|
||||
"spellcheck_language": "Idioma del corrector ortográfico",
|
||||
"spelling_and_language": "Ortografía y lenguaje",
|
||||
"split_view": "Vista dividida",
|
||||
"top_bottom_split_view": "Vista dividida arriba/abajo",
|
||||
"sso": "SSO",
|
||||
"sso_account_already_linked": "Cuenta ya vinculada a otro usuario __appName__",
|
||||
"sso_active": "SSO activo",
|
||||
|
||||
@@ -343,5 +343,6 @@
|
||||
"your_projects": "Sinun projektisi",
|
||||
"your_subscription_has_expired": "Tilauksesi on umpeutunut.",
|
||||
"your_subscriptions": "Tilauksesi tilaukset",
|
||||
"top_bottom_split_view": "Ylä/alakerros jaettu näkymä",
|
||||
"zh-CN": "Kiina"
|
||||
}
|
||||
|
||||
@@ -2485,6 +2485,7 @@
|
||||
"spellcheck_language": "Lingua del controllo ortografico",
|
||||
"spelling_and_language": "Ortografia e lingua",
|
||||
"split_view": "Visualizzazione divisa",
|
||||
"top_bottom_split_view": "Vista divisa in alto/basso",
|
||||
"sso": "SSO",
|
||||
"sso_account_already_linked": "Account già collegato a un altro utente __appName__",
|
||||
"sso_active": "SSO attivo",
|
||||
|
||||
@@ -487,5 +487,6 @@
|
||||
"zotero_reference_loading_error": "エラー。Zoteroからリファレンスを読み込むことができませんでした",
|
||||
"zotero_reference_loading_error_expired": "Zoteroトークンの期限が切れました。アカウントを再リンクしてください",
|
||||
"zotero_reference_loading_error_forbidden": "Zoteroのリファレンスを読み込むことができませんでした。アカウントを再リンクして、再度お試しください",
|
||||
"top_bottom_split_view": "上下分割ビュー",
|
||||
"zotero_sync_description": "Zoteroを統合すると、Zoteroから__appName__プロジェクトにリファレンスをインポートすることができます。"
|
||||
}
|
||||
|
||||
@@ -548,5 +548,6 @@
|
||||
"your_sessions": "나의 세션",
|
||||
"your_subscription_has_expired": "구독이 만료되었습니다.",
|
||||
"your_subscriptions": "나의 구독 목록",
|
||||
"top_bottom_split_view": "상하 분할 보기",
|
||||
"zh-CN": "中國語"
|
||||
}
|
||||
|
||||
@@ -558,5 +558,6 @@
|
||||
"zotero_is_premium": "Zotero Integratie is een premium functie",
|
||||
"zotero_reference_loading_error": "Error, kan referenties niet laden vanaf Mendeley",
|
||||
"zotero_reference_loading_error_expired": "Zotero token verlopen, gelieve je account opnieuw te koppelen",
|
||||
"top_bottom_split_view": "Boven/onder gesplitst",
|
||||
"zotero_reference_loading_error_forbidden": "Kon referenties niet laden vanaf Zotero, gelieve je account opnieuw te koppelen en nogmaals te proberen"
|
||||
}
|
||||
|
||||
@@ -389,5 +389,6 @@
|
||||
"your_projects": "Dine prosjekter",
|
||||
"your_subscription_has_expired": "Dit abonnement har utgått.",
|
||||
"your_subscriptions": "Dine abonnementer",
|
||||
"top_bottom_split_view": "Øvre/nedre delt visning",
|
||||
"zh-CN": "Kinesisk"
|
||||
}
|
||||
|
||||
@@ -228,5 +228,6 @@
|
||||
"year": "rok",
|
||||
"your_plan": "Twój plan",
|
||||
"your_projects": "Twoje projekty",
|
||||
"top_bottom_split_view": "Widok podzielony góra/dół",
|
||||
"your_subscriptions": "Twoje subskrypcje"
|
||||
}
|
||||
|
||||
@@ -658,5 +658,6 @@
|
||||
"zotero_reference_loading_error": "Erro, não foi possível carregar as referências do Zotero",
|
||||
"zotero_reference_loading_error_expired": "O token do Zotero expirou, por favor, revincule sua conta",
|
||||
"zotero_reference_loading_error_forbidden": "Não foi possível carregar as referências do Zotero, por favor, revincule sua conta e tente novamente",
|
||||
"top_bottom_split_view": "Divisão superior/inferior",
|
||||
"zotero_sync_description": "A integração Zotero permite você importar as referências do zotero para seus projetos no __appName__."
|
||||
}
|
||||
|
||||
@@ -463,5 +463,6 @@
|
||||
"your_sessions": "Ваши сессии",
|
||||
"your_subscription_has_expired": "Срок Вашей подписки истёк.",
|
||||
"your_subscriptions": "Ваши подписки",
|
||||
"top_bottom_split_view": "Разделить сверху/снизу",
|
||||
"zh-CN": "Китайский"
|
||||
}
|
||||
|
||||
@@ -935,5 +935,6 @@
|
||||
"zotero_reference_loading_error": "Fel, kunde inte ladda referenser från Zotero",
|
||||
"zotero_reference_loading_error_expired": "Zotero token har utgått, vänligen återkoppla ditt konto",
|
||||
"zotero_reference_loading_error_forbidden": "Kunde inte ladda referenser från Zotero, vänligen återkoppla ditt konto och försök igen",
|
||||
"top_bottom_split_view": "Övre/nedre delad vy",
|
||||
"zotero_sync_description": "Med Zotero integrering kan du importera dina referenser direkt från Zotero till ditt __appName__ projekt."
|
||||
}
|
||||
|
||||
@@ -375,5 +375,6 @@
|
||||
"your_projects": "Sizin Projeleriniz",
|
||||
"your_subscription_has_expired": "Aboneliğinizin süresi doldu.",
|
||||
"your_subscriptions": "Abonelikleriniz",
|
||||
"top_bottom_split_view": "Yukarı/aşağı bölünmüş görünüm",
|
||||
"zh-CN": "Çince"
|
||||
}
|
||||
|
||||
@@ -1911,6 +1911,7 @@
|
||||
"spellcheck": "拼写检查",
|
||||
"spellcheck_language": "拼写检查语言",
|
||||
"split_view": "拆分视图",
|
||||
"top_bottom_split_view": "上下分割视图",
|
||||
"sso": "单点登录(SSO)",
|
||||
"sso_account_already_linked": "帐户已链接到另一个__appName__用户",
|
||||
"sso_active": "SSO 激活",
|
||||
|
||||
Reference in New Issue
Block a user