flows/layouts (#2867)
|
@ -8,6 +8,12 @@
|
||||||
{% if flow.compatibility_mode and not inspector %}
|
{% if flow.compatibility_mode and not inspector %}
|
||||||
<script>ShadyDOM = { force: !navigator.webdriver };</script>
|
<script>ShadyDOM = { force: !navigator.webdriver };</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<script>
|
||||||
|
window.authentik = {};
|
||||||
|
window.authentik.flow = {
|
||||||
|
"layout": "{{ flow.layout }}",
|
||||||
|
};
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block head %}
|
{% block head %}
|
||||||
|
|
|
@ -72,6 +72,7 @@ class FlowSerializer(ModelSerializer):
|
||||||
"policy_engine_mode",
|
"policy_engine_mode",
|
||||||
"compatibility_mode",
|
"compatibility_mode",
|
||||||
"export_url",
|
"export_url",
|
||||||
|
"layout",
|
||||||
]
|
]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
"background": {"read_only": True},
|
"background": {"read_only": True},
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import TYPE_CHECKING, Optional
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
|
from django.db import models
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from rest_framework.fields import ChoiceField, DictField
|
from rest_framework.fields import ChoiceField, DictField
|
||||||
from rest_framework.serializers import CharField
|
from rest_framework.serializers import CharField
|
||||||
|
@ -17,6 +18,16 @@ PLAN_CONTEXT_URL = "url"
|
||||||
PLAN_CONTEXT_ATTRS = "attrs"
|
PLAN_CONTEXT_ATTRS = "attrs"
|
||||||
|
|
||||||
|
|
||||||
|
class FlowLayout(models.TextChoices):
|
||||||
|
"""Flow layouts"""
|
||||||
|
|
||||||
|
STACKED = "stacked"
|
||||||
|
CONTENT_LEFT = "content_left"
|
||||||
|
CONTENT_RIGHT = "content_right"
|
||||||
|
SIDEBAR_LEFT = "sidebar_left"
|
||||||
|
SIDEBAR_RIGHT = "sidebar_right"
|
||||||
|
|
||||||
|
|
||||||
class ChallengeTypes(Enum):
|
class ChallengeTypes(Enum):
|
||||||
"""Currently defined challenge types"""
|
"""Currently defined challenge types"""
|
||||||
|
|
||||||
|
@ -38,6 +49,7 @@ class ContextualFlowInfo(PassiveSerializer):
|
||||||
title = CharField(required=False, allow_blank=True)
|
title = CharField(required=False, allow_blank=True)
|
||||||
background = CharField(required=False)
|
background = CharField(required=False)
|
||||||
cancel_url = CharField()
|
cancel_url = CharField()
|
||||||
|
layout = ChoiceField(choices=[(x.value, x.name) for x in FlowLayout])
|
||||||
|
|
||||||
|
|
||||||
class Challenge(PassiveSerializer):
|
class Challenge(PassiveSerializer):
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
# Generated by Django 4.0.4 on 2022-05-15 19:17
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("authentik_flows", "0021_auto_20211227_2103"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="flow",
|
||||||
|
name="layout",
|
||||||
|
field=models.TextField(
|
||||||
|
choices=[
|
||||||
|
("stacked", "Stacked"),
|
||||||
|
("content_left", "Content Left"),
|
||||||
|
("content_right", "Content Right"),
|
||||||
|
("sidebar_left", "Sidebar Left"),
|
||||||
|
("sidebar_right", "Sidebar Right"),
|
||||||
|
],
|
||||||
|
default="stacked",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
|
@ -13,6 +13,7 @@ from structlog.stdlib import get_logger
|
||||||
|
|
||||||
from authentik.core.models import Token
|
from authentik.core.models import Token
|
||||||
from authentik.core.types import UserSettingSerializer
|
from authentik.core.types import UserSettingSerializer
|
||||||
|
from authentik.flows.challenge import FlowLayout
|
||||||
from authentik.lib.models import InheritanceForeignKey, SerializerModel
|
from authentik.lib.models import InheritanceForeignKey, SerializerModel
|
||||||
from authentik.policies.models import PolicyBindingModel
|
from authentik.policies.models import PolicyBindingModel
|
||||||
|
|
||||||
|
@ -107,6 +108,7 @@ class Flow(SerializerModel, PolicyBindingModel):
|
||||||
slug = models.SlugField(unique=True, help_text=_("Visible in the URL."))
|
slug = models.SlugField(unique=True, help_text=_("Visible in the URL."))
|
||||||
|
|
||||||
title = models.TextField(help_text=_("Shown as the Title in Flow pages."))
|
title = models.TextField(help_text=_("Shown as the Title in Flow pages."))
|
||||||
|
layout = models.TextField(default=FlowLayout.STACKED, choices=FlowLayout.choices)
|
||||||
|
|
||||||
designation = models.CharField(
|
designation = models.CharField(
|
||||||
max_length=100,
|
max_length=100,
|
||||||
|
|
|
@ -144,6 +144,7 @@ class ChallengeStageView(StageView):
|
||||||
"title": self.format_title(),
|
"title": self.format_title(),
|
||||||
"background": self.executor.flow.background_url,
|
"background": self.executor.flow.background_url,
|
||||||
"cancel_url": reverse("authentik_flows:cancel"),
|
"cancel_url": reverse("authentik_flows:cancel"),
|
||||||
|
"layout": self.executor.flow.layout,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
flow_info.is_valid()
|
flow_info.is_valid()
|
||||||
|
|
|
@ -55,6 +55,7 @@ class TestFlowInspector(APITestCase):
|
||||||
"background": flow.background_url,
|
"background": flow.background_url,
|
||||||
"cancel_url": reverse("authentik_flows:cancel"),
|
"cancel_url": reverse("authentik_flows:cancel"),
|
||||||
"title": "",
|
"title": "",
|
||||||
|
"layout": "stacked",
|
||||||
},
|
},
|
||||||
"type": ChallengeTypes.NATIVE.value,
|
"type": ChallengeTypes.NATIVE.value,
|
||||||
"password_fields": False,
|
"password_fields": False,
|
||||||
|
|
|
@ -46,6 +46,7 @@ class AuthenticatorSMSStageTests(APITestCase):
|
||||||
"background": self.flow.background_url,
|
"background": self.flow.background_url,
|
||||||
"cancel_url": reverse("authentik_flows:cancel"),
|
"cancel_url": reverse("authentik_flows:cancel"),
|
||||||
"title": "",
|
"title": "",
|
||||||
|
"layout": "stacked",
|
||||||
},
|
},
|
||||||
"pending_user": "foo",
|
"pending_user": "foo",
|
||||||
"pending_user_avatar": "/static/dist/assets/images/user_default.png",
|
"pending_user_avatar": "/static/dist/assets/images/user_default.png",
|
||||||
|
|
17
schema.yml
|
@ -20511,8 +20511,11 @@ components:
|
||||||
type: string
|
type: string
|
||||||
cancel_url:
|
cancel_url:
|
||||||
type: string
|
type: string
|
||||||
|
layout:
|
||||||
|
$ref: '#/components/schemas/LayoutEnum'
|
||||||
required:
|
required:
|
||||||
- cancel_url
|
- cancel_url
|
||||||
|
- layout
|
||||||
Coordinate:
|
Coordinate:
|
||||||
type: object
|
type: object
|
||||||
description: Coordinates for diagrams
|
description: Coordinates for diagrams
|
||||||
|
@ -21473,6 +21476,8 @@ components:
|
||||||
export_url:
|
export_url:
|
||||||
type: string
|
type: string
|
||||||
readOnly: true
|
readOnly: true
|
||||||
|
layout:
|
||||||
|
$ref: '#/components/schemas/LayoutEnum'
|
||||||
required:
|
required:
|
||||||
- background
|
- background
|
||||||
- cache_count
|
- cache_count
|
||||||
|
@ -21608,6 +21613,8 @@ components:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Enable compatibility mode, increases compatibility with password
|
description: Enable compatibility mode, increases compatibility with password
|
||||||
managers on mobile devices.
|
managers on mobile devices.
|
||||||
|
layout:
|
||||||
|
$ref: '#/components/schemas/LayoutEnum'
|
||||||
required:
|
required:
|
||||||
- designation
|
- designation
|
||||||
- name
|
- name
|
||||||
|
@ -22815,6 +22822,14 @@ components:
|
||||||
- name
|
- name
|
||||||
- server_uri
|
- server_uri
|
||||||
- slug
|
- slug
|
||||||
|
LayoutEnum:
|
||||||
|
enum:
|
||||||
|
- stacked
|
||||||
|
- content_left
|
||||||
|
- content_right
|
||||||
|
- sidebar_left
|
||||||
|
- sidebar_right
|
||||||
|
type: string
|
||||||
Link:
|
Link:
|
||||||
type: object
|
type: object
|
||||||
description: Returns a single link
|
description: Returns a single link
|
||||||
|
@ -27108,6 +27123,8 @@ components:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: Enable compatibility mode, increases compatibility with password
|
description: Enable compatibility mode, increases compatibility with password
|
||||||
managers on mobile devices.
|
managers on mobile devices.
|
||||||
|
layout:
|
||||||
|
$ref: '#/components/schemas/LayoutEnum'
|
||||||
PatchedFlowStageBindingRequest:
|
PatchedFlowStageBindingRequest:
|
||||||
type: object
|
type: object
|
||||||
description: FlowStageBinding Serializer
|
description: FlowStageBinding Serializer
|
||||||
|
|
Before Width: | Height: | Size: 809 KiB After Width: | Height: | Size: 824 KiB |
|
@ -20,6 +20,7 @@ import {
|
||||||
CurrentTenant,
|
CurrentTenant,
|
||||||
FlowChallengeResponseRequest,
|
FlowChallengeResponseRequest,
|
||||||
FlowsApi,
|
FlowsApi,
|
||||||
|
LayoutEnum,
|
||||||
RedirectChallenge,
|
RedirectChallenge,
|
||||||
ShellChallenge,
|
ShellChallenge,
|
||||||
} from "@goauthentik/api";
|
} from "@goauthentik/api";
|
||||||
|
@ -38,6 +39,14 @@ import "./stages/captcha/CaptchaStage";
|
||||||
import "./stages/identification/IdentificationStage";
|
import "./stages/identification/IdentificationStage";
|
||||||
import "./stages/password/PasswordStage";
|
import "./stages/password/PasswordStage";
|
||||||
|
|
||||||
|
export interface FlowWindow extends Window {
|
||||||
|
authentik: {
|
||||||
|
flow: {
|
||||||
|
layout: LayoutEnum;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@customElement("ak-flow-executor")
|
@customElement("ak-flow-executor")
|
||||||
export class FlowExecutor extends LitElement implements StageHost {
|
export class FlowExecutor extends LitElement implements StageHost {
|
||||||
flowSlug?: string;
|
flowSlug?: string;
|
||||||
|
@ -100,6 +109,44 @@ export class FlowExecutor extends LitElement implements StageHost {
|
||||||
.pf-c-drawer__content {
|
.pf-c-drawer__content {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
/* layouts */
|
||||||
|
.pf-c-login__container.content-right {
|
||||||
|
grid-template-areas:
|
||||||
|
"header main"
|
||||||
|
"footer main"
|
||||||
|
". main";
|
||||||
|
}
|
||||||
|
.pf-c-login.sidebar_left {
|
||||||
|
justify-content: flex-start;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
.pf-c-login.sidebar_left .ak-login-container,
|
||||||
|
.pf-c-login.sidebar_right .ak-login-container {
|
||||||
|
height: 100vh;
|
||||||
|
background-color: var(--pf-c-login__main--BackgroundColor);
|
||||||
|
padding-left: var(--pf-global--spacer--lg);
|
||||||
|
padding-right: var(--pf-global--spacer--lg);
|
||||||
|
}
|
||||||
|
.pf-c-login.sidebar_left .pf-c-list,
|
||||||
|
.pf-c-login.sidebar_right .pf-c-list {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
.pf-c-login.sidebar_left .ak-login-container,
|
||||||
|
.pf-c-login.sidebar_right .ak-login-container {
|
||||||
|
background-color: var(--ak-dark-background);
|
||||||
|
}
|
||||||
|
.pf-c-login.sidebar_left .pf-c-list,
|
||||||
|
.pf-c-login.sidebar_right .pf-c-list {
|
||||||
|
color: var(--ak-dark-foreground);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.pf-c-login.sidebar_right {
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,6 +419,27 @@ export class FlowExecutor extends LitElement implements StageHost {
|
||||||
></ak-flow-inspector>`;
|
></ak-flow-inspector>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getLayout(): string {
|
||||||
|
const prefilledFlow = (window as unknown as FlowWindow).authentik.flow.layout;
|
||||||
|
if (this.challenge) {
|
||||||
|
return this.challenge?.flowInfo?.layout || prefilledFlow;
|
||||||
|
}
|
||||||
|
return prefilledFlow;
|
||||||
|
}
|
||||||
|
|
||||||
|
getLayoutClass(): string {
|
||||||
|
const layout = this.getLayout();
|
||||||
|
switch (layout) {
|
||||||
|
case LayoutEnum.ContentLeft:
|
||||||
|
return "pf-c-login__container";
|
||||||
|
case LayoutEnum.ContentRight:
|
||||||
|
return "pf-c-login__container content-right";
|
||||||
|
case LayoutEnum.Stacked:
|
||||||
|
default:
|
||||||
|
return "ak-login-container";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render(): TemplateResult {
|
render(): TemplateResult {
|
||||||
return html`<div class="pf-c-background-image">
|
return html`<div class="pf-c-background-image">
|
||||||
<svg
|
<svg
|
||||||
|
@ -409,8 +477,8 @@ export class FlowExecutor extends LitElement implements StageHost {
|
||||||
<div class="pf-c-drawer__main">
|
<div class="pf-c-drawer__main">
|
||||||
<div class="pf-c-drawer__content">
|
<div class="pf-c-drawer__content">
|
||||||
<div class="pf-c-drawer__body">
|
<div class="pf-c-drawer__body">
|
||||||
<div class="pf-c-login">
|
<div class="pf-c-login ${this.getLayout()}">
|
||||||
<div class="ak-login-container">
|
<div class="${this.getLayoutClass()}">
|
||||||
<header class="pf-c-login__header">
|
<header class="pf-c-login__header">
|
||||||
<div class="pf-c-brand ak-brand">
|
<div class="pf-c-brand ak-brand">
|
||||||
<img
|
<img
|
||||||
|
|
|
@ -1146,6 +1146,14 @@ msgstr "Schlüssel"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "Geheimniss"
|
msgstr "Geheimniss"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2792,6 +2800,10 @@ msgstr "Starten"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "Start URL"
|
msgstr "Start URL"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "Lassen Sie den Benutzer sich mit seinem Benutzernamen oder seiner E-Mail-Adresse identifizieren."
|
msgstr "Lassen Sie den Benutzer sich mit seinem Benutzernamen oder seiner E-Mail-Adresse identifizieren."
|
||||||
|
@ -4623,6 +4635,14 @@ msgstr "Bezeichnungen der Quellen anzeigen"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "Wird als Titel auf den Ablaufseiten angezeigt."
|
msgstr "Wird als Titel auf den Ablaufseiten angezeigt."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "Anmelden."
|
msgstr "Anmelden."
|
||||||
|
@ -4705,6 +4725,10 @@ msgstr "Spanisch"
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "Geben Sie mehrere Server-URIs an, indem Sie sie durch ein Komma trennen."
|
msgstr "Geben Sie mehrere Server-URIs an, indem Sie sie durch ein Komma trennen."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1155,6 +1155,14 @@ msgstr "Consumer key"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "Consumer secret"
|
msgstr "Consumer secret"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr "Content left"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr "Content right"
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2843,6 +2851,10 @@ msgstr "Launch"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "Launch URL"
|
msgstr "Launch URL"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr "Layout"
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "Let the user identify themselves with their username or Email address."
|
msgstr "Let the user identify themselves with their username or Email address."
|
||||||
|
@ -4711,6 +4723,14 @@ msgstr "Show sources' labels"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "Shown as the Title in Flow pages."
|
msgstr "Shown as the Title in Flow pages."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr "Sidebar left"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr "Sidebar right"
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "Sign up."
|
msgstr "Sign up."
|
||||||
|
@ -4799,6 +4819,10 @@ msgstr "Spanish"
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "Specify multiple server URIs by separating them with a comma."
|
msgstr "Specify multiple server URIs by separating them with a comma."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr "Stacked"
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1137,6 +1137,14 @@ msgstr "Clave de consumidor"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "Secreto del consumidor"
|
msgstr "Secreto del consumidor"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2785,6 +2793,10 @@ msgstr "Lanzamiento"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "URL de lanzamiento"
|
msgstr "URL de lanzamiento"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "Permite que el usuario se identifique con su nombre de usuario o dirección de correo electrónico."
|
msgstr "Permite que el usuario se identifique con su nombre de usuario o dirección de correo electrónico."
|
||||||
|
@ -4616,6 +4628,14 @@ msgstr "Mostrar etiquetas de fuentes"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "Se muestra como título en las páginas de flujo."
|
msgstr "Se muestra como título en las páginas de flujo."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "Inscríbete."
|
msgstr "Inscríbete."
|
||||||
|
@ -4698,6 +4718,10 @@ msgstr ""
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "Especifique los URI de varios servidores separándolos con una coma."
|
msgstr "Especifique los URI de varios servidores separándolos con una coma."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1148,6 +1148,14 @@ msgstr "Clé consumer"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "Secret consumer"
|
msgstr "Secret consumer"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2816,6 +2824,10 @@ msgstr "Lancer"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "URL de lancement"
|
msgstr "URL de lancement"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "Laisser l'utilisateur s'identifier lui-même avec son nom d'utilisateur ou son adresse e-mail."
|
msgstr "Laisser l'utilisateur s'identifier lui-même avec son nom d'utilisateur ou son adresse e-mail."
|
||||||
|
@ -4665,6 +4677,14 @@ msgstr ""
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "Afficher comme Titre dans les pages de Flux."
|
msgstr "Afficher comme Titre dans les pages de Flux."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "S'enregistrer."
|
msgstr "S'enregistrer."
|
||||||
|
@ -4751,6 +4771,10 @@ msgstr ""
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1134,6 +1134,14 @@ msgstr "Klucz klienta"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "Sekret klienta"
|
msgstr "Sekret klienta"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2782,6 +2790,10 @@ msgstr "Uruchom"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "URL uruchamiania"
|
msgstr "URL uruchamiania"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "Pozwól użytkownikowi identyfikować się za pomocą swojej nazwy użytkownika lub adresu e-mail."
|
msgstr "Pozwól użytkownikowi identyfikować się za pomocą swojej nazwy użytkownika lub adresu e-mail."
|
||||||
|
@ -4613,6 +4625,14 @@ msgstr "Pokaż etykiety źródeł"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "Wyświetlany jako tytuł na stronach przepływu."
|
msgstr "Wyświetlany jako tytuł na stronach przepływu."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "Zapisz się."
|
msgstr "Zapisz się."
|
||||||
|
@ -4695,6 +4715,10 @@ msgstr "Hiszpański"
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "Określ wiele identyfikatorów URI serwera, oddzielając je przecinkami."
|
msgstr "Określ wiele identyfikatorów URI serwera, oddzielając je przecinkami."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1143,6 +1143,14 @@ msgstr ""
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2825,6 +2833,10 @@ msgstr ""
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -4691,6 +4703,14 @@ msgstr ""
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -4779,6 +4799,10 @@ msgstr ""
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1137,6 +1137,14 @@ msgstr "Tüketici anahtarı"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "Tüketici sırrı"
|
msgstr "Tüketici sırrı"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2786,6 +2794,10 @@ msgstr "Eriş"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "URL Başlat"
|
msgstr "URL Başlat"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "Kullanıcının kullanıcı adı veya E-posta adresi ile kendilerini tanımlamasına izin verin."
|
msgstr "Kullanıcının kullanıcı adı veya E-posta adresi ile kendilerini tanımlamasına izin verin."
|
||||||
|
@ -4618,6 +4630,14 @@ msgstr "Kaynakların etiketlerini göster"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "Akış sayfalarında Başlık olarak gösterilir."
|
msgstr "Akış sayfalarında Başlık olarak gösterilir."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "Kaydolun."
|
msgstr "Kaydolun."
|
||||||
|
@ -4700,6 +4720,10 @@ msgstr ""
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "Birden çok sunucu URI'lerini virgülle ayırarak belirtin."
|
msgstr "Birden çok sunucu URI'lerini virgülle ayırarak belirtin."
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1132,6 +1132,14 @@ msgstr "消费者 Key"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "消费者 Secret"
|
msgstr "消费者 Secret"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2770,6 +2778,10 @@ msgstr "启动"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "启动 URL"
|
msgstr "启动 URL"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "让用户使用用户名或电子邮件地址来标识自己。"
|
msgstr "让用户使用用户名或电子邮件地址来标识自己。"
|
||||||
|
@ -4582,6 +4594,14 @@ msgstr "显示源的标签"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "显示为流程页面中的标题。"
|
msgstr "显示为流程页面中的标题。"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "注册。"
|
msgstr "注册。"
|
||||||
|
@ -4664,6 +4684,10 @@ msgstr "西班牙语"
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "通过用逗号分隔多个服务器 URI 来指定它们。"
|
msgstr "通过用逗号分隔多个服务器 URI 来指定它们。"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1134,6 +1134,14 @@ msgstr "消费者密钥"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "消费者机密"
|
msgstr "消费者机密"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2772,6 +2780,10 @@ msgstr "启动"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "启动 URL"
|
msgstr "启动 URL"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "让用户使用其用户名或电子邮件地址来标识自己。"
|
msgstr "让用户使用其用户名或电子邮件地址来标识自己。"
|
||||||
|
@ -4586,6 +4598,14 @@ msgstr "显示源的标签"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "显示为 “Flow” 页面中的标题。"
|
msgstr "显示为 “Flow” 页面中的标题。"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "注册。"
|
msgstr "注册。"
|
||||||
|
@ -4668,6 +4688,10 @@ msgstr "西班牙的"
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "通过用逗号分隔多个服务器 URI 来指定它们。"
|
msgstr "通过用逗号分隔多个服务器 URI 来指定它们。"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -1134,6 +1134,14 @@ msgstr "消费者密钥"
|
||||||
msgid "Consumer secret"
|
msgid "Consumer secret"
|
||||||
msgstr "消费者机密"
|
msgstr "消费者机密"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Content right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
#: src/pages/events/EventInfo.ts
|
#: src/pages/events/EventInfo.ts
|
||||||
|
@ -2772,6 +2780,10 @@ msgstr "启动"
|
||||||
msgid "Launch URL"
|
msgid "Launch URL"
|
||||||
msgstr "启动 URL"
|
msgstr "启动 URL"
|
||||||
|
|
||||||
|
#: src/pages/flows/FlowForm.ts
|
||||||
|
msgid "Layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/stages/identification/IdentificationStageForm.ts
|
#: src/pages/stages/identification/IdentificationStageForm.ts
|
||||||
msgid "Let the user identify themselves with their username or Email address."
|
msgid "Let the user identify themselves with their username or Email address."
|
||||||
msgstr "让用户使用其用户名或电子邮件地址来标识自己。"
|
msgstr "让用户使用其用户名或电子邮件地址来标识自己。"
|
||||||
|
@ -4586,6 +4598,14 @@ msgstr "显示源的标签"
|
||||||
msgid "Shown as the Title in Flow pages."
|
msgid "Shown as the Title in Flow pages."
|
||||||
msgstr "显示为 “Flow” 页面中的标题。"
|
msgstr "显示为 “Flow” 页面中的标题。"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Sidebar right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/flows/stages/identification/IdentificationStage.ts
|
#: src/flows/stages/identification/IdentificationStage.ts
|
||||||
msgid "Sign up."
|
msgid "Sign up."
|
||||||
msgstr "注册。"
|
msgstr "注册。"
|
||||||
|
@ -4668,6 +4688,10 @@ msgstr "西班牙的"
|
||||||
msgid "Specify multiple server URIs by separating them with a comma."
|
msgid "Specify multiple server URIs by separating them with a comma."
|
||||||
msgstr "通过用逗号分隔多个服务器 URI 来指定它们。"
|
msgstr "通过用逗号分隔多个服务器 URI 来指定它们。"
|
||||||
|
|
||||||
|
#: src/pages/flows/utils.ts
|
||||||
|
msgid "Stacked"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/pages/flows/BoundStagesList.ts
|
#: src/pages/flows/BoundStagesList.ts
|
||||||
#: src/pages/flows/StageBindingForm.ts
|
#: src/pages/flows/StageBindingForm.ts
|
||||||
msgid "Stage"
|
msgid "Stage"
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
Flow,
|
Flow,
|
||||||
FlowDesignationEnum,
|
FlowDesignationEnum,
|
||||||
FlowsApi,
|
FlowsApi,
|
||||||
|
LayoutEnum,
|
||||||
PolicyEngineMode,
|
PolicyEngineMode,
|
||||||
} from "@goauthentik/api";
|
} from "@goauthentik/api";
|
||||||
|
|
||||||
|
@ -17,7 +18,7 @@ import { DEFAULT_CONFIG, config } from "../../api/Config";
|
||||||
import "../../elements/forms/HorizontalFormElement";
|
import "../../elements/forms/HorizontalFormElement";
|
||||||
import { ModelForm } from "../../elements/forms/ModelForm";
|
import { ModelForm } from "../../elements/forms/ModelForm";
|
||||||
import { first } from "../../utils";
|
import { first } from "../../utils";
|
||||||
import { DesignationToLabel } from "./utils";
|
import { DesignationToLabel, LayoutToLabel } from "./utils";
|
||||||
|
|
||||||
@customElement("ak-flow-form")
|
@customElement("ak-flow-form")
|
||||||
export class FlowForm extends ModelForm<Flow, string> {
|
export class FlowForm extends ModelForm<Flow, string> {
|
||||||
|
@ -118,6 +119,41 @@ export class FlowForm extends ModelForm<Flow, string> {
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderLayout(): TemplateResult {
|
||||||
|
return html`
|
||||||
|
<option
|
||||||
|
value=${LayoutEnum.Stacked}
|
||||||
|
?selected=${this.instance?.layout === LayoutEnum.Stacked}
|
||||||
|
>
|
||||||
|
${LayoutToLabel(LayoutEnum.Stacked)}
|
||||||
|
</option>
|
||||||
|
<option
|
||||||
|
value=${LayoutEnum.ContentLeft}
|
||||||
|
?selected=${this.instance?.layout === LayoutEnum.ContentLeft}
|
||||||
|
>
|
||||||
|
${LayoutToLabel(LayoutEnum.ContentLeft)}
|
||||||
|
</option>
|
||||||
|
<option
|
||||||
|
value=${LayoutEnum.ContentRight}
|
||||||
|
?selected=${this.instance?.layout === LayoutEnum.ContentRight}
|
||||||
|
>
|
||||||
|
${LayoutToLabel(LayoutEnum.ContentRight)}
|
||||||
|
</option>
|
||||||
|
<option
|
||||||
|
value=${LayoutEnum.SidebarLeft}
|
||||||
|
?selected=${this.instance?.layout === LayoutEnum.SidebarLeft}
|
||||||
|
>
|
||||||
|
${LayoutToLabel(LayoutEnum.SidebarLeft)}
|
||||||
|
</option>
|
||||||
|
<option
|
||||||
|
value=${LayoutEnum.SidebarRight}
|
||||||
|
?selected=${this.instance?.layout === LayoutEnum.SidebarRight}
|
||||||
|
>
|
||||||
|
${LayoutToLabel(LayoutEnum.SidebarRight)}
|
||||||
|
</option>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
renderForm(): TemplateResult {
|
renderForm(): TemplateResult {
|
||||||
return html`<form class="pf-c-form pf-m-horizontal">
|
return html`<form class="pf-c-form pf-m-horizontal">
|
||||||
<ak-form-element-horizontal label=${t`Name`} ?required=${true} name="name">
|
<ak-form-element-horizontal label=${t`Name`} ?required=${true} name="name">
|
||||||
|
@ -181,6 +217,11 @@ export class FlowForm extends ModelForm<Flow, string> {
|
||||||
${t`Decides what this Flow is used for. For example, the Authentication flow is redirect to when an un-authenticated user visits authentik.`}
|
${t`Decides what this Flow is used for. For example, the Authentication flow is redirect to when an un-authenticated user visits authentik.`}
|
||||||
</p>
|
</p>
|
||||||
</ak-form-element-horizontal>
|
</ak-form-element-horizontal>
|
||||||
|
<ak-form-element-horizontal label=${t`Layout`} ?required=${true} name="layout">
|
||||||
|
<select class="pf-c-form-control">
|
||||||
|
${this.renderLayout()}
|
||||||
|
</select>
|
||||||
|
</ak-form-element-horizontal>
|
||||||
${until(
|
${until(
|
||||||
config().then((c) => {
|
config().then((c) => {
|
||||||
if (c.capabilities.includes(CapabilitiesEnum.SaveMedia)) {
|
if (c.capabilities.includes(CapabilitiesEnum.SaveMedia)) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { t } from "@lingui/macro";
|
import { t } from "@lingui/macro";
|
||||||
|
|
||||||
import { FlowDesignationEnum } from "@goauthentik/api";
|
import { FlowDesignationEnum, LayoutEnum } from "@goauthentik/api";
|
||||||
|
|
||||||
export function DesignationToLabel(designation: FlowDesignationEnum): string {
|
export function DesignationToLabel(designation: FlowDesignationEnum): string {
|
||||||
switch (designation) {
|
switch (designation) {
|
||||||
|
@ -20,3 +20,18 @@ export function DesignationToLabel(designation: FlowDesignationEnum): string {
|
||||||
return t`Unenrollment`;
|
return t`Unenrollment`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function LayoutToLabel(layout: LayoutEnum): string {
|
||||||
|
switch (layout) {
|
||||||
|
case LayoutEnum.Stacked:
|
||||||
|
return t`Stacked`;
|
||||||
|
case LayoutEnum.ContentLeft:
|
||||||
|
return t`Content left`;
|
||||||
|
case LayoutEnum.ContentRight:
|
||||||
|
return t`Content right`;
|
||||||
|
case LayoutEnum.SidebarLeft:
|
||||||
|
return t`Sidebar left`;
|
||||||
|
case LayoutEnum.SidebarRight:
|
||||||
|
return t`Sidebar right`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
title: Layouts
|
||||||
|
---
|
||||||
|
|
||||||
|
Starting with authentik 2022.5, the layout of the default flow executor can be changed. Below are examples for the available options:
|
||||||
|
|
||||||
|
### Stacked (default)
|
||||||
|
|
||||||
|
![](./layouts/stacked.png)
|
||||||
|
|
||||||
|
### Content besides logo (left)
|
||||||
|
|
||||||
|
![](./layouts/content_left.png)
|
||||||
|
|
||||||
|
### Content besides logo (right)
|
||||||
|
|
||||||
|
![](./layouts/content_right.png)
|
||||||
|
|
||||||
|
### Sidebar (left)
|
||||||
|
|
||||||
|
![](./layouts/sidebar_left.png)
|
||||||
|
|
||||||
|
### Sidebar (right)
|
||||||
|
|
||||||
|
![](./layouts/sidebar_right.png)
|
After Width: | Height: | Size: 10 MiB |
After Width: | Height: | Size: 10 MiB |
After Width: | Height: | Size: 8.2 MiB |
After Width: | Height: | Size: 8.2 MiB |
After Width: | Height: | Size: 10 MiB |
|
@ -84,6 +84,7 @@ module.exports = {
|
||||||
label: "Flows",
|
label: "Flows",
|
||||||
items: [
|
items: [
|
||||||
"flow/index",
|
"flow/index",
|
||||||
|
"flow/layouts",
|
||||||
"flow/inspector",
|
"flow/inspector",
|
||||||
"flow/examples",
|
"flow/examples",
|
||||||
{
|
{
|
||||||
|
|