function LoginForm(parent, open) { function Login(parent) { this.input = document.createElement("input"); parent.append(this.input); this.setValue = function (value) { this.input.value = value; } this.getValue = function () { return this.input.value; } this.input.oninput = this.input.onchange = function () { if (this.onChange) this.onChange(this.getValue()); }.bind(this); } function Password(parent, open) { this.input = document.createElement("input"); parent.append(this.input); this.setValue = function (value) { this.input.value = value; } this.getValue = function () { return this.input.value; } this.input.oninput = this.input.onchange = function () { if (this.onChange) this.onChange(this.getValue()); }.bind(this); this.setOpen = function (open) { this.input.type = open ? "text" : "password"; } this.getOpen = function () { return this.input.type == "text"; } let check = document.createElement("input"); parent.append(check); check.onchange = function () { this.setOpen(check.checked); if (this.onOpenChange) this.onOpenChange(this.getOpen()); }.bind(this); check.checked = open; check.value = "open"; check.type = "checkbox"; this.setOpen(open); } let form = document.createElement("form"); parent.append(form); this.login = new Login(form); this.password = new Password(form, open); this.button = document.createElement("button"); this.button.innerText = "OK"; this.button.classList.add('btn'); this.button.classList.add('ref-button'); form.append(this.button); let setButtonStateCallback = function setButtonState() { this.button.disabled = !this.login.getValue() || !this.password.getValue(); }.bind(this); this.login.onChange = setButtonStateCallback; this.password.onChange = setButtonStateCallback; this.button.disabled = true; this.button.onclick = function () { if (this.onLogin) this.onLogin(this.login.getValue(), this.password.getValue()); }.bind(this); } function loginPromise(parent) { function executor(fulfill, reject) { const form = new LoginForm(parent); form.onLogin = (login, password) => { fulfill({ 'login': login, 'password': password }) } } return new Promise(executor); } /*loginPromise(document.body) .then(({ login, password }) => console.log(`Вы ввели ${login} и ${password}`));*/