| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- import { fullscreen } from "./fullscreen.js";
- export class formscreen extends fullscreen {
- #form;
- #result;
- constructor() {
- super();
- this.#form = null;
- this.#result = null;
- }
- get _name() {
- throw new TypeError("This is virtual getter!");
- }
- _process() {
- this._error = "This is abstract, and must be overwriten.";
- }
- _build_form() {
- throw new TypeError("This is virtual method!");
- }
-
- _get_input(name) {
- return this.get_query("input[name=\"" + name + "\"]");
- }
- get _has_submit() {
- return true;
- }
- _build_node() {
- const center = document.createElement("div");
- center.classList.add("center");
- const title = document.createElement("div");
- title.classList.add("title");
- center.appendChild(title);
- const title_content = document.createElement("h3");
- title_content.innerText = this._name;
- title.appendChild(title_content);
- const form = document.createElement("form");
- center.appendChild(form);
- form.addEventListener("change", () => {
- this._clear_results();
- });
- this.#form = document.createElement("div");
- this.#form.classList.add("content");
- form.appendChild(this.#form);
- this.#result = document.createElement("div");
- this.#result.classList.add("result");
- form.appendChild(this.#result);
-
- const bottom = document.createElement("div");
- bottom.classList.add("bottom");
- form.appendChild(bottom);
- const close_button = document.createElement("button");
- close_button.classList.add("close");
- close_button.classList.add("material-icons");
- close_button.innerText = "close";
- close_button.type = "button";
- bottom.appendChild(close_button);
-
- if (this._has_submit) {
- const send_button = document.createElement("button");
- send_button.classList.add("send");
- send_button.classList.add("material-icons");
- send_button.innerText = "send";
- send_button.type = "submit";
- bottom.appendChild(send_button);
- }
- close_button.addEventListener("click", () => {
- this.hide();
- });
-
- form.addEventListener("submit", (target) => {
- target.preventDefault();
- this._process();
- });
- this._refresh();
-
- return center;
- }
- _refresh() {
- while (this.#form.lastChild) {
- this.#form.lastChild.remove();
- }
- this._build_form();
- }
- _create_input(name, label_text, placeholder, worker = null) {
- const container = document.createElement("div");
- container.classList.add("input-container");
- container.classList.add("input-" + name);
- const label = document.createElement("label");
- label.htmlFor = name;
- label.innerText = label_text;
- container.appendChild(label);
- const input = document.createElement("input");
- input.type = "text";
- input.placeholder = placeholder;
- input.name = name;
- input.id = name;
- container.appendChild(input);
- if (worker !== null) {
- worker(input);
- }
- if (!this.#form) {
- throw new Error("Screen is not visible yet!");
- }
- this._append_child(container);
- return (target = null) => {
- if (target !== null) {
- input.value = target;
- }
- return input.value;
- };
- }
- _append_child(target) {
- this.#form.appendChild(target);
- }
- _clear_results() {
- if (!this.#result) {
- return;
- }
- while (this.#result.lastChild) {
- this.#result.lastChild.remove();
- }
- }
-
- set _info(target) {
- this._clear_results();
- const info = document.createElement("p");
- info.classList.add("info");
- info.innerText = target;
-
- if (this.#result) {
- this.#result.appendChild(info);
- }
- }
-
- set _error(target) {
- this._clear_results();
- const info = document.createElement("p");
- info.classList.add("error");
- info.innerText = target;
-
- if (this.#result) {
- this.#result.appendChild(info);
- }
- }
- set _success(target) {
- this._clear_results();
- const info = document.createElement("p");
- info.classList.add("success");
- info.innerText = target;
-
- if (this.#result) {
- this.#result.appendChild(info);
- }
- }
- }
|