From fd671ceffcdc2f25a94f2dc12d025c6bdef5510b Mon Sep 17 00:00:00 2001
From: a2-imeri <Alfret2.imeri@live.uwe.ac.uk>
Date: Wed, 15 May 2024 19:06:29 +0100
Subject: [PATCH] Finish User Registration

---
 MisplaceAI/.gitignore => .gitignore           |  1 +
 .../static/authentication/js/registration.js  | 35 +++++++++++++++++--
 .../templates/authentication/register.html    | 11 +++---
 3 files changed, 40 insertions(+), 7 deletions(-)
 rename MisplaceAI/.gitignore => .gitignore (82%)

diff --git a/MisplaceAI/.gitignore b/.gitignore
similarity index 82%
rename from MisplaceAI/.gitignore
rename to .gitignore
index a4537bc..29f259e 100644
--- a/MisplaceAI/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 __pycache__/
 **/migrations/*
 !**/migrations/__init__.py
+registration
\ No newline at end of file
diff --git a/MisplaceAI/authentication/static/authentication/js/registration.js b/MisplaceAI/authentication/static/authentication/js/registration.js
index ebd1822..246d81e 100644
--- a/MisplaceAI/authentication/static/authentication/js/registration.js
+++ b/MisplaceAI/authentication/static/authentication/js/registration.js
@@ -1,9 +1,12 @@
 document.addEventListener('DOMContentLoaded', function () {
+    const username = document.querySelector('#id_username');
+    const email = document.querySelector('#id_email');
     const password1 = document.querySelector('#id_password1');
     const password2 = document.querySelector('#id_password2');
     const togglePassword1 = document.querySelector('#togglePassword1');
     const togglePassword2 = document.querySelector('#togglePassword2');
     const passwordMatchMessage = document.querySelector('#passwordMatchMessage');
+    const registerButton = document.querySelector('#registerButton');
 
     togglePassword1.addEventListener('click', function () {
         const type = password1.type === 'password' ? 'text' : 'password';
@@ -45,20 +48,48 @@ document.addEventListener('DOMContentLoaded', function () {
 
     function checkPasswordMatch() {
         if (validatePassword()) {
+            if (password2.value === '') {
+                passwordMatchMessage.textContent = '';
+                return false;
+            }
             if (password1.value === password2.value) {
                 passwordMatchMessage.textContent = 'Passwords match';
                 passwordMatchMessage.classList.remove('text-muted', 'text-danger');
                 passwordMatchMessage.classList.add('text-success');
+                return true;
             } else {
                 passwordMatchMessage.textContent = 'Passwords do not match';
                 passwordMatchMessage.classList.remove('text-muted', 'text-success');
                 passwordMatchMessage.classList.add('text-danger');
+                return false;
             }
         } else {
             passwordMatchMessage.textContent = '';
+            return false;
+        }
+    }
+
+    function validateForm() {
+        const isUsernameFilled = username.value.trim() !== '';
+        const isEmailFilled = email.value.trim() !== '';
+        const isPassword1Valid = validatePassword();
+        const isPasswordMatch = checkPasswordMatch();
+
+        if (isUsernameFilled && isEmailFilled && isPassword1Valid && isPasswordMatch) {
+            registerButton.disabled = false;
+        } else {
+            registerButton.disabled = true;
         }
     }
 
-    password1.addEventListener('input', validatePassword);
-    password2.addEventListener('input', checkPasswordMatch);
+    username.addEventListener('input', validateForm);
+    email.addEventListener('input', validateForm);
+    password1.addEventListener('input', () => {
+        validatePassword();
+        validateForm();
+    });
+    password2.addEventListener('input', () => {
+        checkPasswordMatch();
+        validateForm();
+    });
 });
diff --git a/MisplaceAI/authentication/templates/authentication/register.html b/MisplaceAI/authentication/templates/authentication/register.html
index c8b4694..2a83c57 100644
--- a/MisplaceAI/authentication/templates/authentication/register.html
+++ b/MisplaceAI/authentication/templates/authentication/register.html
@@ -15,16 +15,16 @@
                         {% csrf_token %}
                         {% if form.errors %}
                         <div class="alert alert-danger">
-                            <ul>
+                            <div>
                                 {% for field in form %}
                                 {% for error in field.errors %}
-                                <li>{{ error }}</li>
+                                <p>{{ error }}</p>
                                 {% endfor %}
                                 {% endfor %}
                                 {% for error in form.non_field_errors %}
-                                <li>{{ error }}</li>
+                                <p>{{ error }}</p>
                                 {% endfor %}
-                            </ul>
+                            </div>
                         </div>
                         {% endif %}
                         <div class="form-group">
@@ -68,7 +68,8 @@
                             <small id="passwordMatchMessage" class="form-text text-muted"></small>
                         </div>
                         <div class="form-group text-center">
-                            <button type="submit" class="btn btn-primary btn-block">Register</button>
+                            <button type="submit" class="btn btn-primary btn-block" id="registerButton"
+                                disabled>Register</button>
                         </div>
                     </form>
                 </div>
-- 
GitLab