From 0d7303fda8565d0870bc3765726c691df3f3ee0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Mon, 26 Feb 2024 14:30:54 +0100 Subject: [PATCH 01/43] Add gitignore file #90 --- staff/adrian-martinez/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 staff/adrian-martinez/.gitignore diff --git a/staff/adrian-martinez/.gitignore b/staff/adrian-martinez/.gitignore new file mode 100644 index 000000000..496ee2ca6 --- /dev/null +++ b/staff/adrian-martinez/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file From dc560d797b25b42decee1780c0462f11a1e1b798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Mon, 26 Feb 2024 15:17:47 +0100 Subject: [PATCH 02/43] Add liveshare files #88 --- staff/adrian-martinez/liveshare/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 staff/adrian-martinez/liveshare/README.md diff --git a/staff/adrian-martinez/liveshare/README.md b/staff/adrian-martinez/liveshare/README.md new file mode 100644 index 000000000..e69de29bb From eace20df1dc28571a3a8b088c02e791bcc03fac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Tue, 27 Feb 2024 23:19:38 +0100 Subject: [PATCH 03/43] Add register.html file #88 --- staff/adrian-martinez/liveshare/register.html | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 staff/adrian-martinez/liveshare/register.html diff --git a/staff/adrian-martinez/liveshare/register.html b/staff/adrian-martinez/liveshare/register.html new file mode 100644 index 000000000..eb46605ac --- /dev/null +++ b/staff/adrian-martinez/liveshare/register.html @@ -0,0 +1,95 @@ + + + + + + Register User + + +
+

Register

+ +
+ + + + + + + + + + + + + + + + +
+ Login +
+ + + + \ No newline at end of file From bf2a7889eb98bb4a687d2c1c28837f2b17aecfd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Wed, 28 Feb 2024 23:37:46 +0100 Subject: [PATCH 04/43] Add the layer of the arquitecture web files #88 --- staff/adrian-martinez/liveshare/app/README.md | 0 staff/adrian-martinez/liveshare/app/data.js | 2 + staff/adrian-martinez/liveshare/app/logic.js | 95 +++++++++++++++++++ .../liveshare/app/register.css | 9 ++ .../liveshare/app/register.html | 38 ++++++++ .../adrian-martinez/liveshare/app/register.js | 38 ++++++++ 6 files changed, 182 insertions(+) create mode 100644 staff/adrian-martinez/liveshare/app/README.md create mode 100644 staff/adrian-martinez/liveshare/app/data.js create mode 100644 staff/adrian-martinez/liveshare/app/logic.js create mode 100644 staff/adrian-martinez/liveshare/app/register.css create mode 100644 staff/adrian-martinez/liveshare/app/register.html create mode 100644 staff/adrian-martinez/liveshare/app/register.js diff --git a/staff/adrian-martinez/liveshare/app/README.md b/staff/adrian-martinez/liveshare/app/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js new file mode 100644 index 000000000..5c0e64685 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -0,0 +1,2 @@ +//Capa de datos o modelo +var users = []; \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js new file mode 100644 index 000000000..fe0a44f7a --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -0,0 +1,95 @@ +//Capa de lógica o controlador + + function registerUser(name, birthdate, username, email, password){ + + if(name.length < 1){ + + throw new Error("Error. Ningún nombre tiene menos de 1 caracter"); + } + + var nameIsBlank = true; + for(let i=0;i < name.length && nameIsBlank; i++){ + + var char = name[i]; + if(char !== " "){ + + nameIsBlank = false; + } + } + if(nameIsBlank){ + + throw new Error("Error. El nombre tiene espacios"); + } + if(birthdate.length !== 10){ + + throw new Error("Error. Tu fecha de cumpleaños debe tener 10 caracteres"); + } + if(birthdate.includes(" ")){ + + throw new Error("Error. Tu fecha de cumpleaños no debe tener espacios en blanco"); + } + if(birthdate.indexOf("-") !== 4 || birthdate.lastIndexOf("-") !== 7){ + + throw new Error("Error. Los guiones de tu fecha de cumpleaños no están en la posición correcta"); + } + + //TODO check that birthdate has only 2 dashes + //TODO check that birthdate has no alphabet characters (only numbrer and 2 dashes) + //TODO check that birthdate is equal or greater than 18 years old + + if(name.length < 3){ + + throw new Error("Error. El nombre debe tener por lo menos 3 caracteres"); + } + if(name.includes(" ")){ + + throw new Error("Error. El nombre tiene algún caracter en blanco"); + } + if(username.includes(" ")){ + + throw new Error("Error. El nombre tiene algún caracter en blanco"); + } + if(email.length < 6){ + + throw new Error("Error. El correo debe tener por lo menos 6 caracteres"); + } + if(!email.includes("@")){ + + throw new Error("Error. El correo debe tener una @ que separe tu nombre del nombre de dominio"); + } + if(!email.includes(".")){ + + throw new Error("Error. El correo debe tener un punto"); + } + if(email.lastIndexOf(".") < email.indexOf("@")){ + + throw new Error("Error. El correo no debe tener un . antes de la @"); + } + if(password.length < 8){ + + throw new Error("Error. La contraseña debe tener un mínimo de 8 caracteres"); + } + if(password.includes(" ")){ + + throw new Error("Error. La contraseña no debe tener espacios"); + } + for(let i=0;i < users.length;i++){ + + let user = users[i]; + + if(user.email == email){ + + throw new Error("Error. El usuario ya existe"); + } + } + + const user ={ + name: name, + birthdate: birthdate, + username: username, + email: email, + password: password + } + + users[users.length] = user; + } diff --git a/staff/adrian-martinez/liveshare/app/register.css b/staff/adrian-martinez/liveshare/app/register.css new file mode 100644 index 000000000..fb999bb3e --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/register.css @@ -0,0 +1,9 @@ + +.main{ + padding-left: 20vw; + padding-right: 20vw; +} +.form{ + display: flex; + flex-direction: column; +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/register.html b/staff/adrian-martinez/liveshare/app/register.html new file mode 100644 index 000000000..5a7a99353 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/register.html @@ -0,0 +1,38 @@ + + + + + + Register User + + + +
+

Register

+ +
+ + + + + + + + + + + + + + + + +
+ Login +
+ + + + + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/register.js b/staff/adrian-martinez/liveshare/app/register.js new file mode 100644 index 000000000..d3aa77410 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/register.js @@ -0,0 +1,38 @@ +//Capa de presentación o vista +var form = document.querySelector(".form"); + +form.onsubmit = function (event){ + + event.preventDefault(); //Esto para evitar que le página se recargue al enviar el formulario + + //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios + + var nameInput = form.querySelector("#name"); + var name = nameInput.value; + + var birthdateInput = form.querySelector("#birthdate"); + var birthdate = birthdateInput.value; + + var usernameInput = form.querySelector("#username"); + var username = usernameInput.value; + + var emailInput = form.querySelector("#email"); + var email = emailInput.value; + + var passwordInput = form.querySelector("#password"); + var password = passwordInput.value; + + + try{ + registerUser(name, birthdate, username, email, password); + + console.log("USUARIO REGISTRADO"); + alert("USUARIO REGISTRADO"); + form.reset(); + } + catch(e){ + + console.error(e.message); + alert(e); + } +} \ No newline at end of file From 6a9dffbd422a53f4f8431763bd28dd73eb1151d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Thu, 29 Feb 2024 18:37:16 +0100 Subject: [PATCH 05/43] Add the login and register modificado #88 --- staff/adrian-martinez/liveshare/app/data.js | 7 ++- staff/adrian-martinez/liveshare/app/home.html | 13 +++++ staff/adrian-martinez/liveshare/app/logic.js | 48 ++++++++++++++++++- .../adrian-martinez/liveshare/app/login.html | 30 ++++++++++++ staff/adrian-martinez/liveshare/app/login.js | 31 ++++++++++++ .../liveshare/app/register.html | 2 +- .../adrian-martinez/liveshare/app/register.js | 3 ++ 7 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 staff/adrian-martinez/liveshare/app/home.html create mode 100644 staff/adrian-martinez/liveshare/app/login.html create mode 100644 staff/adrian-martinez/liveshare/app/login.js diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index 5c0e64685..342e99c10 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -1,2 +1,7 @@ //Capa de datos o modelo -var users = []; \ No newline at end of file +var users = []; + +if(localStorage.users){ + + users = JSON.parse(localStorage.users); +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html new file mode 100644 index 000000000..49d142624 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -0,0 +1,13 @@ + + + + + + Inicio + + + +

Hello, Home!

+ + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index fe0a44f7a..15946866e 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -79,11 +79,15 @@ if(user.email == email){ + throw new Error("Error. El correo ya existe"); + } + if(user.usename == username){ + throw new Error("Error. El usuario ya existe"); } } - const user ={ + const user = { name: name, birthdate: birthdate, username: username, @@ -92,4 +96,46 @@ } users[users.length] = user; + + //Hay que guardar el usuario en LocalStorage en formato JSON + localStorage.users = JSON.stringify(users); + } + function loginUser(username, password){ + + if(username.length < 3){ + + throw new Error("El usuario debe tener por lo menos 3 caracteres"); + } + if(username.includes(" ")){ + + throw new Error("El usuario no debe tener espacios"); + } + if(password.length < 8){ + + throw new Error("La contraseña debe tener por lo menos 8 caracteres"); + } + if(password.includes(" ")){ + + throw new Error("La contraseña no debe tener espacios"); + } + + var user; + + for(let i=0;i < users.length;i++){ + + let userBuscado = users[i]; + if(userBuscado.username == username){ + + user = userBuscado; + break; + } + } + if(user === undefined){ + + throw new Error("Usuario no encontrado"); + } + if(user.password !== password){ + + throw new Error("Contraseña incorrecta"); + } } diff --git a/staff/adrian-martinez/liveshare/app/login.html b/staff/adrian-martinez/liveshare/app/login.html new file mode 100644 index 000000000..be5b2fc43 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/login.html @@ -0,0 +1,30 @@ + + + + + + Login User + + + +
+

Login

+
+ +
+ + + + + + + +
+ Register +
+ + + + + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/login.js b/staff/adrian-martinez/liveshare/app/login.js new file mode 100644 index 000000000..63a6ca41f --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/login.js @@ -0,0 +1,31 @@ + +var form = document.querySelector(".form"); + +form.onsubmit = function (event){ + + event.preventDefault(); + + //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios + + var usernameInput = form.querySelector("#username"); + var username = usernameInput.value; + + var passwordInput = form.querySelector("#password"); + var password = passwordInput.value; + + try{ + loginUser(username, password); + + console.log("Usuario logueado!"); + alert("Bienvenido "+ username); + + form.reset(); + + //TODO navigate to home + } + catch(e){ + + console.error(e.message); + alert(e.message); + } +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/register.html b/staff/adrian-martinez/liveshare/app/register.html index 5a7a99353..12ece87cc 100644 --- a/staff/adrian-martinez/liveshare/app/register.html +++ b/staff/adrian-martinez/liveshare/app/register.html @@ -28,7 +28,7 @@

Register

- Login + Login diff --git a/staff/adrian-martinez/liveshare/app/register.js b/staff/adrian-martinez/liveshare/app/register.js index d3aa77410..aa80e1e64 100644 --- a/staff/adrian-martinez/liveshare/app/register.js +++ b/staff/adrian-martinez/liveshare/app/register.js @@ -1,5 +1,6 @@ //Capa de presentación o vista var form = document.querySelector(".form"); +var anchor = document.querySelector("a"); form.onsubmit = function (event){ @@ -29,6 +30,8 @@ form.onsubmit = function (event){ console.log("USUARIO REGISTRADO"); alert("USUARIO REGISTRADO"); form.reset(); + + anchor.click(); //Para que reedirija a login automáticamente una registrado } catch(e){ From 9a7c72278f01c54243cd869a6b62a4086d8d2bed Mon Sep 17 00:00:00 2001 From: Strider Date: Sun, 3 Mar 2024 20:19:18 +0100 Subject: [PATCH 06/43] Add ultimate files #88 --- staff/adrian-martinez/liveshare/app/home.html | 9 ++++-- staff/adrian-martinez/liveshare/app/home.js | 25 ++++++++++++++++ staff/adrian-martinez/liveshare/app/logic.js | 29 +++++++++++++++++++ .../adrian-martinez/liveshare/app/login.html | 2 +- staff/adrian-martinez/liveshare/app/login.js | 10 +++++-- .../liveshare/app/register.html | 2 +- .../liveshare/app/{register.css => style.css} | 0 7 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 staff/adrian-martinez/liveshare/app/home.js rename staff/adrian-martinez/liveshare/app/{register.css => style.css} (100%) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 49d142624..1028e85c1 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -4,10 +4,15 @@ Inicio - +

Hello, Home!

- + + + + + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js new file mode 100644 index 000000000..c458bab6e --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -0,0 +1,25 @@ + +let title = document.querySelector("h1"); +let logoutButton = document.querySelector("button"); + +try{ + let user = retrieveUser(sessionStorage.username); + + title.innerText = "Hello, "+ user.name +"!"; +} +catch(e){ + let homeAddress = location.href; + let loginAddress = homeAddress.replace("home", "login"); + + location.href = loginAddress; +} + +logoutButton.onclick = function(){ + + delete sessionStorage.username; + + let homeAddress = location.href; + let loginAddress = homeAddress.replace("home", "login"); + + location.href = loginAddress; +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 15946866e..3266ddd40 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -139,3 +139,32 @@ throw new Error("Contraseña incorrecta"); } } + + function retrieveUser(username){ + + if(username.length < 3){ + + throw new Error("ERROR. El nombre de usuario debe tener más de 3 caracteres"); + } + if(username.includes(" ")){ + + throw new Error("ERROR. El nombre de usuario no debe tener espacios"); + } + + var user; + + for(let i=0;i < users.length;i++){ + + var user2 = users[i]; + if(user2.usename == sessionStorage.Storage.username){ + + user = user2; + break; //Si encuentra al usuario salimos del bucle. + } + } + if(user === undefined){ + + throw new Error("Usuario no encontrado"); + } + return user; + } diff --git a/staff/adrian-martinez/liveshare/app/login.html b/staff/adrian-martinez/liveshare/app/login.html index be5b2fc43..c2d57ccff 100644 --- a/staff/adrian-martinez/liveshare/app/login.html +++ b/staff/adrian-martinez/liveshare/app/login.html @@ -4,7 +4,7 @@ Login User - +
diff --git a/staff/adrian-martinez/liveshare/app/login.js b/staff/adrian-martinez/liveshare/app/login.js index 63a6ca41f..85c41ea3e 100644 --- a/staff/adrian-martinez/liveshare/app/login.js +++ b/staff/adrian-martinez/liveshare/app/login.js @@ -16,12 +16,18 @@ form.onsubmit = function (event){ try{ loginUser(username, password); + sessionStorage.username = username; + console.log("Usuario logueado!"); alert("Bienvenido "+ username); - form.reset(); - //TODO navigate to home + let loginAddress = location.href; + let homeAddress = loginAddress.replace("login","home"); + + location.href = homeAddress; + + form.reset(); } catch(e){ diff --git a/staff/adrian-martinez/liveshare/app/register.html b/staff/adrian-martinez/liveshare/app/register.html index 12ece87cc..d9a1d35ec 100644 --- a/staff/adrian-martinez/liveshare/app/register.html +++ b/staff/adrian-martinez/liveshare/app/register.html @@ -4,7 +4,7 @@ Register User - +
diff --git a/staff/adrian-martinez/liveshare/app/register.css b/staff/adrian-martinez/liveshare/app/style.css similarity index 100% rename from staff/adrian-martinez/liveshare/app/register.css rename to staff/adrian-martinez/liveshare/app/style.css From 0dc6010076e7ef1dc05d8560db3e466741f5a491 Mon Sep 17 00:00:00 2001 From: Strider Date: Sun, 3 Mar 2024 20:31:47 +0100 Subject: [PATCH 07/43] Add ultimate files #88 --- staff/adrian-martinez/liveshare/app/login.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staff/adrian-martinez/liveshare/app/login.js b/staff/adrian-martinez/liveshare/app/login.js index 85c41ea3e..009478031 100644 --- a/staff/adrian-martinez/liveshare/app/login.js +++ b/staff/adrian-martinez/liveshare/app/login.js @@ -2,7 +2,7 @@ var form = document.querySelector(".form"); form.onsubmit = function (event){ - + event.preventDefault(); //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios From 8490a908cca50819e21f8a319ca0ae2872b0d83d Mon Sep 17 00:00:00 2001 From: adrianmi89 <47102963+adrianmi89@users.noreply.github.com> Date: Sun, 3 Mar 2024 20:35:13 +0100 Subject: [PATCH 08/43] Add ultimate files --- .../liveshare/app/app/README.md | 0 .../adrian-martinez/liveshare/app/app/data.js | 7 + .../liveshare/app/app/home.html | 18 ++ .../adrian-martinez/liveshare/app/app/home.js | 25 +++ .../liveshare/app/app/logic.js | 170 ++++++++++++++++++ .../liveshare/app/app/login.html | 30 ++++ .../liveshare/app/app/login.js | 37 ++++ .../liveshare/app/app/register.html | 38 ++++ .../liveshare/app/app/register.js | 41 +++++ .../liveshare/app/app/style.css | 9 + 10 files changed, 375 insertions(+) create mode 100644 staff/adrian-martinez/liveshare/app/app/README.md create mode 100644 staff/adrian-martinez/liveshare/app/app/data.js create mode 100644 staff/adrian-martinez/liveshare/app/app/home.html create mode 100644 staff/adrian-martinez/liveshare/app/app/home.js create mode 100644 staff/adrian-martinez/liveshare/app/app/logic.js create mode 100644 staff/adrian-martinez/liveshare/app/app/login.html create mode 100644 staff/adrian-martinez/liveshare/app/app/login.js create mode 100644 staff/adrian-martinez/liveshare/app/app/register.html create mode 100644 staff/adrian-martinez/liveshare/app/app/register.js create mode 100644 staff/adrian-martinez/liveshare/app/app/style.css diff --git a/staff/adrian-martinez/liveshare/app/app/README.md b/staff/adrian-martinez/liveshare/app/app/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/staff/adrian-martinez/liveshare/app/app/data.js b/staff/adrian-martinez/liveshare/app/app/data.js new file mode 100644 index 000000000..ba681eb0c --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/data.js @@ -0,0 +1,7 @@ +//Capa de datos o modelo +var users = []; + +if(localStorage.users){ + + users = JSON.parse(localStorage.users); +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/home.html b/staff/adrian-martinez/liveshare/app/app/home.html new file mode 100644 index 000000000..1fe49fc0a --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/home.html @@ -0,0 +1,18 @@ + + + + + + Inicio + + + +

Hello, Home!

+ + + + + + + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/home.js b/staff/adrian-martinez/liveshare/app/app/home.js new file mode 100644 index 000000000..4571e46ac --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/home.js @@ -0,0 +1,25 @@ + +let title = document.querySelector("h1"); +let logoutButton = document.querySelector("button"); + +try{ + let user = retrieveUser(sessionStorage.username); + + title.innerText = "Hello, "+ user.name +"!"; +} +catch(e){ + let homeAddress = location.href; + let loginAddress = homeAddress.replace("home", "login"); + + location.href = loginAddress; +} + +logoutButton.onclick = function(){ + + delete sessionStorage.username; + + let homeAddress = location.href; + let loginAddress = homeAddress.replace("home", "login"); + + location.href = loginAddress; +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/logic.js b/staff/adrian-martinez/liveshare/app/app/logic.js new file mode 100644 index 000000000..7c0287fba --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/logic.js @@ -0,0 +1,170 @@ +//Capa de lógica o controlador + + function registerUser(name, birthdate, username, email, password){ + + if(name.length < 1){ + + throw new Error("Error. Ningún nombre tiene menos de 1 caracter"); + } + + var nameIsBlank = true; + for(let i=0;i < name.length && nameIsBlank; i++){ + + var char = name[i]; + if(char !== " "){ + + nameIsBlank = false; + } + } + if(nameIsBlank){ + + throw new Error("Error. El nombre tiene espacios"); + } + if(birthdate.length !== 10){ + + throw new Error("Error. Tu fecha de cumpleaños debe tener 10 caracteres"); + } + if(birthdate.includes(" ")){ + + throw new Error("Error. Tu fecha de cumpleaños no debe tener espacios en blanco"); + } + if(birthdate.indexOf("-") !== 4 || birthdate.lastIndexOf("-") !== 7){ + + throw new Error("Error. Los guiones de tu fecha de cumpleaños no están en la posición correcta"); + } + + //TODO check that birthdate has only 2 dashes + //TODO check that birthdate has no alphabet characters (only numbrer and 2 dashes) + //TODO check that birthdate is equal or greater than 18 years old + + if(name.length < 3){ + + throw new Error("Error. El nombre debe tener por lo menos 3 caracteres"); + } + if(name.includes(" ")){ + + throw new Error("Error. El nombre tiene algún caracter en blanco"); + } + if(username.includes(" ")){ + + throw new Error("Error. El nombre tiene algún caracter en blanco"); + } + if(email.length < 6){ + + throw new Error("Error. El correo debe tener por lo menos 6 caracteres"); + } + if(!email.includes("@")){ + + throw new Error("Error. El correo debe tener una @ que separe tu nombre del nombre de dominio"); + } + if(!email.includes(".")){ + + throw new Error("Error. El correo debe tener un punto"); + } + if(email.lastIndexOf(".") < email.indexOf("@")){ + + throw new Error("Error. El correo no debe tener un . antes de la @"); + } + if(password.length < 8){ + + throw new Error("Error. La contraseña debe tener un mínimo de 8 caracteres"); + } + if(password.includes(" ")){ + + throw new Error("Error. La contraseña no debe tener espacios"); + } + for(let i=0;i < users.length;i++){ + + let user = users[i]; + + if(user.email == email){ + + throw new Error("Error. El correo ya existe"); + } + if(user.usename == username){ + + throw new Error("Error. El usuario ya existe"); + } + } + + const user = { + name: name, + birthdate: birthdate, + username: username, + email: email, + password: password + } + + users[users.length] = user; + + //Hay que guardar el usuario en LocalStorage en formato JSON + localStorage.users = JSON.stringify(users); + } + function loginUser(username, password){ + + if(username.length < 3){ + + throw new Error("El usuario debe tener por lo menos 3 caracteres"); + } + if(username.includes(" ")){ + + throw new Error("El usuario no debe tener espacios"); + } + if(password.length < 8){ + + throw new Error("La contraseña debe tener por lo menos 8 caracteres"); + } + if(password.includes(" ")){ + + throw new Error("La contraseña no debe tener espacios"); + } + + var user; + + for(let i=0;i < users.length;i++){ + + let userBuscado = users[i]; + if(userBuscado.username == username){ + + user = userBuscado; + break; + } + } + if(user === undefined){ + + throw new Error("Usuario no encontrado"); + } + if(user.password !== password){ + + throw new Error("Contraseña incorrecta"); + } + } + + function retrieveUser(username){ + + if(username.length < 3){ + + throw new Error("ERROR. El nombre de usuario debe tener más de 3 caracteres"); + } + if(username.includes(" ")){ + + throw new Error("ERROR. El nombre de usuario no debe tener espacios"); + } + + var user; + + for(let i=0;i < users.length;i++){ + + var user2 = users[i]; + if(user2.usename == sessionStorage.Storage.username){ + + user = user2; + break; //Si encuentra al usuario salimos del bucle. + } + } + if(user === undefined){ + + throw new Error("Usuario no encontrado"); + } + return user; + } diff --git a/staff/adrian-martinez/liveshare/app/app/login.html b/staff/adrian-martinez/liveshare/app/app/login.html new file mode 100644 index 000000000..9f0234c58 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/login.html @@ -0,0 +1,30 @@ + + + + + + Login User + + + +
+

Login

+
+ +
+ + + + + + + +
+ Register +
+ + + + + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/login.js b/staff/adrian-martinez/liveshare/app/app/login.js new file mode 100644 index 000000000..5e19a38e9 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/login.js @@ -0,0 +1,37 @@ + +var form = document.querySelector(".form"); + +form.onsubmit = function (event){ + + event.preventDefault(); + + //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios + + var usernameInput = form.querySelector("#username"); + var username = usernameInput.value; + + var passwordInput = form.querySelector("#password"); + var password = passwordInput.value; + + try{ + loginUser(username, password); + + sessionStorage.username = username; + + console.log("Usuario logueado!"); + alert("Bienvenido "+ username); + + + let loginAddress = location.href; + let homeAddress = loginAddress.replace("login","home"); + + location.href = homeAddress; + + form.reset(); + } + catch(e){ + + console.error(e.message); + alert(e.message); + } +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/register.html b/staff/adrian-martinez/liveshare/app/app/register.html new file mode 100644 index 000000000..4f3656b80 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/register.html @@ -0,0 +1,38 @@ + + + + + + Register User + + + +
+

Register

+ +
+ + + + + + + + + + + + + + + + +
+ Login +
+ + + + + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/register.js b/staff/adrian-martinez/liveshare/app/app/register.js new file mode 100644 index 000000000..e28a887f7 --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/register.js @@ -0,0 +1,41 @@ +//Capa de presentación o vista +var form = document.querySelector(".form"); +var anchor = document.querySelector("a"); + +form.onsubmit = function (event){ + + event.preventDefault(); //Esto para evitar que le página se recargue al enviar el formulario + + //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios + + var nameInput = form.querySelector("#name"); + var name = nameInput.value; + + var birthdateInput = form.querySelector("#birthdate"); + var birthdate = birthdateInput.value; + + var usernameInput = form.querySelector("#username"); + var username = usernameInput.value; + + var emailInput = form.querySelector("#email"); + var email = emailInput.value; + + var passwordInput = form.querySelector("#password"); + var password = passwordInput.value; + + + try{ + registerUser(name, birthdate, username, email, password); + + console.log("USUARIO REGISTRADO"); + alert("USUARIO REGISTRADO"); + form.reset(); + + anchor.click(); //Para que reedirija a login automáticamente una registrado + } + catch(e){ + + console.error(e.message); + alert(e); + } +} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/style.css b/staff/adrian-martinez/liveshare/app/app/style.css new file mode 100644 index 000000000..a4c3a086d --- /dev/null +++ b/staff/adrian-martinez/liveshare/app/app/style.css @@ -0,0 +1,9 @@ + +.main{ + padding-left: 20vw; + padding-right: 20vw; +} +.form{ + display: flex; + flex-direction: column; +} \ No newline at end of file From d147299fb9ba5254da6bcfddb01d268593fff09f Mon Sep 17 00:00:00 2001 From: Strider Date: Mon, 4 Mar 2024 09:50:13 +0100 Subject: [PATCH 09/43] Add home.js and logic.js changes #88 --- staff/adrian-martinez/liveshare/app/home.js | 1 + staff/adrian-martinez/liveshare/app/logic.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index c458bab6e..1878c4b44 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -12,6 +12,7 @@ catch(e){ let loginAddress = homeAddress.replace("home", "login"); location.href = loginAddress; + alert(e.message); } logoutButton.onclick = function(){ diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 3266ddd40..1c7a52773 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -156,7 +156,7 @@ for(let i=0;i < users.length;i++){ var user2 = users[i]; - if(user2.usename == sessionStorage.Storage.username){ + if(user2.usename == sessionStorage.username){ user = user2; break; //Si encuentra al usuario salimos del bucle. From d2582de1989f75f81fb1cf4551fb75704400c580 Mon Sep 17 00:00:00 2001 From: Strider Date: Mon, 4 Mar 2024 15:41:26 +0100 Subject: [PATCH 10/43] Corregir proceso de login file #88 --- staff/adrian-martinez/liveshare/README.md | 0 .../liveshare/app/app/README.md | 0 .../adrian-martinez/liveshare/app/app/data.js | 7 - .../liveshare/app/app/home.html | 18 -- .../adrian-martinez/liveshare/app/app/home.js | 25 --- .../liveshare/app/app/logic.js | 170 ------------------ .../liveshare/app/app/login.html | 30 ---- .../liveshare/app/app/login.js | 37 ---- .../liveshare/app/app/register.html | 38 ---- .../liveshare/app/app/register.js | 41 ----- .../liveshare/app/app/style.css | 9 - staff/adrian-martinez/liveshare/app/home.js | 18 +- staff/adrian-martinez/liveshare/app/logic.js | 4 +- staff/adrian-martinez/liveshare/register.html | 95 ---------- 14 files changed, 11 insertions(+), 481 deletions(-) delete mode 100644 staff/adrian-martinez/liveshare/README.md delete mode 100644 staff/adrian-martinez/liveshare/app/app/README.md delete mode 100644 staff/adrian-martinez/liveshare/app/app/data.js delete mode 100644 staff/adrian-martinez/liveshare/app/app/home.html delete mode 100644 staff/adrian-martinez/liveshare/app/app/home.js delete mode 100644 staff/adrian-martinez/liveshare/app/app/logic.js delete mode 100644 staff/adrian-martinez/liveshare/app/app/login.html delete mode 100644 staff/adrian-martinez/liveshare/app/app/login.js delete mode 100644 staff/adrian-martinez/liveshare/app/app/register.html delete mode 100644 staff/adrian-martinez/liveshare/app/app/register.js delete mode 100644 staff/adrian-martinez/liveshare/app/app/style.css delete mode 100644 staff/adrian-martinez/liveshare/register.html diff --git a/staff/adrian-martinez/liveshare/README.md b/staff/adrian-martinez/liveshare/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/adrian-martinez/liveshare/app/app/README.md b/staff/adrian-martinez/liveshare/app/app/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/adrian-martinez/liveshare/app/app/data.js b/staff/adrian-martinez/liveshare/app/app/data.js deleted file mode 100644 index ba681eb0c..000000000 --- a/staff/adrian-martinez/liveshare/app/app/data.js +++ /dev/null @@ -1,7 +0,0 @@ -//Capa de datos o modelo -var users = []; - -if(localStorage.users){ - - users = JSON.parse(localStorage.users); -} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/home.html b/staff/adrian-martinez/liveshare/app/app/home.html deleted file mode 100644 index 1fe49fc0a..000000000 --- a/staff/adrian-martinez/liveshare/app/app/home.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Inicio - - - -

Hello, Home!

- - - - - - - - \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/home.js b/staff/adrian-martinez/liveshare/app/app/home.js deleted file mode 100644 index 4571e46ac..000000000 --- a/staff/adrian-martinez/liveshare/app/app/home.js +++ /dev/null @@ -1,25 +0,0 @@ - -let title = document.querySelector("h1"); -let logoutButton = document.querySelector("button"); - -try{ - let user = retrieveUser(sessionStorage.username); - - title.innerText = "Hello, "+ user.name +"!"; -} -catch(e){ - let homeAddress = location.href; - let loginAddress = homeAddress.replace("home", "login"); - - location.href = loginAddress; -} - -logoutButton.onclick = function(){ - - delete sessionStorage.username; - - let homeAddress = location.href; - let loginAddress = homeAddress.replace("home", "login"); - - location.href = loginAddress; -} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/logic.js b/staff/adrian-martinez/liveshare/app/app/logic.js deleted file mode 100644 index 7c0287fba..000000000 --- a/staff/adrian-martinez/liveshare/app/app/logic.js +++ /dev/null @@ -1,170 +0,0 @@ -//Capa de lógica o controlador - - function registerUser(name, birthdate, username, email, password){ - - if(name.length < 1){ - - throw new Error("Error. Ningún nombre tiene menos de 1 caracter"); - } - - var nameIsBlank = true; - for(let i=0;i < name.length && nameIsBlank; i++){ - - var char = name[i]; - if(char !== " "){ - - nameIsBlank = false; - } - } - if(nameIsBlank){ - - throw new Error("Error. El nombre tiene espacios"); - } - if(birthdate.length !== 10){ - - throw new Error("Error. Tu fecha de cumpleaños debe tener 10 caracteres"); - } - if(birthdate.includes(" ")){ - - throw new Error("Error. Tu fecha de cumpleaños no debe tener espacios en blanco"); - } - if(birthdate.indexOf("-") !== 4 || birthdate.lastIndexOf("-") !== 7){ - - throw new Error("Error. Los guiones de tu fecha de cumpleaños no están en la posición correcta"); - } - - //TODO check that birthdate has only 2 dashes - //TODO check that birthdate has no alphabet characters (only numbrer and 2 dashes) - //TODO check that birthdate is equal or greater than 18 years old - - if(name.length < 3){ - - throw new Error("Error. El nombre debe tener por lo menos 3 caracteres"); - } - if(name.includes(" ")){ - - throw new Error("Error. El nombre tiene algún caracter en blanco"); - } - if(username.includes(" ")){ - - throw new Error("Error. El nombre tiene algún caracter en blanco"); - } - if(email.length < 6){ - - throw new Error("Error. El correo debe tener por lo menos 6 caracteres"); - } - if(!email.includes("@")){ - - throw new Error("Error. El correo debe tener una @ que separe tu nombre del nombre de dominio"); - } - if(!email.includes(".")){ - - throw new Error("Error. El correo debe tener un punto"); - } - if(email.lastIndexOf(".") < email.indexOf("@")){ - - throw new Error("Error. El correo no debe tener un . antes de la @"); - } - if(password.length < 8){ - - throw new Error("Error. La contraseña debe tener un mínimo de 8 caracteres"); - } - if(password.includes(" ")){ - - throw new Error("Error. La contraseña no debe tener espacios"); - } - for(let i=0;i < users.length;i++){ - - let user = users[i]; - - if(user.email == email){ - - throw new Error("Error. El correo ya existe"); - } - if(user.usename == username){ - - throw new Error("Error. El usuario ya existe"); - } - } - - const user = { - name: name, - birthdate: birthdate, - username: username, - email: email, - password: password - } - - users[users.length] = user; - - //Hay que guardar el usuario en LocalStorage en formato JSON - localStorage.users = JSON.stringify(users); - } - function loginUser(username, password){ - - if(username.length < 3){ - - throw new Error("El usuario debe tener por lo menos 3 caracteres"); - } - if(username.includes(" ")){ - - throw new Error("El usuario no debe tener espacios"); - } - if(password.length < 8){ - - throw new Error("La contraseña debe tener por lo menos 8 caracteres"); - } - if(password.includes(" ")){ - - throw new Error("La contraseña no debe tener espacios"); - } - - var user; - - for(let i=0;i < users.length;i++){ - - let userBuscado = users[i]; - if(userBuscado.username == username){ - - user = userBuscado; - break; - } - } - if(user === undefined){ - - throw new Error("Usuario no encontrado"); - } - if(user.password !== password){ - - throw new Error("Contraseña incorrecta"); - } - } - - function retrieveUser(username){ - - if(username.length < 3){ - - throw new Error("ERROR. El nombre de usuario debe tener más de 3 caracteres"); - } - if(username.includes(" ")){ - - throw new Error("ERROR. El nombre de usuario no debe tener espacios"); - } - - var user; - - for(let i=0;i < users.length;i++){ - - var user2 = users[i]; - if(user2.usename == sessionStorage.Storage.username){ - - user = user2; - break; //Si encuentra al usuario salimos del bucle. - } - } - if(user === undefined){ - - throw new Error("Usuario no encontrado"); - } - return user; - } diff --git a/staff/adrian-martinez/liveshare/app/app/login.html b/staff/adrian-martinez/liveshare/app/app/login.html deleted file mode 100644 index 9f0234c58..000000000 --- a/staff/adrian-martinez/liveshare/app/app/login.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Login User - - - -
-

Login

-
- -
- - - - - - - -
- Register -
- - - - - - \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/login.js b/staff/adrian-martinez/liveshare/app/app/login.js deleted file mode 100644 index 5e19a38e9..000000000 --- a/staff/adrian-martinez/liveshare/app/app/login.js +++ /dev/null @@ -1,37 +0,0 @@ - -var form = document.querySelector(".form"); - -form.onsubmit = function (event){ - - event.preventDefault(); - - //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios - - var usernameInput = form.querySelector("#username"); - var username = usernameInput.value; - - var passwordInput = form.querySelector("#password"); - var password = passwordInput.value; - - try{ - loginUser(username, password); - - sessionStorage.username = username; - - console.log("Usuario logueado!"); - alert("Bienvenido "+ username); - - - let loginAddress = location.href; - let homeAddress = loginAddress.replace("login","home"); - - location.href = homeAddress; - - form.reset(); - } - catch(e){ - - console.error(e.message); - alert(e.message); - } -} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/register.html b/staff/adrian-martinez/liveshare/app/app/register.html deleted file mode 100644 index 4f3656b80..000000000 --- a/staff/adrian-martinez/liveshare/app/app/register.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - Register User - - - -
-

Register

- -
- - - - - - - - - - - - - - - - -
- Login -
- - - - - - \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/register.js b/staff/adrian-martinez/liveshare/app/app/register.js deleted file mode 100644 index e28a887f7..000000000 --- a/staff/adrian-martinez/liveshare/app/app/register.js +++ /dev/null @@ -1,41 +0,0 @@ -//Capa de presentación o vista -var form = document.querySelector(".form"); -var anchor = document.querySelector("a"); - -form.onsubmit = function (event){ - - event.preventDefault(); //Esto para evitar que le página se recargue al enviar el formulario - - //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios - - var nameInput = form.querySelector("#name"); - var name = nameInput.value; - - var birthdateInput = form.querySelector("#birthdate"); - var birthdate = birthdateInput.value; - - var usernameInput = form.querySelector("#username"); - var username = usernameInput.value; - - var emailInput = form.querySelector("#email"); - var email = emailInput.value; - - var passwordInput = form.querySelector("#password"); - var password = passwordInput.value; - - - try{ - registerUser(name, birthdate, username, email, password); - - console.log("USUARIO REGISTRADO"); - alert("USUARIO REGISTRADO"); - form.reset(); - - anchor.click(); //Para que reedirija a login automáticamente una registrado - } - catch(e){ - - console.error(e.message); - alert(e); - } -} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/app/style.css b/staff/adrian-martinez/liveshare/app/app/style.css deleted file mode 100644 index a4c3a086d..000000000 --- a/staff/adrian-martinez/liveshare/app/app/style.css +++ /dev/null @@ -1,9 +0,0 @@ - -.main{ - padding-left: 20vw; - padding-right: 20vw; -} -.form{ - display: flex; - flex-direction: column; -} \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 1878c4b44..8e6474ac1 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -1,26 +1,26 @@ - -let title = document.querySelector("h1"); -let logoutButton = document.querySelector("button"); +debugger; +var title = document.querySelector("h1"); +var logoutButton = document.querySelector("button"); try{ - let user = retrieveUser(sessionStorage.username); + var user = retrieveUser(sessionStorage.username); title.innerText = "Hello, "+ user.name +"!"; } catch(e){ - let homeAddress = location.href; - let loginAddress = homeAddress.replace("home", "login"); + + var homeAddress = location.href; + var loginAddress = homeAddress.replace("home", "login"); location.href = loginAddress; - alert(e.message); } logoutButton.onclick = function(){ delete sessionStorage.username; - let homeAddress = location.href; - let loginAddress = homeAddress.replace("home", "login"); + var homeAddress = location.href; + var loginAddress = homeAddress.replace("home", "login"); location.href = loginAddress; } \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 1c7a52773..88971438c 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -81,7 +81,7 @@ throw new Error("Error. El correo ya existe"); } - if(user.usename == username){ + if(user.username == username){ throw new Error("Error. El usuario ya existe"); } @@ -156,7 +156,7 @@ for(let i=0;i < users.length;i++){ var user2 = users[i]; - if(user2.usename == sessionStorage.username){ + if(user2.username === username){ user = user2; break; //Si encuentra al usuario salimos del bucle. diff --git a/staff/adrian-martinez/liveshare/register.html b/staff/adrian-martinez/liveshare/register.html deleted file mode 100644 index eb46605ac..000000000 --- a/staff/adrian-martinez/liveshare/register.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - Register User - - -
-

Register

- -
- - - - - - - - - - - - - - - - -
- Login -
- - - - \ No newline at end of file From 10ed25c72d23c214b79e0d14a170f021906e3f3c Mon Sep 17 00:00:00 2001 From: Strider Date: Mon, 4 Mar 2024 23:23:05 +0100 Subject: [PATCH 11/43] Add files update to the ultimate version file #88 --- staff/adrian-martinez/liveshare/app/home.html | 2 +- staff/adrian-martinez/liveshare/app/home.js | 4 +-- staff/adrian-martinez/liveshare/app/logic.js | 30 +++++++++---------- .../adrian-martinez/liveshare/app/login.html | 2 +- staff/adrian-martinez/liveshare/app/login.js | 2 -- .../liveshare/app/register.html | 2 +- 6 files changed, 20 insertions(+), 22 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 1028e85c1..06be1b20b 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -11,7 +11,7 @@

Hello, Home!

- + diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 8e6474ac1..2daa30b9e 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -3,11 +3,11 @@ var title = document.querySelector("h1"); var logoutButton = document.querySelector("button"); try{ - var user = retrieveUser(sessionStorage.username); + var user = retrieveUser(); title.innerText = "Hello, "+ user.name +"!"; } -catch(e){ +catch(error){ var homeAddress = location.href; var loginAddress = homeAddress.replace("home", "login"); diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 88971438c..ee7f8a2c2 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -73,6 +73,9 @@ throw new Error("Error. La contraseña no debe tener espacios"); } + + var users = JSON.parse(localStorage.users || "[]"); + for(let i=0;i < users.length;i++){ let user = users[i]; @@ -87,7 +90,8 @@ } } - const user = { + var user = { + id: parseInt(Math.random() * 10000000000000).toString(36), name: name, birthdate: birthdate, username: username, @@ -121,10 +125,12 @@ var user; + var users = JSON.parse(localStorage.users || "[]"); + for(let i=0;i < users.length;i++){ - let userBuscado = users[i]; - if(userBuscado.username == username){ + var userBuscado = users[i]; + if(userBuscado.username === username){ user = userBuscado; break; @@ -138,25 +144,18 @@ throw new Error("Contraseña incorrecta"); } + sessionStorage.userId = user.id; //Le añadimos un identificador único y complejo para darle más seguridad al perfil de usuario } - function retrieveUser(username){ - - if(username.length < 3){ - - throw new Error("ERROR. El nombre de usuario debe tener más de 3 caracteres"); - } - if(username.includes(" ")){ + function retrieveUser(){ - throw new Error("ERROR. El nombre de usuario no debe tener espacios"); - } - var user; + var users = JSON.parse(localStorage.users || "[]"); - for(let i=0;i < users.length;i++){ + for(var i=0;i < users.length;i++){ var user2 = users[i]; - if(user2.username === username){ + if(user2.id === sessionStorage.userId){ user = user2; break; //Si encuentra al usuario salimos del bucle. @@ -166,5 +165,6 @@ throw new Error("Usuario no encontrado"); } + return user; } diff --git a/staff/adrian-martinez/liveshare/app/login.html b/staff/adrian-martinez/liveshare/app/login.html index c2d57ccff..fba17cedd 100644 --- a/staff/adrian-martinez/liveshare/app/login.html +++ b/staff/adrian-martinez/liveshare/app/login.html @@ -23,7 +23,7 @@

Login

Register
- + diff --git a/staff/adrian-martinez/liveshare/app/login.js b/staff/adrian-martinez/liveshare/app/login.js index 009478031..eb135a0da 100644 --- a/staff/adrian-martinez/liveshare/app/login.js +++ b/staff/adrian-martinez/liveshare/app/login.js @@ -16,8 +16,6 @@ form.onsubmit = function (event){ try{ loginUser(username, password); - sessionStorage.username = username; - console.log("Usuario logueado!"); alert("Bienvenido "+ username); diff --git a/staff/adrian-martinez/liveshare/app/register.html b/staff/adrian-martinez/liveshare/app/register.html index d9a1d35ec..48664ee85 100644 --- a/staff/adrian-martinez/liveshare/app/register.html +++ b/staff/adrian-martinez/liveshare/app/register.html @@ -31,7 +31,7 @@

Register

Login
- + From 1036a66f56134d4342ecf5a4f11c93356674532c Mon Sep 17 00:00:00 2001 From: Strider Date: Tue, 5 Mar 2024 20:27:47 +0100 Subject: [PATCH 12/43] Add Ultimate version redirect home.js width the data file #88 --- staff/adrian-martinez/liveshare/app/data.js | 26 ++++++++- staff/adrian-martinez/liveshare/app/home.html | 6 +- staff/adrian-martinez/liveshare/app/home.js | 11 +++- staff/adrian-martinez/liveshare/app/logic.js | 56 ++++++++----------- .../adrian-martinez/liveshare/app/login.html | 2 +- staff/adrian-martinez/liveshare/app/login.js | 12 ++-- .../liveshare/app/register.html | 4 +- 7 files changed, 73 insertions(+), 44 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index 342e99c10..311a20791 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -1,7 +1,31 @@ //Capa de datos o modelo -var users = []; +/* var users = []; if(localStorage.users){ users = JSON.parse(localStorage.users); +} */ +function findUser(callback){ + + var users = JSON.parse(localStorage.users || "[]"); + + for(let i=0;i < users.length;i++){ + + var user = users[i]; + var matches = callback(user); + + if(matches){ + return user; + } + } +} +function insertUser(user){ + + var users = JSON.parse(localStorage.users || "[]"); + + user.id = parseInt(Math.random() * 10000000000000).toString(36); + + users[users.length] = user; + + localStorage.users = JSON.stringify(users); } \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 06be1b20b..1d215af13 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -8,10 +8,14 @@

Hello, Home!

+

+

+

+

- + diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 2daa30b9e..0e4562f64 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -1,11 +1,20 @@ debugger; var title = document.querySelector("h1"); +var alias = document.querySelector("#alias"); +var cumpleanos = document.querySelector("#cumpleanos"); +var correo = document.querySelector("#correo"); +var contrasena = document.querySelector("#contrasena"); + var logoutButton = document.querySelector("button"); try{ var user = retrieveUser(); title.innerText = "Hello, "+ user.name +"!"; + alias.innerText = "Tu alias es "+ user.username +"."; + cumpleanos.innerText = "Fecha de cumpleaños: "+ user.birthdate +"."; + correo.innerText = "Correo: "+ user.email +"."; + contrasena.innerText = "Contraseña: "+ user.password +"."; } catch(error){ @@ -17,7 +26,7 @@ catch(error){ logoutButton.onclick = function(){ - delete sessionStorage.username; + logoutUser(); var homeAddress = location.href; var loginAddress = homeAddress.replace("home", "login"); diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index ee7f8a2c2..d3d7d46bb 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -74,9 +74,16 @@ throw new Error("Error. La contraseña no debe tener espacios"); } - var users = JSON.parse(localStorage.users || "[]"); + //var users = JSON.parse(localStorage.users || "[]"); + var user = findUser(function(user){ - for(let i=0;i < users.length;i++){ + return user.username === username || user.email === email; + }) + if(user !== undefined){ + + throw new Error("El usuario ya existe"); + } + /* for(let i=0;i < users.length;i++){ let user = users[i]; @@ -88,10 +95,9 @@ throw new Error("Error. El usuario ya existe"); } - } + } */ var user = { - id: parseInt(Math.random() * 10000000000000).toString(36), name: name, birthdate: birthdate, username: username, @@ -99,10 +105,11 @@ password: password } - users[users.length] = user; + insertUser(user); + /* users[users.length] = user; //Hay que guardar el usuario en LocalStorage en formato JSON - localStorage.users = JSON.stringify(users); + localStorage.users = JSON.stringify(users); */ } function loginUser(username, password){ @@ -122,20 +129,10 @@ throw new Error("La contraseña no debe tener espacios"); } - - var user; - - var users = JSON.parse(localStorage.users || "[]"); - - for(let i=0;i < users.length;i++){ - - var userBuscado = users[i]; - if(userBuscado.username === username){ - user = userBuscado; - break; - } - } + var user = findUser(function(user){ + return user.username === username; + }) if(user === undefined){ throw new Error("Usuario no encontrado"); @@ -144,23 +141,15 @@ throw new Error("Contraseña incorrecta"); } - sessionStorage.userId = user.id; //Le añadimos un identificador único y complejo para darle más seguridad al perfil de usuario + sessionStorage.userId = user.id; } function retrieveUser(){ - var user; - var users = JSON.parse(localStorage.users || "[]"); - - for(var i=0;i < users.length;i++){ - - var user2 = users[i]; - if(user2.id === sessionStorage.userId){ - - user = user2; - break; //Si encuentra al usuario salimos del bucle. - } - } + var user = findUser(function(user){ + return user.id === sessionStorage.userId; + }); + if(user === undefined){ throw new Error("Usuario no encontrado"); @@ -168,3 +157,6 @@ return user; } + function logoutUser(){ + delete sessionStorage.userId; + } diff --git a/staff/adrian-martinez/liveshare/app/login.html b/staff/adrian-martinez/liveshare/app/login.html index fba17cedd..c2d57ccff 100644 --- a/staff/adrian-martinez/liveshare/app/login.html +++ b/staff/adrian-martinez/liveshare/app/login.html @@ -23,7 +23,7 @@

Login

Register - + diff --git a/staff/adrian-martinez/liveshare/app/login.js b/staff/adrian-martinez/liveshare/app/login.js index eb135a0da..a3df3d2f1 100644 --- a/staff/adrian-martinez/liveshare/app/login.js +++ b/staff/adrian-martinez/liveshare/app/login.js @@ -1,8 +1,8 @@ - +debugger; var form = document.querySelector(".form"); form.onsubmit = function (event){ - + event.preventDefault(); //Cogemos el valor de los campos para pasárselo a la propiedad de un array de objetos de usuarios @@ -18,14 +18,14 @@ form.onsubmit = function (event){ console.log("Usuario logueado!"); alert("Bienvenido "+ username); + + form.reset(); - - let loginAddress = location.href; - let homeAddress = loginAddress.replace("login","home"); + var loginAddress = location.href; + var homeAddress = loginAddress.replace("login","home"); location.href = homeAddress; - form.reset(); } catch(e){ diff --git a/staff/adrian-martinez/liveshare/app/register.html b/staff/adrian-martinez/liveshare/app/register.html index 48664ee85..29c471658 100644 --- a/staff/adrian-martinez/liveshare/app/register.html +++ b/staff/adrian-martinez/liveshare/app/register.html @@ -3,7 +3,7 @@ - Register User + Registhttps://zoom.us/er User @@ -31,7 +31,7 @@

Register

Login - + From de22decba1fde3efc071aece29308b463f199fcf Mon Sep 17 00:00:00 2001 From: Strider Date: Wed, 6 Mar 2024 11:24:02 +0100 Subject: [PATCH 13/43] Update style.css and other small changes file #88 --- staff/adrian-martinez/liveshare/app/home.html | 20 +++++++------ staff/adrian-martinez/liveshare/app/home.js | 2 -- staff/adrian-martinez/liveshare/app/logic.js | 4 +-- .../adrian-martinez/liveshare/app/login.html | 2 +- .../liveshare/app/register.html | 4 +-- staff/adrian-martinez/liveshare/app/style.css | 29 ++++++++++++++++++- 6 files changed, 44 insertions(+), 17 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 1d215af13..422186a4a 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -4,17 +4,19 @@ Inicio - + -

Hello, Home!

-

-

-

-

- - - + Mi Perfil +
+
+

Hello, Home!

+

+

+

+ +
+ diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 0e4562f64..c3d723b6b 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -3,7 +3,6 @@ var title = document.querySelector("h1"); var alias = document.querySelector("#alias"); var cumpleanos = document.querySelector("#cumpleanos"); var correo = document.querySelector("#correo"); -var contrasena = document.querySelector("#contrasena"); var logoutButton = document.querySelector("button"); @@ -14,7 +13,6 @@ try{ alias.innerText = "Tu alias es "+ user.username +"."; cumpleanos.innerText = "Fecha de cumpleaños: "+ user.birthdate +"."; correo.innerText = "Correo: "+ user.email +"."; - contrasena.innerText = "Contraseña: "+ user.password +"."; } catch(error){ diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index d3d7d46bb..13c29fd01 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -100,7 +100,7 @@ var user = { name: name, birthdate: birthdate, - username: username, + username: username, email: email, password: password } @@ -130,7 +130,7 @@ throw new Error("La contraseña no debe tener espacios"); } - var user = findUser(function(user){ + var user = findUser(function(user){ return user.username === username; }) if(user === undefined){ diff --git a/staff/adrian-martinez/liveshare/app/login.html b/staff/adrian-martinez/liveshare/app/login.html index c2d57ccff..2569c6e9f 100644 --- a/staff/adrian-martinez/liveshare/app/login.html +++ b/staff/adrian-martinez/liveshare/app/login.html @@ -20,7 +20,7 @@

Login

- Register + diff --git a/staff/adrian-martinez/liveshare/app/register.html b/staff/adrian-martinez/liveshare/app/register.html index 29c471658..79935f119 100644 --- a/staff/adrian-martinez/liveshare/app/register.html +++ b/staff/adrian-martinez/liveshare/app/register.html @@ -9,7 +9,7 @@

Register

- +
@@ -28,7 +28,7 @@

Register

- Login +
diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index fb999bb3e..d3f6a856a 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -6,4 +6,31 @@ .form{ display: flex; flex-direction: column; -} \ No newline at end of file +} +input{ + height: 30px; + border: 2px solid black; + margin-top: 10px; +} +button{ + margin-top: 10px; + font-size:16px; + padding: 10px; + border-radius: 50% solid blue; + background-color: rgb(4, 104, 254); + color: white +} +hr{ + height: 5px; + background-color: rgb(4, 104, 254); +} +#datosPerfil{ + border: 5px solid black; + border:radius; + padding: 10px; + width:15%; +} +button a{ + text-decoration: none; + color: white +} From e07471e30f17abbe7ec5fc0d39879c8784b9ae01 Mon Sep 17 00:00:00 2001 From: Strider Date: Wed, 6 Mar 2024 20:06:27 +0100 Subject: [PATCH 14/43] Add files for multiusers online file #88 --- staff/adrian-martinez/liveshare/app/data.js | 70 +++- staff/adrian-martinez/liveshare/app/home.html | 6 +- staff/adrian-martinez/liveshare/app/home.js | 35 +- staff/adrian-martinez/liveshare/app/logic.js | 335 ++++++++++-------- staff/adrian-martinez/liveshare/app/login.js | 4 +- .../adrian-martinez/liveshare/app/register.js | 2 +- staff/adrian-martinez/liveshare/app/style.css | 3 + 7 files changed, 286 insertions(+), 169 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index 311a20791..59c195368 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -5,27 +5,61 @@ if(localStorage.users){ users = JSON.parse(localStorage.users); } */ -function findUser(callback){ +var data = (function(){ - var users = JSON.parse(localStorage.users || "[]"); - - for(let i=0;i < users.length;i++){ - - var user = users[i]; - var matches = callback(user); + function loadUsers(){ + return JSON.parse(localStorage.users || "[]"); + } + function saveUsers(users){ + localStorage.users = JSON.stringify(users); + } + function findUser(callback){ - if(matches){ - return user; + var users = loadUsers(); + for(let i=0;i < users.length;i++){ + + var user = users[i]; + var matches = callback(user); + + if(matches){ + return user; + } } } -} -function insertUser(user){ - - var users = JSON.parse(localStorage.users || "[]"); - - user.id = parseInt(Math.random() * 10000000000000).toString(36); + function insertUser(user){ + + var users = loadUsers(); + + user.id = parseInt(Math.random() * 10000000000000).toString(36); + + users[users.length] = user; + + saveUser(users); + } + function saveUser(user){ + + var users = loadUsers(); + + var index = users.findIndex(function(usuarioBuscado){ + return usuarioBuscado.id === user.id; + }) + + users.splice(index, 1, user); - users[users.length] = user; + saveUsers(users) + } + function findUsers(callback){ + + var users = loadUsers(); + var filtered = users.filter(callback); - localStorage.users = JSON.stringify(users); -} \ No newline at end of file + return filtered; + } + //Las funciones propias de una capa mejor meterlas como propiedad en de un objecto + return { + findUser: findUser, + insertUser: insertUser, + saveUser: saveUser, + findUsers: findUsers, + } +})() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 422186a4a..0581462d0 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -16,7 +16,11 @@

- +

Lista de usuarios conectados:

+
+
    + +
diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index c3d723b6b..6bac456b6 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -6,8 +6,10 @@ var correo = document.querySelector("#correo"); var logoutButton = document.querySelector("button"); +var conectados = document.querySelector("#online-users"); + try{ - var user = retrieveUser(); + var user = logic.retrieveUser(); title.innerText = "Hello, "+ user.name +"!"; alias.innerText = "Tu alias es "+ user.username +"."; @@ -24,10 +26,33 @@ catch(error){ logoutButton.onclick = function(){ - logoutUser(); + try{ + logic.logoutUser(); - var homeAddress = location.href; - var loginAddress = homeAddress.replace("home", "login"); + var homeAddress = location.href; + var loginAddress = homeAddress.replace("home", "login"); - location.href = loginAddress; + location.href = loginAddress; + } + catch(error){ + console.error(error); + + alert(error.message); + } +} +try{ + var users = logic.retrieveOnlineUsers(); + + users.forEach(function(user){ + var item = document.createElement("li"); + + item.innerText = user.username; + + conectados.appendChild(item); + }) +} +catch(error){ + + console.error(error); + alert(error.message); } \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 13c29fd01..32dd4a37a 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -1,162 +1,213 @@ //Capa de lógica o controlador +var logic = (function() { - function registerUser(name, birthdate, username, email, password){ + function validateName(name){ - if(name.length < 1){ - - throw new Error("Error. Ningún nombre tiene menos de 1 caracter"); - } - - var nameIsBlank = true; - for(let i=0;i < name.length && nameIsBlank; i++){ - - var char = name[i]; - if(char !== " "){ - - nameIsBlank = false; + if(name.length < 1){ + + throw new Error("Error. Ningún nombre tiene menos de 1 caracter"); } - } - if(nameIsBlank){ - - throw new Error("Error. El nombre tiene espacios"); - } - if(birthdate.length !== 10){ - - throw new Error("Error. Tu fecha de cumpleaños debe tener 10 caracteres"); - } - if(birthdate.includes(" ")){ - - throw new Error("Error. Tu fecha de cumpleaños no debe tener espacios en blanco"); - } - if(birthdate.indexOf("-") !== 4 || birthdate.lastIndexOf("-") !== 7){ - - throw new Error("Error. Los guiones de tu fecha de cumpleaños no están en la posición correcta"); - } - - //TODO check that birthdate has only 2 dashes - //TODO check that birthdate has no alphabet characters (only numbrer and 2 dashes) - //TODO check that birthdate is equal or greater than 18 years old - - if(name.length < 3){ - - throw new Error("Error. El nombre debe tener por lo menos 3 caracteres"); - } - if(name.includes(" ")){ - - throw new Error("Error. El nombre tiene algún caracter en blanco"); - } - if(username.includes(" ")){ - - throw new Error("Error. El nombre tiene algún caracter en blanco"); - } - if(email.length < 6){ - - throw new Error("Error. El correo debe tener por lo menos 6 caracteres"); - } - if(!email.includes("@")){ - - throw new Error("Error. El correo debe tener una @ que separe tu nombre del nombre de dominio"); - } - if(!email.includes(".")){ - - throw new Error("Error. El correo debe tener un punto"); - } - if(email.lastIndexOf(".") < email.indexOf("@")){ - - throw new Error("Error. El correo no debe tener un . antes de la @"); - } - if(password.length < 8){ - - throw new Error("Error. La contraseña debe tener un mínimo de 8 caracteres"); - } - if(password.includes(" ")){ - - throw new Error("Error. La contraseña no debe tener espacios"); - } - - //var users = JSON.parse(localStorage.users || "[]"); - var user = findUser(function(user){ - - return user.username === username || user.email === email; - }) - if(user !== undefined){ - - throw new Error("El usuario ya existe"); - } - /* for(let i=0;i < users.length;i++){ - - let user = users[i]; - - if(user.email == email){ - - throw new Error("Error. El correo ya existe"); + + var nameIsBlank = true; + for(let i=0;i < name.length && nameIsBlank; i++){ + + var char = name[i]; + if(char !== " "){ + + nameIsBlank = false; + } } - if(user.username == username){ - - throw new Error("Error. El usuario ya existe"); + if(nameIsBlank){ + + throw new Error("Error. El nombre tiene espacios"); } - } */ - - var user = { - name: name, - birthdate: birthdate, - username: username, - email: email, - password: password } + function validateBirthdate(birthdate){ - insertUser(user); - /* users[users.length] = user; - - //Hay que guardar el usuario en LocalStorage en formato JSON - localStorage.users = JSON.stringify(users); */ - } - function loginUser(username, password){ - - if(username.length < 3){ - - throw new Error("El usuario debe tener por lo menos 3 caracteres"); + if(birthdate.length !== 10){ + + throw new Error("Error. Tu fecha de cumpleaños debe tener 10 caracteres"); + } + if(birthdate.includes(" ")){ + + throw new Error("Error. Tu fecha de cumpleaños no debe tener espacios en blanco"); + } + if(birthdate.indexOf("-") !== 4 || birthdate.lastIndexOf("-") !== 7){ + + throw new Error("Error. Los guiones de tu fecha de cumpleaños no están en la posición correcta"); + } } - if(username.includes(" ")){ + function validateUsername(username){ - throw new Error("El usuario no debe tener espacios"); + if(username.length < 3){ + + throw new Error("Error. El nombre debe tener por lo menos 3 caracteres"); + } + if(username.includes(" ")){ + + throw new Error("Error. El nombre tiene algún caracter en blanco"); + } + if(username.includes(" ")){ + + throw new Error("Error. El nombre tiene algún caracter en blanco"); + } } - if(password.length < 8){ + function validateEmail(email){ - throw new Error("La contraseña debe tener por lo menos 8 caracteres"); + if(email.length < 6){ + + throw new Error("Error. El correo debe tener por lo menos 6 caracteres"); + } + if(!email.includes("@")){ + + throw new Error("Error. El correo debe tener una @ que separe tu nombre del nombre de dominio"); + } + if(!email.includes(".")){ + + throw new Error("Error. El correo debe tener un punto"); + } + if(email.lastIndexOf(".") < email.indexOf("@")){ + + throw new Error("Error. El correo no debe tener un . antes de la @"); + } } - if(password.includes(" ")){ + function validatePassword(password){ - throw new Error("La contraseña no debe tener espacios"); + if(password.length < 8){ + + throw new Error("Error. La contraseña debe tener un mínimo de 8 caracteres"); + } + if(password.includes(" ")){ + + throw new Error("Error. La contraseña no debe tener espacios"); + } } + function registerUser(name, birthdate, username, email, password){ + + validateName(name); + validateBirthdate(birthdate); + validateUsername(username); + validateEmail(email); + validatePassword(password); + + //TODO check that birthdate has only 2 dashes + //TODO check that birthdate has no alphabet characters (only numbrer and 2 dashes) + //TODO check that birthdate is equal or greater than 18 years old + + var user = data.findUser(function(user){ + + return user.username === username || user.email === email; + }) + if(user !== undefined){ + + throw new Error("El usuario ya existe"); + } + /* for(let i=0;i < users.length;i++){ + + let user = users[i]; + + if(user.email == email){ + + throw new Error("Error. El correo ya existe"); + } + if(user.username == username){ + + throw new Error("Error. El usuario ya existe"); + } + } */ + + var user = { + name: name, + birthdate: birthdate, + username: username, + email: email, + password: password + } + + data.insertUser(user); + /* users[users.length] = user; + + //Hay que guardar el usuario en LocalStorage en formato JSON + localStorage.users = JSON.stringify(users); */ + } + function loginUser(username, password){ + + validateUsername(username); + validatePassword(password); + + var user = data.findUser(function(user){ + return user.username === username; + }) + if(user === undefined){ + + throw new Error("Usuario no encontrado"); + } + if(user.password !== password){ + + throw new Error("Contraseña incorrecta"); + } + sessionStorage.userId = user.id; + + user.online = true; + + data.saveUser(user); + } + + function retrieveUser(){ + + var user = data.findUser(function(user){ + return user.id === sessionStorage.userId; + }); + + if(user === undefined){ + + throw new Error("Usuario no encontrado"); + } + + return user; + } + function logoutUser(){ + + var user = data.findUser(function(user){ + return user.id == sessionStorage.userId; + }) - var user = findUser(function(user){ - return user.username === username; - }) - if(user === undefined){ - - throw new Error("Usuario no encontrado"); - } - if(user.password !== password){ + if(!user){ - throw new Error("Contraseña incorrecta"); - } - sessionStorage.userId = user.id; - } + throw new Error("Usuario no encontrado") + } - function retrieveUser(){ + user.online = false; - var user = findUser(function(user){ - return user.id === sessionStorage.userId; - }); + data.saveUser(user); + + delete sessionStorage.userId; + } - if(user === undefined){ - - throw new Error("Usuario no encontrado"); - } - - return user; - } - function logoutUser(){ - delete sessionStorage.userId; - } + function retrieveOnlineUsers(){ + + var users = data.findUsers(function(user){ + return user.online; + }) + + users.forEach(function(user){ + delete user.name; + delete user.birthdate; + delete user.email; + delete user.password; + delete user.online; + }) + + return users; + } + + //Las funciones propias de una capa mejor meterlas como propiedad en de un objecto + return { + registerUser: registerUser, + loginUser: loginUser, + retrieveUser: retrieveUser, + logoutUser: logoutUser, + retrieveOnlineUsers: retrieveOnlineUsers + } +})() + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/login.js b/staff/adrian-martinez/liveshare/app/login.js index a3df3d2f1..1dc930b17 100644 --- a/staff/adrian-martinez/liveshare/app/login.js +++ b/staff/adrian-martinez/liveshare/app/login.js @@ -1,4 +1,4 @@ -debugger; + var form = document.querySelector(".form"); form.onsubmit = function (event){ @@ -14,7 +14,7 @@ form.onsubmit = function (event){ var password = passwordInput.value; try{ - loginUser(username, password); + logic.loginUser(username, password); console.log("Usuario logueado!"); alert("Bienvenido "+ username); diff --git a/staff/adrian-martinez/liveshare/app/register.js b/staff/adrian-martinez/liveshare/app/register.js index aa80e1e64..adb43e5bd 100644 --- a/staff/adrian-martinez/liveshare/app/register.js +++ b/staff/adrian-martinez/liveshare/app/register.js @@ -25,7 +25,7 @@ form.onsubmit = function (event){ try{ - registerUser(name, birthdate, username, email, password); + logic.registerUser(name, birthdate, username, email, password); console.log("USUARIO REGISTRADO"); alert("USUARIO REGISTRADO"); diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index d3f6a856a..e2e241605 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -34,3 +34,6 @@ button a{ text-decoration: none; color: white } +li::marker{ + color: limegreen; +} From c0245f7ef358a8c856f1c74727161e2054ff88c8 Mon Sep 17 00:00:00 2001 From: Strider Date: Thu, 7 Mar 2024 09:54:23 +0100 Subject: [PATCH 15/43] Update data.js for change saveUser(user) at saveUsers(user) file #88 --- staff/adrian-martinez/liveshare/app/data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index 59c195368..f7fe33dca 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -34,7 +34,7 @@ var data = (function(){ users[users.length] = user; - saveUser(users); + saveUsers(users); } function saveUser(user){ From 7d7d09c3e7e5dc392fc8d6c1a2ea7642e8bc298f Mon Sep 17 00:00:00 2001 From: Strider Date: Thu, 7 Mar 2024 16:17:35 +0100 Subject: [PATCH 16/43] Update home.html and style.css file #88 --- staff/adrian-martinez/liveshare/app/home.html | 11 ++++++----- staff/adrian-martinez/liveshare/app/style.css | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 0581462d0..f35a26429 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -16,11 +16,12 @@

-

Lista de usuarios conectados:

-
-
    - -
+
+
    +

    Lista de usuarios conectados:

    +
+
+ diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index e2e241605..1919fd27b 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -34,6 +34,25 @@ button a{ text-decoration: none; color: white } +#lista-usuarios{ + position: absolute; + display: inline; + width: 20%; + margin-top: -16%; + margin-left: 75%; +} +ul { + position: relative; + margin-left: 5%; + border: 2px solid black; + border-radius: 5%; +} +li { + font-size: 20px; + font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif, 'Arial Narrow', Arial, sans-serif; + border-bottom: 1px solid gainsboro; + padding:10px; +} li::marker{ color: limegreen; } From 140f6e6cf46cfaf427b3eacaf9112918937f2816 Mon Sep 17 00:00:00 2001 From: Strider Date: Thu, 7 Mar 2024 17:25:05 +0100 Subject: [PATCH 17/43] Delete spaces in line 9 and separate functions file #88 --- staff/adrian-martinez/liveshare/app/data.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index f7fe33dca..20cc7a855 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -6,13 +6,14 @@ if(localStorage.users){ users = JSON.parse(localStorage.users); } */ var data = (function(){ - function loadUsers(){ return JSON.parse(localStorage.users || "[]"); } + function saveUsers(users){ localStorage.users = JSON.stringify(users); } + function findUser(callback){ var users = loadUsers(); @@ -26,6 +27,7 @@ var data = (function(){ } } } + function insertUser(user){ var users = loadUsers(); @@ -36,6 +38,7 @@ var data = (function(){ saveUsers(users); } + function saveUser(user){ var users = loadUsers(); @@ -48,6 +51,7 @@ var data = (function(){ saveUsers(users) } + function findUsers(callback){ var users = loadUsers(); From 4ce063da92edd7ef8f4d284ca1799882084eaa35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Sun, 10 Mar 2024 17:34:32 +0100 Subject: [PATCH 18/43] Add files data.js, home.js, logit.js and syles.css to the ultimate version #88 --- staff/adrian-martinez/liveshare/app/README.md | 0 staff/adrian-martinez/liveshare/app/data.js | 62 ++++++++- staff/adrian-martinez/liveshare/app/home.js | 3 +- staff/adrian-martinez/liveshare/app/logic.js | 131 ++++++++++++++---- staff/adrian-martinez/liveshare/app/style.css | 5 +- 5 files changed, 167 insertions(+), 34 deletions(-) delete mode 100644 staff/adrian-martinez/liveshare/app/README.md diff --git a/staff/adrian-martinez/liveshare/app/README.md b/staff/adrian-martinez/liveshare/app/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index 20cc7a855..a5dfee7ee 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -1,11 +1,8 @@ //Capa de datos o modelo -/* var users = []; -if(localStorage.users){ - - users = JSON.parse(localStorage.users); -} */ var data = (function(){ + //Helpers + function loadUsers(){ return JSON.parse(localStorage.users || "[]"); } @@ -14,6 +11,14 @@ var data = (function(){ localStorage.users = JSON.stringify(users); } + function loadMessages(){ + return JSON.parse(localStorage.messages || "[]"); + } + + function saveMessages(messages){ + localStorage.messages = JSON.stringify(messages); + } + /***********************************************************/ function findUser(callback){ var users = loadUsers(); @@ -39,7 +44,7 @@ var data = (function(){ saveUsers(users); } - function saveUser(user){ + function updateUser(user){ var users = loadUsers(); @@ -59,11 +64,54 @@ var data = (function(){ return filtered; } + + function printUsers(){ + + var users = loadUsers(); + + console.table(users); + } + + function getAllUsers(){ + + var users = loadUsers(); + + return users; + } + + function printMessages(){ + + var messages = loadMessages(); + + console.table(messages); + } + + function insertMessage(message){ + + var messages = loadMessages(); + + messages.push(message); + saveMessages(messages); + } + + function findMessages(callback){ + + var messages = loadMessages(); + var filtered = messages.filter(callback); + + return filtered; + } + //Las funciones propias de una capa mejor meterlas como propiedad en de un objecto return { findUser: findUser, insertUser: insertUser, - saveUser: saveUser, + updateUser: updateUser, findUsers: findUsers, + printUsers: printUsers, + getAllUsers: getAllUsers, + printMessages: printMessages, + insertMessage: insertMessage, + findMessages: findMessages } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 6bac456b6..9e70411dc 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -41,11 +41,12 @@ logoutButton.onclick = function(){ } } try{ - var users = logic.retrieveOnlineUsers(); + var users = logic.retrieveUsers(); users.forEach(function(user){ var item = document.createElement("li"); + item.classList.add(user.online ? "online" : "offline"); item.innerText = user.username; conectados.appendChild(item); diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 32dd4a37a..4de771c5f 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -1,5 +1,32 @@ //Capa de lógica o controlador var logic = (function() { + //Utils + + function convertDateToString(){ + + var year = date.getFullYear(); + var month = date.getMonth() + 1; + var day = date.getDate(); + + var hours = date.getHours(); + var minutes = date.getMinutes(); + var seconds = date.getSeconds(); + var milisegundos = date.getMilisegundos(); + + function twoDigits(value){ + return value < 10 ? "0" + value : "" + value; + } + + //No entiendo estas condiciones + function threeDigits(value){ + return value < 10 ? "00" + value : value < 100 ? "0" + value : "" + value; + } + + var dateConvert = year + "-" + twoDigits(month) + "-" +twoDigits(day) + "-" + twoDigits(hours) + ":" + twoDigits(minutes) + ":" + + twoDigits(seconds) + "." + threeDigits(milisegundos); + + return dateConvert; + } function validateName(name){ @@ -81,7 +108,45 @@ var logic = (function() { throw new Error("Error. La contraseña no debe tener espacios"); } + if(!password.length){ + + throw new Error("La contraseña no debe estar vacía"); + } + } + + function validateUserId(userId){ + + if(typeof userId !== "string"){ + + throw new Error("El ID del usuario no es una cadena"); + } + if(userId.includes(" ")){ + + throw new Error("El ID no puede tener espacios"); + } + if(!userId.length){ + + throw new Error("El ID del usuario no debe estar vacío"); + } + } + + function validateText(text){ + + if(typeof text !== "string"){ + + throw new Error("El texto debe ser una cadena"); + } + if(text.includes(" ")){ + + throw new Error("El texto no puede tener espacios"); + } + if(!text.length){ + + throw new Error("El texto no debe estar vacío"); + } } + + function registerUser(name, birthdate, username, email, password){ validateName(name); @@ -102,19 +167,6 @@ var logic = (function() { throw new Error("El usuario ya existe"); } - /* for(let i=0;i < users.length;i++){ - - let user = users[i]; - - if(user.email == email){ - - throw new Error("Error. El correo ya existe"); - } - if(user.username == username){ - - throw new Error("Error. El usuario ya existe"); - } - } */ var user = { name: name, @@ -125,10 +177,6 @@ var logic = (function() { } data.insertUser(user); - /* users[users.length] = user; - - //Hay que guardar el usuario en LocalStorage en formato JSON - localStorage.users = JSON.stringify(users); */ } function loginUser(username, password){ @@ -150,7 +198,7 @@ var logic = (function() { user.online = true; - data.saveUser(user); + data.updateUser(user); } function retrieveUser(){ @@ -179,35 +227,68 @@ var logic = (function() { user.online = false; - data.saveUser(user); + data.updateUser(user); delete sessionStorage.userId; } - function retrieveOnlineUsers(){ + function retrieveUsers(){ - var users = data.findUsers(function(user){ - return user.online; + var users = data.getAllUsers(); + + var index = users.findIndex(function(user){ + return user.id === sessionStorage.userId; }) + users.splice(index, 1); + users.forEach(function(user){ delete user.name; delete user.birthdate; delete user.email; delete user.password; - delete user.online; + }) + + users.sort(function(user1, user2){ + return user1.online > user2.online ? -1 : 1; }) return users; } - //Las funciones propias de una capa mejor meterlas como propiedad en de un objecto + function sendMessageToUser(userId, text){ + + validateUserId(userId); + validateText(text); + + var message = { + from: sessionStorage.userId, + to: userId, + text: text, + date: convertDateToString(new Date()) + } + + data.insertMessage(message); + } + + function retrieveMessagesWithUser(userId){ + + validateUserId(userId); + + var messages = data.findMessages(function(message){ + return message.from === sessionStorage.userId && message.to === userId || message.from === userId && message.to === sessionStorage.userId; + }) + } + + //Las funciones propias de una capa mejor meterlas como propiedad de un objecto return { registerUser: registerUser, loginUser: loginUser, retrieveUser: retrieveUser, logoutUser: logoutUser, - retrieveOnlineUsers: retrieveOnlineUsers + retrieveUsers: retrieveUsers, + sendMessageToUser: sendMessageToUser, + retrieveMessagesWithUser: retrieveMessagesWithUser } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index 1919fd27b..2bdd9e25c 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -53,6 +53,9 @@ li { border-bottom: 1px solid gainsboro; padding:10px; } -li::marker{ +li.online::marker{ color: limegreen; } +li.offline::marker{ + color:gray; +} From 4ac55acbc843d1c33d6f318cb6f5ce42ec16f706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Sun, 10 Mar 2024 20:19:56 +0100 Subject: [PATCH 19/43] Add a small changes in the style.css and home.js #88 --- staff/adrian-martinez/liveshare/app/home.html | 2 +- staff/adrian-martinez/liveshare/app/home.js | 2 ++ staff/adrian-martinez/liveshare/app/logic.js | 2 +- staff/adrian-martinez/liveshare/app/style.css | 9 +++++++++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index f35a26429..062cfb37f 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -18,7 +18,7 @@

    -

    Lista de usuarios conectados:

    +

    Lista de usuarios:

diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 9e70411dc..34fdffbad 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -1,4 +1,5 @@ debugger; +var metaTitle = document.querySelector("title"); var title = document.querySelector("h1"); var alias = document.querySelector("#alias"); var cumpleanos = document.querySelector("#cumpleanos"); @@ -11,6 +12,7 @@ var conectados = document.querySelector("#online-users"); try{ var user = logic.retrieveUser(); + metaTitle.innerHTML = user.name; title.innerText = "Hello, "+ user.name +"!"; alias.innerText = "Tu alias es "+ user.username +"."; cumpleanos.innerText = "Fecha de cumpleaños: "+ user.birthdate +"."; diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 4de771c5f..875c11dd9 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -227,7 +227,7 @@ var logic = (function() { user.online = false; - data.updateUser(user); + data.updateUser(user);A delete sessionStorage.userId; } diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index 2bdd9e25c..395f601a6 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -59,3 +59,12 @@ li.online::marker{ li.offline::marker{ color:gray; } +li.online:hover{ + color: limegreen; + cursor: pointer; +} + +li.offline:hover{ + color: rgb(190, 197, 208); + cursor: pointer; +} From dd8f878e20b158a3c1237cbb7678e18f8f504009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Mon, 11 Mar 2024 10:34:42 +0100 Subject: [PATCH 20/43] =?UTF-8?q?Error=20en=20la=20l=C3=ADnea=20230=20#88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- staff/adrian-martinez/liveshare/app/logic.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 875c11dd9..4de771c5f 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -227,7 +227,7 @@ var logic = (function() { user.online = false; - data.updateUser(user);A + data.updateUser(user); delete sessionStorage.userId; } From e6310eb6ab800622898ada940f9b4af6f0e2f52a Mon Sep 17 00:00:00 2001 From: Strider Date: Tue, 12 Mar 2024 19:21:08 +0100 Subject: [PATCH 21/43] Files update to the ultimate version #88 --- staff/adrian-martinez/liveshare/app/home.html | 17 +++- staff/adrian-martinez/liveshare/app/home.js | 83 +++++++++++++++++-- staff/adrian-martinez/liveshare/app/logic.js | 15 +++- staff/adrian-martinez/liveshare/app/style.css | 41 +++++++-- 4 files changed, 138 insertions(+), 18 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index f35a26429..37585f834 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -16,11 +16,22 @@

-
-
    +
    +

      Lista de usuarios conectados:

    -
+
+

username

+ +
    + +
    + + + +
    +
    + diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 9e70411dc..0208fbdb7 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -1,4 +1,5 @@ -debugger; + +var metaTitle = document.querySelector("title"); var title = document.querySelector("h1"); var alias = document.querySelector("#alias"); var cumpleanos = document.querySelector("#cumpleanos"); @@ -6,11 +7,18 @@ var correo = document.querySelector("#correo"); var logoutButton = document.querySelector("button"); -var conectados = document.querySelector("#online-users"); +var chatSection = document.querySelector("#chat-session"); +var chatUsers = document.querySelector("#chat-users"); +var chat = chatSection.querySelector("#chat"); +var chatForm = chat.querySelector("#chat-form"); +var chatMessages = chat.querySelector("#chat-messages"); +var renderMessagesIntervalId; + try{ var user = logic.retrieveUser(); + metaTitle.innerText = user.name; title.innerText = "Hello, "+ user.name +"!"; alias.innerText = "Tu alias es "+ user.username +"."; cumpleanos.innerText = "Fecha de cumpleaños: "+ user.birthdate +"."; @@ -44,13 +52,76 @@ try{ var users = logic.retrieveUsers(); users.forEach(function(user){ - var item = document.createElement("li"); + var chatUserItem = document.createElement("li"); + + chatUserItem.innerText = user.username; + + chatUserItem.classList.add(user.online ? "chat-user-online" : "chat-user-offline"); + + chatUserItem.onclick = function(){ + var interlocutorTitle = chat.querySelector("#chat-interlocutor"); + + interlocutorTitle.innerText = user.username; + + function renderMessages(){ + try{ + var messages = logic.retrieveMessagesWithUser(user.id); + + chatMessages.innerHTML = ""; + + messages.forEach(function(message){ + var messageItem = document.createElement("li"); + + if(message.from === locic.getLoggedInUserId()){ + messageItem.classList.add("chat-message--right"); + } + else{ + messageItem.classList.add("chat-message--left"); + } + + messageItem.innerText = message.text; - item.classList.add(user.online ? "online" : "offline"); - item.innerText = user.username; + chatMessages.appendChild(messageItem); + }) + } + catch(error){ + + console.error(error); + alert(error.message); + } + } - conectados.appendChild(item); + renderMessages(); + + clearInterval(renderMessagesIntervalId); + + renderMessagesIntervalId = setInterval(function(){ + renderMessages(); + }, 1000) + + chatForm.onsumit = function(event){ + event.preventDefault(); + + var textInput = chatForm.querySelector("#text"); + var text = textInput.value; + } + try{ + logic.sendMessageToUser(user.id, text); + + chatForm.reset(); + + renderMessages() + } + catch(error){ + + console.error(error); + alert(error.message); + } + } + chat.style.display = "block"; }) + + chatUsers.appendChild(chatUserItem); } catch(error){ diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 4de771c5f..f6a9ee1ce 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -2,7 +2,7 @@ var logic = (function() { //Utils - function convertDateToString(){ + /* function convertDateToString(){ var year = date.getFullYear(); var month = date.getMonth() + 1; @@ -26,7 +26,7 @@ var logic = (function() { + twoDigits(seconds) + "." + threeDigits(milisegundos); return dateConvert; - } + } */ function validateName(name){ @@ -265,10 +265,16 @@ var logic = (function() { from: sessionStorage.userId, to: userId, text: text, - date: convertDateToString(new Date()) + date: new Date().toISOString() } data.insertMessage(message); + + return messages; + } + + function getLoggedInUserId(){ + return sessionStorage.userId; } function retrieveMessagesWithUser(userId){ @@ -288,7 +294,8 @@ var logic = (function() { logoutUser: logoutUser, retrieveUsers: retrieveUsers, sendMessageToUser: sendMessageToUser, - retrieveMessagesWithUser: retrieveMessagesWithUser + retrieveMessagesWithUser: retrieveMessagesWithUser, + getLoggedInUserId: getLoggedInUserId } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index 2bdd9e25c..d5b3f7b44 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -34,17 +34,17 @@ button a{ text-decoration: none; color: white } -#lista-usuarios{ +#chat-users{ position: absolute; display: inline; width: 20%; - margin-top: -16%; + margin-top: -27%; margin-left: 75%; } ul { position: relative; margin-left: 5%; - border: 2px solid black; + border: 3px solid black; border-radius: 5%; } li { @@ -53,9 +53,40 @@ li { border-bottom: 1px solid gainsboro; padding:10px; } -li.online::marker{ + +#chat-section{ + border: 1px solid black; + padding: 10px; +} +li.chat-user-online::marker{ color: limegreen; } -li.offline::marker{ +li.chat-user-offline::marker{ color:gray; } +li.chat-user-online:hover{ + color: limegreen; + cursor: pointer +} +li.chat-user-offline:hover{ + color: gray; + cursor: pointer; +} +#chat{ + display: none; + z-index: 10; +} +#chat-messages{ + border: 1px solid black; + min-height: 60px; + display: flex; + flex-direction: column; + padding: 10px; + list-style: none; +} +.chat-message--left{ + align-self: flex-start; +} +.chat-message--right{ + align-self: flex-end; +} From e4a1caae03b02834cfc9b84b19a744810e0617c0 Mon Sep 17 00:00:00 2001 From: Strider Date: Wed, 13 Mar 2024 00:07:57 +0100 Subject: [PATCH 22/43] fixed some bugs #88 --- staff/adrian-martinez/liveshare/app/home.html | 2 +- staff/adrian-martinez/liveshare/app/home.js | 93 ++++++++----------- staff/adrian-martinez/liveshare/app/logic.js | 2 + 3 files changed, 44 insertions(+), 53 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 37585f834..4d28a7eec 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -23,7 +23,7 @@

    Lista de usuarios conectados:

    username

    -
      +
        diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 0208fbdb7..17a917f31 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -7,8 +7,8 @@ var correo = document.querySelector("#correo"); var logoutButton = document.querySelector("button"); -var chatSection = document.querySelector("#chat-session"); -var chatUsers = document.querySelector("#chat-users"); +var chatSection = document.querySelector("#chat-section"); +var chatUsers = chatSection.querySelector("#chat-users"); var chat = chatSection.querySelector("#chat"); var chatForm = chat.querySelector("#chat-form"); var chatMessages = chat.querySelector("#chat-messages"); @@ -32,61 +32,55 @@ catch(error){ location.href = loginAddress; } -logoutButton.onclick = function(){ - - try{ +logoutButton.onclick = function () { + try { logic.logoutUser(); var homeAddress = location.href; - var loginAddress = homeAddress.replace("home", "login"); - + var loginAddress = homeAddress.replace('home', 'login'); location.href = loginAddress; - } - catch(error){ - console.error(error); + } catch (error) { + console.error(error); alert(error.message); } } -try{ +try { var users = logic.retrieveUsers(); + users.forEach(function (user) { + var chatUserItem = document.createElement('li'); - users.forEach(function(user){ - var chatUserItem = document.createElement("li"); - + chatUserItem.classList.add('chat-user'); + chatUserItem.classList.add(user.online ? 'chat-user-online' : 'chat-user-offline'); chatUserItem.innerText = user.username; - - chatUserItem.classList.add(user.online ? "chat-user-online" : "chat-user-offline"); - chatUserItem.onclick = function(){ - var interlocutorTitle = chat.querySelector("#chat-interlocutor"); + chatUserItem.onclick = function () { + var interlocutorTitle = chat.querySelector('#chat-interlocutor'); interlocutorTitle.innerText = user.username; - function renderMessages(){ - try{ + function renderMessages() { + try { var messages = logic.retrieveMessagesWithUser(user.id); - chatMessages.innerHTML = ""; - - messages.forEach(function(message){ - var messageItem = document.createElement("li"); + chatMessages.innerHTML = ''; - if(message.from === locic.getLoggedInUserId()){ - messageItem.classList.add("chat-message--right"); - } - else{ - messageItem.classList.add("chat-message--left"); + messages.forEach(function (message) { + var messageItem = document.createElement('li'); + + if (message.from === logic.getLoggedInUserId()){ + messageItem.classList.add('chat-message--right'); } + else + messageItem.classList.add('chat-message--left'); messageItem.innerText = message.text; chatMessages.appendChild(messageItem); }) - } - catch(error){ - + } catch (error) { console.error(error); + alert(error.message); } } @@ -95,36 +89,31 @@ try{ clearInterval(renderMessagesIntervalId); - renderMessagesIntervalId = setInterval(function(){ - renderMessages(); - }, 1000) + renderMessagesIntervalId = setInterval(function () { renderMessages() }, 1000); - chatForm.onsumit = function(event){ + chatForm.onsubmit = function (event) { event.preventDefault(); - var textInput = chatForm.querySelector("#text"); + var textInput = chatForm.querySelector('#text'); var text = textInput.value; - } - try{ - logic.sendMessageToUser(user.id, text); - chatForm.reset(); + try { + logic.sendMessageToUser(user.id, text); - renderMessages() - } - catch(error){ + chatForm.reset(); - console.error(error); - alert(error.message); + renderMessages(); + } catch (error) { + console.error(error); + + alert(error.message); + } } + chat.style.display = 'block'; } - chat.style.display = "block"; + chatUsers.appendChild(chatUserItem); }) - - chatUsers.appendChild(chatUserItem); -} -catch(error){ - +} catch (error) { console.error(error); alert(error.message); } \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index f6a9ee1ce..241364d6b 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -284,6 +284,8 @@ var logic = (function() { var messages = data.findMessages(function(message){ return message.from === sessionStorage.userId && message.to === userId || message.from === userId && message.to === sessionStorage.userId; }) + + return messages; } //Las funciones propias de una capa mejor meterlas como propiedad de un objecto From e0480b8728e26510e67d9894d9bc5eeb9575130c Mon Sep 17 00:00:00 2001 From: Strider Date: Wed, 13 Mar 2024 11:50:31 +0100 Subject: [PATCH 23/43] Add changes in the styles and delete the if in the function ValidateTex() to allow white space in the cchat #88 --- staff/adrian-martinez/liveshare/app/home.html | 55 +++++++++++-------- staff/adrian-martinez/liveshare/app/logic.js | 4 -- staff/adrian-martinez/liveshare/app/style.css | 50 +++++++++++------ 3 files changed, 65 insertions(+), 44 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 4d28a7eec..ef49bb86c 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -1,40 +1,49 @@ + Inicio + Mi Perfil -
        -
        -

        Hello, Home!

        -

        -

        -

        - -
        -
        -
          -

          Lista de usuarios conectados:

          -
        -
        -

        username

        +
        +
        -
          +
          +
          +
          +

          Hello, Home!

          +

          +

          +

          + +
          +
          +
            +

            Lista de usuarios conectados:

            +
          +
          +
          +
          +

          username

          - - - - - -
          -
          - +
            + +
            + + + +
            +
            +
            + + \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 241364d6b..6b6d4ac2a 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -136,10 +136,6 @@ var logic = (function() { throw new Error("El texto debe ser una cadena"); } - if(text.includes(" ")){ - - throw new Error("El texto no puede tener espacios"); - } if(!text.length){ throw new Error("El texto no debe estar vacío"); diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index d5b3f7b44..88c4e63a9 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -1,7 +1,11 @@ - +.home-main{ + display: flex; + width: 100%; + gap: 20px +} .main{ - padding-left: 20vw; - padding-right: 20vw; + margin-left: 2%; + margin-right: 2%; } .form{ display: flex; @@ -24,28 +28,27 @@ hr{ height: 5px; background-color: rgb(4, 104, 254); } -#datosPerfil{ +.profile-chat-container{ + display: flex; + justify-content: space-between; +} +#datos-perfil{ border: 5px solid black; border:radius; padding: 10px; - width:15%; + width:25%; } button a{ text-decoration: none; color: white } -#chat-users{ - position: absolute; +.lista-usuarios{ + border: 3px solid black; + border: radius; +} +ul#chat-users{ display: inline; width: 20%; - margin-top: -27%; - margin-left: 75%; -} -ul { - position: relative; - margin-left: 5%; - border: 3px solid black; - border-radius: 5%; } li { font-size: 20px; @@ -55,7 +58,9 @@ li { } #chat-section{ - border: 1px solid black; + display: flex; + flex-direction: column; + width: 100%; padding: 10px; } li.chat-user-online::marker{ @@ -73,16 +78,27 @@ li.chat-user-offline:hover{ cursor: pointer; } #chat{ + margin-top: 10px; display: none; + border: 20px solid lightgreen; + border: radius; z-index: 10; + width: 78%; + height: 300px; + background-color: lightgreen; } #chat-messages{ - border: 1px solid black; + border: 2px solid black; + background-color: white; min-height: 60px; + max-width: 90%; + max-height: 200px; + overflow-y: scroll; display: flex; flex-direction: column; padding: 10px; list-style: none; + z-index: 10; } .chat-message--left{ align-self: flex-start; From 8ddc7aa6e4ccccd7f5afa3f2d1b6a29731b045a6 Mon Sep 17 00:00:00 2001 From: Strider Date: Wed, 13 Mar 2024 21:43:06 +0100 Subject: [PATCH 24/43] Add ultimate files #88 --- staff/adrian-martinez/liveshare/app/home.html | 2 +- staff/adrian-martinez/liveshare/app/logic.js | 2 -- staff/adrian-martinez/liveshare/app/style.css | 9 +++++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index ef49bb86c..da035bc1b 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -24,7 +24,7 @@

              -

              Lista de usuarios conectados:

              +

              Lista de usuarios:

            diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 6b6d4ac2a..3f06acde1 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -265,8 +265,6 @@ var logic = (function() { } data.insertMessage(message); - - return messages; } function getLoggedInUserId(){ diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index 88c4e63a9..8a5a626fe 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -45,10 +45,11 @@ button a{ .lista-usuarios{ border: 3px solid black; border: radius; + padding: 10px; + width: 15%; } ul#chat-users{ display: inline; - width: 20%; } li { font-size: 20px; @@ -61,6 +62,7 @@ li { display: flex; flex-direction: column; width: 100%; + padding: 10px; } li.chat-user-online::marker{ @@ -84,9 +86,12 @@ li.chat-user-offline:hover{ border: radius; z-index: 10; width: 78%; - height: 300px; + height: 350px; background-color: lightgreen; } +#chat-form{ + margin-top: -20px; +} #chat-messages{ border: 2px solid black; background-color: white; From 2b3dcbf284d39c508506da809ff37c594f73c291 Mon Sep 17 00:00:00 2001 From: Strider Date: Fri, 15 Mar 2024 09:08:44 +0100 Subject: [PATCH 25/43] Update home.html and data.js files #88 --- staff/adrian-martinez/liveshare/app/data.js | 32 ++++++++++- staff/adrian-martinez/liveshare/app/home.html | 54 +++++++++++++++---- staff/adrian-martinez/liveshare/app/home.js | 5 ++ staff/adrian-martinez/liveshare/app/style.css | 11 ++-- 4 files changed, 87 insertions(+), 15 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index a5dfee7ee..d471aa75b 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -18,6 +18,14 @@ var data = (function(){ function saveMessages(messages){ localStorage.messages = JSON.stringify(messages); } + + function loadPosts(){ + return JSON.parse(localStorage.posts || "[]"); + } + + function savePosts(posts){ + localStorage.posts = JSON.stringify(posts); + } /***********************************************************/ function findUser(callback){ @@ -90,6 +98,9 @@ var data = (function(){ var messages = loadMessages(); + //Le ponemos un número aleatorio muy grande para que un mensaje sea único sí o sí + message.id = parseInt(Math.random() * 100000000000000).toString(36); + messages.push(message); saveMessages(messages); } @@ -102,6 +113,23 @@ var data = (function(){ return filtered; } + function insertPost(post){ + + var posts = loadPosts(); + + post.id = parseInt(Math.random() * 100000000000).toString(36); + post.push(post); + + savePosts(posts); + } + + function printPosts(){ + + var posts = loadPosts(); + + console.table(posts); + } + //Las funciones propias de una capa mejor meterlas como propiedad en de un objecto return { findUser: findUser, @@ -112,6 +140,8 @@ var data = (function(){ getAllUsers: getAllUsers, printMessages: printMessages, insertMessage: insertMessage, - findMessages: findMessages + findMessages: findMessages, + insertPost: insertPost, + printPosts: printPosts } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index da035bc1b..04dccb031 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -18,32 +18,64 @@

            Hello, Home!

            -

            -

            - +

            +

            + +
            +
            +

            Publicaciones

            +
            +
            + +

            Aquí estoy yo. El cocodrilo animado.
            2024-03-14 23:23

            +
            +

              Lista de usuarios:

            -
            -

            username

            +
            +
            +

            username

            + +
              + +
              + + + +
              +
              +
              +
              +

              Crear Publicación

              -
                +
                + + - - + - + +
                -
                + + + +
                + + +
                - \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 17a917f31..7ccef82c7 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -76,6 +76,11 @@ try { messageItem.innerText = message.text; + //Poner la fecha del mensaje enviado + var dateTime = document.createElement("sub"); + var date = new Date(message.date); + dateTime.innerText= date.toLocaleString("en-CA"); + chatMessages.appendChild(messageItem); }) } catch (error) { diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index 8a5a626fe..27e8005e6 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -36,7 +36,11 @@ hr{ border: 5px solid black; border:radius; padding: 10px; - width:25%; + width: 17%; + height: 55%; +} +#datos-perfil > button{ + margin-top: -30px } button a{ text-decoration: none; @@ -62,7 +66,6 @@ li { display: flex; flex-direction: column; width: 100%; - padding: 10px; } li.chat-user-online::marker{ @@ -86,7 +89,7 @@ li.chat-user-offline:hover{ border: radius; z-index: 10; width: 78%; - height: 350px; + height: 300px; background-color: lightgreen; } #chat-form{ @@ -107,7 +110,9 @@ li.chat-user-offline:hover{ } .chat-message--left{ align-self: flex-start; + text-align: left; } .chat-message--right{ align-self: flex-end; + text-align: right; } From f6a8917ec2985bc0dd4b4b860a36b45b9ce9cec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Fri, 15 Mar 2024 23:43:01 +0100 Subject: [PATCH 26/43] Add home.js an logic.js at the ultimate version #88 --- staff/adrian-martinez/liveshare/app/data.js | 32 +++- staff/adrian-martinez/liveshare/app/home.html | 78 +++++++-- staff/adrian-martinez/liveshare/app/home.js | 163 +++++++++++++++--- staff/adrian-martinez/liveshare/app/logic.js | 35 +++- staff/adrian-martinez/liveshare/app/style.css | 54 ++++-- 5 files changed, 301 insertions(+), 61 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index a5dfee7ee..d471aa75b 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -18,6 +18,14 @@ var data = (function(){ function saveMessages(messages){ localStorage.messages = JSON.stringify(messages); } + + function loadPosts(){ + return JSON.parse(localStorage.posts || "[]"); + } + + function savePosts(posts){ + localStorage.posts = JSON.stringify(posts); + } /***********************************************************/ function findUser(callback){ @@ -90,6 +98,9 @@ var data = (function(){ var messages = loadMessages(); + //Le ponemos un número aleatorio muy grande para que un mensaje sea único sí o sí + message.id = parseInt(Math.random() * 100000000000000).toString(36); + messages.push(message); saveMessages(messages); } @@ -102,6 +113,23 @@ var data = (function(){ return filtered; } + function insertPost(post){ + + var posts = loadPosts(); + + post.id = parseInt(Math.random() * 100000000000).toString(36); + post.push(post); + + savePosts(posts); + } + + function printPosts(){ + + var posts = loadPosts(); + + console.table(posts); + } + //Las funciones propias de una capa mejor meterlas como propiedad en de un objecto return { findUser: findUser, @@ -112,6 +140,8 @@ var data = (function(){ getAllUsers: getAllUsers, printMessages: printMessages, insertMessage: insertMessage, - findMessages: findMessages + findMessages: findMessages, + insertPost: insertPost, + printPosts: printPosts } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 062cfb37f..04dccb031 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -1,27 +1,79 @@ + Inicio + Mi Perfil -
                -
                -

                Hello, Home!

                -

                -

                -

                - -
                -
                -
                  -

                  Lista de usuarios:

                  -
                -
                +
                +
                + +
                +
                +
                +

                Hello, Home!

                +

                +

                +

                + + +
                +
                +

                Publicaciones

                +
                +
                + +

                Aquí estoy yo. El cocodrilo animado.
                2024-03-14 23:23

                +
                +
                +
                +
                  +

                  Lista de usuarios:

                  +
                +
                +
                +
                +
                +

                username

                +
                  + +
                  + + + +
                  +
                  +
                  +
                  +

                  Crear Publicación

                  + +
                  + + + + + + + +
                  + +
                  + +
                  +
                  +
                  + + +
                  diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 34fdffbad..de672b4c1 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -1,18 +1,39 @@ -debugger; + var metaTitle = document.querySelector("title"); var title = document.querySelector("h1"); var alias = document.querySelector("#alias"); var cumpleanos = document.querySelector("#cumpleanos"); var correo = document.querySelector("#correo"); +var chatButton = document.querySelector("#chat-button"); var logoutButton = document.querySelector("button"); -var conectados = document.querySelector("#online-users"); +var chatSection = document.querySelector("#chat-section"); +var chatUsers = chatSection.querySelector("#chat-users"); +var chat = chatSection.querySelector("#chat"); +//En los botones del formulario partimos desde el chat porque están dentro de esa sección +var chatForm = chat.querySelector("#chat-form"); +var chatMessages = chat.querySelector("#chat-messages"); +var renderMessagesIntervalId; + +var postsSection = chatSection.querySelector("#posts-section"); +var createPostSection = chatSection.querySelector("#create-post-section"); +//En el botón de cancelar partimos desde la referencia del postsSection porque el botón está dentro de ese div +var createPostCancelButton = createPostSection.querySelector("create-post-cancel-button"); +var createPostForm = createPostSection.querySelector("#create-post-form"); +//En los botones de enviar y crear publicación partimos desde el document porque están fuera de la sección del chat +var postsButton = document.querySelector("#posts-button"); +var createPostButton = document.querySelector("#create-post-button"); + +chatButton.onclick = function(){ + postsSection.classList.add("posts-section--off"); + postsSection.classList.remove("chat-section--off"); +} try{ var user = logic.retrieveUser(); - metaTitle.innerHTML = user.name; + metaTitle.innerText = user.name; title.innerText = "Hello, "+ user.name +"!"; alias.innerText = "Tu alias es "+ user.username +"."; cumpleanos.innerText = "Fecha de cumpleaños: "+ user.birthdate +"."; @@ -26,36 +47,136 @@ catch(error){ location.href = loginAddress; } -logoutButton.onclick = function(){ - - try{ +logoutButton.onclick = function () { + try { logic.logoutUser(); var homeAddress = location.href; - var loginAddress = homeAddress.replace("home", "login"); - + var loginAddress = homeAddress.replace('home', 'login'); location.href = loginAddress; - } - catch(error){ - console.error(error); + } catch (error) { + console.error(error); alert(error.message); } } -try{ +try { var users = logic.retrieveUsers(); + users.forEach(function (user) { + var chatUserItem = document.createElement('li'); - users.forEach(function(user){ - var item = document.createElement("li"); + chatUserItem.classList.add('chat-user'); + chatUserItem.classList.add(user.online ? 'chat-user-online' : 'chat-user-offline'); + chatUserItem.innerText = user.username; - item.classList.add(user.online ? "online" : "offline"); - item.innerText = user.username; + chatUserItem.onclick = function () { + var interlocutorTitle = chat.querySelector('#chat-interlocutor'); - conectados.appendChild(item); - }) -} -catch(error){ + interlocutorTitle.innerText = user.username; + + function renderMessages() { + try { + var messages = logic.retrieveMessagesWithUser(user.id); + + chatMessages.innerHTML = ''; + + messages.forEach(function (message) { + var messageItem = document.createElement('li'); + + if (message.from === logic.getLoggedInUserId()){ + messageItem.classList.add('chat-message--right'); + } + else + messageItem.classList.add('chat-message--left'); + + messageItem.innerText = message.text; + + //Poner la fecha del mensaje enviado + + var breakLine = document.createElement("br"); + messageItem.appendChild(breakLine); + + var dateTimeSub = document.createElement("sup"); + var date = new Date(message.date); + + dateTimeSub.innerText= date.toLocaleString("en-CA"); + messageItem.appendChild(dateTimeSub); + + chatMessages.appendChild(messageItem); + }) + } catch (error) { + console.error(error); + + alert(error.message); + } + } + + renderMessages(); + + clearInterval(renderMessagesIntervalId); + + renderMessagesIntervalId = setInterval(function () { renderMessages() }, 1000); + chatForm.onsubmit = function (event) { + event.preventDefault(); + + var textInput = chatForm.querySelector('#text'); + var text = textInput.value; + + try { + logic.sendMessageToUser(user.id, text); + + chatForm.reset(); + + renderMessages(); + } catch (error) { + console.error(error); + + alert(error.message); + } + } + chat.style.display = 'block'; + } + chatUsers.appendChild(chatUserItem); + }) +} catch (error) { console.error(error); alert(error.message); -} \ No newline at end of file +} + +//Añadimos los botones para manejar las publicaciones + +postsButton.onclick = function(){ + chatSection.classList.add("chat-section--off"); + postsSection.classList.add("chat-section--off"); +} + +createPostButton.onclick = function(){ + createPostSection.classList.remove("chat-section--off"); +} + +createPostCancelButton.onclick = function(){ + createPostSection.classList.add("chat-section--off"); +} + +createPostForm.onclick = function(event){ + event.preventDefault(); + + var imageInput = createPostForm.querySelector("#image"); + var image = imageInput.value; + + var textInput = createPostForm.querySelector("#text"); + var text = textInput.value; + + try{ + logic.createPost(image, text); + + createPostForm.reset(); + + createPostSection.classList.add("create-post-section--off"); + } + catch(error){ + console.error(error); + alert(error.message); + } +} diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 4de771c5f..ec923ea0d 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -2,7 +2,7 @@ var logic = (function() { //Utils - function convertDateToString(){ + /* function convertDateToString(){ var year = date.getFullYear(); var month = date.getMonth() + 1; @@ -26,7 +26,7 @@ var logic = (function() { + twoDigits(seconds) + "." + threeDigits(milisegundos); return dateConvert; - } + } */ function validateName(name){ @@ -136,10 +136,6 @@ var logic = (function() { throw new Error("El texto debe ser una cadena"); } - if(text.includes(" ")){ - - throw new Error("El texto no puede tener espacios"); - } if(!text.length){ throw new Error("El texto no debe estar vacío"); @@ -265,12 +261,16 @@ var logic = (function() { from: sessionStorage.userId, to: userId, text: text, - date: convertDateToString(new Date()) + date: new Date().toISOString() } data.insertMessage(message); } + function getLoggedInUserId(){ + return sessionStorage.userId; + } + function retrieveMessagesWithUser(userId){ validateUserId(userId); @@ -278,6 +278,23 @@ var logic = (function() { var messages = data.findMessages(function(message){ return message.from === sessionStorage.userId && message.to === userId || message.from === userId && message.to === sessionStorage.userId; }) + + return messages; + } + + function createPost(image, text){ + + //Validamos la imagen con esta función porque viene en formato string (URL) + validateText(image); + validateText(text); + + var post = { + author: sessionStorage.userId, + image: image, + text: text, + date: new Date().toISOString() + } + data.insertPost(post); } //Las funciones propias de una capa mejor meterlas como propiedad de un objecto @@ -288,7 +305,9 @@ var logic = (function() { logoutUser: logoutUser, retrieveUsers: retrieveUsers, sendMessageToUser: sendMessageToUser, - retrieveMessagesWithUser: retrieveMessagesWithUser + retrieveMessagesWithUser: retrieveMessagesWithUser, + getLoggedInUserId: getLoggedInUserId, + createPost: createPost } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index 395f601a6..9664a7252 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -1,7 +1,14 @@ - +body{ + margin: 0; +} +.home-main{ + display: flex; + width: 100%; + gap: 20px +} .main{ - padding-left: 20vw; - padding-right: 20vw; + margin-left: 2%; + margin-right: 2%; } .form{ display: flex; @@ -24,28 +31,32 @@ hr{ height: 5px; background-color: rgb(4, 104, 254); } -#datosPerfil{ +.profile-chat-container{ + display: flex; + justify-content: space-between; +} +#datos-perfil{ border: 5px solid black; border:radius; padding: 10px; - width:15%; + width: 17%; + height: 55%; +} +#datos-perfil > button{ + margin-top: -30px } button a{ text-decoration: none; color: white } -#lista-usuarios{ - position: absolute; - display: inline; - width: 20%; - margin-top: -16%; - margin-left: 75%; +.lista-usuarios{ + border: 3px solid black; + border: radius; + padding: 10px; + width: 15%; } -ul { - position: relative; - margin-left: 5%; - border: 2px solid black; - border-radius: 5%; +ul#chat-users{ + display: inline; } li { font-size: 20px; @@ -53,10 +64,17 @@ li { border-bottom: 1px solid gainsboro; padding:10px; } -li.online::marker{ + +#chat-section{ + display: flex; + flex-direction: column; + width: 100%; + padding: 10px; +} +li.chat-user-online::marker{ color: limegreen; } -li.offline::marker{ +li.chat-user-offline::marker{ color:gray; } li.online:hover{ From 92c9d74879588fbba3d3d69ee00f5e2118d314b1 Mon Sep 17 00:00:00 2001 From: Strider Date: Sun, 17 Mar 2024 17:47:35 +0100 Subject: [PATCH 27/43] Add styles.js in the ultimate version #88 --- staff/adrian-martinez/liveshare/app/style.css | 79 ++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index db01fc61b..ef5fcfe43 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -1,4 +1,7 @@ +body{ + margin: 0; +} .main{ margin-left: 2%; margin-right: 2%; @@ -7,6 +10,10 @@ display: flex; flex-direction: column; } +#top-menu{ + display: flex; + justify-content: end; +} input{ height: 30px; border: 2px solid black; @@ -51,18 +58,88 @@ button a{ ul#chat-users{ display: inline; } +#top-menu{ + display: flex; + justify-content: end; +} li { font-size: 20px; font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif, 'Arial Narrow', Arial, sans-serif; border-bottom: 1px solid gainsboro; padding:10px; } - +#chat{ + display: none; +} #chat-section{ display: flex; flex-direction: column; width: 100%; padding: 10px; + margin-bottom: 60px; +} +#chat-messages{ + min-height: 40px; + display: flex; + flex-direction: column; +} +.chat.messages-left{ + align-self: flex-start; + text-align: left; +} +.chat.messages-right{ + align-self: flex-end; + text-align: right; +} +sup{ + font-size: 12px; + color: grey; +} +#chat-form{ + display: flex; + gap: 5px; +} +#chat-form > #text{ + width: 100%; +} +#post-section{ + margin-bottom: 60px; +} +.post{ + border: 1px solid black; + margin: 10px; + padding: 10px; +} +.post-image{ + width: 100%; +} +#create-post-section{ + margin-bottom: 40px; + position: fixed; + bottom: 0; + background-color: darkgray; + width: 100%; + padding-bottom: 10px; +} +#create-post-section--off{ + display: none; +} +#create-post-form{ + display: flex; + flex-direction: column; +} +footer{ + display: flex; + justify-content: center; + align-items: center; + position: fixed; + bottom: 0; + width: 100%; + background-color:lightgray; + height: 40px; +} +.chat-section--off{ + display: none; } li.chat-user-online::marker{ color: limegreen; From 90819757f7124fa77005d6eefd6d1f7715c8a4a0 Mon Sep 17 00:00:00 2001 From: Strider Date: Mon, 18 Mar 2024 11:02:11 +0100 Subject: [PATCH 28/43] Fixing some bugs #88 --- staff/adrian-martinez/liveshare/app/data.js | 6 +++- staff/adrian-martinez/liveshare/app/home.html | 34 ++++++++++-------- staff/adrian-martinez/liveshare/app/home.js | 27 ++++++++++---- staff/adrian-martinez/liveshare/app/logic.js | 18 +++++++++- staff/adrian-martinez/liveshare/app/style.css | 36 ++++++++++++++----- 5 files changed, 89 insertions(+), 32 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index d471aa75b..1e1d47208 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -118,7 +118,7 @@ var data = (function(){ var posts = loadPosts(); post.id = parseInt(Math.random() * 100000000000).toString(36); - post.push(post); + posts.push(post); savePosts(posts); } @@ -127,6 +127,10 @@ var data = (function(){ var posts = loadPosts(); + //Ponemos todas las publicaciones que tengamos en esta sección + var postArea = document.querySelector("post-area"); + postArea.appendChild(posts); + console.table(posts); } diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 04dccb031..82d53cad7 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -9,32 +9,37 @@ - Mi Perfil -
                  -
                  - -
                  +
                  + Mi Perfil +
                  +
                  +
                  + +

                  Hello, Home!

                  - - +
                  -
                  +

                  Publicaciones


                  Aquí estoy yo. El cocodrilo animado.
                  2024-03-14 23:23

                  +
                  + +
                  -
                  +

                    Lista de usuarios:

                  @@ -53,12 +58,12 @@

                  username

                  -
                  +

                  Crear Publicación

                  - + @@ -71,7 +76,6 @@

                  Crear Publicación

                  -
                  diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index aa619b8e5..318f02c04 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -6,15 +6,29 @@ var cumpleanos = document.querySelector("#cumpleanos"); var correo = document.querySelector("#correo"); var chatButton = document.querySelector("#chat-button"); -var logoutButton = document.querySelector("button"); +var logoutButton = document.querySelector("#logout-button"); var chatSection = document.querySelector("#chat-section"); -var chatUsers = chatSection.querySelector("#chat-users"); +var chatUsers = document.querySelector("#chat-users"); var chat = chatSection.querySelector("#chat"); var chatForm = chat.querySelector("#chat-form"); var chatMessages = chat.querySelector("#chat-messages"); var renderMessagesIntervalId; +var listaUsuarios = document.querySelector("#lista-usuarios"); + +var postsSection = document.querySelector("#post-section"); +var createPostSection = document.querySelector("#create-post-section"); +var createPostCancelButton = createPostSection.querySelector("#create-post-cancel-button"); +var createPostForm = createPostSection.querySelector("#create-post-form"); +var postsButton = document.querySelector("#posts-button"); +var createPostButton = document.querySelector("#create-post-button"); + +chatButton.onclick = function(){ + postsSection.classList.add("post-section--off"); + chatSection.classList.remove("chat-section--off"); + listaUsuarios.classList.remove("lista-usuarios--off"); +} try{ var user = logic.retrieveUser(); @@ -128,18 +142,19 @@ try { postsButton.onclick = function(){ chatSection.classList.add("chat-section--off"); - postsSection.classList.add("chat-section--off"); + postsSection.classList.remove("post-section--off"); + listaUsuarios.classList.add("lista-usuarios--off"); } createPostButton.onclick = function(){ - createPostSection.classList.remove("chat-section--off"); + createPostSection.classList.remove("create-post-section--off"); } createPostCancelButton.onclick = function(){ - createPostSection.classList.add("chat-section--off"); + createPostSection.classList.add("create-post-section--off"); } -createPostForm.onclick = function(event){ +createPostForm.onsubmit = function(event){ event.preventDefault(); var imageInput = createPostForm.querySelector("#image"); diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 3f06acde1..11d30d99a 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -282,6 +282,21 @@ var logic = (function() { return messages; } + function createPost(image, text){ + + validateText(image); + validateText(text); + + var post = { + author: sessionStorage.userId, + image: image, + text: text, + date: new Date().toISOString() + } + + data.insertPost(post); + } + //Las funciones propias de una capa mejor meterlas como propiedad de un objecto return { registerUser: registerUser, @@ -291,7 +306,8 @@ var logic = (function() { retrieveUsers: retrieveUsers, sendMessageToUser: sendMessageToUser, retrieveMessagesWithUser: retrieveMessagesWithUser, - getLoggedInUserId: getLoggedInUserId + getLoggedInUserId: getLoggedInUserId, + createPost:createPost } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index ef5fcfe43..348a6735a 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -2,7 +2,7 @@ body{ margin: 0; } -.main{ +.margen{ margin-left: 2%; margin-right: 2%; } @@ -54,13 +54,18 @@ button a{ border: radius; padding: 10px; width: 15%; + cursor: pointer; + margin-right:2% +} +.lista-usuarios--off{ + display: none; } ul#chat-users{ display: inline; } #top-menu{ display: flex; - justify-content: end; + justify-content: center; } li { font-size: 20px; @@ -69,15 +74,20 @@ li { padding:10px; } #chat{ - display: none; + border: 3px solid blue; + padding: 2%; + width: 50%; } #chat-section{ - display: flex; + /* display: flex; */ flex-direction: column; width: 100%; padding: 10px; margin-bottom: 60px; } +.chat-section--off{ + display: none; +} #chat-messages{ min-height: 40px; display: flex; @@ -104,6 +114,10 @@ sup{ } #post-section{ margin-bottom: 60px; + margin-left: 10%; +} +.post-section--off{ + display: none; } .post{ border: 1px solid black; @@ -111,7 +125,8 @@ sup{ padding: 10px; } .post-image{ - width: 100%; + width: 70%; + height: 70%; } #create-post-section{ margin-bottom: 40px; @@ -121,7 +136,7 @@ sup{ width: 100%; padding-bottom: 10px; } -#create-post-section--off{ +.create-post-section--off{ display: none; } #create-post-form{ @@ -138,12 +153,15 @@ footer{ background-color:lightgray; height: 40px; } -.chat-section--off{ - display: none; -} li.chat-user-online::marker{ color: limegreen; } li.chat-user-offline::marker{ color:gray; } +li.chat-user-online:hover{ + color: limegreen; +} +li.chat-user-offline:hover{ + color:gray; +} From e382f78a0680ec356a2da24a5a1a2596262d8b8e Mon Sep 17 00:00:00 2001 From: Strider Date: Mon, 18 Mar 2024 18:31:14 +0100 Subject: [PATCH 29/43] Add the posts to the HTML with the printPost() function and control the loading time. #88 --- staff/adrian-martinez/liveshare/app/data.js | 14 ++-- staff/adrian-martinez/liveshare/app/home.html | 10 +-- staff/adrian-martinez/liveshare/app/home.js | 73 ++++++++++++++++++- staff/adrian-martinez/liveshare/app/logic.js | 26 ++++++- staff/adrian-martinez/liveshare/app/style.css | 7 ++ 5 files changed, 116 insertions(+), 14 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/data.js b/staff/adrian-martinez/liveshare/app/data.js index 1e1d47208..f86bfeebe 100644 --- a/staff/adrian-martinez/liveshare/app/data.js +++ b/staff/adrian-martinez/liveshare/app/data.js @@ -127,13 +127,16 @@ var data = (function(){ var posts = loadPosts(); - //Ponemos todas las publicaciones que tengamos en esta sección - var postArea = document.querySelector("post-area"); - postArea.appendChild(posts); - console.table(posts); } + function getAllPosts(){ + + var posts = loadPosts() + + return posts; + } + //Las funciones propias de una capa mejor meterlas como propiedad en de un objecto return { findUser: findUser, @@ -146,6 +149,7 @@ var data = (function(){ insertMessage: insertMessage, findMessages: findMessages, insertPost: insertPost, - printPosts: printPosts + printPosts: printPosts, + getAllPosts: getAllPosts } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index 82d53cad7..e5682873b 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -31,12 +31,8 @@

                  Publicaciones


                  -
                  - -

                  Aquí estoy yo. El cocodrilo animado.
                  2024-03-14 23:23

                  -
                  -
                  - +
                  +
                  @@ -46,7 +42,7 @@

                  Lista de usuarios:

                  -
                  +

                  username

                    diff --git a/staff/adrian-martinez/liveshare/app/home.js b/staff/adrian-martinez/liveshare/app/home.js index 318f02c04..4e7caeebc 100644 --- a/staff/adrian-martinez/liveshare/app/home.js +++ b/staff/adrian-martinez/liveshare/app/home.js @@ -24,7 +24,13 @@ var createPostForm = createPostSection.querySelector("#create-post-form"); var postsButton = document.querySelector("#posts-button"); var createPostButton = document.querySelector("#create-post-button"); +var postsList = postsSection.querySelector("#posts-list"); +var renderPostsIntervalId; + chatButton.onclick = function(){ + + clearInterval(renderPostsIntervalId); + postsSection.classList.add("post-section--off"); chatSection.classList.remove("chat-section--off"); listaUsuarios.classList.remove("lista-usuarios--off"); @@ -129,7 +135,7 @@ try { alert(error.message); } } - chat.style.display = 'block'; + chat.classList.remove("chat--off"); } chatUsers.appendChild(chatUserItem); }) @@ -141,6 +147,17 @@ try { //Añadimos los botones para manejar las publicaciones postsButton.onclick = function(){ + + clearInterval(renderPostsIntervalId); + + chatMessages.innerHTML = ""; + + chat.classList.add("chat--off"); + + renderPostsIntervalId = setInterval(function(){ + renderPost() + },3000); + chatSection.classList.add("chat-section--off"); postsSection.classList.remove("post-section--off"); listaUsuarios.classList.add("lista-usuarios--off"); @@ -169,9 +186,63 @@ createPostForm.onsubmit = function(event){ createPostForm.reset(); createPostSection.classList.add("create-post-section--off"); + + renderPostsIntervalId(); } catch(error){ console.error(error); alert(error.message); } } + +function renderPost(){ + try{ + var posts = logic.retrievePosts(); + + postsList.innerHTML = ""; + + posts.forEach(function(post){ + + var article = document.createElement("article"); + article.classList.add("post"); + + var title = document.createElement("h3"); + title.innerHTML = post.author.username; + + article.appendChild(title); + + var image = document.createElement("img"); + image.src = post.image; + + article.appendChild(image); + + var paragraph = document.createElement("p"); + paragraph.innerText = post.text; + + var breakLine = document.createElement("br"); + + paragraph.appendChild(breakLine); + + var dateTimeSup = document.createElement("sup"); + var date = new Date(post.date); + + dateTimeSup.innerText = date.toLocaleDateString("en-CA"); + + paragraph.appendChild(dateTimeSup); + + article.appendChild(paragraph); + + postsList.appendChild(article); + }) + } + catch(error){ + console.error(error) + alert("No hay publicaciones"); + } +} + +renderPost(); + +renderPostsIntervalId = setInterval(function(){ + renderPost(); +},3000) diff --git a/staff/adrian-martinez/liveshare/app/logic.js b/staff/adrian-martinez/liveshare/app/logic.js index 11d30d99a..50e6ba392 100644 --- a/staff/adrian-martinez/liveshare/app/logic.js +++ b/staff/adrian-martinez/liveshare/app/logic.js @@ -297,6 +297,29 @@ var logic = (function() { data.insertPost(post); } + function retrievePosts(){ + + var posts = data.getAllPosts(); + + posts.forEach(function(post){ + + var user = data.findUser(function(user){ + return user.id === post.author; + }) + + delete user.name; + delete user.birthdate; + delete user.email; + delete user.password; + delete user.online; + + post.author = user; + }) + + //Devolvemos las publicaciones en orden inverso. Aparecen primero en el HTML las más recientes + return posts.reverse(); + } + //Las funciones propias de una capa mejor meterlas como propiedad de un objecto return { registerUser: registerUser, @@ -307,7 +330,8 @@ var logic = (function() { sendMessageToUser: sendMessageToUser, retrieveMessagesWithUser: retrieveMessagesWithUser, getLoggedInUserId: getLoggedInUserId, - createPost:createPost + createPost:createPost, + retrievePosts: retrievePosts } })() \ No newline at end of file diff --git a/staff/adrian-martinez/liveshare/app/style.css b/staff/adrian-martinez/liveshare/app/style.css index 348a6735a..96a268b8d 100644 --- a/staff/adrian-martinez/liveshare/app/style.css +++ b/staff/adrian-martinez/liveshare/app/style.css @@ -27,6 +27,10 @@ button{ background-color: rgb(4, 104, 254); color: white } +nav > button:active{ + color:black; + font-weight: bold; +} hr{ height: 5px; background-color: rgb(4, 104, 254); @@ -78,6 +82,9 @@ li { padding: 2%; width: 50%; } +.chat--off{ + display: none; +} #chat-section{ /* display: flex; */ flex-direction: column; From 478668cb759ca49d7cf503fd0d2d96515ad16d7c Mon Sep 17 00:00:00 2001 From: Strider Date: Tue, 19 Mar 2024 18:07:48 +0100 Subject: [PATCH 30/43] Update home.html and style.css file (WIP) #88 --- staff/adrian-martinez/liveshare/app/home.html | 85 ++++++++++--------- staff/adrian-martinez/liveshare/app/style.css | 39 ++++++--- 2 files changed, 74 insertions(+), 50 deletions(-) diff --git a/staff/adrian-martinez/liveshare/app/home.html b/staff/adrian-martinez/liveshare/app/home.html index e5682873b..b9ec61f02 100644 --- a/staff/adrian-martinez/liveshare/app/home.html +++ b/staff/adrian-martinez/liveshare/app/home.html @@ -9,51 +9,36 @@ -
                    - Mi Perfil -
                    -
                    -
                    + +
                    +
                    + LiveShare +
                    +
                    +

                    Hello, Home!

                    + + + +
                    +
                    + -
                    -
                    -
                    -

                    Hello, Home!

                    -

                    -

                    -

                    + +
                    +
                    +
                    +

                    Publicaciones

                    +
                    +
                    -
                    -
                    -

                    Publicaciones

                    -
                    -
                    - -
                    -
                    -
                    -
                      -

                      Lista de usuarios:

                      -
                    -
                    -
                    -
                    -

                    username

                    - -
                      - - - - - - -
                      -
                      +
                      +
                      +

                      Crear Publicación

                      @@ -68,8 +53,28 @@

                      Crear Publicación

                      - -
                      +
                      +
                      + +
                      +
                        +

                        Lista de usuarios:

                        +
                      +
                      +
                      +
                      +

                      username

                      + +
                        + +
                        + + + +
                        +
                        +
                        +