diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 9d6a0a717..290cec4ce 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index 99725d389..99075d553 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index e1e316328..43c24f654 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index d1abe2d4c..05a4bd912 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -308,6 +308,15 @@ showJS.tags=Redact,Hide,black out,black,marker,hidden # WEB PAGES # # # ########################### +#login +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + #auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 96f082fff..dc7c93f8c 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 73e2c53ea..8ece9c785 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 554bfad2b..75edb5a4d 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 1f3bcc2ca..dad357130 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -299,9 +299,6 @@ home.showJS.title=Afficher le JavaScript home.showJS.desc=Recherche et affiche tout JavaScript injecté dans un PDF. showJS.tags=afficher,javascript,js -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=afficher,javascript,js @@ -311,10 +308,19 @@ showJS.tags=afficher,javascript,js # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index aed51bb06..0f150f8ca 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index b9e2506ac..46a45d482 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 5b5fbd489..50a8a7d00 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index e3953ed33..331ecd891 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -299,9 +299,6 @@ home.showJS.title=Toon Javascript home.showJS.desc=Zoekt en toont ieder script dat in een PDF is geïnjecteerd showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 7cd0d36ca..bac7aa5f9 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index c9b1807d9..3a89624e4 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -299,9 +299,6 @@ home.showJS.title=Mostrar Javascript home.showJS.desc=Procura e exibe qualquer JavaScript injetado em um PDF showJS.tags=JavaScript -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JavaScript @@ -311,10 +308,19 @@ showJS.tags=JavaScript # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index 9a49a2ffe..bc038897f 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 869a74b8f..7e4121ee9 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 769c3d9b6..139c9ca23 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 6cb2ef352..3bfdab32a 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -299,9 +299,6 @@ home.showJS.title=Show Javascript home.showJS.desc=Searches and displays any JS injected into a PDF showJS.tags=JS -########################## -### TODO: Translate ### -########################## home.autoRedact.title=Auto Redact home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text showJS.tags=JS @@ -311,10 +308,19 @@ showJS.tags=JS # WEB PAGES # # # ########################### -#auto-redact +#login ########################## ### TODO: Translate ### ########################## +login.title=Sign in +login.signin=Sign in +login.rememberme=Remember me +login.invalid=Invalid username or password. +login.locked=Your account has been locked. +login.signinTitle=Please sign in + + +#auto-redact autoRedact.title=Auto Redact autoRedact.header=Auto Redact autoRedact.textsToRedactLabel=Text to Redact (line-separated) diff --git a/src/main/resources/static/js/darkmode.js b/src/main/resources/static/js/darkmode.js index fe2395831..ebf9c6831 100644 --- a/src/main/resources/static/js/darkmode.js +++ b/src/main/resources/static/js/darkmode.js @@ -16,6 +16,8 @@ function getElements() { } function setMode(mode) { + var event = new CustomEvent('modeChanged', { detail: mode }); + document.dispatchEvent(event); elements.lightModeStyles.disabled = mode !== "off"; elements.darkModeStyles.disabled = mode !== "on"; elements.rainbowModeStyles.disabled = mode !== "rainbow"; diff --git a/src/main/resources/static/js/languageSelection.js b/src/main/resources/static/js/languageSelection.js index 3da819b3d..c554c2a7a 100644 --- a/src/main/resources/static/js/languageSelection.js +++ b/src/main/resources/static/js/languageSelection.js @@ -1,4 +1,5 @@ document.addEventListener('DOMContentLoaded', function() { + setLanguageForDropdown('.lang_dropdown-item'); const defaultLocale = document.documentElement.lang || 'en_GB'; const storedLocale = localStorage.getItem('languageCode') || defaultLocale; const dropdownItems = document.querySelectorAll('.lang_dropdown-item'); @@ -13,6 +14,21 @@ document.addEventListener('DOMContentLoaded', function() { } }); +function setLanguageForDropdown(dropdownClass) { + const defaultLocale = document.documentElement.lang || 'en_GB'; + const storedLocale = localStorage.getItem('languageCode') || defaultLocale; + const dropdownItems = document.querySelectorAll(dropdownClass); + + for (let i = 0; i < dropdownItems.length; i++) { + const item = dropdownItems[i]; + item.classList.remove('active'); + if (item.dataset.languageCode === storedLocale) { + item.classList.add('active'); + } + item.addEventListener('click', handleDropdownItemClick); + } +} + function handleDropdownItemClick(event) { event.preventDefault(); const languageCode = event.currentTarget.dataset.bsLanguageCode; // change this to event.currentTarget diff --git a/src/main/resources/templates/fragments/langAndDarkMode.html b/src/main/resources/templates/fragments/langAndDarkMode.html deleted file mode 100644 index 8c6b0ea36..000000000 --- a/src/main/resources/templates/fragments/langAndDarkMode.html +++ /dev/null @@ -1,75 +0,0 @@ -<th:block th:fragment="langAndDarkMode"> - -<script src="js/languageSelection.js"></script> -<script src="js/darkmode.js"></script> - - <li class="nav-item"> - <a class="nav-link" id="dark-mode-toggle" href="#"> - <img class="navbar-icon" id="dark-mode-icon" src="moon.svg" alt="icon" /> - </a> - </li> - - <li class="nav-item dropdown"> - <a class="nav-link dropdown-toggle" href="#" id="languageDropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-globe2" viewBox="0 0 20 20"> - <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm7.5-6.923c-.67.204-1.335.82-1.887 1.855-.143.268-.276.56-.395.872.705.157 1.472.257 2.282.287V1.077zM4.249 3.539c.142-.384.304-.744.481-1.078a6.7 6.7 0 0 1 .597-.933A7.01 7.01 0 0 0 3.051 3.05c.362.184.763.349 1.198.49zM3.509 7.5c.036-1.07.188-2.087.436-3.008a9.124 9.124 0 0 1-1.565-.667A6.964 6.964 0 0 0 1.018 7.5h2.49zm1.4-2.741a12.344 12.344 0 0 0-.4 2.741H7.5V5.091c-.91-.03-1.783-.145-2.591-.332zM8.5 5.09V7.5h2.99a12.342 12.342 0 0 0-.399-2.741c-.808.187-1.681.301-2.591.332zM4.51 8.5c.035.987.176 1.914.399 2.741A13.612 13.612 0 0 1 7.5 10.91V8.5H4.51zm3.99 0v2.409c.91.03 1.783.145 2.591.332.223-.827.364-1.754.4-2.741H8.5zm-3.282 3.696c.12.312.252.604.395.872.552 1.035 1.218 1.65 1.887 1.855V11.91c-.81.03-1.577.13-2.282.287zm.11 2.276a6.696 6.696 0 0 1-.598-.933 8.853 8.853 0 0 1-.481-1.079 8.38 8.38 0 0 0-1.198.49 7.01 7.01 0 0 0 2.276 1.522zm-1.383-2.964A13.36 13.36 0 0 1 3.508 8.5h-2.49a6.963 6.963 0 0 0 1.362 3.675c.47-.258.995-.482 1.565-.667zm6.728 2.964a7.009 7.009 0 0 0 2.275-1.521 8.376 8.376 0 0 0-1.197-.49 8.853 8.853 0 0 1-.481 1.078 6.688 6.688 0 0 1-.597.933zM8.5 11.909v3.014c.67-.204 1.335-.82 1.887-1.855.143-.268.276-.56.395-.872A12.63 12.63 0 0 0 8.5 11.91zm3.555-.401c.57.185 1.095.409 1.565.667A6.963 6.963 0 0 0 14.982 8.5h-2.49a13.36 13.36 0 0 1-.437 3.008zM14.982 7.5a6.963 6.963 0 0 0-1.362-3.675c-.47.258-.995.482-1.565.667.248.92.4 1.938.437 3.008h2.49zM11.27 2.461c.177.334.339.694.482 1.078a8.368 8.368 0 0 0 1.196-.49 7.01 7.01 0 0 0-2.275-1.52c.218.283.418.597.597.932zm-.488 1.343a7.765 7.765 0 0 0-.395-.872C9.835 1.897 9.17 1.282 8.5 1.077V4.09c.81-.03 1.577-.13 2.282-.287z"/> - </svg> - </a> - <div class="dropdown-menu" aria-labelledby="languageDropdown"> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ar_AR"> - <img src="images/flags/sa.svg" alt="icon" width="20" height="15"> العربية - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ca_CA"> - <img src="images/flags/es-ct.svg" alt="icon" width="20" height="15"> Català - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="zh_CN"> - <img src="images/flags/cn.svg" alt="icon" width="20" height="15"> 简体中文 - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="de_DE"> - <img src="images/flags/de.svg" alt="icon" width="20" height="15"> Deutsch - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_GB"> - <img src="images/flags/gb.svg" alt="icon" width="20" height="15"> English (GB) - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_US"> - <img src="images/flags/us.svg" alt="icon" width="20" height="15"> English (US) - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="eu_ES"> - <img src="images/flags/eu.svg" alt="icon" width="20" height="15"> Euskara - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="es_ES"> - <img src="images/flags/es.svg" alt="icon" width="20" height="15"> Español - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="fr_FR"> - <img src="images/flags/fr.svg" alt="icon" width="20" height="15"> Français - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="it_IT"> - <img src="images/flags/it.svg" alt="icon" width="20" height="15"> Italiano - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="nl_NL"> - <img src="images/flags/nl.svg" alt="icon" width="20" height="15"> Nederlands - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pl_PL"> - <img src="images/flags/pl.svg" alt="icon" width="20" height="15"> Polski - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pt_BR"> - <img src="images/flags/pt_br.svg" alt="icon" width="20" height="15"> Português (BR) - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ro_RO"> - <img src="images/flags/ro.svg" alt="icon" width="20" height="15"> Romanian - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="sv_SE"> - <img src="images/flags/se.svg" alt="icon" width="20" height="15"> Svenska - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ru_RU"> - <img src="images/flags/ru.svg" alt="icon" width="20" height="15"> Русский - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ko_KR"> - <img src="images/flags/kr.svg" alt="icon" width="20" height="15"> 한국어 - </a> - <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ja_JP"> - <img src="images/flags/jp.svg" alt="icon" width="20" height="15"> 日本語 - </a> - </div> - </li> -</th:block> \ No newline at end of file diff --git a/src/main/resources/templates/fragments/languages.html b/src/main/resources/templates/fragments/languages.html new file mode 100644 index 000000000..17b886608 --- /dev/null +++ b/src/main/resources/templates/fragments/languages.html @@ -0,0 +1,56 @@ +<th:block th:fragment="langs"> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ar_AR"> + <img src="images/flags/sa.svg" alt="icon" width="20" height="15"> العربية + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ca_CA"> + <img src="images/flags/es-ct.svg" alt="icon" width="20" height="15"> Català + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="zh_CN"> + <img src="images/flags/cn.svg" alt="icon" width="20" height="15"> 简体中文 + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="de_DE"> + <img src="images/flags/de.svg" alt="icon" width="20" height="15"> Deutsch + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_GB"> + <img src="images/flags/gb.svg" alt="icon" width="20" height="15"> English (GB) + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_US"> + <img src="images/flags/us.svg" alt="icon" width="20" height="15"> English (US) + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="eu_ES"> + <img src="images/flags/eu.svg" alt="icon" width="20" height="15"> Euskara + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="es_ES"> + <img src="images/flags/es.svg" alt="icon" width="20" height="15"> Español + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="fr_FR"> + <img src="images/flags/fr.svg" alt="icon" width="20" height="15"> Français + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="it_IT"> + <img src="images/flags/it.svg" alt="icon" width="20" height="15"> Italiano + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="nl_NL"> + <img src="images/flags/nl.svg" alt="icon" width="20" height="15"> Nederlands + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pl_PL"> + <img src="images/flags/pl.svg" alt="icon" width="20" height="15"> Polski + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pt_BR"> + <img src="images/flags/pt_br.svg" alt="icon" width="20" height="15"> Português (BR) + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ro_RO"> + <img src="images/flags/ro.svg" alt="icon" width="20" height="15"> Romanian + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="sv_SE"> + <img src="images/flags/se.svg" alt="icon" width="20" height="15"> Svenska + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ru_RU"> + <img src="images/flags/ru.svg" alt="icon" width="20" height="15"> Русский + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ko_KR"> + <img src="images/flags/kr.svg" alt="icon" width="20" height="15"> 한국어 + </a> + <a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ja_JP"> + <img src="images/flags/jp.svg" alt="icon" width="20" height="15"> 日本語 + </a> +</th:block> \ No newline at end of file diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index 009445e8d..4326afccd 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -147,7 +147,27 @@ </div> </li> - <th:block th:insert="~{fragments/langAndDarkMode :: langAndDarkMode}"></th:block> + + + <script src="js/languageSelection.js"></script> + <script src="js/darkmode.js"></script> + + <li class="nav-item"> + <a class="nav-link" id="dark-mode-toggle" href="#"> + <img class="navbar-icon" id="dark-mode-icon" src="moon.svg" alt="icon" /> + </a> + </li> + + <li class="nav-item dropdown"> + <a class="nav-link dropdown-toggle" href="#" id="languageDropdown" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-globe2 globe-icon" viewBox="0 0 20 20"> + <path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm7.5-6.923c-.67.204-1.335.82-1.887 1.855-.143.268-.276.56-.395.872.705.157 1.472.257 2.282.287V1.077zM4.249 3.539c.142-.384.304-.744.481-1.078a6.7 6.7 0 0 1 .597-.933A7.01 7.01 0 0 0 3.051 3.05c.362.184.763.349 1.198.49zM3.509 7.5c.036-1.07.188-2.087.436-3.008a9.124 9.124 0 0 1-1.565-.667A6.964 6.964 0 0 0 1.018 7.5h2.49zm1.4-2.741a12.344 12.344 0 0 0-.4 2.741H7.5V5.091c-.91-.03-1.783-.145-2.591-.332zM8.5 5.09V7.5h2.99a12.342 12.342 0 0 0-.399-2.741c-.808.187-1.681.301-2.591.332zM4.51 8.5c.035.987.176 1.914.399 2.741A13.612 13.612 0 0 1 7.5 10.91V8.5H4.51zm3.99 0v2.409c.91.03 1.783.145 2.591.332.223-.827.364-1.754.4-2.741H8.5zm-3.282 3.696c.12.312.252.604.395.872.552 1.035 1.218 1.65 1.887 1.855V11.91c-.81.03-1.577.13-2.282.287zm.11 2.276a6.696 6.696 0 0 1-.598-.933 8.853 8.853 0 0 1-.481-1.079 8.38 8.38 0 0 0-1.198.49 7.01 7.01 0 0 0 2.276 1.522zm-1.383-2.964A13.36 13.36 0 0 1 3.508 8.5h-2.49a6.963 6.963 0 0 0 1.362 3.675c.47-.258.995-.482 1.565-.667zm6.728 2.964a7.009 7.009 0 0 0 2.275-1.521 8.376 8.376 0 0 0-1.197-.49 8.853 8.853 0 0 1-.481 1.078 6.688 6.688 0 0 1-.597.933zM8.5 11.909v3.014c.67-.204 1.335-.82 1.887-1.855.143-.268.276-.56.395-.872A12.63 12.63 0 0 0 8.5 11.91zm3.555-.401c.57.185 1.095.409 1.565.667A6.963 6.963 0 0 0 14.982 8.5h-2.49a13.36 13.36 0 0 1-.437 3.008zM14.982 7.5a6.963 6.963 0 0 0-1.362-3.675c-.47.258-.995.482-1.565.667.248.92.4 1.938.437 3.008h2.49zM11.27 2.461c.177.334.339.694.482 1.078a8.368 8.368 0 0 0 1.196-.49 7.01 7.01 0 0 0-2.275-1.52c.218.283.418.597.597.932zm-.488 1.343a7.765 7.765 0 0 0-.395-.872C9.835 1.897 9.17 1.282 8.5 1.077V4.09c.81-.03 1.577-.13 2.282-.287z"/> + </svg> + </a> + <div class="dropdown-menu" aria-labelledby="languageDropdown"> + <th:block th:insert="~{fragments/languages :: langs}"></th:block> + </div> + </li> <li class="nav-item"> diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index be819cd43..1ddea6ec6 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -1,6 +1,8 @@ -<html xmlns:th="http://www.thymeleaf.org"> +<!doctype html> +<html th:lang="${#locale.toString()}" th:lang-direction="#{language.direction}" xmlns:th="http://www.thymeleaf.org"> <th:block th:insert="~{fragments/common :: head(title=#{login.title})}"></th:block> +<script src="js/darkmode.js"></script> <style> html, body { height: 100%; @@ -51,40 +53,251 @@ body { .footer-bottom { margin-top: auto; } +body.light-mode input:-webkit-autofill, +body.light-mode input:-webkit-autofill:hover, +body.light-mode input:-webkit-autofill:focus, +body.light-mode input:-webkit-autofill:active { + -webkit-text-fill-color: #212529; /* Dark font color */ + -webkit-box-shadow: 0 0 0 1000px #f8f9fa inset; /* Light background color */ +} + +/* Dark Mode */ +body.dark-mode input:-webkit-autofill, +body.dark-mode input:-webkit-autofill:hover, +body.dark-mode input:-webkit-autofill:focus, +body.dark-mode input:-webkit-autofill:active { + -webkit-text-fill-color: #f8f9fa; /* Light font color */ + -webkit-box-shadow: 0 0 0 1000px #212529 inset; /* Dark background color */ +} +/* Light Mode */ +body.light-mode .form-floating > input:focus + label { + color: #212529 !important; /* Dark text for light background */ +} + +/* Dark Mode */ +body.dark-mode .form-floating > input:focus + label { + color: #fff !important; /* Light text for dark background */ +} + +body.light-mode .form-floating > label { + color: #212529 !important; /* Dark text for light background */ +} + +body.dark-mode .form-floating > label { + color: #fff !important; /* Light text for dark background */ +} + + +/* Removing default styles for ul and li */ +ul { + list-style: none; + padding: 0; + margin: 0; +} + +li { + list-style: none; +} + +/* Positioning the container of these elements to the top right */ +.your-container-class { + position: absolute; + top: 0; + right: 0; + display: flex; +} + +/* Styling for the dropdown */ +.dropdown-menu { + min-width: 200px; /* or whatever width you prefer */ +} + +.navbar-icon { + width: 40px; + height: 40px; +} + </style> <body> +<div class="your-container-class"> +</div> <div class="container-flex"> <main class="form-signin text-center"> + +<script> +function setInputMode(elementId, mode) { + var inputElement = document.getElementById(elementId); + + if (!inputElement) return; // If the element doesn't exist, exit the function + + switch (mode) { + case "on": + inputElement.classList.add("bg-dark", "text-light"); + inputElement.classList.remove("bg-light", "text-dark"); + break; + case "off": + inputElement.classList.add("bg-light", "text-dark"); + inputElement.classList.remove("bg-dark", "text-light"); + break; + case "rainbow": + // Assuming you have defined some classes for rainbow mode + + break; + } +} + + + +document.addEventListener('modeChanged', function(e) { + var mode = e.detail; + + setInputMode("username", mode); + setInputMode("password", mode); + document.body.classList.remove("light-mode", "dark-mode", "rainbow-mode"); // remove all mode classes first + + switch (mode) { + case "on": + document.body.classList.add("dark-mode"); + break; + case "off": + document.body.classList.add("light-mode"); + break; + case "rainbow": + document.body.classList.add("rainbow-mode"); + break; + } + +}); + +document.addEventListener('DOMContentLoaded', function() { + + const defaultLocale = document.documentElement.lang || 'en_GB'; + const storedLocale = localStorage.getItem('languageCode') || defaultLocale; + + const currentURL = new URL(window.location.href); + const urlParams = currentURL.searchParams; + const currentLangParam = urlParams.get('lang') || defaultLocale; + + console.log("defaultLocale", defaultLocale) + console.log("storedLocale", storedLocale) + console.log("currentLangParam", currentLangParam) + + if (currentLangParam !== storedLocale) { + urlParams.set('lang', storedLocale); + currentURL.search = urlParams.toString(); + + console.log("redirecting to", currentURL.toString()); + window.location.href = currentURL.toString(); + return; + } + + const dropdown = document.getElementById('languageDropdown'); + const dropdownItems = document.querySelectorAll('.lang_dropdown-item'); + + let activeItem; + for (let i = 0; i < dropdownItems.length; i++) { + const item = dropdownItems[i]; + item.classList.remove('active'); + if (item.dataset.bsLanguageCode === storedLocale) { + item.classList.add('active'); + activeItem = item; + } + item.addEventListener('click', handleDropdownItemClick); + } + + if (activeItem) { + dropdown.innerHTML = activeItem.innerHTML; // This will set the dropdown button's content to the active language's flag and name + } + + // Additional functionality that was in your provided code: + + document.querySelectorAll('.nav-item.dropdown').forEach((element) => { + const dropdownMenu = element.querySelector(".dropdown-menu"); + if (dropdownMenu.id !== 'favoritesDropdown' && dropdownMenu.children.length <= 2 && dropdownMenu.querySelectorAll("hr.dropdown-divider").length === dropdownMenu.children.length) { + if (element.previousElementSibling && element.previousElementSibling.classList.contains('nav-item') && element.previousElementSibling.classList.contains('nav-item-separator')) { + element.previousElementSibling.remove(); + } + element.remove(); + } + }); + + // Sort languages by alphabet + const list = Array.from(document.querySelector('.dropdown-menu[aria-labelledby="languageDropdown"]').children).filter(child => child.matches('a')); + list.sort(function(a, b) { + var A = a.textContent.toUpperCase(); + var B = b.textContent.toUpperCase(); + return (A < B) ? -1 : (A > B) ? 1 : 0; + }).forEach(node => document.querySelector('.dropdown-menu[aria-labelledby="languageDropdown"]').appendChild(node)); +}); + +function handleDropdownItemClick(event) { + event.preventDefault(); + const languageCode = event.currentTarget.dataset.bsLanguageCode; + const dropdown = document.getElementById('languageDropdown'); + + if (languageCode) { + localStorage.setItem('languageCode', languageCode); + + const currentUrl = window.location.href; + if (currentUrl.indexOf('?lang=') === -1) { + window.location.href = currentUrl + '?lang=' + languageCode; + } else { + window.location.href = currentUrl.replace(/\?lang=\w{2,}/, '?lang=' + languageCode); + } + + dropdown.innerHTML = event.currentTarget.innerHTML; // Update the dropdown button's content + } else { + console.error("Language code is not set for this item."); + } +} + + + +</script> <div th:if="${logoutMessage}" class="alert alert-success" th:text="${logoutMessage}"></div> <form th:action="@{login}" method="post"> <img class="mb-4" src="favicon.svg" alt="" width="144" height="144"> - <h1 class="h1 mb-3 fw-normal">Stirling-PDF</h1> - <h2 class="h5 mb-3 fw-normal">Please sign in</h2> + <h1 class="h1 mb-3 fw-normal" th:text="${@appName}">Stirling-PDF</h1> + <h2 class="h5 mb-3 fw-normal" th:text="#{login.signinTitle}">Please sign in</h2> <div class="form-floating"> - <input type="text" class="form-control" id="username" name="username" - placeholder="admin"> <label for="username">Username</label> + <input type="text" class="form-control bg-dark text-light" id="username" name="username" + placeholder="admin"> <label for="username" th:text="#{username}">Username</label> </div> <div class="form-floating"> - <input type="password" class="form-control" id="password" name="password" - placeholder="Password"> <label for="password">Password</label> + <input type="password" class="form-control bg-dark text-light" id="password" name="password" + placeholder="Password"> <label for="password" th:text="#{password}">Password</label> </div> <div class="checkbox mb-3"> - <label> <input type="checkbox" value="remember-me"> - Remember me + <label > <input type="checkbox" value="remember-me"> + <span th:text="#{login.rememberme}"></span> </label> </div> - <button class="w-100 btn btn-lg btn-primary" type="submit">Sign + <button class="w-100 btn btn-lg btn-primary" type="submit" th:text="#{login.signin}">Sign in</button> </form> + <div class="mt-3"> <!-- Added a margin-top for spacing --> + <div class="dropdown"> + <button class="btn btn-secondary dropdown-toggle" type="button" id="languageDropdown" data-bs-toggle="dropdown" aria-expanded="false"> + English (GB) <!-- Default language placeholder --> + </button> + <div class="dropdown-menu" aria-labelledby="languageDropdown"> + <!-- Here's where the fragment will be included --> + <th:block th:replace="~{fragments/languages :: langs}"></th:block> + </div> + </div> + </div> + + + <div class="text-danger text-center"> - <div th:if="${error == 'badcredentials'}">Invalid username or + <div th:if="${error == 'badcredentials'}" th:text="#{login.invalid}">Invalid username or password.</div> - <div th:if="${error == 'locked'}">Your account has been locked. + <div th:if="${error == 'locked'}" th:text="#{login.locked}">Your account has been locked. </div> </div>