+ computed: {
+ submitMessage: function() {
+ switch (this.stage)
+ {
+ case "Login":
+ return "Go";
+ case "Register":
+ return "Send";
+ case "Update":
+ return "Apply";
+ }
+ },
+ displayInfo: function() {
+ return (this.infoMsg.length > 0 ? "block" : "none");
+ },
+ stage: function() {
+ return this.user.id > 0 ? "Update" : this.logStage;
+ },
+ },
+ methods: {
+ trySetEnterTime: function(event) {
+ if (!!event.target.checked)
+ this.enterTime = Date.now();
+ },
+ toggleStage: function() {
+ // Loop login <--> register (update is for logged-in users)
+ this.logStage = (this.logStage == "Login" ? "Register" : "Login");
+ },
+ ajaxUrl: function() {
+ switch (this.stage)
+ {
+ case "Login":
+ return "/sendtoken";
+ case "Register":
+ return "/register";
+ case "Update":
+ return "/update";
+ }
+ },
+ ajaxMethod: function() {
+ switch (this.stage)
+ {
+ case "Login":
+ return "GET";
+ case "Register":
+ return "POST";
+ case "Update":
+ return "PUT";
+ }
+ },
+ infoMessage: function() {
+ switch (this.stage)
+ {
+ case "Login":
+ return "Connection token sent. Check your emails!";
+ case "Register":
+ return "Registration complete! Please check your emails.";
+ case "Update":
+ return "Modifications applied!";
+ }
+ },
+ onSubmit: function() {
+ // Basic anti-bot strategy:
+ const exitTime = Date.now();
+ if (this.stage == "Register" && exitTime - this.enterTime < 5000)
+ return; //silently return, in (curious) case of it was legitimate
+ let error = undefined;
+ if (this.stage == 'Login')
+ {
+ const type = (this.nameOrEmail.indexOf('@') >= 0 ? "email" : "name");
+ error = checkNameEmail({[type]: this.nameOrEmail});
+ }
+ else
+ error = checkNameEmail(this.user);
+ if (!!error)
+ return alert(error);
+ this.infoMsg = "Processing... Please wait";
+ ajax(this.ajaxUrl(), this.ajaxMethod(),
+ this.stage == "Login" ? { nameOrEmail: this.nameOrEmail } : this.user,
+ res => {
+ this.infoMsg = this.infoMessage();
+ if (this.stage != "Update")
+ this.nameOrEmail = "";
+ setTimeout(() => {
+ this.infoMsg = "";
+ document.getElementById("modalUser").checked = false;
+ }, 2000);
+ },
+ err => {
+ this.infoMsg = "";
+ alert(err);
+ }
+ );
+ },
+ doLogout: function() {
+ ajax(
+ "/logout",
+ "GET",
+ () => {
+ this.user.id = 0;
+ this.user.name = "";
+ this.user.email = "";
+ this.user.notify = false;
+ delete localStorage["myid"];
+ delete localStorage["myname"];
+ }
+ );
+ },
+ },