Some more cleaning + fixes
[vchess.git] / client / src / components / ContactForm.vue
CommitLineData
98db2082
BA
1<template lang="pug">
2div
910d631b
BA
3 input#modalContact.modal(
4 type="checkbox"
5 @change="trySetEnterTime($event)"
6 )
7 div(
8 role="dialog"
9 data-checkbox="modalContact"
10 )
9a3049f3 11 .card
98db2082 12 label.modal-close(for="modalContact")
9a3049f3
BA
13 form(@submit.prevent="trySendMessage()" @keyup.enter="trySendMessage()")
14 fieldset
15 label(for="userEmail") {{ st.tr["Email"] }}
16 input#userEmail(type="email")
17 fieldset
18 label(for="mailSubject") {{ st.tr["Subject"] }}
19 input#mailSubject(type="text")
20 fieldset
89021f18 21 textarea#mailContent(:placeholder="st.tr['Your message']")
9a3049f3
BA
22 button(@click="trySendMessage()") {{ st.tr["Send"] }}
23 #dialog.text-center {{ st.tr[infoMsg] }}
98db2082
BA
24</template>
25
26<script>
27import { ajax } from "../utils/ajax";
c66a829b 28import { store } from "@/store";
603b8a8b 29import { checkNameEmail } from "@/data/userCheck";
98db2082 30export default {
c66a829b
BA
31 name: "my-contact-form",
32 data: function() {
33 return {
9a3049f3 34 enterTime: Number.MAX_SAFE_INTEGER, //for a basic anti-bot strategy
c66a829b 35 st: store.state,
6808d7a1 36 infoMsg: ""
c66a829b
BA
37 };
38 },
ccd4a2b7 39 methods: {
9a3049f3 40 trySetEnterTime: function(event) {
6808d7a1 41 if (event.target.checked) {
9a3049f3
BA
42 this.enterTime = Date.now();
43 this.infoMsg = "";
44 }
45 },
98db2082 46 trySendMessage: function() {
9a3049f3
BA
47 // Basic anti-bot strategy:
48 const exitTime = Date.now();
6808d7a1 49 if (exitTime - this.enterTime < 5000) return;
98db2082
BA
50 let email = document.getElementById("userEmail");
51 let subject = document.getElementById("mailSubject");
52 let content = document.getElementById("mailContent");
6808d7a1
BA
53 let error = checkNameEmail({ email: email });
54 if (!error && content.value.trim().length == 0)
55 error = this.st.tr["Empty message"];
56 if (error) {
57 alert(error);
58 return;
59 }
60 if (
61 subject.value.trim().length == 0 &&
62 !confirm(this.st.tr["No subject. Send anyway?"])
63 )
98db2082 64 return;
98db2082
BA
65 // Message sending:
66 ajax(
67 "/messages",
68 "POST",
69 {
70 email: email.value,
71 subject: subject.value,
6808d7a1 72 content: content.value
98db2082
BA
73 },
74 () => {
9a3049f3 75 this.infoMsg = "Email sent!";
98db2082
BA
76 subject.value = "";
77 content.value = "";
98db2082
BA
78 }
79 );
6808d7a1
BA
80 }
81 }
98db2082
BA
82};
83</script>
4f887105
BA
84
85<style lang="sass" scoped>
9a3049f3
BA
86[type="checkbox"].modal+div .card
87 max-width: 767px
88 max-height: 100%
910d631b 89
9a3049f3
BA
90textarea#mailContent
91 width: 100%
92 min-height: 100px
910d631b 93
9a3049f3
BA
94#dialog
95 padding: 5px
dcd68c41 96 color: blue
4f887105 97</style>