eliminato flowbit-ui
This commit is contained in:
@@ -17,25 +17,14 @@
|
||||
</div>
|
||||
<div style="max-width: 100px;" class="flex-none">
|
||||
<label for="users-size" class="mb-2 block text-sm font-medium text-gray-900 dark:text-white" data-i18n="users.page_size">Page size</label>
|
||||
<div class="relative">
|
||||
<input id="users-size-value" type="hidden" name="pageSize" value="{{.PageData.PageSize}}">
|
||||
<button id="users-size-button" data-dropdown-toggle="users-size-dropdown" type="button" class="inline-flex w-full items-center justify-between rounded-lg border border-gray-300 bg-gray-50 px-3 py-2.5 text-sm text-gray-900 hover:bg-gray-100 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-700">
|
||||
<span id="users-size-label">{{.PageData.PageSize}}</span>
|
||||
<svg class="ms-2 h-2.5 w-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 10 6">
|
||||
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4" />
|
||||
</svg>
|
||||
</button>
|
||||
<div id="users-size-dropdown" class="z-50 mt-1 hidden w-full divide-y divide-gray-100 rounded-lg bg-white shadow-sm dark:divide-gray-600 dark:bg-gray-700">
|
||||
<ul class="py-1 text-sm text-gray-700 dark:text-gray-200" aria-labelledby="users-size-button">
|
||||
<li><button type="button" class="block w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-gray-600" data-page-size-option="5">5</button></li>
|
||||
<li><button type="button" class="block w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-gray-600" data-page-size-option="10">10</button></li>
|
||||
<li><button type="button" class="block w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-gray-600" data-page-size-option="20">20</button></li>
|
||||
<li><button type="button" class="block w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-gray-600" data-page-size-option="50">50</button></li>
|
||||
<li><button type="button" class="block w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-gray-600" data-page-size-option="100">100</button></li>
|
||||
<li><button type="button" class="block w-full px-4 py-2 text-left hover:bg-gray-100 dark:hover:bg-gray-600" data-page-size-option="500">500</button></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<select id="users-size" name="pageSize" class="block w-full rounded-lg border border-gray-300 bg-gray-50 p-2.5 text-sm text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white" hx-get="/admin/users/table" hx-target="#usersTableContainer" hx-swap="innerHTML" hx-include="#usersFilters" hx-trigger="change">
|
||||
<option value="5" {{if eq .PageData.PageSize 5}}selected{{end}}>5</option>
|
||||
<option value="10" {{if eq .PageData.PageSize 10}}selected{{end}}>10</option>
|
||||
<option value="20" {{if eq .PageData.PageSize 20}}selected{{end}}>20</option>
|
||||
<option value="50" {{if eq .PageData.PageSize 50}}selected{{end}}>50</option>
|
||||
<option value="100" {{if eq .PageData.PageSize 100}}selected{{end}}>100</option>
|
||||
<option value="500" {{if eq .PageData.PageSize 500}}selected{{end}}>500</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="max-width: 120px;" class="flex-auto self-end">
|
||||
<button type="submit" class="w-full rounded-lg bg-blue-700 px-5 py-2.5 text-sm font-medium text-white hover:bg-blue-800 focus:outline-none focus:ring-4 focus:ring-blue-300" data-i18n="users.search_button">Cerca</button>
|
||||
|
||||
@@ -111,16 +111,6 @@
|
||||
return !!dictionaries[normalizeLang(lang)];
|
||||
}
|
||||
|
||||
function persistLangPreference(lang) {
|
||||
if (!IS_AUTHENTICATED) return;
|
||||
fetch('/preferences/lang', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'same-origin',
|
||||
body: JSON.stringify({ lang: lang })
|
||||
}).catch(function () {});
|
||||
}
|
||||
|
||||
function getLang() {
|
||||
var serverLang = normalizeLang(SERVER_LANG);
|
||||
if (IS_AUTHENTICATED && isSupportedLang(serverLang)) {
|
||||
@@ -166,20 +156,9 @@
|
||||
function applyTranslations(root) {
|
||||
var lang = getLang();
|
||||
document.documentElement.setAttribute('lang', lang.replace('_', '-'));
|
||||
var label = document.getElementById('lang-current');
|
||||
var langSelect = document.getElementById('lang-select');
|
||||
var flag = document.getElementById('lang-flag');
|
||||
if (label) {
|
||||
var labels = {
|
||||
it: 'Italiano',
|
||||
en: 'English',
|
||||
en_us: 'English USA',
|
||||
de: 'Deutsch',
|
||||
fr: 'Français',
|
||||
de_ch: 'Deutsch CH',
|
||||
fr_ch: 'Français CH'
|
||||
};
|
||||
label.textContent = labels[lang] || 'Italiano';
|
||||
}
|
||||
if (langSelect && langSelect.value !== lang) langSelect.value = lang;
|
||||
if (flag) {
|
||||
var flags = {
|
||||
it: '/static/vendor/flags/it.svg',
|
||||
@@ -219,47 +198,14 @@
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('[data-lang-select]').forEach(function (btn) {
|
||||
btn.addEventListener('click', function () {
|
||||
var selectedLang = normalizeLang(btn.getAttribute('data-lang-select'));
|
||||
var langSelect = document.getElementById('lang-select');
|
||||
if (langSelect) {
|
||||
langSelect.addEventListener('change', function () {
|
||||
var selectedLang = normalizeLang(langSelect.value);
|
||||
localStorage.setItem(STORAGE_KEY, selectedLang);
|
||||
persistLangPreference(selectedLang);
|
||||
applyTranslations(document);
|
||||
var dropdownInstance = window.FlowbiteInstances && window.FlowbiteInstances.getInstance
|
||||
? window.FlowbiteInstances.getInstance('Dropdown', 'lang-dropdown')
|
||||
: null;
|
||||
if (dropdownInstance && typeof dropdownInstance.hide === 'function') {
|
||||
dropdownInstance.hide();
|
||||
return;
|
||||
}
|
||||
var langButton = document.getElementById('lang-menu-button');
|
||||
var langDropdown = document.getElementById('lang-dropdown');
|
||||
if (langDropdown) langDropdown.classList.add('hidden');
|
||||
if (langButton) langButton.setAttribute('aria-expanded', 'false');
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll('[data-page-size-option]').forEach(function (btn) {
|
||||
btn.addEventListener('click', function () {
|
||||
var value = btn.getAttribute('data-page-size-option');
|
||||
var input = document.getElementById('users-size-value');
|
||||
var label = document.getElementById('users-size-label');
|
||||
if (input) input.value = value;
|
||||
if (label) label.textContent = value;
|
||||
|
||||
var dropdownInstance = window.FlowbiteInstances && window.FlowbiteInstances.getInstance
|
||||
? window.FlowbiteInstances.getInstance('Dropdown', 'users-size-dropdown')
|
||||
: null;
|
||||
if (dropdownInstance && typeof dropdownInstance.hide === 'function') {
|
||||
dropdownInstance.hide();
|
||||
return;
|
||||
}
|
||||
var button = document.getElementById('users-size-button');
|
||||
var dropdown = document.getElementById('users-size-dropdown');
|
||||
if (dropdown) dropdown.classList.add('hidden');
|
||||
if (button) button.setAttribute('aria-expanded', 'false');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function reinitFlowbiteComponents(target) {
|
||||
if (typeof window.initDropdowns === 'function') window.initDropdowns();
|
||||
|
||||
@@ -1,19 +1,14 @@
|
||||
{{define "language_dropdown"}}
|
||||
<div class="relative flex items-center gap-2 text-sm font-small text-gray-7000">
|
||||
<div class="relative flex items-center gap-2 text-sm">
|
||||
<img id="lang-flag" class="rounded object-cover dark:outline" src="/static/vendor/flags/it.svg" alt="Italiano" style="width:32px;height:22px;">
|
||||
<button id="lang-menu-button" data-dropdown-toggle="lang-dropdown" type="button" class="inline-flex h-8 items-center rounded-lg bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:bg-gray-800 dark:text-gray-100 dark:hover:bg-gray-700 dark:focus:ring-gray-700" aria-expanded="false">
|
||||
<span id="lang-current" class="inline-block min-w-[95px]">Italiano</span>
|
||||
</button>
|
||||
<div id="lang-dropdown" class="z-50 my-2 hidden w-40 list-none divide-y divide-gray-100 rounded-lg bg-white text-sm shadow-sm dark:divide-gray-700 dark:bg-gray-800">
|
||||
<ul class="py-1" aria-labelledby="lang-menu-button">
|
||||
<li><button type="button" class="flex w-full items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700" data-lang-select="it"><div class="flex w-8 shrink-0 items-center justify-center"><img class="flag-lang rounded-sm object-cover" src="/static/vendor/flags/it.svg" alt=""></div><span class="leading-none">Italiano</span></button></li>
|
||||
<li><button type="button" class="flex w-full items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700" data-lang-select="en"><div class="flex w-8 shrink-0 items-center justify-center"><img class="flag-lang rounded-sm object-cover" src="/static/vendor/flags/en.svg" alt=""></div><span class="leading-none">English</span></button></li>
|
||||
<li><button type="button" class="flex w-full items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700" data-lang-select="en_us"><div class="flex w-8 shrink-0 items-center justify-center"><img class="flag-lang rounded-sm object-cover" src="/static/vendor/flags/en_us.svg" alt=""></div><span class="leading-none">English USA</span></button></li>
|
||||
<li><button type="button" class="flex w-full items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700" data-lang-select="de"><div class="flex w-8 shrink-0 items-center justify-center"><img class="flag-lang rounded-sm object-cover" src="/static/vendor/flags/de.svg" alt=""></div><span class="leading-none">Deutsch</span></button></li>
|
||||
<li><button type="button" class="flex w-full items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700" data-lang-select="de_ch"><div class="flex w-8 shrink-0 items-center justify-center"><img class="flag-lang-ch rounded-sm object-cover" src="/static/vendor/flags/ch.svg" alt=""></div><span class="leading-none">Deutsch CH</span></button></li>
|
||||
<li><button type="button" class="flex w-full items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700" data-lang-select="fr"><div class="flex w-8 shrink-0 items-center justify-center"><img class="flag-lang rounded-sm object-cover" src="/static/vendor/flags/fr.svg" alt=""></div><span class="leading-none">Français</span></button></li>
|
||||
<li><button type="button" class="flex w-full items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700" data-lang-select="fr_ch"><div class="flex w-8 shrink-0 items-center justify-center"><img class="flag-lang-ch rounded-sm object-cover" src="/static/vendor/flags/ch.svg" alt=""></div><span class="leading-none">Français CH</span></button></li>
|
||||
</ul>
|
||||
</div>
|
||||
<select id="lang-select" name="lang" class="inline-flex h-8 min-w-[95px] items-center rounded-lg bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-100 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:bg-gray-800 dark:text-gray-100 dark:hover:bg-gray-700 dark:focus:ring-gray-700" {{if .CurrentUser}}hx-post="/preferences/lang" hx-trigger="change" hx-swap="none"{{end}}>
|
||||
<option value="it">Italiano</option>
|
||||
<option value="en">English</option>
|
||||
<option value="en_us">English USA</option>
|
||||
<option value="de">Deutsch</option>
|
||||
<option value="de_ch">Deutsch CH</option>
|
||||
<option value="fr">Français</option>
|
||||
<option value="fr_ch">Français CH</option>
|
||||
</select>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<h1 class="mb-1 text-2xl font-bold text-gray-900 dark:text-white" data-i18n="login.title">Login</h1>
|
||||
<p class="mb-6 text-sm text-gray-500 dark:text-gray-400" data-i18n="login.subtitle">Accedi al tuo account.</p>
|
||||
|
||||
<form hx-post="/login" class="space-y-5">
|
||||
<form action="/login" method="post" class="space-y-5">
|
||||
<div>
|
||||
<label for="email" class="mb-2 block text-sm font-medium text-gray-900 dark:text-white" data-i18n="form.email">Email</label>
|
||||
<input id="email" type="text" name="email" value="{{.Email}}" class="block w-full rounded-lg border border-gray-300 bg-gray-50 p-2.5 text-sm text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400" required />
|
||||
|
||||
Reference in New Issue
Block a user