signin = {
const url = URL.createObjectURL(new Blob([`
<!DOCTYPE html>
<meta charset="utf-8">
<h1>Simulated Login Form</h1>
<form>
<input autofocus name=login placeholder=login type=text size=60>
<button>Sign In</button>
</form>
`], {type: "text/html"}));
invalidation.then(() => URL.revokeObjectURL(url));
return function() {
return new Promise((resolve, reject) => {
const popup = window.open(url, "_blank");
popup.addEventListener("submit", event => {
event.preventDefault();
popup.close();
const login = event.target.login.value.trim();
if (!login) return reject(new Error("empty"));
resolve({login});
});
popup.addEventListener("unload", () => {
if (popup.closed) reject(new Error("closed"));
});
});
};
}