[int]
This commit is contained in:
parent
e8432a3c48
commit
f279253e77
26 changed files with 278 additions and 80 deletions
20
lib/plankton/plankton.d.ts
vendored
20
lib/plankton/plankton.d.ts
vendored
|
@ -1,15 +1,15 @@
|
|||
/**
|
||||
* @author fenris
|
||||
*/
|
||||
type int = number;
|
||||
declare type int = number;
|
||||
/**
|
||||
* @author fenris
|
||||
*/
|
||||
type float = number;
|
||||
declare type float = number;
|
||||
/**
|
||||
* @author fenris
|
||||
*/
|
||||
type type_date = {
|
||||
declare type type_date = {
|
||||
year: int;
|
||||
month: int;
|
||||
day: int;
|
||||
|
@ -17,7 +17,7 @@ type type_date = {
|
|||
/**
|
||||
* @author fenris
|
||||
*/
|
||||
type type_time = {
|
||||
declare type type_time = {
|
||||
hour: int;
|
||||
minute: int;
|
||||
second: int;
|
||||
|
@ -25,7 +25,7 @@ type type_time = {
|
|||
/**
|
||||
* @author fenris
|
||||
*/
|
||||
type type_datetimeobject = {
|
||||
declare type type_datetimeobject = {
|
||||
date: type_date;
|
||||
time: type_time;
|
||||
};
|
||||
|
@ -42,7 +42,7 @@ declare namespace lib_plankton.base {
|
|||
/**
|
||||
* @author fenris
|
||||
*/
|
||||
type type_pseudopointer<type_value> = {
|
||||
declare type type_pseudopointer<type_value> = {
|
||||
value: type_value;
|
||||
};
|
||||
/**
|
||||
|
@ -1513,7 +1513,7 @@ declare namespace lib_plankton.storage.memory {
|
|||
clear(): Promise<void>;
|
||||
write(key: any, value: any): Promise<boolean>;
|
||||
delete(key: any): Promise<void>;
|
||||
read(key: any): Promise<Awaited<type_item>>;
|
||||
read(key: any): Promise<type_item>;
|
||||
search(term: any): Promise<{
|
||||
key: string;
|
||||
preview: string;
|
||||
|
@ -1820,11 +1820,15 @@ declare namespace lib_plankton.zoo_input {
|
|||
private read_only;
|
||||
/**
|
||||
*/
|
||||
private dom_input;
|
||||
dom_input: (null | HTMLInputElement);
|
||||
/**
|
||||
*/
|
||||
private hooks_change;
|
||||
/**
|
||||
*/
|
||||
constructor(options?: {
|
||||
read_only?: boolean;
|
||||
hooks_change?: Array<((value: boolean) => void)>;
|
||||
});
|
||||
/**
|
||||
* [implementation]
|
||||
|
|
|
@ -4616,9 +4616,11 @@ var lib_plankton;
|
|||
constructor(options = {}) {
|
||||
options = Object.assign({
|
||||
"read_only": false,
|
||||
"hooks_change": [],
|
||||
}, options);
|
||||
this.read_only = options.read_only;
|
||||
this.dom_input = null;
|
||||
this.hooks_change = options.hooks_change;
|
||||
}
|
||||
/**
|
||||
* [implementation]
|
||||
|
@ -4634,6 +4636,12 @@ var lib_plankton;
|
|||
// do nothing
|
||||
}
|
||||
}
|
||||
this.dom_input.addEventListener("change", (event) => {
|
||||
const value = event.target.checked;
|
||||
this.hooks_change.forEach(procedure => {
|
||||
procedure(value);
|
||||
});
|
||||
});
|
||||
// this.dom_input.style.display = "initial"; // n3o!!!
|
||||
parent.appendChild(this.dom_input);
|
||||
return Promise.resolve(undefined);
|
||||
|
|
|
@ -26,7 +26,29 @@ namespace _espe.conf
|
|||
export async function load(
|
||||
) : Promise<void>
|
||||
{
|
||||
_data = lib_plankton.json.decode(await lib_plankton.file.read("conf.json"));
|
||||
let data_raw;
|
||||
try {
|
||||
data_raw = lib_plankton.json.decode(await lib_plankton.file.read("conf.json"));
|
||||
}
|
||||
catch (error) {
|
||||
data_raw = {};
|
||||
console.warn("could not read configuration file");
|
||||
}
|
||||
_data = {
|
||||
"backend": (
|
||||
(node_backend => ({
|
||||
"scheme": (node_backend["scheme"] ?? "http"),
|
||||
"host": (node_backend["host"] ?? "localhost"),
|
||||
"port": (node_backend["port"] ?? 7979),
|
||||
"path_base": (node_backend["path_base"] ?? ""),
|
||||
})) (data_raw["backend"] ?? {})
|
||||
),
|
||||
"settings": (
|
||||
(node_settings => ({
|
||||
"title": (node_settings["title"] ?? "Espe"),
|
||||
})) (data_raw["settings"] ?? {})
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
lib_plankton.zoo_page.register(
|
||||
"index",
|
||||
(parameters, target_element) => {
|
||||
}
|
||||
);
|
0
source/pages/create/structure.html
Normal file
0
source/pages/create/structure.html
Normal file
0
source/pages/create/style.css
Normal file
0
source/pages/create/style.css
Normal file
7
source/pages/login/structure.html
Normal file
7
source/pages/login/structure.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
<template id="login">
|
||||
<section class="login">
|
||||
<h2>Login</h2>
|
||||
<div class="login-form">
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
0
source/pages/login/style.css
Normal file
0
source/pages/login/style.css
Normal file
0
source/pages/logout/structure.html
Normal file
0
source/pages/logout/structure.html
Normal file
0
source/pages/logout/style.css
Normal file
0
source/pages/logout/style.css
Normal file
8
source/pages/members/structure.html
Normal file
8
source/pages/members/structure.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
<template id="members">
|
||||
<section class="members">
|
||||
<h2>Mitglied</h2>
|
||||
<div class="members-editor">
|
||||
</div>
|
||||
<hr/>
|
||||
</section>
|
||||
</template>
|
8
source/pages/members/style.css
Normal file
8
source/pages/members/style.css
Normal file
|
@ -0,0 +1,8 @@
|
|||
.members-result:not([href])
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.members:not([rel]) .members-extras {display: none;}
|
||||
.members[rel="poor"] .members-extras {display: none;}
|
||||
.members[rel="rich"] .members-extras {}
|
|
@ -1,3 +1,5 @@
|
|||
var foobar;
|
||||
|
||||
lib_plankton.zoo_page.register(
|
||||
"register",
|
||||
async (parameters, target_element) => {
|
||||
|
@ -129,5 +131,84 @@ lib_plankton.zoo_page.register(
|
|||
}
|
||||
);
|
||||
set_state("fill");
|
||||
|
||||
// ---
|
||||
|
||||
{
|
||||
let dom_service_data_container : HTMLElement = document.createElement("div");
|
||||
dom_service_data_container.classList.add("register-services_data");
|
||||
|
||||
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) => {dom_service_data_container.classList.toggle("show", value);}
|
||||
]
|
||||
}
|
||||
),
|
||||
"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);
|
||||
foobar = input_service_use;
|
||||
|
||||
await input_service_use.write(true);
|
||||
|
||||
/*
|
||||
const element_use_services : HTMLInputElement = (target_element.querySelector(".register-field-use_services") as HTMLInputElement);
|
||||
function update_service_data_visibility(show : (null | boolean) = null) : void
|
||||
{
|
||||
console.info({show});
|
||||
show = (show ?? element_use_services.checked);
|
||||
console.info({show});
|
||||
target_element.querySelector(".register-services_data").classList.toggle("show", show);
|
||||
}
|
||||
element_use_services.addEventListener("change", (event) => {update_service_data_visibility(event.target["checked"]);});
|
||||
element_use_services.checked = true;
|
||||
update_service_data_visibility(true);
|
||||
*/
|
||||
}
|
||||
},
|
||||
);
|
35
source/pages/register/structure.html
Normal file
35
source/pages/register/structure.html
Normal file
|
@ -0,0 +1,35 @@
|
|||
<template id="register">
|
||||
<section class="register">
|
||||
<h2>Registrieren</h2>
|
||||
<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">
|
||||
<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>
|
||||
</section>
|
||||
</template>
|
16
source/pages/register/style.css
Normal file
16
source/pages/register/style.css
Normal file
|
@ -0,0 +1,16 @@
|
|||
.register:not([rel]) .register-message {display: none;}
|
||||
.register:not([rel]) .register-form {display: none;}
|
||||
|
||||
.register[rel="fill"] .register-message {}
|
||||
.register[rel="fill"] .register-form {}
|
||||
|
||||
.register[rel="wait"] .register-message {}
|
||||
.register[rel="wait"] .register-form {display: none;}
|
||||
|
||||
.register[rel="done"] .register-message {}
|
||||
.register[rel="done"] .register-form {display: none;}
|
||||
|
||||
.register-services_data:not(.show)
|
||||
{
|
||||
display: none;
|
||||
}
|
7
source/pages/view/structure.html
Normal file
7
source/pages/view/structure.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
<template id="view">
|
||||
<section class="view">
|
||||
<h2>Mitglied</h2>
|
||||
<div class="view-form">
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
0
source/pages/view/style.css
Normal file
0
source/pages/view/style.css
Normal file
|
@ -6,37 +6,7 @@
|
|||
<link rel="stylesheet" type="text/css" href="style.css"/>
|
||||
<script type="text/javascript" src="logic.js"></script>
|
||||
<script type="text/javascript">document.addEventListener("DOMContentLoaded", () => {main();});</script>
|
||||
<template id="login">
|
||||
<section class="login">
|
||||
<h2>Login</h2>
|
||||
<div class="login-form">
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
<template id="view">
|
||||
<section class="view">
|
||||
<h2>Mitglied</h2>
|
||||
<div class="view-form">
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
<template id="members">
|
||||
<section class="members">
|
||||
<h2>Mitglied</h2>
|
||||
<div class="members-editor">
|
||||
</div>
|
||||
<hr/>
|
||||
</section>
|
||||
</template>
|
||||
<template id="register">
|
||||
<section class="register">
|
||||
<h2>Registrieren</h2>
|
||||
<div class="register-message">
|
||||
</div>
|
||||
<div class="register-form">
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
{{templates}}
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
|
|
|
@ -190,24 +190,3 @@ nav > ul > li:hover::after
|
|||
text-transform: uppercase;
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
.members-result:not([href])
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.register:not([rel]) .register-message {display: none;}
|
||||
.register:not([rel]) .register-form {display: none;}
|
||||
|
||||
.register[rel="fill"] .register-message {}
|
||||
.register[rel="fill"] .register-form {}
|
||||
|
||||
.register[rel="wait"] .register-message {}
|
||||
.register[rel="wait"] .register-form {display: none;}
|
||||
|
||||
.register[rel="done"] .register-message {}
|
||||
.register[rel="done"] .register-form {display: none;}
|
||||
|
||||
.members:not([rel]) .members-extras {display: none;}
|
||||
.members[rel="poor"] .members-extras {display: none;}
|
||||
.members[rel="rich"] .members-extras {}
|
||||
|
|
45
tools/make-index
Executable file
45
tools/make-index
Executable file
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys as _sys
|
||||
|
||||
def string_coin(
|
||||
template,
|
||||
arguments
|
||||
):
|
||||
result = template
|
||||
for (key, value, ) in arguments.items():
|
||||
result = result.replace("{{%s}}" % key, value)
|
||||
return result
|
||||
|
||||
|
||||
def file_read(path):
|
||||
handle = open(path, "r")
|
||||
content = handle.read()
|
||||
handle.close()
|
||||
return content
|
||||
|
||||
|
||||
def file_write(path, content):
|
||||
handle = open(path, "w")
|
||||
handle.write(content)
|
||||
handle.close()
|
||||
|
||||
|
||||
def main(args):
|
||||
## args
|
||||
path_main = args.pop(0)
|
||||
paths_templates = args
|
||||
args = []
|
||||
|
||||
## exec
|
||||
_sys.stdout.write(
|
||||
string_coin(
|
||||
file_read(path_main),
|
||||
{
|
||||
"templates": "\n".join(map(lambda path: file_read(path), paths_templates))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
main(_sys.argv[1:])
|
|
@ -15,24 +15,18 @@ cmd_cp := cp
|
|||
## rules
|
||||
|
||||
.PHONY: default
|
||||
default: ${dir_build}/index.html ${dir_build}/logic.js ${dir_build}/style.css
|
||||
|
||||
${dir_build}/index.html: ${dir_source}/structure/index.html.tpl
|
||||
@ ${cmd_log} "structure …"
|
||||
@ ${cmd_mkdir} $(dir $@)
|
||||
@ ${cmd_cat} $^ > $@
|
||||
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/backend.ts \
|
||||
${dir_source}/logic/conf.ts \
|
||||
${dir_source}/logic/pages/index.ts \
|
||||
${dir_source}/logic/pages/login.ts \
|
||||
${dir_source}/logic/pages/logout.ts \
|
||||
${dir_source}/logic/pages/members.ts \
|
||||
${dir_source}/logic/pages/create.ts \
|
||||
${dir_source}/logic/pages/view.ts \
|
||||
${dir_source}/logic/pages/register.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/view/logic.ts \
|
||||
${dir_source}/pages/register/logic.ts \
|
||||
${dir_source}/logic/main.ts
|
||||
@ ${cmd_log} "logic | compile …"
|
||||
@ ${cmd_mkdir} $(dir $@)
|
||||
|
@ -44,7 +38,26 @@ ${dir_build}/logic.js: ${dir_lib}/plankton/plankton.js ${dir_temp}/logic-unlinke
|
|||
@ ${cmd_cat} $^ > $@
|
||||
@ ${cmd_chmod} +x $@
|
||||
|
||||
${dir_build}/style.css: ${dir_source}/style/style.css
|
||||
${dir_build}/style.css: \
|
||||
${dir_source}/style/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/view/style.css \
|
||||
${dir_source}/pages/register/style.css
|
||||
@ ${cmd_log} "style …"
|
||||
@ ${cmd_mkdir} $(dir $@)
|
||||
@ ${cmd_cat} $^ > $@
|
||||
|
||||
${dir_build}/index.html: \
|
||||
${dir_source}/structure/index.html.tpl \
|
||||
${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/view/structure.html \
|
||||
${dir_source}/pages/register/structure.html
|
||||
@ ${cmd_log} "structure …"
|
||||
@ ${cmd_mkdir} $(dir $@)
|
||||
@ tools/make-index $^ > $@
|
||||
|
|
Loading…
Add table
Reference in a new issue