import { PasswordComponent } from "./common"; import {$,$$} from "@sciter"; //TEST $$ import const view = Window.this; var type, title, text, getParams, remember, retry, callback, contentStyle; var my_translate; // TEST function updateParams(params) { type = params.type; title = params.title; text = params.text; getParams = params.getParams; remember = params.remember; callback = params.callback; my_translate = params.translate; retry = params.retry; contentStyle = params.contentStyle; try { text = translate_text(text); } catch (e) {} if (retry > 0) { setTimeout(()=>view.close({ reconnect: true }),retry * 1000);// TEST } } function translate_text(text) { if (text.indexOf('Failed') == 0 && text.indexOf(': ') > 0) { let fds = text.split(': '); for (let i = 0; i < fds.length; ++i) { fds[i] = my_translate(fds[i]); } text = fds.join(': '); } return text; } var params = view.parameters; // TEST updateParams(params); var body; class Body extends Element { this() { body = this; } getIcon(color) { if (type == "input-password") { return ; } if (type == "connecting") { return ; } if (type == "success") { return ; } if (type.indexOf("error") >= 0 || type == "re-input-password") { return ; } return ; } getInputPasswordContent() { var ts = remember ? { checked: true } : {}; //
{my_translate('Remember password')}
return
{my_translate('Please enter your password')}
; } getContent() { if (type == "input-password") { return this.getInputPasswordContent(); } return text; } getColor() { if (type == "input-password") { return "#AD448E"; } if (type == "success") { return "#32bea6"; } if (type.indexOf("error") >= 0 || type == "re-input-password") { return "#e04f5f"; } return "#2C8CFF"; } hasSkip() { return type.indexOf("skip") >= 0; } render() { let color = this.getColor(); let icon = this.getIcon(color); let content = this.getContent(); let hasCancel = type.indexOf("error") < 0 && type != "success" && type.indexOf("nocancel") < 0; let hasOk = type != "connecting" && type.indexOf("nook") < 0; let hasClose = type.indexOf("hasclose") >= 0; let show_progress = type == "connecting"; document.body.style.setProperty("border",(color + " solid 1px")); setTimeout(()=>this.$("#content").content(my_translate(content)),1); return (
{my_translate(title)}
{icon &&
{icon}
}
{hasCancel || retry ? : ""} {this.hasSkip() ? : ""} {hasOk || retry ? : ""} {hasClose ? : ""}
); } // TEST ["on click at .custom-event"](_, me) { if (callback) callback(me); } ["on click at button#cancel"]() { view.close(); if (callback) callback(null); } ["on click at button#skip"]() { let values = getValues(); values.skip = true; view.close(values); if (callback) callback(values); } ["on click at button#submit"](){ if (type == "error") { if (retry) { view.close({ reconnect: true }); } else { view.close(); if (callback) callback(null); } return; } if (type == "re-input-password") { type = "input-password"; body.componentUpdate(); set_outline_focus(); return; } var values = getValues(); if (callback) { var err = callback(values, show_progress); if (err && !err.trim()) { return; } if (err) { show_progress(false, err); return; } } view.close(values); } ["on keydown"] (evt) { // TEST if (!evt.shortcutKey) { // TODO TEST Windows/Mac if (evt.code == "KeyRETURN") { submit(); } if (evt.code == "KeyESCAPE") { cancel(); } } } } function show_progress(show=1, err="") { if (show == -1) { view.close() return; } $("#progress").style.setProperty("display",show ? "inline-block" : "none"); $("#error").text = err; } function submit() { if ($("button#submit")) { $("button#submit").click(); // TEST } } function cancel() { if ($("button#cancel")) { $("button#cancel").click(); } } function getValues() { let values = { type: type }; for (let el of $$(".form input")) { values[el.getAttribute("name")] = el.value; } for (let el of $$(".form textarea")) { values[el.getAttribute("name")] = el.value; } for (let el of $$(".form button")) { values[el.getAttribute("name")] = el.value; } if (type == "input-password") { values.password = (values.password || "").trim(); if (!values.password) { return; } } return values; } function set_outline_focus() { setTimeout(function() { let el = $(".outline-focus"); if (el) view.focus = el; else { el = $("#submit"); if (el) view.focus = el; } },30); } set_outline_focus(); // checkParams setInterval(function() { let tmp = getParams(); if (!tmp || !tmp.type) { view.close("!alive"); return; } else if (tmp != params) { params = tmp; updateParams(params); body.componentUpdate(); set_outline_focus(); } },30); document.body.content();