[mod] aufgeräumt
This commit is contained in:
parent
15fa634056
commit
2a44a115ba
16 changed files with 424 additions and 462 deletions
|
@ -211,12 +211,24 @@ namespace _espe.backend
|
|||
/**
|
||||
*/
|
||||
export async function member_list(
|
||||
) : Promise<Array<any>>
|
||||
search_term : (null | string)
|
||||
) : Promise<
|
||||
Array<
|
||||
{
|
||||
id : int;
|
||||
preview : {
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
name_real_index : int;
|
||||
};
|
||||
}
|
||||
>
|
||||
>
|
||||
{
|
||||
return (
|
||||
abstract_call(
|
||||
"GET",
|
||||
"/member"
|
||||
("/member/list" + ((search_term === null) ? "" : ("?search_term=" + search_term)))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -226,11 +238,49 @@ namespace _espe.backend
|
|||
*/
|
||||
export async function member_get(
|
||||
id : int
|
||||
) : Promise<any>
|
||||
) : Promise<
|
||||
{
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
name_real_index : int;
|
||||
email_address_private : (null | string);
|
||||
registered : boolean;
|
||||
enabled : boolean;
|
||||
email_use_veiled_address : boolean;
|
||||
email_use_nominal_address : boolean;
|
||||
email_redirect_to_private_address : boolean;
|
||||
email_allow_sending : boolean;
|
||||
password_set : boolean;
|
||||
}
|
||||
>
|
||||
{
|
||||
return abstract_call(
|
||||
"GET",
|
||||
"/member/" + id.toFixed(0)
|
||||
("/member/read/" + id.toFixed(0))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function member_project(
|
||||
data : {
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
email_address_private : (null | string);
|
||||
}
|
||||
) : Promise<int>
|
||||
{
|
||||
return abstract_call(
|
||||
"POST",
|
||||
"/member/project",
|
||||
{
|
||||
"data": {
|
||||
"membership_number": data.membership_number,
|
||||
"name_real_value": data.name_real_value,
|
||||
"email_address_private": data.email_address_private,
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -238,98 +288,25 @@ namespace _espe.backend
|
|||
/**
|
||||
*/
|
||||
export async function member_get2(
|
||||
id : int
|
||||
id : int,
|
||||
key : string
|
||||
) : Promise<
|
||||
{
|
||||
name_real : string;
|
||||
name_real_value : string;
|
||||
name_real_index : int;
|
||||
name_login : string;
|
||||
email_address_numerical_value : string;
|
||||
email_address_namely_value : string;
|
||||
email_address_veiled : string;
|
||||
email_address_nominal : string;
|
||||
}
|
||||
>
|
||||
{
|
||||
return abstract_call(
|
||||
"GET",
|
||||
"/member/get/" + id.toFixed(0)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function member_add(
|
||||
data : Record<string, any>
|
||||
) : Promise<int>
|
||||
{
|
||||
return abstract_call(
|
||||
"POST",
|
||||
"/member",
|
||||
{
|
||||
"data": {
|
||||
"membership_number": data["membership_number"],
|
||||
"enabled": data["enabled"],
|
||||
"name_real_value": data["name_real_value"],
|
||||
"name_real_extension": data["name_real_extension"],
|
||||
"name_display": data["name_display"],
|
||||
"name_login": data["name_login"],
|
||||
"password_image": null,
|
||||
"email_address_private_value": data["email_address_private_value"],
|
||||
"email_address_numberbased_use": data["email_address_numberbased_use"],
|
||||
"email_address_namebased_use": data["email_address_namebased_use"],
|
||||
"email_redirect_to_private": data["email_redirect_to_private"],
|
||||
"salutation": data["salutation"],
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function member_modify(
|
||||
id : int,
|
||||
data : Record<string, any>
|
||||
) : Promise<void>
|
||||
{
|
||||
return abstract_call(
|
||||
"PATCH",
|
||||
"/member/" + id.toFixed(0),
|
||||
{
|
||||
"data": {
|
||||
"membership_number": data["membership_number"],
|
||||
"enabled": data["enabled"],
|
||||
"name_real_value": data["name_real_value"],
|
||||
"name_real_extension": data["name_real_extension"],
|
||||
"name_display": data["name_display"],
|
||||
"name_login": data["name_login"],
|
||||
"password_image": null,
|
||||
"email_address_private_value": data["email_address_private_value"],
|
||||
"email_address_numberbased_use": data["email_address_numberbased_use"],
|
||||
"email_address_namebased_use": data["email_address_namebased_use"],
|
||||
"email_redirect_to_private": data["email_redirect_to_private"],
|
||||
"salutation": data["salutation"],
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function member_urge_for_registration(
|
||||
id : int,
|
||||
url : string
|
||||
) : Promise<null>
|
||||
{
|
||||
return (
|
||||
abstract_call(
|
||||
"POST",
|
||||
"/member/urge_for_registration",
|
||||
lib_plankton.string.coin(
|
||||
"/member/info/{{id}}?key={{key}}",
|
||||
{
|
||||
"data": {
|
||||
"id": id,
|
||||
"url": url,
|
||||
},
|
||||
"id": id.toFixed(0),
|
||||
"key": key,
|
||||
}
|
||||
)
|
||||
);
|
||||
|
@ -342,19 +319,23 @@ namespace _espe.backend
|
|||
id : int,
|
||||
verification : string,
|
||||
data : {
|
||||
name_login : string;
|
||||
name_display : string;
|
||||
salutation : string;
|
||||
email_mode : ("none" | "number" | "number_and_name");
|
||||
email_redirect : boolean;
|
||||
password : string;
|
||||
email_use_veiled_address : boolean;
|
||||
email_use_nominal_address : boolean;
|
||||
email_redirect_to_private_address : boolean;
|
||||
password : (null | string);
|
||||
}
|
||||
) : Promise<void>
|
||||
{
|
||||
return (
|
||||
abstract_call(
|
||||
"POST",
|
||||
"/member/register/" + id.toFixed(0) + "?verification=" + verification,
|
||||
lib_plankton.string.coin(
|
||||
"/member/register/{{id}}?key={{key}}",
|
||||
{
|
||||
"id": id.toFixed(0),
|
||||
"key": verification,
|
||||
}
|
||||
),
|
||||
{
|
||||
"data": data,
|
||||
}
|
||||
|
@ -362,4 +343,46 @@ namespace _espe.backend
|
|||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function member_modify(
|
||||
id : int,
|
||||
data : {
|
||||
email_address_private : (null | string);
|
||||
registered : boolean;
|
||||
enabled : boolean;
|
||||
}
|
||||
) : Promise<void>
|
||||
{
|
||||
return abstract_call(
|
||||
"PATCH",
|
||||
("/member/modify/" + id.toFixed(0)),
|
||||
{
|
||||
"data": data
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
export async function member_summon(
|
||||
id : int,
|
||||
url : string
|
||||
) : Promise<null>
|
||||
{
|
||||
return (
|
||||
abstract_call(
|
||||
"POST",
|
||||
("/member/summon/" + id.toFixed(0)),
|
||||
{
|
||||
"data": {
|
||||
"url_template": url,
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
12
source/logic/helpers.ts
Normal file
12
source/logic/helpers.ts
Normal file
|
@ -0,0 +1,12 @@
|
|||
|
||||
/**
|
||||
* @todo outsource
|
||||
*/
|
||||
function template_request(
|
||||
id : string
|
||||
) : DocumentFragment
|
||||
{
|
||||
let dom_template = document.querySelector("template#" + id);
|
||||
// return template["content"].cloneNode(true);
|
||||
return (document.importNode(dom_template["content"], true) as DocumentFragment)
|
||||
}
|
|
@ -1,16 +1,4 @@
|
|||
|
||||
/**
|
||||
*/
|
||||
function template_request(
|
||||
id : string
|
||||
) : DocumentFragment
|
||||
{
|
||||
let dom_template = document.querySelector("template#" + id);
|
||||
// return template["content"].cloneNode(true);
|
||||
return (document.importNode(dom_template["content"], true) as DocumentFragment)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
async function update_nav(
|
||||
|
@ -62,13 +50,13 @@ function setup_nav(
|
|||
"classes": ["logged_in"],
|
||||
},
|
||||
{
|
||||
"location": {"name": "create", "parameters": {}},
|
||||
"label": "Mitglied anlegen",
|
||||
"location": {"name": "list", "parameters": {}},
|
||||
"label": "Liste",
|
||||
"classes": ["logged_in"],
|
||||
},
|
||||
{
|
||||
"location": {"name": "members", "parameters": {}},
|
||||
"label": "Mitglieder-Übersicht",
|
||||
"location": {"name": "create", "parameters": {}},
|
||||
"label": "Anlegen",
|
||||
"classes": ["logged_in"],
|
||||
},
|
||||
];
|
||||
|
|
|
@ -5,23 +5,23 @@ lib_plankton.zoo_page.register(
|
|||
{
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
email_address_private_value : (null | string);
|
||||
email_address_private : (null | string);
|
||||
},
|
||||
{
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
email_address_private_value : string;
|
||||
email_address_private : string;
|
||||
}
|
||||
>(
|
||||
value => ({
|
||||
"membership_number": value.membership_number,
|
||||
"name_real_value": value.name_real_value,
|
||||
"email_address_private_value": (value.email_address_private_value ?? ""),
|
||||
"email_address_private": (value.email_address_private ?? ""),
|
||||
}),
|
||||
representation => ({
|
||||
"membership_number": representation.membership_number,
|
||||
"name_real_value": representation.name_real_value,
|
||||
"email_address_private_value": representation.email_address_private_value,
|
||||
"email_address_private": representation.email_address_private,
|
||||
}),
|
||||
new lib_plankton.zoo_input.class_input_group(
|
||||
[
|
||||
|
@ -36,7 +36,7 @@ lib_plankton.zoo_page.register(
|
|||
"label": "Echter Name",
|
||||
},
|
||||
{
|
||||
"name": "email_address_private_value",
|
||||
"name": "email_address_private",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(),
|
||||
"label": "Private E-Mail-Adresse",
|
||||
},
|
||||
|
@ -47,21 +47,7 @@ lib_plankton.zoo_page.register(
|
|||
"label": "Senden",
|
||||
"procedure": async (get_value, get_representation) => {
|
||||
const value = await get_value();
|
||||
const id : int = await _espe.backend.member_add(
|
||||
{
|
||||
"membership_number": value.membership_number,
|
||||
"name_real_value": value.name_real_value,
|
||||
"email_address_private_value": value.email_address_private_value,
|
||||
"name_real_extension": null,
|
||||
"name_display": null,
|
||||
"name_login": null,
|
||||
"salutation": null,
|
||||
"password_image": null,
|
||||
"email_address_numberbased_use": false,
|
||||
"email_address_namebased_use": false,
|
||||
"email_redirect_to_private": false,
|
||||
}
|
||||
);
|
||||
const id : int = await _espe.backend.member_project(value);
|
||||
lib_plankton.zoo_page.set({"name": "view", "parameters": {"id": id}});
|
||||
},
|
||||
}
|
||||
|
|
6
source/pages/index/logic.ts
Normal file
6
source/pages/index/logic.ts
Normal file
|
@ -0,0 +1,6 @@
|
|||
lib_plankton.zoo_page.register(
|
||||
"index",
|
||||
async (parameters, target_element) => {
|
||||
// do nothing
|
||||
}
|
||||
);
|
0
source/pages/index/structure.html
Normal file
0
source/pages/index/structure.html
Normal file
0
source/pages/index/style.css
Normal file
0
source/pages/index/style.css
Normal file
68
source/pages/list/logic.ts
Normal file
68
source/pages/list/logic.ts
Normal file
|
@ -0,0 +1,68 @@
|
|||
lib_plankton.zoo_page.register(
|
||||
"list",
|
||||
(parameters, target_element) => {
|
||||
type type_item = {
|
||||
id : int;
|
||||
preview : {
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
name_real_index : int;
|
||||
};
|
||||
};
|
||||
const term : (null | string) = (parameters["term"] ?? null);
|
||||
const search : lib_plankton.zoo_search.type_search<type_item> = lib_plankton.zoo_search.make<type_item>(
|
||||
(term) => _espe.backend.member_list(term),
|
||||
{
|
||||
"encode_item": (item) => lib_plankton.string.coin(
|
||||
"{{membership_number}} | {{name}}{{addition}}",
|
||||
{
|
||||
"membership_number": item.preview.membership_number,
|
||||
"name": item.preview.name_real_value,
|
||||
"addition": (
|
||||
(
|
||||
(item.preview.name_real_index === null)
|
||||
||
|
||||
(item.preview.name_real_index <= 1)
|
||||
)
|
||||
? ""
|
||||
: (" (" + item.preview.name_real_index.toFixed(0) + ")")
|
||||
),
|
||||
}
|
||||
),
|
||||
"hooks_begin": [
|
||||
(term) => {
|
||||
lib_plankton.zoo_page.set(
|
||||
{
|
||||
"name": "list",
|
||||
"parameters": {
|
||||
"term": term,
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
],
|
||||
"hooks_select": [
|
||||
(item) => {
|
||||
lib_plankton.zoo_page.set(
|
||||
{
|
||||
"name": "view",
|
||||
"parameters": {
|
||||
"id": item.id.toFixed(0),
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
lib_plankton.zoo_search.render(
|
||||
search,
|
||||
target_element,
|
||||
{
|
||||
"state": {
|
||||
"term": term,
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
1
source/pages/list/structure.html
Normal file
1
source/pages/list/structure.html
Normal file
|
@ -0,0 +1 @@
|
|||
|
1
source/pages/list/style.css
Normal file
1
source/pages/list/style.css
Normal file
|
@ -0,0 +1 @@
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
lib_plankton.zoo_page.register(
|
||||
"register",
|
||||
async (parameters, target_element) => {
|
||||
const set_state = function (state) {
|
||||
function set_state(
|
||||
state : ("load" | "fill" | "wait" | "done"),
|
||||
message : (null | string) = null
|
||||
) : void
|
||||
{
|
||||
target_element.querySelector(".register").setAttribute("rel", state);
|
||||
};
|
||||
const set_message = function (message) {
|
||||
target_element.querySelector(".register-message").textContent = message;
|
||||
};
|
||||
target_element.querySelector(".register-message").textContent = (message ?? "");
|
||||
}
|
||||
|
||||
const id : int = parseInt(parameters["id"]);
|
||||
const verification : string = parameters["verification"];
|
||||
|
@ -15,277 +17,127 @@ lib_plankton.zoo_page.register(
|
|||
update_nav({"mode": null});
|
||||
|
||||
const member_data : {
|
||||
name_real : string;
|
||||
name_real_value : string;
|
||||
name_real_index : int;
|
||||
name_login : string;
|
||||
email_address_numerical_value : string;
|
||||
email_address_namely_value : string;
|
||||
} = await _espe.backend.member_get2(id);
|
||||
email_address_veiled : string;
|
||||
email_address_nominal : string;
|
||||
} = await _espe.backend.member_get2(id, verification);
|
||||
|
||||
if (false)
|
||||
target_element.appendChild(template_request("register"));
|
||||
|
||||
set_state("load");
|
||||
|
||||
// info
|
||||
{
|
||||
const form = new lib_plankton.zoo_form.class_form<any, any>(
|
||||
x => x,
|
||||
x => x,
|
||||
new lib_plankton.zoo_input.class_input_group(
|
||||
}
|
||||
// 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": "id",
|
||||
"input": new lib_plankton.zoo_input.class_input_hidden(),
|
||||
},
|
||||
{
|
||||
"name": "verification",
|
||||
"input": new lib_plankton.zoo_input.class_input_hidden(),
|
||||
},
|
||||
{
|
||||
"name": "email_mode",
|
||||
"name": "email_address",
|
||||
"input": new lib_plankton.zoo_input.class_input_enumeration(
|
||||
[
|
||||
{"value": "none", "label": "keine"},
|
||||
{"value": "number", "label": "nur numerische" + " " + ("(" + member_data.email_address_numerical_value + ")")},
|
||||
{"value": "number_and_name", "label": "numerische und namentliche" + " " + ("(" + member_data.email_address_namely_value + ")")},
|
||||
{"value": "only_veiled", "label": "nur pseudonymisiert"},
|
||||
{"value": "both", "label": "pseudonymisiert und namentlich"},
|
||||
]
|
||||
),
|
||||
"label": "Partei-E-Mail-Adresse einrichten",
|
||||
"help": "Die nummernbasierte Partei-E-Mail-Adresse hat folgenden schematischen Aufbau: \"mitglied-<mitglieds-nummer>@dielinke-sachsen.de\", z.B. \"mitglied-11223344@dielinke-sachsen.de\".\n\nDie namensbasierte Partei-E-Mail-Adresse hat folgenden schematischen Aufbau: \"<name-in-kleinbuchstaben-mit-punkten-getrennt>@dielinke-sachsen.de\". Beispiel: \"Karl Liebknecht\" würde die Adresse \"karl.liebknecht@dielinke-sachsen.de\" bekommen.\n\nDie 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!"
|
||||
"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 zu privater Adresse umleiten",
|
||||
"help": "Um die bei der Partei-Adresse eingegangenen E-Mails zu lesen, gibt es zwei Wege: Entweder du hinterlegst das zugehörige Konto im E-Mail-Client-Programm deiner Wahl und kümmerst dich selbst darum die E-Mails regelmäßig abzurufen oder die E-Mails werden an deine private Adresse weitergeleitet, sodass sie bei deinen gewöhnlichen E-Mails mit auftauchen.\n\nWenn du dir unsicher bist, empfehlen wir dir die Umleitung anzuschalten.",
|
||||
},
|
||||
{
|
||||
"name": "name_display",
|
||||
"input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
|
||||
"label": "Anzeigename",
|
||||
"help": "So wirst du bei Online-Diensten anderen angezeigt.",
|
||||
},
|
||||
{
|
||||
"name": "salutation",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(),
|
||||
"label": "Anrede/Pronomen (z.B. 'er/ihn')",
|
||||
},
|
||||
{
|
||||
"name": "name_login",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(
|
||||
{
|
||||
"pattern": "^[0-9a-zA-Z_]+$",
|
||||
"read_only": true,
|
||||
}
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox(
|
||||
),
|
||||
"label": "Anmeldename",
|
||||
"help": "Dieser Wert ist der Nutzername für die Anmeldung bei den Online-Diensten. Hierfür solltest du etwas kurzes und prägnantes wählen. Diesen Namen bekommt für gewöhnlich niemand zu sehen. Bitte beachte, dass der Name noch verfügbar sein muss!",
|
||||
"label": "eingehende E-Mails an private Adresse leiten",
|
||||
},
|
||||
{
|
||||
"name": "password",
|
||||
"input": new lib_plankton.zoo_input.class_input_password(),
|
||||
"label": "Passwort",
|
||||
"help": "Das Passwort für die Anmeldung bei den Online-Diensten",
|
||||
"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(),
|
||||
"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(
|
||||
{
|
||||
"label": "Senden",
|
||||
"procedure": async (get_value, get_representation) => {
|
||||
set_message("wird verarbeitet …");
|
||||
"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");
|
||||
|
||||
const value : any = await get_value();
|
||||
|
||||
if (value.password !== value.password_confirmation) {
|
||||
set_message("Die Passwörter stimmen nicht überein.");
|
||||
set_state("fill");
|
||||
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,
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
try {
|
||||
await _espe.backend.member_register(
|
||||
id,
|
||||
verification,
|
||||
value
|
||||
);
|
||||
set_message("Danke!");
|
||||
set_state("done");
|
||||
}
|
||||
catch (error) {
|
||||
set_message("Da ist etwas schief gelaufen :/");
|
||||
set_state("fill");
|
||||
}
|
||||
catch (error) {
|
||||
set_state("fill", "Da ist etwas schief gelaufen :/");
|
||||
}
|
||||
},
|
||||
},
|
||||
]
|
||||
);
|
||||
|
||||
target_element.appendChild(template_request("register"));
|
||||
|
||||
await form.setup(target_element.querySelector(".register-form") as HTMLElement);
|
||||
await form.input_write(
|
||||
{
|
||||
"id": id,
|
||||
"verification": verification,
|
||||
"name_login": member_data.name_login,
|
||||
"name_display": member_data.name_real,
|
||||
"salutation": "",
|
||||
"email_mode": "number_and_name",
|
||||
"email_redirect": true,
|
||||
"password": "",
|
||||
"password_confirmation": "",
|
||||
}
|
||||
);
|
||||
set_state("fill");
|
||||
}
|
||||
|
||||
{
|
||||
let dom_email_setting_container : HTMLElement = document.createElement("fieldset");
|
||||
dom_email_setting_container.classList.add("register-email_setting");
|
||||
{
|
||||
let dom_legend : HTMLElement = document.createElement("legend");
|
||||
dom_legend.textContent = "E-Mail-Einstellungen";
|
||||
dom_email_setting_container.appendChild(dom_legend);
|
||||
}
|
||||
|
||||
async function update_email_setting() {
|
||||
const value : boolean = (await input_email_use.read())["use"];
|
||||
dom_email_setting_container.classList.toggle("show", value);
|
||||
}
|
||||
|
||||
const input_email_use = new lib_plankton.zoo_input.class_input_group(
|
||||
[
|
||||
{
|
||||
"name": "use",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox(
|
||||
{
|
||||
"hooks_change": [
|
||||
(value) => {update_email_setting();}
|
||||
]
|
||||
}
|
||||
),
|
||||
"label": "Partei-E-Mail-Adresse einrichten",
|
||||
set_state("done", "Danke!");
|
||||
}
|
||||
}
|
||||
]
|
||||
);
|
||||
const input_email_setting = new lib_plankton.zoo_input.class_input_group(
|
||||
[
|
||||
{
|
||||
"name": "numerical",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox(
|
||||
),
|
||||
"label": ("numerisch" + " : " + ("" + member_data.email_address_numerical_value + "")),
|
||||
},
|
||||
{
|
||||
"name": "namely",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox(
|
||||
),
|
||||
"label": ("namentlich" + " : " + ("" + member_data.email_address_namely_value + "")),
|
||||
},
|
||||
]
|
||||
);
|
||||
await input_email_use.setup(target_element as HTMLElement);
|
||||
target_element.appendChild(dom_email_setting_container);
|
||||
await input_email_setting.setup(dom_email_setting_container);
|
||||
await input_email_setting.write(
|
||||
{
|
||||
"numerical": true,
|
||||
"namely": true,
|
||||
}
|
||||
);
|
||||
|
||||
await input_email_use.write({"use": true});
|
||||
update_email_setting();
|
||||
}
|
||||
{
|
||||
let dom_service_data_container : HTMLElement = document.createElement("fieldset");
|
||||
{
|
||||
let dom_legend : HTMLElement = document.createElement("legend");
|
||||
dom_legend.textContent = "Angaben für Netzdienste";
|
||||
dom_service_data_container.appendChild(dom_legend);
|
||||
);
|
||||
}
|
||||
dom_service_data_container.classList.add("register-services_data");
|
||||
|
||||
async function update_service_data() {
|
||||
const value : boolean = (await input_service_use.read())["use"];
|
||||
dom_service_data_container.classList.toggle("show", value);
|
||||
/*
|
||||
if (value) {
|
||||
dom_service_data_container.removeAttribute("disabled");
|
||||
}
|
||||
else {
|
||||
dom_service_data_container.setAttribute("disabled", "disabled");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
const input_service_use = new lib_plankton.zoo_input.class_input_group(
|
||||
[
|
||||
{
|
||||
"name": "use",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox(
|
||||
{
|
||||
"hooks_change": [
|
||||
(value) => {update_service_data();}
|
||||
]
|
||||
}
|
||||
),
|
||||
"label": "Netz-Dienste nutzen",
|
||||
}
|
||||
]
|
||||
);
|
||||
const input_service_data = new lib_plankton.zoo_input.class_input_group(
|
||||
[
|
||||
{
|
||||
"name": "name_display",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(
|
||||
{
|
||||
}
|
||||
),
|
||||
"label": "Anzeigename",
|
||||
"help": "So wirst du bei Online-Diensten anderen angezeigt.",
|
||||
},
|
||||
{
|
||||
"name": "name_login",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(
|
||||
{
|
||||
"pattern": "^[0-9a-zA-Z_]+$",
|
||||
}
|
||||
),
|
||||
"label": "Anmeldename",
|
||||
"help": "Dieser Wert ist der Nutzername für die Anmeldung bei den Online-Diensten. Hierfür solltest du etwas kurzes und prägnantes wählen. Diesen Namen bekommt für gewöhnlich niemand zu sehen. Bitte beachte, dass der Name noch verfügbar sein muss!",
|
||||
},
|
||||
{
|
||||
"name": "password",
|
||||
"input": new lib_plankton.zoo_input.class_input_password(
|
||||
),
|
||||
"label": "Passwort",
|
||||
"help": "Das Passwort für die Anmeldung bei den Online-Diensten",
|
||||
},
|
||||
{
|
||||
"name": "password_confirmation",
|
||||
"input": new lib_plankton.zoo_input.class_input_password(
|
||||
),
|
||||
"label": "Passwort wiederholen",
|
||||
},
|
||||
]
|
||||
);
|
||||
await input_service_use.setup(target_element as HTMLElement);
|
||||
target_element.appendChild(dom_service_data_container);
|
||||
await input_service_data.setup(dom_service_data_container);
|
||||
await input_service_data.write(
|
||||
{
|
||||
"name_display": member_data.name_real,
|
||||
"name_login": member_data.name_login,
|
||||
"password": "",
|
||||
"password_confirmation": "",
|
||||
}
|
||||
);
|
||||
|
||||
await input_service_use.write({"use": true});
|
||||
update_service_data();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
@ -1,36 +1,16 @@
|
|||
<template id="register">
|
||||
<section class="register">
|
||||
<h2>Registrieren</h2>
|
||||
<div class="register-info">
|
||||
</div>
|
||||
<div class="register-message">
|
||||
</div>
|
||||
<div class="register-form">
|
||||
<!--
|
||||
<form>
|
||||
<div class="formfield register-field-use_services">
|
||||
<label>Netz-Dienste nutzen</label>
|
||||
<input name="use_services" type="checkbox"/>
|
||||
</div>
|
||||
<fieldset class="register-services_data">
|
||||
<legend>Netzdienste</legend>
|
||||
<div class="register-field-display_name">
|
||||
<label>Anzeigename</label>
|
||||
<input name="display_name" type="text"/>
|
||||
</div>
|
||||
<div class="formfield" class="register-field-login_name">
|
||||
<label>Anmeldename</label>
|
||||
<input name="login_name" type="text"/>
|
||||
</div>
|
||||
<div class="formfield"class="register-field-password_value">
|
||||
<label>Passwort</label>
|
||||
<input name="password_value" type="password"/>
|
||||
</div>
|
||||
<div class="formfield"class="register-field-password_confirmation">
|
||||
<label>Passwort wiederholen</label>
|
||||
<input name="password_confirmation" type="password"/>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
-->
|
||||
<div class="register-form-input">
|
||||
</div>
|
||||
<div class="register-form-actions">
|
||||
<button class="register-form-action-send">Abschicken</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
|
|
@ -9,43 +9,3 @@
|
|||
|
||||
.register[rel="done"] .register-message {}
|
||||
.register[rel="done"] .register-form {display: none;}
|
||||
|
||||
.register-email_setting
|
||||
{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.register-email_setting.show
|
||||
{
|
||||
max-height: 100vh;
|
||||
|
||||
transition: max-height 1.0s ease;
|
||||
}
|
||||
|
||||
.register-email_setting:not(.show)
|
||||
{
|
||||
max-height: 0;
|
||||
|
||||
transition: max-height 0.25s ease;
|
||||
}
|
||||
|
||||
.register-services_data
|
||||
{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.register-services_data.show
|
||||
{
|
||||
max-height: 100vh;
|
||||
|
||||
transition: max-height 1.0s ease;
|
||||
}
|
||||
|
||||
.register-services_data:not(.show)
|
||||
{
|
||||
max-height: 0;
|
||||
|
||||
transition: max-height 0.25s ease;
|
||||
}
|
||||
/*
|
||||
*/
|
||||
|
|
|
@ -3,7 +3,32 @@ lib_plankton.zoo_page.register(
|
|||
async (parameters, target_element) => {
|
||||
const id : int = parseInt(parameters["id"]);
|
||||
|
||||
const form = new lib_plankton.zoo_form.class_form<any, any>(
|
||||
const form = new lib_plankton.zoo_form.class_form<
|
||||
{
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
name_real_index : int;
|
||||
email_address_private : (null | string);
|
||||
registered : boolean;
|
||||
enabled : boolean;
|
||||
email_use_veiled_address : boolean;
|
||||
email_use_nominal_address : boolean;
|
||||
email_redirect_to_private_address : boolean;
|
||||
email_allow_sending : boolean;
|
||||
},
|
||||
{
|
||||
membership_number : string;
|
||||
name_real_value : string;
|
||||
name_real_index : int;
|
||||
email_address_private : (null | string);
|
||||
registered : boolean;
|
||||
enabled : boolean;
|
||||
email_use_veiled_address : boolean;
|
||||
email_use_nominal_address : boolean;
|
||||
email_redirect_to_private_address : boolean;
|
||||
email_allow_sending : boolean;
|
||||
}
|
||||
>(
|
||||
value => value,
|
||||
representation => representation,
|
||||
new lib_plankton.zoo_input.class_input_group(
|
||||
|
@ -15,39 +40,57 @@ lib_plankton.zoo_page.register(
|
|||
},
|
||||
{
|
||||
"name": "name_real_value",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(),
|
||||
"input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
|
||||
"label": "Echter Name",
|
||||
},
|
||||
{
|
||||
"name": "email_address_private_value",
|
||||
"name": "name_real_index",
|
||||
"input": new lib_plankton.zoo_input.class_input_number({"read_only": true}),
|
||||
"label": "Namens-Index",
|
||||
},
|
||||
{
|
||||
"name": "email_address_private",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(),
|
||||
"label": "Private E-Mail-Adresse",
|
||||
},
|
||||
{
|
||||
"name": "email_address_numberbased_use",
|
||||
"name": "registered",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
|
||||
"label": "Nummernbasierte E-Mail-Adresse verwenden",
|
||||
"label": "registriert",
|
||||
},
|
||||
{
|
||||
"name": "email_address_namebased_use",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
|
||||
"label": "Namensbasierte E-Mail-Adresse verwenden",
|
||||
"name": "enabled",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox(),
|
||||
"label": "für Netz-Dienste freigeschalten",
|
||||
},
|
||||
{
|
||||
"name": "email_redirect",
|
||||
"name": "email_use_veiled_address",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
|
||||
"label": "Pseudonymisierte E-Mail-Adresse verwenden",
|
||||
},
|
||||
{
|
||||
"name": "email_use_nominal_address",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
|
||||
"label": "Namentliche E-Mail-Adresse verwenden",
|
||||
},
|
||||
{
|
||||
"name": "email_redirect_to_private_address",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
|
||||
"label": "eingehende E-Mails zu privater Adresse umleiten",
|
||||
},
|
||||
{
|
||||
"name": "email_allow_sending",
|
||||
"input": new lib_plankton.zoo_input.class_input_checkbox(),
|
||||
"label": "Versenden von E-Mails erlaubt",
|
||||
},
|
||||
/*
|
||||
{
|
||||
"name": "name_display",
|
||||
"input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
|
||||
"label": "Anzeigename",
|
||||
},
|
||||
{
|
||||
"name": "salutation",
|
||||
"input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
|
||||
"label": "Anrede/Pronomen",
|
||||
},
|
||||
*/
|
||||
/*
|
||||
{
|
||||
"name": "name_login",
|
||||
"input": new lib_plankton.zoo_input.class_input_text(
|
||||
|
@ -58,9 +101,24 @@ lib_plankton.zoo_page.register(
|
|||
),
|
||||
"label": "Anmeldename",
|
||||
},
|
||||
*/
|
||||
]
|
||||
),
|
||||
[
|
||||
{
|
||||
"label": "Änderungen speichern",
|
||||
"procedure": async (get_value, get_representation) => {
|
||||
const value = await get_value();
|
||||
await _espe.backend.member_modify(
|
||||
id,
|
||||
{
|
||||
"email_address_private": value.email_address_private,
|
||||
"enabled": value.enabled,
|
||||
"registered": value.registered,
|
||||
}
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
"label": "Zur Registrierung auffordern",
|
||||
"procedure": async (get_value, get_representation) => {
|
||||
|
@ -78,7 +136,7 @@ lib_plankton.zoo_page.register(
|
|||
)
|
||||
);
|
||||
|
||||
await _espe.backend.member_urge_for_registration(id, url);
|
||||
await _espe.backend.member_summon(id, url);
|
||||
|
||||
/*
|
||||
lib_plankton.zoo_page.set(
|
||||
|
@ -100,11 +158,25 @@ lib_plankton.zoo_page.register(
|
|||
[
|
||||
form.setup(dom_fragment.querySelector(".view-form") as HTMLElement),
|
||||
_espe.backend.member_get(id),
|
||||
// _espe.backend.member_info(id),
|
||||
]
|
||||
)
|
||||
.then(
|
||||
([_, member]) => {
|
||||
form.input_write(member);
|
||||
([_, member_object]) => {
|
||||
form.input_write(
|
||||
{
|
||||
"membership_number": member_object.membership_number,
|
||||
"name_real_value": member_object.name_real_value,
|
||||
"name_real_index": member_object.name_real_index,
|
||||
"email_address_private": member_object.email_address_private,
|
||||
"registered": member_object.registered,
|
||||
"enabled": member_object.enabled,
|
||||
"email_use_veiled_address": member_object.email_use_veiled_address,
|
||||
"email_use_nominal_address": member_object.email_use_nominal_address,
|
||||
"email_redirect_to_private_address": member_object.email_redirect_to_private_address,
|
||||
"email_allow_sending": member_object.email_allow_sending,
|
||||
}
|
||||
);
|
||||
}
|
||||
)
|
||||
);
|
||||
|
|
|
@ -12,5 +12,12 @@
|
|||
|
||||
.view-form > .plankton_form > .plankton_form_actions
|
||||
{
|
||||
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.plankton_form_actions > *
|
||||
{
|
||||
display: block;
|
||||
margin: 8px;
|
||||
}
|
||||
|
|
|
@ -19,12 +19,14 @@ default: ${dir_build}/logic.js ${dir_build}/style.css ${dir_build}/index.html
|
|||
|
||||
${dir_temp}/logic-unlinked.js: \
|
||||
${dir_lib}/plankton/plankton.d.ts \
|
||||
${dir_source}/logic/helpers.ts \
|
||||
${dir_source}/logic/backend.ts \
|
||||
${dir_source}/logic/conf.ts \
|
||||
${dir_source}/pages/index/logic.ts \
|
||||
${dir_source}/pages/login/logic.ts \
|
||||
${dir_source}/pages/logout/logic.ts \
|
||||
${dir_source}/pages/members/logic.ts \
|
||||
${dir_source}/pages/create/logic.ts \
|
||||
${dir_source}/pages/list/logic.ts \
|
||||
${dir_source}/pages/view/logic.ts \
|
||||
${dir_source}/pages/register/logic.ts \
|
||||
${dir_source}/logic/main.ts
|
||||
|
@ -40,10 +42,12 @@ ${dir_build}/logic.js: ${dir_lib}/plankton/plankton.js ${dir_temp}/logic-unlinke
|
|||
|
||||
${dir_build}/style.css: \
|
||||
${dir_source}/style/style.css \
|
||||
${dir_source}/pages/index/style.css \
|
||||
${dir_source}/pages/login/style.css \
|
||||
${dir_source}/pages/logout/style.css \
|
||||
${dir_source}/pages/members/style.css \
|
||||
${dir_source}/pages/create/style.css \
|
||||
${dir_source}/pages/list/style.css \
|
||||
${dir_source}/pages/view/style.css \
|
||||
${dir_source}/pages/register/style.css
|
||||
@ ${cmd_log} "style …"
|
||||
|
@ -52,10 +56,12 @@ ${dir_build}/style.css: \
|
|||
|
||||
${dir_build}/index.html: \
|
||||
${dir_source}/structure/index.html.tpl \
|
||||
${dir_source}/pages/index/structure.html \
|
||||
${dir_source}/pages/login/structure.html \
|
||||
${dir_source}/pages/logout/structure.html \
|
||||
${dir_source}/pages/members/structure.html \
|
||||
${dir_source}/pages/create/structure.html \
|
||||
${dir_source}/pages/list/structure.html \
|
||||
${dir_source}/pages/view/structure.html \
|
||||
${dir_source}/pages/register/structure.html
|
||||
@ ${cmd_log} "structure …"
|
||||
|
|
Loading…
Add table
Reference in a new issue