web: app icons v2 (#6410)
* fix more icons stuff Signed-off-by: Jens Langhammer <jens@goauthentik.io> * refactor app icon into separate component Signed-off-by: Jens Langhammer <jens@goauthentik.io> * update locale Signed-off-by: Jens Langhammer <jens@goauthentik.io> * make app icon work correctly in admin list and app view page Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
		| @ -8,7 +8,7 @@ msgid "" | |||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PACKAGE VERSION\n" | "Project-Id-Version: PACKAGE VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: \n" | "Report-Msgid-Bugs-To: \n" | ||||||
| "POT-Creation-Date: 2023-07-21 13:04+0000\n" | "POT-Creation-Date: 2023-07-28 11:50+0000\n" | ||||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | "Language-Team: LANGUAGE <LL@li.org>\n" | ||||||
| @ -427,7 +427,7 @@ msgstr "" | |||||||
| msgid "Webhook Mappings" | msgid "Webhook Mappings" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/events/monitored_tasks.py:198 | #: authentik/events/monitored_tasks.py:205 | ||||||
| msgid "Task has not been run yet." | msgid "Task has not been run yet." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @ -585,65 +585,65 @@ msgstr "" | |||||||
| msgid "Invalid kubeconfig" | msgid "Invalid kubeconfig" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:121 | #: authentik/outposts/models.py:122 | ||||||
| msgid "" | msgid "" | ||||||
| "If enabled, use the local connection. Required Docker socket/Kubernetes " | "If enabled, use the local connection. Required Docker socket/Kubernetes " | ||||||
| "Integration" | "Integration" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:151 | #: authentik/outposts/models.py:152 | ||||||
| msgid "Outpost Service-Connection" | msgid "Outpost Service-Connection" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:152 | #: authentik/outposts/models.py:153 | ||||||
| msgid "Outpost Service-Connections" | msgid "Outpost Service-Connections" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:160 | #: authentik/outposts/models.py:161 | ||||||
| msgid "" | msgid "" | ||||||
| "Can be in the format of 'unix://<path>' when connecting to a local docker " | "Can be in the format of 'unix://<path>' when connecting to a local docker " | ||||||
| "daemon, or 'https://<hostname>:2376' when connecting to a remote system." | "daemon, or 'https://<hostname>:2376' when connecting to a remote system." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:172 | #: authentik/outposts/models.py:173 | ||||||
| msgid "" | msgid "" | ||||||
| "CA which the endpoint's Certificate is verified against. Can be left empty " | "CA which the endpoint's Certificate is verified against. Can be left empty " | ||||||
| "for no validation." | "for no validation." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:184 | #: authentik/outposts/models.py:185 | ||||||
| msgid "" | msgid "" | ||||||
| "Certificate/Key used for authentication. Can be left empty for no " | "Certificate/Key used for authentication. Can be left empty for no " | ||||||
| "authentication." | "authentication." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:202 | #: authentik/outposts/models.py:203 | ||||||
| msgid "Docker Service-Connection" | msgid "Docker Service-Connection" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:203 | #: authentik/outposts/models.py:204 | ||||||
| msgid "Docker Service-Connections" | msgid "Docker Service-Connections" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:211 | #: authentik/outposts/models.py:212 | ||||||
| msgid "" | msgid "" | ||||||
| "Paste your kubeconfig here. authentik will automatically use the currently " | "Paste your kubeconfig here. authentik will automatically use the currently " | ||||||
| "selected context." | "selected context." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:217 | #: authentik/outposts/models.py:218 | ||||||
| msgid "Verify SSL Certificates of the Kubernetes API endpoint" | msgid "Verify SSL Certificates of the Kubernetes API endpoint" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:234 | #: authentik/outposts/models.py:235 | ||||||
| msgid "Kubernetes Service-Connection" | msgid "Kubernetes Service-Connection" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:235 | #: authentik/outposts/models.py:236 | ||||||
| msgid "Kubernetes Service-Connections" | msgid "Kubernetes Service-Connections" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: authentik/outposts/models.py:251 | #: authentik/outposts/models.py:252 | ||||||
| msgid "" | msgid "" | ||||||
| "Select Service-Connection authentik should use to manage this outpost. Leave " | "Select Service-Connection authentik should use to manage this outpost. Leave " | ||||||
| "empty if authentik should not handle the deployment." | "empty if authentik should not handle the deployment." | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| import "@goauthentik/admin/applications/ApplicationForm"; | import "@goauthentik/admin/applications/ApplicationForm"; | ||||||
| import "@goauthentik/admin/applications/wizard/ApplicationWizard"; | import "@goauthentik/admin/applications/wizard/ApplicationWizard"; | ||||||
|  | import { PFSize } from "@goauthentik/app/elements/Spinner"; | ||||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||||
| import { uiConfig } from "@goauthentik/common/ui/config"; | import { uiConfig } from "@goauthentik/common/ui/config"; | ||||||
| import MDApplication from "@goauthentik/docs/core/applications.md"; | import MDApplication from "@goauthentik/docs/core/applications.md"; | ||||||
| @ -11,13 +12,12 @@ import { getURLParam } from "@goauthentik/elements/router/RouteMatch"; | |||||||
| import { PaginatedResponse } from "@goauthentik/elements/table/Table"; | import { PaginatedResponse } from "@goauthentik/elements/table/Table"; | ||||||
| import { TableColumn } from "@goauthentik/elements/table/Table"; | import { TableColumn } from "@goauthentik/elements/table/Table"; | ||||||
| import { TablePage } from "@goauthentik/elements/table/TablePage"; | import { TablePage } from "@goauthentik/elements/table/TablePage"; | ||||||
|  | import "@goauthentik/user/LibraryApplication/AppIcon"; | ||||||
|  |  | ||||||
| import { msg } from "@lit/localize"; | import { msg } from "@lit/localize"; | ||||||
| import { CSSResult, TemplateResult, css, html } from "lit"; | import { CSSResult, TemplateResult, css, html } from "lit"; | ||||||
| import { customElement, property } from "lit/decorators.js"; | import { customElement, property } from "lit/decorators.js"; | ||||||
| import { ifDefined } from "lit/directives/if-defined.js"; |  | ||||||
|  |  | ||||||
| import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css"; |  | ||||||
| import PFCard from "@patternfly/patternfly/components/Card/card.css"; | import PFCard from "@patternfly/patternfly/components/Card/card.css"; | ||||||
|  |  | ||||||
| import { Application, CoreApi } from "@goauthentik/api"; | import { Application, CoreApi } from "@goauthentik/api"; | ||||||
| @ -56,13 +56,8 @@ export class ApplicationListPage extends TablePage<Application> { | |||||||
|  |  | ||||||
|     static get styles(): CSSResult[] { |     static get styles(): CSSResult[] { | ||||||
|         return super.styles.concat( |         return super.styles.concat( | ||||||
|             PFAvatar, |  | ||||||
|             PFCard, |             PFCard, | ||||||
|             css` |             css` | ||||||
|                 :host { |  | ||||||
|                     --icon-height: 2rem; |  | ||||||
|                     --icon-border: 0.25rem; |  | ||||||
|                 } |  | ||||||
|                 /* Fix alignment issues with images in tables */ |                 /* Fix alignment issues with images in tables */ | ||||||
|                 .pf-c-table tbody > tr > * { |                 .pf-c-table tbody > tr > * { | ||||||
|                     vertical-align: middle; |                     vertical-align: middle; | ||||||
| @ -76,14 +71,6 @@ export class ApplicationListPage extends TablePage<Application> { | |||||||
|                 .pf-c-sidebar.pf-m-gutter > .pf-c-sidebar__main > * + * { |                 .pf-c-sidebar.pf-m-gutter > .pf-c-sidebar__main > * + * { | ||||||
|                     margin-left: calc(var(--pf-c-sidebar__main--child--MarginLeft) / 2); |                     margin-left: calc(var(--pf-c-sidebar__main--child--MarginLeft) / 2); | ||||||
|                 } |                 } | ||||||
|                 .icon { |  | ||||||
|                     font-size: var(--icon-height); |  | ||||||
|                     color: var(--ak-global--Color--100); |  | ||||||
|                     padding: var(--icon-border); |  | ||||||
|                     max-height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border)); |  | ||||||
|                     line-height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border)); |  | ||||||
|                     filter: drop-shadow(5px 5px 5px rgba(128, 128, 128, 0.25)); |  | ||||||
|                 } |  | ||||||
|             `, |             `, | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
| @ -137,24 +124,9 @@ export class ApplicationListPage extends TablePage<Application> { | |||||||
|         </ak-forms-delete-bulk>`; |         </ak-forms-delete-bulk>`; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     renderIcon(item: Application): TemplateResult { |  | ||||||
|         if (item?.metaIcon) { |  | ||||||
|             if (item.metaIcon.startsWith("fa://")) { |  | ||||||
|                 const icon = item.metaIcon.replaceAll("fa://", ""); |  | ||||||
|                 return html`<i class="icon fas ${icon}"></i>`; |  | ||||||
|             } |  | ||||||
|             return html`<img |  | ||||||
|                 class="icon pf-c-avatar" |  | ||||||
|                 src="${ifDefined(item.metaIcon)}" |  | ||||||
|                 alt="${msg("Application Icon")}" |  | ||||||
|             />`; |  | ||||||
|         } |  | ||||||
|         return html`<span class="icon">${item?.name.charAt(0).toUpperCase()}</span>`; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     row(item: Application): TemplateResult[] { |     row(item: Application): TemplateResult[] { | ||||||
|         return [ |         return [ | ||||||
|             this.renderIcon(item), |             html`<ak-app-icon size=${PFSize.Medium} .app=${item}></ak-app-icon>`, | ||||||
|             html`<a href="#/core/applications/${item.slug}"> |             html`<a href="#/core/applications/${item.slug}"> | ||||||
|                 <div>${item.name}</div> |                 <div>${item.name}</div> | ||||||
|                 ${item.metaPublisher ? html`<small>${item.metaPublisher}</small>` : html``} |                 ${item.metaPublisher ? html`<small>${item.metaPublisher}</small>` : html``} | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ import "@goauthentik/admin/applications/ApplicationAuthorizeChart"; | |||||||
| import "@goauthentik/admin/applications/ApplicationCheckAccessForm"; | import "@goauthentik/admin/applications/ApplicationCheckAccessForm"; | ||||||
| import "@goauthentik/admin/applications/ApplicationForm"; | import "@goauthentik/admin/applications/ApplicationForm"; | ||||||
| import "@goauthentik/admin/policies/BoundPoliciesList"; | import "@goauthentik/admin/policies/BoundPoliciesList"; | ||||||
|  | import { PFSize } from "@goauthentik/app/elements/Spinner"; | ||||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||||
| import { AKElement } from "@goauthentik/elements/Base"; | import { AKElement } from "@goauthentik/elements/Base"; | ||||||
| import "@goauthentik/elements/EmptyState"; | import "@goauthentik/elements/EmptyState"; | ||||||
| @ -9,6 +10,7 @@ import "@goauthentik/elements/PageHeader"; | |||||||
| import "@goauthentik/elements/Tabs"; | import "@goauthentik/elements/Tabs"; | ||||||
| import "@goauthentik/elements/buttons/SpinnerButton"; | import "@goauthentik/elements/buttons/SpinnerButton"; | ||||||
| import "@goauthentik/elements/events/ObjectChangelog"; | import "@goauthentik/elements/events/ObjectChangelog"; | ||||||
|  | import "@goauthentik/user/LibraryApplication/AppIcon"; | ||||||
|  |  | ||||||
| import { msg } from "@lit/localize"; | import { msg } from "@lit/localize"; | ||||||
| import { CSSResult, TemplateResult, html } from "lit"; | import { CSSResult, TemplateResult, html } from "lit"; | ||||||
| @ -80,11 +82,15 @@ export class ApplicationViewPage extends AKElement { | |||||||
|  |  | ||||||
|     render(): TemplateResult { |     render(): TemplateResult { | ||||||
|         return html`<ak-page-header |         return html`<ak-page-header | ||||||
|                 icon=${this.application?.metaIcon || ""} |  | ||||||
|                 header=${this.application?.name || msg("Loading")} |                 header=${this.application?.name || msg("Loading")} | ||||||
|                 description=${ifDefined(this.application?.metaPublisher)} |                 description=${ifDefined(this.application?.metaPublisher)} | ||||||
|                 .iconImage=${true} |                 .iconImage=${true} | ||||||
|             > |             > | ||||||
|  |                 <ak-app-icon | ||||||
|  |                     size=${PFSize.Small} | ||||||
|  |                     slot="icon" | ||||||
|  |                     .app=${this.application} | ||||||
|  |                 ></ak-app-icon> | ||||||
|             </ak-page-header> |             </ak-page-header> | ||||||
|             ${this.renderApp()}`; |             ${this.renderApp()}`; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| import { AKElement } from "@goauthentik/elements/Base"; | import { AKElement } from "@goauthentik/elements/Base"; | ||||||
|  |  | ||||||
| import { msg } from "@lit/localize"; | import { msg } from "@lit/localize"; | ||||||
| import { CSSResult, TemplateResult, html } from "lit"; | import { CSSResult, TemplateResult, css, html } from "lit"; | ||||||
| import { customElement, property } from "lit/decorators.js"; | import { customElement, property } from "lit/decorators.js"; | ||||||
|  |  | ||||||
| import PFExpandableSection from "@patternfly/patternfly/components/ExpandableSection/expandable-section.css"; | import PFExpandableSection from "@patternfly/patternfly/components/ExpandableSection/expandable-section.css"; | ||||||
| @ -19,7 +19,15 @@ export class Expand extends AKElement { | |||||||
|     textClosed = msg("Show more"); |     textClosed = msg("Show more"); | ||||||
|  |  | ||||||
|     static get styles(): CSSResult[] { |     static get styles(): CSSResult[] { | ||||||
|         return [PFBase, PFExpandableSection]; |         return [ | ||||||
|  |             PFBase, | ||||||
|  |             PFExpandableSection, | ||||||
|  |             css` | ||||||
|  |                 .pf-c-expandable-section.pf-m-display-lg { | ||||||
|  |                     background-color: var(--pf-global--BackgroundColor--100); | ||||||
|  |                 } | ||||||
|  |             `, | ||||||
|  |         ]; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     render(): TemplateResult { |     render(): TemplateResult { | ||||||
|  | |||||||
| @ -91,6 +91,11 @@ export class PageHeader extends AKElement { | |||||||
|                 .notification-trigger.has-notifications { |                 .notification-trigger.has-notifications { | ||||||
|                     color: var(--pf-global--active-color--100); |                     color: var(--pf-global--active-color--100); | ||||||
|                 } |                 } | ||||||
|  |                 h1 { | ||||||
|  |                     display: flex; | ||||||
|  |                     flex-direction: row; | ||||||
|  |                     align-items: center !important; | ||||||
|  |                 } | ||||||
|             `, |             `, | ||||||
|         ]; |         ]; | ||||||
|     } |     } | ||||||
| @ -120,10 +125,10 @@ export class PageHeader extends AKElement { | |||||||
|     renderIcon(): TemplateResult { |     renderIcon(): TemplateResult { | ||||||
|         if (this.icon) { |         if (this.icon) { | ||||||
|             if (this.iconImage && !this.icon.startsWith("fa://")) { |             if (this.iconImage && !this.icon.startsWith("fa://")) { | ||||||
|                 return html`<img class="pf-icon" src="${this.icon}" alt="page icon" /> `; |                 return html`<img class="pf-icon" src="${this.icon}" alt="page icon" />`; | ||||||
|             } |             } | ||||||
|             const icon = this.icon.replaceAll("fa://", "fa "); |             const icon = this.icon.replaceAll("fa://", "fa "); | ||||||
|             return html`<i class=${icon}></i> `; |             return html`<i class=${icon}></i>`; | ||||||
|         } |         } | ||||||
|         return html``; |         return html``; | ||||||
|     } |     } | ||||||
| @ -147,7 +152,7 @@ export class PageHeader extends AKElement { | |||||||
|                 <section class="pf-c-page__main-section pf-m-light"> |                 <section class="pf-c-page__main-section pf-m-light"> | ||||||
|                     <div class="pf-c-content"> |                     <div class="pf-c-content"> | ||||||
|                         <h1> |                         <h1> | ||||||
|                             ${this.renderIcon()} |                             <slot name="icon">${this.renderIcon()}</slot>  | ||||||
|                             <slot name="header">${this.header}</slot> |                             <slot name="header">${this.header}</slot> | ||||||
|                         </h1> |                         </h1> | ||||||
|                         ${this.description ? html`<p>${this.description}</p>` : html``} |                         ${this.description ? html`<p>${this.description}</p>` : html``} | ||||||
|  | |||||||
							
								
								
									
										80
									
								
								web/src/user/LibraryApplication/AppIcon.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								web/src/user/LibraryApplication/AppIcon.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | |||||||
|  | import { AKElement } from "@goauthentik/app/elements/Base"; | ||||||
|  | import { PFSize } from "@goauthentik/app/elements/Spinner"; | ||||||
|  |  | ||||||
|  | import { msg } from "@lit/localize"; | ||||||
|  | import { CSSResult, TemplateResult, css, html } from "lit"; | ||||||
|  | import { customElement, property } from "lit/decorators.js"; | ||||||
|  | import { ifDefined } from "lit/directives/if-defined.js"; | ||||||
|  |  | ||||||
|  | import PFFAIcons from "@patternfly/patternfly/base/patternfly-fa-icons.css"; | ||||||
|  | import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css"; | ||||||
|  |  | ||||||
|  | import { Application } from "@goauthentik/api"; | ||||||
|  |  | ||||||
|  | @customElement("ak-app-icon") | ||||||
|  | export class AppIcon extends AKElement { | ||||||
|  |     @property({ attribute: false }) | ||||||
|  |     app?: Application; | ||||||
|  |  | ||||||
|  |     @property() | ||||||
|  |     size: PFSize = PFSize.Large; | ||||||
|  |  | ||||||
|  |     static get styles(): CSSResult[] { | ||||||
|  |         return [ | ||||||
|  |             PFFAIcons, | ||||||
|  |             PFAvatar, | ||||||
|  |             css` | ||||||
|  |                 :host([size="pf-m-lg"]) { | ||||||
|  |                     --icon-height: 4rem; | ||||||
|  |                     --icon-border: 0.25rem; | ||||||
|  |                 } | ||||||
|  |                 :host([size="pf-m-md"]) { | ||||||
|  |                     --icon-height: 2rem; | ||||||
|  |                     --icon-border: 0.125rem; | ||||||
|  |                 } | ||||||
|  |                 :host([size="pf-m-sm"]) { | ||||||
|  |                     --icon-height: 1rem; | ||||||
|  |                     --icon-border: 0.125rem; | ||||||
|  |                 } | ||||||
|  |                 .pf-c-avatar { | ||||||
|  |                     --pf-c-avatar--BorderRadius: 0; | ||||||
|  |                     --pf-c-avatar--Height: calc( | ||||||
|  |                         var(--icon-height) + var(--icon-border) + var(--icon-border) | ||||||
|  |                     ); | ||||||
|  |                     --pf-c-avatar--Width: calc( | ||||||
|  |                         var(--icon-height) + var(--icon-border) + var(--icon-border) | ||||||
|  |                     ); | ||||||
|  |                 } | ||||||
|  |                 .icon { | ||||||
|  |                     font-size: var(--icon-height); | ||||||
|  |                     color: var(--ak-global--Color--100); | ||||||
|  |                     padding: var(--icon-border); | ||||||
|  |                     max-height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border)); | ||||||
|  |                     line-height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border)); | ||||||
|  |                     filter: drop-shadow(5px 5px 5px rgba(128, 128, 128, 0.25)); | ||||||
|  |                 } | ||||||
|  |                 div { | ||||||
|  |                     height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border)); | ||||||
|  |                 } | ||||||
|  |             `, | ||||||
|  |         ]; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     render(): TemplateResult { | ||||||
|  |         if (!this.app) { | ||||||
|  |             return html`<div><i class="icon fas fa-question-circle"></i></div>`; | ||||||
|  |         } | ||||||
|  |         if (this.app?.metaIcon) { | ||||||
|  |             if (this.app.metaIcon.startsWith("fa://")) { | ||||||
|  |                 const icon = this.app.metaIcon.replaceAll("fa://", ""); | ||||||
|  |                 return html`<div><i class="icon fas ${icon}"></i></div>`; | ||||||
|  |             } | ||||||
|  |             return html`<img | ||||||
|  |                 class="icon pf-c-avatar" | ||||||
|  |                 src="${ifDefined(this.app.metaIcon)}" | ||||||
|  |                 alt="${msg("Application Icon")}" | ||||||
|  |             />`; | ||||||
|  |         } | ||||||
|  |         return html`<span class="icon">${this.app?.name.charAt(0).toUpperCase()}</span>`; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,6 +1,7 @@ | |||||||
| import { truncateWords } from "@goauthentik/common/utils"; | import { truncateWords } from "@goauthentik/common/utils"; | ||||||
| import { AKElement, rootInterface } from "@goauthentik/elements/Base"; | import { AKElement, rootInterface } from "@goauthentik/elements/Base"; | ||||||
| import "@goauthentik/elements/Expand"; | import "@goauthentik/elements/Expand"; | ||||||
|  | import "@goauthentik/user/LibraryApplication/AppIcon"; | ||||||
| import { UserInterface } from "@goauthentik/user/UserInterface"; | import { UserInterface } from "@goauthentik/user/UserInterface"; | ||||||
| 
 | 
 | ||||||
| import { msg } from "@lit/localize"; | import { msg } from "@lit/localize"; | ||||||
| @ -8,7 +9,6 @@ import { CSSResult, TemplateResult, css, html } from "lit"; | |||||||
| import { customElement, property } from "lit/decorators.js"; | import { customElement, property } from "lit/decorators.js"; | ||||||
| import { ifDefined } from "lit/directives/if-defined.js"; | import { ifDefined } from "lit/directives/if-defined.js"; | ||||||
| 
 | 
 | ||||||
| import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css"; |  | ||||||
| import PFButton from "@patternfly/patternfly/components/Button/button.css"; | import PFButton from "@patternfly/patternfly/components/Button/button.css"; | ||||||
| import PFCard from "@patternfly/patternfly/components/Card/card.css"; | import PFCard from "@patternfly/patternfly/components/Card/card.css"; | ||||||
| import PFBase from "@patternfly/patternfly/patternfly-base.css"; | import PFBase from "@patternfly/patternfly/patternfly-base.css"; | ||||||
| @ -31,24 +31,10 @@ export class LibraryApplication extends AKElement { | |||||||
|             PFBase, |             PFBase, | ||||||
|             PFCard, |             PFCard, | ||||||
|             PFButton, |             PFButton, | ||||||
|             PFAvatar, |  | ||||||
|             css` |             css` | ||||||
|                 :host { |  | ||||||
|                     --icon-height: 4rem; |  | ||||||
|                     --icon-border: 0.25rem; |  | ||||||
|                 } |  | ||||||
|                 .pf-c-card { |                 .pf-c-card { | ||||||
|                     --pf-c-card--BoxShadow: var(--pf-global--BoxShadow--md); |                     --pf-c-card--BoxShadow: var(--pf-global--BoxShadow--md); | ||||||
|                 } |                 } | ||||||
|                 .pf-c-avatar { |  | ||||||
|                     --pf-c-avatar--BorderRadius: 0; |  | ||||||
|                     --pf-c-avatar--Height: calc( |  | ||||||
|                         var(--icon-height) + var(--icon-border) + var(--icon-border) |  | ||||||
|                     ); |  | ||||||
|                     --pf-c-avatar--Width: calc( |  | ||||||
|                         var(--icon-height) + var(--icon-border) + var(--icon-border) |  | ||||||
|                     ); |  | ||||||
|                 } |  | ||||||
|                 .pf-c-card__header { |                 .pf-c-card__header { | ||||||
|                     justify-content: space-between; |                     justify-content: space-between; | ||||||
|                     flex-direction: column; |                     flex-direction: column; | ||||||
| @ -58,13 +44,8 @@ export class LibraryApplication extends AKElement { | |||||||
|                     flex-direction: column; |                     flex-direction: column; | ||||||
|                     justify-content: center; |                     justify-content: center; | ||||||
|                 } |                 } | ||||||
|                 .icon { |                 a:hover { | ||||||
|                     font-size: var(--icon-height); |                     text-decoration: none; | ||||||
|                     color: var(--ak-global--Color--100); |  | ||||||
|                     padding: var(--icon-border); |  | ||||||
|                     max-height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border)); |  | ||||||
|                     line-height: calc(var(--icon-height) + var(--icon-border) + var(--icon-border)); |  | ||||||
|                     filter: drop-shadow(5px 5px 5px rgba(128, 128, 128, 0.25)); |  | ||||||
|                 } |                 } | ||||||
|                 .expander { |                 .expander { | ||||||
|                     flex-grow: 1; |                     flex-grow: 1; | ||||||
| @ -80,21 +61,6 @@ export class LibraryApplication extends AKElement { | |||||||
|         ]; |         ]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     renderIcon(): TemplateResult { |  | ||||||
|         if (this.application?.metaIcon) { |  | ||||||
|             if (this.application.metaIcon.startsWith("fa://")) { |  | ||||||
|                 const icon = this.application.metaIcon.replaceAll("fa://", ""); |  | ||||||
|                 return html`<i class="icon fas ${icon}"></i>`; |  | ||||||
|             } |  | ||||||
|             return html`<img
 |  | ||||||
|                 class="icon pf-c-avatar" |  | ||||||
|                 src="${ifDefined(this.application.metaIcon)}" |  | ||||||
|                 alt="${msg("Application Icon")}" |  | ||||||
|             />`; |  | ||||||
|         } |  | ||||||
|         return html`<span class="icon">${this.application?.name.charAt(0).toUpperCase()}</span>`; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     render(): TemplateResult { |     render(): TemplateResult { | ||||||
|         if (!this.application) { |         if (!this.application) { | ||||||
|             return html`<ak-spinner></ak-spinner>`; |             return html`<ak-spinner></ak-spinner>`; | ||||||
| @ -111,7 +77,7 @@ export class LibraryApplication extends AKElement { | |||||||
|                     href="${ifDefined(this.application.launchUrl ?? "")}" |                     href="${ifDefined(this.application.launchUrl ?? "")}" | ||||||
|                     target="${ifDefined(this.application.openInNewTab ? "_blank" : undefined)}" |                     target="${ifDefined(this.application.openInNewTab ? "_blank" : undefined)}" | ||||||
|                 > |                 > | ||||||
|                     ${this.renderIcon()} |                     <ak-app-icon .app=${this.application}></ak-app-icon> | ||||||
|                 </a> |                 </a> | ||||||
|             </div> |             </div> | ||||||
|             <div class="pf-c-card__title"> |             <div class="pf-c-card__title"> | ||||||
| @ -5751,15 +5751,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -5828,6 +5819,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -6067,15 +6067,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -6144,6 +6135,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -5659,15 +5659,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -5736,6 +5727,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -5766,15 +5766,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -5843,6 +5834,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -5898,15 +5898,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -5975,6 +5966,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -6002,15 +6002,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -6079,6 +6070,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -5649,15 +5649,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -5726,6 +5717,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -618,9 +618,9 @@ | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="saa0e2675da69651b"> |       <trans-unit id="saa0e2675da69651b"> | ||||||
|         <source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source> |         <source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source> | ||||||
|         <target>未找到 URL "  |         <target>未找到 URL "  | ||||||
|         <x id="0" equiv-text="${this.url}"/>"。</target> |         <x id="0" equiv-text="${this.url}"/>"。</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s58cd9c2fe836d9c6"> |       <trans-unit id="s58cd9c2fe836d9c6"> | ||||||
| @ -1072,8 +1072,8 @@ | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="sa8384c9c26731f83"> |       <trans-unit id="sa8384c9c26731f83"> | ||||||
|         <source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source> |         <source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source> | ||||||
|         <target>要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。</target> |         <target>要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s55787f4dfcdce52b"> |       <trans-unit id="s55787f4dfcdce52b"> | ||||||
| @ -1819,8 +1819,8 @@ | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="sa90b7809586c35ce"> |       <trans-unit id="sa90b7809586c35ce"> | ||||||
|         <source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source> |         <source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source> | ||||||
|         <target>输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target> |         <target>输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s0410779cb47de312"> |       <trans-unit id="s0410779cb47de312"> | ||||||
| @ -3248,8 +3248,8 @@ doesn't pass when either or both of the selected options are equal or above the | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s76768bebabb7d543"> |       <trans-unit id="s76768bebabb7d543"> | ||||||
|         <source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source> |         <source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source> | ||||||
|         <target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target> |         <target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s026555347e589f0e"> |       <trans-unit id="s026555347e589f0e"> | ||||||
| @ -4046,8 +4046,8 @@ doesn't pass when either or both of the selected options are equal or above the | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s7b1fba26d245cb1c"> |       <trans-unit id="s7b1fba26d245cb1c"> | ||||||
|         <source>When using an external logging solution for archiving, this can be set to "minutes=5".</source> |         <source>When using an external logging solution for archiving, this can be set to "minutes=5".</source> | ||||||
|         <target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target> |         <target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s44536d20bb5c8257"> |       <trans-unit id="s44536d20bb5c8257"> | ||||||
| @ -4056,8 +4056,8 @@ doesn't pass when either or both of the selected options are equal or above the | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s3bb51cabb02b997e"> |       <trans-unit id="s3bb51cabb02b997e"> | ||||||
|         <source>Format: "weeks=3;days=2;hours=3,seconds=2".</source> |         <source>Format: "weeks=3;days=2;hours=3,seconds=2".</source> | ||||||
|         <target>格式:"weeks=3;days=2;hours=3,seconds=2"。</target> |         <target>格式:"weeks=3;days=2;hours=3,seconds=2"。</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s04bfd02201db5ab8"> |       <trans-unit id="s04bfd02201db5ab8"> | ||||||
| @ -4253,10 +4253,10 @@ doesn't pass when either or both of the selected options are equal or above the | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="sa95a538bfbb86111"> |       <trans-unit id="sa95a538bfbb86111"> | ||||||
|         <source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source> |         <source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source> | ||||||
|         <target>您确定要更新  |         <target>您确定要更新  | ||||||
|         <x id="0" equiv-text="${this.objectLabel}"/>"  |         <x id="0" equiv-text="${this.objectLabel}"/>"  | ||||||
|         <x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target> |         <x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="sc92d7cfb6ee1fec6"> |       <trans-unit id="sc92d7cfb6ee1fec6"> | ||||||
| @ -5372,7 +5372,7 @@ doesn't pass when either or both of the selected options are equal or above the | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="sdf1d8edef27236f0"> |       <trans-unit id="sdf1d8edef27236f0"> | ||||||
|         <source>A "roaming" authenticator, like a YubiKey</source> |         <source>A "roaming" authenticator, like a YubiKey</source> | ||||||
|         <target>像 YubiKey 这样的“漫游”身份验证器</target> |         <target>像 YubiKey 这样的“漫游”身份验证器</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
| @ -5712,10 +5712,10 @@ doesn't pass when either or both of the selected options are equal or above the | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s2d5f69929bb7221d"> |       <trans-unit id="s2d5f69929bb7221d"> | ||||||
|         <source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source> |         <source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source> | ||||||
|         <target> |         <target> | ||||||
|         <x id="0" equiv-text="${prompt.name}"/>("  |         <x id="0" equiv-text="${prompt.name}"/>("  | ||||||
|         <x id="1" equiv-text="${prompt.fieldKey}"/>",类型为  |         <x id="1" equiv-text="${prompt.fieldKey}"/>",类型为  | ||||||
|         <x id="2" equiv-text="${prompt.type}"/>)</target> |         <x id="2" equiv-text="${prompt.type}"/>)</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
| @ -5764,7 +5764,7 @@ doesn't pass when either or both of the selected options are equal or above the | |||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
|       <trans-unit id="s1608b2f94fa0dbd4"> |       <trans-unit id="s1608b2f94fa0dbd4"> | ||||||
|         <source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source> |         <source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source> | ||||||
|         <target>如果设置时长大于 0,用户可以选择“保持登录”选项,这将使用户的会话延长此处设置的时间。</target> |         <target>如果设置时长大于 0,用户可以选择“保持登录”选项,这将使用户的会话延长此处设置的时间。</target> | ||||||
|          |          | ||||||
|       </trans-unit> |       </trans-unit> | ||||||
| @ -7585,18 +7585,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
|   <target>用户类型</target> |   <target>用户类型</target> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
|   <target>默认用户</target> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
|   <target>外部用户</target> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
|   <target>服务账户</target> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
|   <target>已成功更新许可证。</target> |   <target>已成功更新许可证。</target> | ||||||
| @ -7688,6 +7676,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|   <target>安装许可证</target> |   <target>安装许可证</target> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -5704,15 +5704,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -5781,6 +5772,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -5703,15 +5703,6 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s9f9492d30a96b9c6"> | <trans-unit id="s9f9492d30a96b9c6"> | ||||||
|   <source>User type</source> |   <source>User type</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0b9a40b7b2853c7d"> |  | ||||||
|   <source>Default user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s35b9fa270f45b391"> |  | ||||||
|   <source>External user</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s1a635369edaf4dc3"> |  | ||||||
|   <source>Service account</source> |  | ||||||
| </trans-unit> |  | ||||||
| <trans-unit id="s0e427111d750cc02"> | <trans-unit id="s0e427111d750cc02"> | ||||||
|   <source>Successfully updated license.</source> |   <source>Successfully updated license.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
| @ -5780,6 +5771,21 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="s0285b4bd69130fa3"> | <trans-unit id="s0285b4bd69130fa3"> | ||||||
|   <source>Install License</source> |   <source>Install License</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="scef2eb6a2bfe3110"> | ||||||
|  |   <source>Internal users might be users such as company employees, which will get access to the full Enterprise feature set.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sf66389b04fcc219c"> | ||||||
|  |   <source>External users might be external consultants or B2C customers. These users don't get access to enterprise features.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s77e8668a27dbc402"> | ||||||
|  |   <source>Service accounts should be used for machine-to-machine authentication or other automations.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s28cbd874ba450b4e"> | ||||||
|  |   <source>Less details</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s8fa26f65aed77c96"> | ||||||
|  |   <source>More details</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Jens L
					Jens L