friendlier hash/urls

This commit is contained in:
Girish Ramakrishnan
2025-10-04 23:11:30 +02:00
parent da3414e3bc
commit 810922de5e
+33 -33
View File
@@ -48,14 +48,14 @@ const VIEWS = Object.freeze({
APPS: '#/apps',
APPSTORE: '#/appstore', // this is a prefix
BACKUP_SITES: '#/backup-sites',
BACKUP_LIST: '#/backup-list',
BACKUP_APP_ARCHIVE: '#/backup-app-archive',
BACKUP_LIST: '#/backups',
APP_ARCHIVE: '#/app-archive',
CLOUDRON_ACCOUNT: '#/cloudron-account',
DOMAINS: '#/domains',
EMAIL_DOMAIN: '#/email-domain',
EMAIL_DOMAINS: '#/email-domains',
EMAIL_MAILBOXES: '#/email-mailboxes',
EMAIL_MAILINGLISTS: '#/email-mailinglists',
MAILBOXES: '#/mailboxes',
MAILINGLISTS: '#/mailinglists',
EMAIL_SETTINGS: '#/email-settings',
EMAIL_EVENTLOG: '#/email-eventlog',
SYSTEM_INFO: '#/system-info',
@@ -63,14 +63,14 @@ const VIEWS = Object.freeze({
PROFILE: '#/profile',
SERVICES: '#/services',
SYSTEM_LOCALE: '#/system-locale',
SYSTEM_DOCKER: '#/system-docker',
DOCKER: '#/docker',
SYSTEM_EVENTLOG: '#/system-eventlog',
SYSTEM_UPDATE: '#/system-update',
USER_DIRECTORY_SETTINGS: '#/user-directory-settings',
USER_DIRECTORY_LDAP_SERVER: '#/user-directory-ldap-server',
USER_DIRECTORY_OPENID_PROVIDER: '#/user-directory-openid-provider',
LDAP_SERVER: '#/ldap-server',
OPENID_PROVIDER: '#/openid-provider',
USERS: '#/users',
GROUPS: '#/users-groups',
GROUPS: '#/groups',
VOLUMES: '#/volumes',
});
@@ -150,8 +150,8 @@ function onHashChange() {
view.value = VIEWS.BACKUP_SITES;
} else if (v === VIEWS.BACKUP_LIST && profile.value.isAtLeastAdmin) {
view.value = VIEWS.BACKUP_LIST;
} else if (v === VIEWS.BACKUP_APP_ARCHIVE && profile.value.isAtLeastAdmin) {
view.value = VIEWS.BACKUP_APP_ARCHIVE;
} else if (v === VIEWS.APP_ARCHIVE && profile.value.isAtLeastAdmin) {
view.value = VIEWS.APP_ARCHIVE;
} else if (v === VIEWS.CLOUDRON_ACCOUNT && profile.value.isAtLeastOwner) {
view.value = VIEWS.CLOUDRON_ACCOUNT;
} else if (v === VIEWS.DOMAINS && profile.value.isAtLeastAdmin) {
@@ -160,10 +160,10 @@ function onHashChange() {
view.value = VIEWS.EMAIL_DOMAIN;
} else if (v === VIEWS.EMAIL_DOMAINS && profile.value.isAtLeastMailManager) {
view.value = VIEWS.EMAIL_DOMAINS;
} else if (v === VIEWS.EMAIL_MAILBOXES && profile.value.isAtLeastMailManager) {
view.value = VIEWS.EMAIL_MAILBOXES;
} else if (v === VIEWS.EMAIL_MAILINGLISTS && profile.value.isAtLeastMailManager) {
view.value = VIEWS.EMAIL_MAILINGLISTS;
} else if (v === VIEWS.MAILBOXES && profile.value.isAtLeastMailManager) {
view.value = VIEWS.MAILBOXES;
} else if (v === VIEWS.MAILINGLISTS && profile.value.isAtLeastMailManager) {
view.value = VIEWS.MAILINGLISTS;
} else if (v === VIEWS.EMAIL_SETTINGS && profile.value.isAtLeastMailManager) {
view.value = VIEWS.EMAIL_SETTINGS;
} else if (v === VIEWS.EMAIL_EVENTLOG && profile.value.isAtLeastMailManager) {
@@ -178,18 +178,18 @@ function onHashChange() {
view.value = VIEWS.SERVICES;
} else if (v === VIEWS.SYSTEM_LOCALE && profile.value.isAtLeastAdmin) {
view.value = VIEWS.SYSTEM_LOCALE;
} else if (v === VIEWS.SYSTEM_DOCKER && profile.value.isAtLeastAdmin) {
view.value = VIEWS.SYSTEM_DOCKER;
} else if (v === VIEWS.DOCKER && profile.value.isAtLeastAdmin) {
view.value = VIEWS.DOCKER;
} else if (v === VIEWS.SYSTEM_EVENTLOG && profile.value.isAtLeastAdmin) {
view.value = VIEWS.SYSTEM_EVENTLOG;
} else if (v === VIEWS.SYSTEM_UPDATE && profile.value.isAtLeastAdmin) {
view.value = VIEWS.SYSTEM_UPDATE;
} else if (v === VIEWS.USER_DIRECTORY_SETTINGS && profile.value.isAtLeastAdmin) {
view.value = VIEWS.USER_DIRECTORY_SETTINGS;
} else if (v === VIEWS.USER_DIRECTORY_LDAP_SERVER && profile.value.isAtLeastAdmin) {
view.value = VIEWS.USER_DIRECTORY_LDAP_SERVER;
} else if (v === VIEWS.USER_DIRECTORY_OPENID_PROVIDER && profile.value.isAtLeastAdmin) {
view.value = VIEWS.USER_DIRECTORY_OPENID_PROVIDER;
} else if (v === VIEWS.LDAP_SERVER && profile.value.isAtLeastAdmin) {
view.value = VIEWS.LDAP_SERVER;
} else if (v === VIEWS.OPENID_PROVIDER && profile.value.isAtLeastAdmin) {
view.value = VIEWS.OPENID_PROVIDER;
} else if (v === VIEWS.USERS && profile.value.isAtLeastUserManager) {
view.value = VIEWS.USERS;
} else if (v === VIEWS.GROUPS && profile.value.isAtLeastUserManager) {
@@ -291,7 +291,7 @@ onMounted(async () => {
<div class="sidebar-item-group" v-if="activeSidebarGroups[SIDEBAR_GROUPS.BACKUP]">
<a class="sidebar-item" :class="{ active: view === VIEWS.BACKUP_SITES }" :href="VIEWS.BACKUP_SITES" @click="onSidebarClose()"><i class="fa fa-fw fa-hard-drive"></i> {{ $t('backups.sites.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.BACKUP_LIST }" :href="VIEWS.BACKUP_LIST" @click="onSidebarClose()"><i class="fa fa-fw fa-list-check"></i> {{ $t('backups.listing.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.BACKUP_APP_ARCHIVE }" :href="VIEWS.BACKUP_APP_ARCHIVE" @click="onSidebarClose()"><i class="fa fa-fw fa-grip"></i> {{ $t('backups.archives.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.APP_ARCHIVE }" :href="VIEWS.APP_ARCHIVE" @click="onSidebarClose()"><i class="fa fa-fw fa-grip"></i> {{ $t('backups.archives.title') }}</a>
</div>
</Transition>
@@ -301,8 +301,8 @@ onMounted(async () => {
<Transition name="sidebar-item-group-animation">
<div class="sidebar-item-group" v-if="activeSidebarGroups[SIDEBAR_GROUPS.EMAIL]">
<a class="sidebar-item" :class="{ active: view === VIEWS.EMAIL_DOMAINS || view === VIEWS.EMAIL_DOMAIN }" :href="VIEWS.EMAIL_DOMAINS" @click="onSidebarClose()"><i class="fa fa-fw fa-globe"></i> Domains</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.EMAIL_MAILBOXES }" :href="VIEWS.EMAIL_MAILBOXES" @click="onSidebarClose()"><i class="fa fa-fw fa-inbox"></i> {{ $t('email.incoming.mailboxes.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.EMAIL_MAILINGLISTS }" :href="VIEWS.EMAIL_MAILINGLISTS" @click="onSidebarClose()"><i class="fa fa-fw-solid fa-envelopes-bulk"></i> {{ $t('email.incoming.mailinglists.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.MAILBOXES }" :href="VIEWS.MAILBOXES" @click="onSidebarClose()"><i class="fa fa-fw fa-inbox"></i> {{ $t('email.incoming.mailboxes.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.MAILINGLISTS }" :href="VIEWS.MAILINGLISTS" @click="onSidebarClose()"><i class="fa fa-fw-solid fa-envelopes-bulk"></i> {{ $t('email.incoming.mailinglists.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.EMAIL_EVENTLOG }" :href="VIEWS.EMAIL_EVENTLOG" @click="onSidebarClose()"><i class="fa fa-fw fa-list-alt"></i> {{ $t('emails.eventlog.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.EMAIL_SETTINGS }" :href="VIEWS.EMAIL_SETTINGS" @click="onSidebarClose()"><i class="fa fa-fw fa-cog"></i> {{ $t('emails.settings.title') }}</a>
</div>
@@ -315,10 +315,10 @@ onMounted(async () => {
<div class="sidebar-item" v-show="profile.isAtLeastAdmin" @click="onToggleGroup(SIDEBAR_GROUPS.SYSTEM)"><i class="fa fa-wrench fa-fw"></i> {{ $t('settings.title') }} <i class="collapse fa-solid fa-angle-right" :class="{ expanded: activeSidebarGroups[SIDEBAR_GROUPS.SYSTEM] }" style="margin-left: 6px;"></i></div>
<Transition name="sidebar-item-group-animation">
<div class="sidebar-item-group" v-if="activeSidebarGroups[SIDEBAR_GROUPS.SYSTEM]">
<a class="sidebar-item" :class="{ active: view === VIEWS.SYSTEM_DOCKER }" :href="VIEWS.SYSTEM_DOCKER" @click="onSidebarClose()"><i class="fa-brands fa-fw fa-docker"></i> {{ $t('dockerRegistries.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.DOCKER }" :href="VIEWS.DOCKER" @click="onSidebarClose()"><i class="fa-brands fa-fw fa-docker"></i> {{ $t('dockerRegistries.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.SYSTEM_EVENTLOG }" :href="VIEWS.SYSTEM_EVENTLOG" @click="onSidebarClose()"><i class="fa fa-list-alt fa-fw"></i> {{ $t('eventlog.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.SYSTEM_LOCALE }" :href="VIEWS.SYSTEM_LOCALE" @click="onSidebarClose()"><i class="fa fa-fw fa-language"></i> {{ $t('system.locale.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.SYSTEM_UPDATE }" :href="VIEWS.SYSTEM_DOCKER" @click="onSidebarClose()"><i class="fa fa-fw fa-square-up-right"></i> {{ $t('settings.updates.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.SYSTEM_UPDATE }" :href="VIEWS.DOCKER" @click="onSidebarClose()"><i class="fa fa-fw fa-square-up-right"></i> {{ $t('settings.updates.title') }}</a>
</div>
</Transition>
@@ -333,8 +333,8 @@ onMounted(async () => {
<div class="sidebar-item" v-show="profile.isAtLeastAdmin" @click="onToggleGroup(SIDEBAR_GROUPS.USER_DIRECTORY)"><i class="fa fa-address-book fa-fw"></i> {{ $t('userDirectory.title') }} <i class="collapse fa-solid fa-angle-right" :class="{ expanded: activeSidebarGroups[SIDEBAR_GROUPS.USER_DIRECTORY] }" style="margin-left: 6px;"></i></div>
<Transition name="sidebar-item-group-animation">
<div class="sidebar-item-group" v-if="activeSidebarGroups[SIDEBAR_GROUPS.USER_DIRECTORY]">
<a class="sidebar-item" :class="{ active: view === VIEWS.USER_DIRECTORY_LDAP_SERVER }" :href="VIEWS.USER_DIRECTORY_LDAP_SERVER" @click="onSidebarClose()"><i class="fa fa-fw fa-users-rays"></i> {{ $t('users.exposedLdap.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.USER_DIRECTORY_OPENID_PROVIDER }" :href="VIEWS.USER_DIRECTORY_OPENID_PROVIDER" @click="onSidebarClose()"><i class="fa fa-fw fa-brands fa-openid"></i> {{ $t('oidc.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.LDAP_SERVER }" :href="VIEWS.LDAP_SERVER" @click="onSidebarClose()"><i class="fa fa-fw fa-users-rays"></i> {{ $t('users.exposedLdap.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.OPENID_PROVIDER }" :href="VIEWS.OPENID_PROVIDER" @click="onSidebarClose()"><i class="fa fa-fw fa-brands fa-openid"></i> {{ $t('oidc.title') }}</a>
<a class="sidebar-item" :class="{ active: view === VIEWS.USER_DIRECTORY_SETTINGS }" :href="VIEWS.USER_DIRECTORY_SETTINGS" @click="onSidebarClose()"><i class="fa fa-fw fa-cog"></i> {{ $t('userdirectory.settings.title') }}</a>
</div>
</Transition>
@@ -360,13 +360,13 @@ onMounted(async () => {
<AppearanceView v-else-if="view === VIEWS.APPEARANCE" />
<BackupSitesView v-else-if="view === VIEWS.BACKUP_SITES" />
<BackupListView v-else-if="view === VIEWS.BACKUP_LIST" />
<BackupAppArchiveView v-else-if="view === VIEWS.BACKUP_APP_ARCHIVE" />
<BackupAppArchiveView v-else-if="view === VIEWS.APP_ARCHIVE" />
<CloudronAccountView v-else-if="view === VIEWS.CLOUDRON_ACCOUNT" />
<DomainsView v-else-if="view === VIEWS.DOMAINS" />
<EmailDomainsView v-else-if="view === VIEWS.EMAIL_DOMAINS" />
<EmailDomainView v-else-if="view === VIEWS.EMAIL_DOMAIN" />
<EmailMailboxesView v-else-if="view === VIEWS.EMAIL_MAILBOXES" />
<EmailMailinglistsView v-else-if="view === VIEWS.EMAIL_MAILINGLISTS" />
<EmailMailboxesView v-else-if="view === VIEWS.MAILBOXES" />
<EmailMailinglistsView v-else-if="view === VIEWS.MAILINGLISTS" />
<EmailSettingsView v-else-if="view === VIEWS.EMAIL_SETTINGS" />
<EmailEventlogView v-else-if="view === VIEWS.EMAIL_EVENTLOG" />
<EventlogView v-else-if="view === VIEWS.SYSTEM_EVENTLOG" />
@@ -375,11 +375,11 @@ onMounted(async () => {
<ProfileView v-else-if="view === VIEWS.PROFILE" />
<ServicesView v-else-if="view === VIEWS.SERVICES" />
<SystemLocaleView v-else-if="view === VIEWS.SYSTEM_LOCALE" />
<SystemDockerView v-else-if="view === VIEWS.SYSTEM_DOCKER" />
<SystemDockerView v-else-if="view === VIEWS.DOCKER" />
<SystemUpdateView v-else-if="view === VIEWS.SYSTEM_UPDATE" />
<UserDirectorySettingsView v-else-if="view === VIEWS.USER_DIRECTORY_SETTINGS" />
<UserDirectoryLdapServerView v-else-if="view === VIEWS.USER_DIRECTORY_LDAP_SERVER" />
<UserDirectoryOpenIdProviderView v-else-if="view === VIEWS.USER_DIRECTORY_OPENID_PROVIDER" />
<UserDirectoryLdapServerView v-else-if="view === VIEWS.LDAP_SERVER" />
<UserDirectoryOpenIdProviderView v-else-if="view === VIEWS.OPENID_PROVIDER" />
<UsersView v-else-if="view === VIEWS.USERS" />
<GroupsView v-else-if="view === VIEWS.GROUPS" />
<VolumesView v-else-if="view === VIEWS.VOLUMES" />