You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
5.7 KiB
JavaScript
237 lines
5.7 KiB
JavaScript
function makeDialog(title, text, buttons, additional) {
|
|
const $box = document.createElement('div');
|
|
$box.className = 'dialog_box';
|
|
|
|
const $d = document.createElement('div');
|
|
$box.append($d);
|
|
$d.className = 'ui_col ui_dialog';
|
|
|
|
if (title) {
|
|
const $title = document.createElement('div');
|
|
$d.append($title);
|
|
$title.className = 'ui_row ui_head';
|
|
$title.textContent = title;
|
|
}
|
|
|
|
if (text) {
|
|
const $text = document.createElement('div');
|
|
$d.append($text);
|
|
$text.className = 'ui_row';
|
|
|
|
const $label = document.createElement('label');
|
|
$text.append($label);
|
|
$label.className = 'dialog_row';
|
|
$label.textContent = text;
|
|
}
|
|
|
|
if (additional) {
|
|
const $text = document.createElement('div');
|
|
$d.append($text);
|
|
$text.className = 'ui_row';
|
|
$text.append(additional);
|
|
}
|
|
|
|
if (buttons) {
|
|
const $buttons = document.createElement('div');
|
|
$d.append($buttons);
|
|
$buttons.className = 'ui_row';
|
|
|
|
$buttons.append(document.createElement('div'));
|
|
|
|
const $row = document.createElement('div');
|
|
$buttons.append($row);
|
|
$row.className = 'ui_btn_row';
|
|
|
|
for (const i of buttons) {
|
|
const $btn = document.createElement('button');
|
|
$row.append($btn);
|
|
$btn.className = 'ui_btn ui_btn_mini';
|
|
$btn.textContent = i.text;
|
|
$btn.addEventListener('click', i.click);
|
|
}
|
|
}
|
|
|
|
document.body.appendChild($box);
|
|
return $box;
|
|
}
|
|
|
|
function asyncShowQr($qr, title = null) {
|
|
return new Promise(resolve => {
|
|
const $box = makeDialog(title, null, [{
|
|
text: 'OK',
|
|
click: () => {
|
|
document.body.removeChild($box);
|
|
resolve(true);
|
|
}
|
|
}], $qr);
|
|
});
|
|
}
|
|
|
|
function asyncAlert(text, title = null) {
|
|
return new Promise(resolve => {
|
|
const $box = makeDialog(title, text, [{
|
|
text: 'OK',
|
|
click: () => {
|
|
document.body.removeChild($box);
|
|
resolve(true);
|
|
}
|
|
}]);
|
|
});
|
|
}
|
|
|
|
function asyncConfirm(text, title = null) {
|
|
return new Promise(resolve => {
|
|
const $box = makeDialog(title, text, [
|
|
{
|
|
text: lang.pop_yes,
|
|
click:() => {
|
|
document.body.removeChild($box);
|
|
resolve(true);
|
|
}
|
|
},
|
|
{
|
|
text: lang.pop_no,
|
|
click:() => {
|
|
document.body.removeChild($box);
|
|
resolve(false);
|
|
}
|
|
}
|
|
]);
|
|
});
|
|
}
|
|
|
|
function asyncPrompt(text, placeh = '', title = null) {
|
|
return new Promise(resolve => {
|
|
const $input = document.createElement('input');
|
|
$input.type = 'text';
|
|
$input.value = placeh;
|
|
$input.className = 'ui_inp';
|
|
|
|
const $box = makeDialog(title, text, [
|
|
{
|
|
text: 'OK',
|
|
click:() => {
|
|
const res = $input.value;
|
|
document.body.removeChild($box);
|
|
resolve(res);
|
|
}
|
|
},
|
|
{
|
|
text: lang.cancel,
|
|
click:() => {
|
|
document.body.removeChild($box);
|
|
resolve(null);
|
|
}
|
|
}
|
|
], $input);
|
|
});
|
|
}
|
|
|
|
function makePinDialog(title, canCancel, inputHandler) {
|
|
const $box = document.createElement('div');
|
|
$box.className = 'dialog_box';
|
|
|
|
const $d = document.createElement('div');
|
|
$box.append($d);
|
|
$d.className = 'ui_col ui_dialog';
|
|
|
|
const $title = document.createElement('div');
|
|
$d.append($title);
|
|
$title.className = 'ui_row ui_head';
|
|
$title.textContent = title;
|
|
|
|
const $inpRow = document.createElement('div');
|
|
$d.append($inpRow);
|
|
$inpRow.className = 'ui_row pass_inp_inner';
|
|
|
|
const $input = document.createElement('input');
|
|
$inpRow.append($input);
|
|
$input.className = 'ui_inp pass_inp';
|
|
$input.type = 'number';
|
|
$input.pattern = '[0-9]*';
|
|
$input.inputMode = 'numeric';
|
|
|
|
$d.addEventListener('click', e => {
|
|
const $b = e.target;
|
|
if (!($b instanceof HTMLButtonElement)) return;
|
|
if ($b.classList.contains('pin_cancel')) {
|
|
inputHandler(null);
|
|
return;
|
|
}
|
|
if ($b.textContent === '<') $input.value = $input.value.slice(0, -1);
|
|
else $input.value += $b.textContent;
|
|
inputHandler($input.value);
|
|
})
|
|
|
|
$input.addEventListener('input', () => {
|
|
inputHandler($input.value);
|
|
});
|
|
|
|
for (let i = 0; i < 3; i++) {
|
|
const $row = document.createElement('div');
|
|
$d.append($row);
|
|
$row.className = 'ui_row pin_inner';
|
|
|
|
for (let j = 0; j < 3; j++) {
|
|
const $b = document.createElement('button');
|
|
$row.append($b);
|
|
$b.className = 'ui_btn pin_btn';
|
|
$b.textContent = "" + (i * 3 + j + 1);
|
|
}
|
|
}
|
|
|
|
const $row = document.createElement('div');
|
|
$d.append($row);
|
|
$row.className = 'ui_row pin_inner';
|
|
{
|
|
const $b = document.createElement('button');
|
|
$row.append($b);
|
|
|
|
if (canCancel) {
|
|
$b.className = 'ui_btn pin_btn pin_cancel';
|
|
$b.textContent = lang.cancel;
|
|
} else {
|
|
$b.className = 'ui_btn pin_btn pin_no_btn';
|
|
}
|
|
}
|
|
{
|
|
const $b = document.createElement('button');
|
|
$row.append($b);
|
|
$b.className = 'ui_btn pin_btn';
|
|
$b.textContent = "0";
|
|
}
|
|
{
|
|
const $b = document.createElement('button');
|
|
$row.append($b);
|
|
$b.className = 'ui_btn pin_btn pin_red_btn';
|
|
$b.textContent = "<";
|
|
}
|
|
|
|
document.body.appendChild($box);
|
|
return $box;
|
|
}
|
|
|
|
function asyncAskPin(title, targetPin, canCancel = false) {
|
|
return new Promise(resolve => {
|
|
const $box = makePinDialog(title, canCancel, value => {
|
|
if (value === null || value.hashCode() == targetPin) {
|
|
document.body.removeChild($box);
|
|
resolve(value !== null);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function showPopup(text, color = '#37a93c') {
|
|
const $e = document.createElement('div');
|
|
$e.className = 'notice';
|
|
$e.textContent = text;
|
|
$e.style.background = color;
|
|
document.body.append($e);
|
|
setTimeout(() => { $e.remove(); }, 3500);
|
|
}
|
|
|
|
function showPopupError(text) {
|
|
showPopup(text, /*getErrColor()*/'#a93737');
|
|
}
|