main.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. function showContactForm(){
  2. clearContactErrors();
  3. document.getElementById('contact_menu').style.display = "block";
  4. document.getElementById('contact_progress').style.display = "none";
  5. document.getElementById('contact_confirmation').style.display = "none";
  6. document.getElementById('contact_bg').style.opacity = "0.6";
  7. document.getElementById('contact_bg').style.display = "block";
  8. document.getElementById('contact').style.display = "block";
  9. }
  10. function closeContactForm(){
  11. document.getElementById('contact_bg').style.opacity = "0.0";
  12. document.getElementById('contact_bg').style.display = "none";
  13. document.getElementById('contact').style.display = "none";
  14. }
  15. function clearContactErrors(){
  16. document.getElementById('sender_name_error').style.opacity = "0";
  17. document.getElementById('sender_email_error').style.opacity = "0";
  18. document.getElementById('text_error').style.opacity = "0";
  19. }
  20. function contactSuccess(){
  21. clearContactErrors();
  22. document.getElementById('contact_sender_name').value = "";
  23. document.getElementById('contact_sender_email').value = "";
  24. document.getElementById('contact_text').value = "";
  25. document.getElementById('contact_menu').style.display = "none";
  26. document.getElementById('contact_progress').style.display = "none";
  27. document.getElementById('contact_confirmation').style.display = "block";
  28. }
  29. function contactError(response){
  30. document.getElementById('contact_menu').style.display = "block";
  31. document.getElementById('contact_progress').style.display = "none";
  32. document.getElementById('contact_confirmation').style.display = "none";
  33. var errors = JSON.parse(response.replace(/\s/g, '')).response.errors
  34. for (let i = 0; i < errors.length; i++) {
  35. if (errors[i] === "INVALID_EMAIL"){
  36. document.getElementById('sender_email_error').style.display = "inline";
  37. }
  38. if (errors[i] === "INVALID_TEXT"){
  39. document.getElementById('text_error').style.display = "inline";
  40. }
  41. }
  42. }
  43. function sendMessage(e) {
  44. // Prevent form submit
  45. if (e.preventDefault) e.preventDefault();
  46. // Hide previously shown errors
  47. clearContactErrors();
  48. // Validate fields
  49. var success = true;
  50. var sender_name = document.getElementById('contact_sender_name').value;
  51. var sender_email = document.getElementById('contact_sender_email').value;
  52. var text = document.getElementById('contact_text').value;
  53. // Sender name is always OK
  54. // Sender email has to look like an email
  55. const res = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  56. if (res.test(String(sender_email).toLowerCase()) === false){
  57. success = false;
  58. document.getElementById('sender_email_error').style.opacity = "1";
  59. }
  60. // Text needs to have something
  61. if (text.length < 1){
  62. success = false;
  63. document.getElementById('text_error').style.opacity = "1";
  64. }
  65. if (success === false){
  66. return false;
  67. }
  68. // Send request
  69. var url = "/contact/";
  70. var xhr = new XMLHttpRequest();
  71. xhr.open("POST", url, true);
  72. //xhr.setRequestHeader("Content-Type", "application/json");
  73. xhr.onreadystatechange = function () {
  74. if (xhr.readyState === 4) {
  75. if (xhr.status === 200){
  76. contactSuccess();
  77. }
  78. else{
  79. contactError(xhr.responseText)
  80. }
  81. }};
  82. xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  83. xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  84. datastring =
  85. 'authenticity_token=' + encodeURI(document.getElementById('authenticity_token').value) +
  86. '&sender_name=' + encodeURI(sender_name) +
  87. '&sender_email=' + encodeURI(sender_email) +
  88. '&text=' + encodeURI(text)
  89. document.getElementById('contact_menu').style.display = "none";
  90. document.getElementById('contact_progress').style.display = "block";
  91. document.getElementById('contact_confirmation').style.display = "none";
  92. xhr.send(datastring);
  93. // You must return false to prevent the default form behavior
  94. return false;
  95. }