lib_plankton.zoo_page.register( "register", async (parameters, target_element) => { function set_state( state : ("load" | "fill" | "wait" | "done"), message : (null | string) = null ) : void { target_element.querySelector(".register").setAttribute("rel", state); target_element.querySelector(".register-message").textContent = (message ?? ""); } const id : int = parseInt(parameters["id"]); const verification : string = parameters["verification"]; // const verification : string = (new URLSearchParams(location.search)).get("verification"); update_nav({"mode": null}); const member_data : { name_real_value : string; name_real_index : int; name_login : string; email_address_veiled : string; email_address_nominal : string; } = await _espe.backend.member_info(id, verification); target_element.appendChild(template_request("register")); set_state("load"); // info { } // form { let input : lib_plankton.zoo_input.interface_input< { email_address : ("none" | "only_veiled" | "both"); email_redirect : boolean; password_value : string; password_confirmation : string; } >; // input { input = new lib_plankton.zoo_input.class_input_group( [ { "name": "email_address", "input": new lib_plankton.zoo_input.class_input_enumeration( [ {"value": "none", "label": "keine"}, {"value": "only_veiled", "label": "nur pseudonymisiert"}, {"value": "both", "label": "pseudonymisiert und namentlich"}, ] ), "label": "Partei-E-Mail-Adresse einrichten", "help": ( [ "Für Partei-Angelegenheiten möchten wir dir anbieten gesonderte E-Mail-Adressen zu verwenden.", lib_plankton.string.coin( "Deine namentliche E-Mail-Adresse würde lauten »{{email_address_nominal}}« und die pseudonymisierte »{{email_address_veiled}}«.", { "email_address_veiled": member_data.email_address_veiled, "email_address_nominal": member_data.email_address_nominal, } ), "Die Partei-E-Mail-Adressen können zum Empfangen von E-Mails verwendet werden. Falls es nötig werden sollte, dass du auch E-Mails mit über die Partei-Adresse verschicken kannst, wende dich bitte an den/die Mitgliederbeauftragte:n!", ] .join("\n\n") ) }, { "name": "email_redirect", "input": new lib_plankton.zoo_input.class_input_checkbox( ), "label": "eingehende E-Mails an private Adresse leiten", }, { "name": "password_value", "input": new lib_plankton.zoo_input.class_input_password( ), "label": "Passwort für Netz-Dienste", "help": "Das Passwort für die Anmeldung bei den Netz-Diensten.\n\nDu solltest dir merken oder geeignet abspeichern, was du hier einträgst.\n\nSolltest du dieses Passwort mal vergessen oder verlieren, hast du die Möglichkeit ein neues zu setzen.", }, { "name": "password_confirmation", "input": new lib_plankton.zoo_input.class_input_password( ), "label": "Passwort wiederholen", }, ] ); await input.setup(target_element.querySelector(".register-form-input") as HTMLElement); await input.write( { "email_address": "both", "email_redirect": true, "password_value": "", "password_confirmation": "", } ); } // actions { target_element.querySelector(".register-form-action-send").addEventListener( "click", async (event) => { const value : { email_address : ("none" | "only_veiled" | "both"); email_redirect : boolean; password_value : string; password_confirmation : string; } = await input.read(); if (value.password_value !== value.password_confirmation) { alert("Die Passwörter stimmen nicht überein"); set_state("fill"); } else { set_state("wait"); try { await _espe.backend.member_register( id, verification, { "email_use_veiled_address": (value.email_address !== "none"), "email_use_nominal_address": (value.email_address === "both"), "email_redirect_to_private_address": value.email_redirect, "password": value.password_value, } ); } catch (error) { set_state("fill", "Da ist etwas schief gelaufen :/"); } set_state("done", "Danke!"); } } ); } } }, );