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 } : {};
//
return ;
}
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 (
{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(