[mod] page:register

This commit is contained in:
roydfalk 2024-04-30 14:05:40 +02:00
parent 0f7f671341
commit b02584b128
3 changed files with 67 additions and 11 deletions

View file

@ -0,0 +1,12 @@
{
"meta": {
"identifier": "deu"
},
"tree": {
"register.flaw.password_too_short": "das Passwort muss mindestens {{minimum_length}} Zeichen haben",
"register.flaw.password_too_long": "das Passwort darf höchstens {{maximum_length}} Zeichen haben",
"register.flaw.password_lacks_letter": "das Passwort muss einen Buchstaben beinhalten",
"register.flaw.password_lacks_number": "das Passwort muss ein Zahl beinhalten",
"register.flaw.password_lacks_special_character": "das Passwort muss ein Sonderzeichen beinhalten"
}
}

View file

@ -44,12 +44,14 @@ namespace _espe.backend
path : string,
options : {
data ?: type_input;
custom_response_handlers ?: Record<int, ((output_data_raw : any) => Promise<type_output>)>;
} = {}
) : Promise<type_output>
{
options = Object.assign(
{
"data": null,
"custom_response_handlers": [],
},
options
);
@ -91,11 +93,16 @@ namespace _espe.backend
)
.then(
x => {
if ((x.status >= 200) && (x.status < 300)) {
return x.json();
if (x.status in options.custom_response_handlers) {
return x.json().then(output_data_raw => options.custom_response_handlers[x.status](output_data_raw));
}
else {
return Promise.reject<type_output>(new Error("unexpected response status code"));
if ((x.status >= 200) && (x.status < 300)) {
return x.json();
}
else {
return Promise.reject<type_output>(new Error("irregular response status code"));
}
}
}
)
@ -327,7 +334,14 @@ namespace _espe.backend
email_redirect_to_private_address : boolean;
password : (null | string);
}
) : Promise<void>
) : Promise<
Array<
{
incident : string;
details : Record<string, any>;
}
>
>
{
return (
abstract_call(
@ -341,6 +355,9 @@ namespace _espe.backend
),
{
"data": data,
"custom_response_handlers": {
409: (output_data_raw) => output_data_raw,
},
}
)
);

View file

@ -3,11 +3,20 @@ lib_plankton.zoo_page.register(
async (parameters, target_element) => {
function set_state(
state : ("load" | "fill" | "wait" | "done"),
message : (null | string) = null
messages : Array<string> = []
) : void
{
target_element.querySelector(".register").setAttribute("rel", state);
target_element.querySelector(".register-message").textContent = (message ?? "");
target_element.querySelector(".register-message").textContent = "";
let dom_list = document.createElement("ul");
messages.forEach(
message => {
let dom_message = document.createElement("li");
dom_message.textContent = message;
dom_list.appendChild(dom_message);
}
);
target_element.querySelector(".register-message").appendChild(dom_list);
}
const id : int = parseInt(parameters["id"]);
@ -113,13 +122,13 @@ lib_plankton.zoo_page.register(
password_confirmation : string;
} = await input.read();
if (value.password_value !== value.password_confirmation) {
alert("Die Passwörter stimmen nicht überein");
set_state("fill");
set_state("fill", ["Die Passwörter stimmen nicht überein"]);
}
else {
set_state("wait");
let flaws : Array<{incident : string; details : Record<string, any>;}>;
try {
await _espe.backend.member_register(
flaws = await _espe.backend.member_register(
id,
verification,
{
@ -131,9 +140,27 @@ lib_plankton.zoo_page.register(
);
}
catch (error) {
set_state("fill", "Da ist etwas schief gelaufen :/");
flaws = [
{"incident": "unhandled_error", "details": {}},
];
}
if (flaws.length > 0) {
set_state(
"fill",
flaws.map(
flaw => lib_plankton.string.coin(
"{{incident}} | {{details}}",
{
"incident": flaw.incident,
"details": JSON.stringify(flaw.details),
}
)
)
);
}
else {
set_state("done", ["Danke!"]);
}
set_state("done", "Danke!");
}
}
);