From d8ce77bc5c4edc392101ea240b885c8ac25ac965 Mon Sep 17 00:00:00 2001 From: rosterry58 Date: Thu, 13 Feb 2020 09:31:29 -0500 Subject: [PATCH 1/7] subiendo cambios en html --- src/index.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index e0329cf..a93ff19 100644 --- a/src/index.html +++ b/src/index.html @@ -7,7 +7,11 @@
-
+
+
+

Finalizar compra

+
+
From d431a33594640dedcadf4df4aa2f6365b0f9142b Mon Sep 17 00:00:00 2001 From: rosterry58 Date: Mon, 24 Feb 2020 04:47:02 -0500 Subject: [PATCH 2/7] subiendo actualizaciones de HTML, JavaScript y CSS --- "src/im\303\241genes/logo visa.jpg" | Bin 0 -> 26556 bytes "src/im\303\241genes/logo.PNG" | Bin 0 -> 16645 bytes "src/im\303\241genes/visa.png" | Bin 0 -> 1274 bytes src/index.html | 34 +++- src/index.js | 48 ++++++ src/style.css | 252 ++++++++++++++++++++++++++++ src/validator.js | 81 ++++++++- 7 files changed, 409 insertions(+), 6 deletions(-) create mode 100644 "src/im\303\241genes/logo visa.jpg" create mode 100644 "src/im\303\241genes/logo.PNG" create mode 100644 "src/im\303\241genes/visa.png" diff --git "a/src/im\303\241genes/logo visa.jpg" "b/src/im\303\241genes/logo visa.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..3ad01673f7daa01d81d386932e6731cc0c5c3b40 GIT binary patch literal 26556 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 literal 0 HcmV?d00001 diff --git "a/src/im\303\241genes/visa.png" "b/src/im\303\241genes/visa.png" new file mode 100644 index 0000000000000000000000000000000000000000..f263147101f60485718ff19d41e98b08e9f3e9ba GIT binary patch literal 1274 zcmV&-=dTRx+7PO-iNmVLagQ`Fvd}Ns`hG27_*? zgSlT=EEbO{5D0*d2OY#gvD88QpHR_HBq&3OC^C_iW-AR~nIfWUCi2M41!=4eios)$ z#@j=@li<_sLLjb4n9MhZ@yYS4{5n|^g|FYg>ZF{$uBQHIHUmLAX9Bs6r z*)|Bz^+b? z*Wl}|LG10*GY|am<{c7#-<`4Itl7b@t6wOD#LmZ!U2u<0ahod<8O!OB*R0wWYK1s==Oa=+G|Au)LgQ-N$% zk7i=qQ@O%UO1-$R9@U49m||+k?>JcB!Jj9@sIg^z7Ao>m`8}nsV|XlVj9i(;kl9q2 zE`r(LsKoc@XI0rznJ@h0E=E|JktpmnZ^~3ZL5XE05<0KWqOinb5!qTQ@v}`rTF7 z9-`7&ORy7ub!v7CAW|RJUBVxxeqocdU?JSorb+4?X|(h9DdY90^@w6MMRWAJJbeEk zWNS5ib^m5**E{GzWpM^#qm=OZ1MEE8M70Ug=;(9fLdPv(Yq~yrErV(-T%2KBb10~8 zh>RFa?fBU|aZh`O40)scy|s^}l9~Ia#7DDsK8@QGLBiD0cCt2o_>4`A+qf=G6h7gc zWq|KTrWt`qlAllMSXU&3)jlCwS`0*mL3<4mH?#+qN(TA7M>pE)Wl?rKQEH*X#2a#Rk+S zU3{}7P)(#K#fWF5Ods0_3Hccb(6N1oK1n+IMsV}rF^r6Rp=1h?Y9%v4xke{po>_!A zwxO2guDauW{j8J8je!;@Eindj!EU$P?wQPT1(AuUuja`5bGGugd6^=jlv!y2%N3Mn k&hGAR%~A()zaSp}0atpQKsz#L3jhEB07*qoM6N<$f=7CHzyJUM literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index a93ff19..e05e51c 100644 --- a/src/index.html +++ b/src/index.html @@ -6,13 +6,37 @@ -
+
+
+ +
-
+

Finalizar compra

-
-
-
+ Ingrese su email para continuar +
+ + + +
+

Validación de tarjeta

+ Es importante validar su tarjeta para continuar la compra +
+
+
+
+
+
+
+ +
+ +
+
+
+ diff --git a/src/index.js b/src/index.js index 2b35956..2c2e800 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,51 @@ import validator from './validator.js'; +// console.log(validator.isValid) +// // function getCardInput(){ +// // const cardNumInput = document.getElementById('creditCardNumber'); +// // return cardNumInput.value; +// // } + +// let currentCardNumber = ''; +// let maskedCardNumber = ''; + +const btn1 = document.getElementById('btn1'); // BOTÓN FORMULARIO 'inicio' + btn1.addEventListener('click', () => { + const email = document.getElementById('email').value; + if (email == "") { + document.getElementById('email').focus(); + } else { + console.log(email + ""); + document.getElementById('email').focus(); + document.getElementById('inicio').style.display='none'; + document.getElementById('segundo').style.display='block'; + } +}); + +const btn2 = document.getElementById('btn2'); // BOTÓN FORMULARIO 'segundo' + btn2.addEventListener('click', () => { + + const numeroTarjeta = document.getElementById('creditCardNumber'); + const isValidCardNumber = validator.isValid(numeroTarjeta.value); + console.log(isValidCardNumber); + + const numeroTarjetaEncriptado = validator.maskify(numeroTarjeta.value); + numeroTarjeta.value = numeroTarjetaEncriptado; + console.log(numeroTarjeta.value); + + const status1 = document.getElementById('status1'); + if (isValidCardNumber === true) { + status1.innerHTML = 'Tarjeta válida'; + } + const status2 = document.getElementById('status2'); + if (isValidCardNumber === false) { + status2.innerHTML = 'Tarjeta inválida'; + } + +}); + console.log(validator); + + + + diff --git a/src/style.css b/src/style.css index e69de29..e88caf3 100644 --- a/src/style.css +++ b/src/style.css @@ -0,0 +1,252 @@ +#segundo { + display: none; + } + +* { + box-sizing: border-box; +} + +body { + margin: 0; + font-family: sans-serif; +} + +hr { + position: absolute; + width: 1440px; + height: 1px; + left: 0px; + top: 205px; + + border: 2px solid #F9B337; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); +} + +#logo { + position: absolute; + width: 241px; + height: 149px; + left: 50px; + top: 30px; +} + +#btn1 { + position: absolute; + width: 230px; + height: 50px; + left: 605px; + top: 818px; + background: #06A09A; + border: 1px solid #D8CACA; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + transform: matrix(1, 0, 0, 1, 0, 0); + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 24px; + line-height: 29px; + color: #FFFFFF; +} + +#status1 { + position: absolute; + width: 395px; + height: 34px; + left: 634px; + top: 1000px; + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 28px; + line-height: 34px; +} + +#status2 { + position: absolute; + width: 395px; + height: 34px; + left: 634px; + top: 1000px; + color: rgb(243, 9, 9); + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 28px; + line-height: 34px; +} + +h1 { + position: relative; + width: 900px; + height: 61px; + left: 122px; + top: 360px; + font-family: Rambla; + font-style: bold; + font-weight: bold; + font-size: 50px; + line-height: 61px; + color: #7E6C62; +} + +h2 { + position: absolute; + width: 418px; + height: 61px; + left: 115px; + top: 245px; + + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 50px; + line-height: 61px; + + color: #7E6C62; +} + +p1 { + position: absolute; + width: 306px; + height: 29px; + left: 550px; + top: 581px; + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 24px; + line-height: 29px; + color: #262323; +} + +#btn2 { + position: absolute; + width: 230px; + height: 50px; + left: 605px; + top: 911px; + background: #F9B235; + border: 1px solid #D8CACA; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + transform: matrix(1, 0, 0, 1, 0, 0); + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 24px; + line-height: 29px; + color: #FFFFFF; +} + +p2 { + position: absolute; + width: 652px; + height: 34px; + left: 399px; + top: 433px; + + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 28px; + line-height: 34px; + + color: #585858; +} + +#email { + position: absolute; + width: 678px; + height: 66px; + left: 381px; + top: 649px; + background: #E5E5E5; + border: 1px solid #D8CACA; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + border-radius: 41px; + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 24px; + line-height: 29px; + + color: rgba(0, 0, 0, 0.24); +} + +.formulario { + position: absolute; + width: 678px; + height: 401px; + left: 381px; + top: 487px; + + background: #06A09A; + border: 1px solid #D8CACA; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + border-radius: 41px; +} +.form--input1 { + position: absolute; + width: 515px; + height: 50px; + left: 82px; + top: 67px; + + background: #E5E5E5; + border: 1px solid #D8CACA; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + transform: matrix(1, 0, 0, 1, 0, 0); +} + +.form--input2 { + position: absolute; + width: 515px; + height: 50px; + left: 82px; + top: 305px; + + background: #E5E5E5; + border: 1px solid #D8CACA; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + transform: matrix(1, 0, 0, 1, 0, 0); +} + +.form--label1 { + position: absolute; + width: 244px; + height: 34px; + left: 82px; + top: 26px; + + font-family: Rambla; + font-style: normal; + font-weight: bold; + font-size: 28px; + line-height: 34px; + + color: #FFFFFF; +} + +.form--label2 { + position: absolute; + width: 591px; + height: 34px; + left: 82px; + top: 262px; + + font-family: Rambla; + font-style: normal; + font-weight: bold; + font-size: 28px; + line-height: 34px; + + color: #FFFFFF; +} + +#logovisa { + position: absolute; + width: 57px; + height: 29px; + left: 504px; + top: 610px; + +} \ No newline at end of file diff --git a/src/validator.js b/src/validator.js index 781f711..8446194 100644 --- a/src/validator.js +++ b/src/validator.js @@ -1,5 +1,84 @@ +const isValid = function (creditCardNumber) { + const reverse = function(array) { + let newArray = []; + let size = 16; + let lastPosition = size - 1; + for (let i = lastPosition; i >= 0; i--) { + newArray.push(array[i]); + } + return newArray; + // // // const arr = Array.from(array); + // // // return arr.reverse(); + }; + + const multiply = function(array) { + let newArray = []; + for (let index = 0; index < 16; index++) { + if (index % 2 !== 0) { + const castedNumber = Number(array[index]); //arreglo de Strings + const newNumber = castedNumber * 2; + + newArray.push(String(newNumber)); + } else { + newArray.push(array[index]); + } + } + return newArray; + }; + + const sumDigits = function(array) { + let newArray = []; + for (let index = 0; index < 16; index++) { + const temp = Number(array[index]); + if (temp >= 10) { + const tempArray = array[index].split(''); //arreglo de Strings + let sum = 0; + for (let i = 0; i < tempArray.length; i++) { + sum += Number(tempArray[i]); + } + + newArray.push(String(sum)); + } else { + newArray.push(array[index]); + } + } + return newArray; + }; + + const sumTotal = function(array) { + let sum = 0; + for (let i = 0; i < array.length; i++) { + sum += Number(array[i]); + } + return sum; + }; + + const reverseCard = reverse(creditCardNumber); + const multiplyCard = multiply(reverseCard); + const sumDigitsCard = sumDigits(multiplyCard); + const suma = sumTotal(sumDigitsCard); + const isValidCardNumber = suma % 10 === 0; + return isValidCardNumber; +}; + +const maskify = function (creditCardNumber) { + let lastfour = creditCardNumber.length; + let finalnumber = ""; + for(let i = 0; i < lastfour - 4; i++) + { + finalnumber += "#"; + } + + return finalnumber + creditCardNumber.substring(lastfour-4,lastfour); + +}; + const validator = { - // ... + isValid, + maskify }; + +// valid card: 4557880973223823 + export default validator; From b0c356c848022150b3b8e20cc1d760d6ae41ebfa Mon Sep 17 00:00:00 2001 From: rosterry58 Date: Mon, 2 Mar 2020 11:49:55 -0500 Subject: [PATCH 3/7] subiendo actualizaciones de readme --- README.md | 68 ++++++++++++++++++++++++++++ "src/im\303\241genes/prototipo.PNG" | Bin 0 -> 33003 bytes src/index.html | 32 ++++++------- src/index.js | 13 ------ src/style.css | 9 ++-- src/validator.js | 9 ++-- test/validator.spec.js | 24 +++++----- 7 files changed, 105 insertions(+), 50 deletions(-) create mode 100644 "src/im\303\241genes/prototipo.PNG" diff --git a/README.md b/README.md index e42dffa..76452b7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,71 @@ +# Willapi + +Willapi es una empresa peruana que fabrica polos y casacas para jóvenes mujeres y varones. Willapi es una palabra quechua que significa color anaranjado como el entusiasmo de los jóvenes. + + + +## Índice + +* [1. Descripción](#1-Descripción) +* [2. Objetivos de aprendizaje](#2-objetivos-de-aprendizaje) + +*** + +## 1. Descipción + +La página web que permite validar la tarjeta de crédito pertenece a un sitio web de venta de ropa para jóvenes, la función de las paginas permite realizar la validación de las tarjetas para continuar con la compra online, en una sola página se le solicita el correo electrónico al usuario para registro y posterior envío de su boleta o factura electrónica, luego en la siguiente página se le solicita el número de la tarjeta y el nombre que figura en la tarjeta para realizar la validación. + +La siguiente imagen pertenece al prototipo inicial donde se diseñó el formulario y la interfaz utilizando los colores del imagotipo. +![prototipo] () + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # Tarjeta de crédito válida ## Índice diff --git "a/src/im\303\241genes/prototipo.PNG" "b/src/im\303\241genes/prototipo.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..f2473e5fee62e1c813fa0d6579b25021130667f6 GIT binary patch literal 33003 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 Tarjeta de crédito válida +

Finalizar compra

Ingrese su email para continuar -
+
-
-

Validación de tarjeta

- Es importante validar su tarjeta para continuar la compra -
-
-
-
-
-
-
- -
- +

Validación de tarjeta

+ Es importante validar su tarjeta para continuar la compra +
+
+
+
+
+
+
+ +
+
-
+ diff --git a/src/index.js b/src/index.js index 2c2e800..1ae55a6 100644 --- a/src/index.js +++ b/src/index.js @@ -1,21 +1,11 @@ import validator from './validator.js'; -// console.log(validator.isValid) -// // function getCardInput(){ -// // const cardNumInput = document.getElementById('creditCardNumber'); -// // return cardNumInput.value; -// // } - -// let currentCardNumber = ''; -// let maskedCardNumber = ''; - const btn1 = document.getElementById('btn1'); // BOTÓN FORMULARIO 'inicio' btn1.addEventListener('click', () => { const email = document.getElementById('email').value; if (email == "") { document.getElementById('email').focus(); } else { - console.log(email + ""); document.getElementById('email').focus(); document.getElementById('inicio').style.display='none'; document.getElementById('segundo').style.display='block'; @@ -27,11 +17,9 @@ const btn2 = document.getElementById('btn2'); // BOTÓN FORMULARIO 'segundo' const numeroTarjeta = document.getElementById('creditCardNumber'); const isValidCardNumber = validator.isValid(numeroTarjeta.value); - console.log(isValidCardNumber); const numeroTarjetaEncriptado = validator.maskify(numeroTarjeta.value); numeroTarjeta.value = numeroTarjetaEncriptado; - console.log(numeroTarjeta.value); const status1 = document.getElementById('status1'); if (isValidCardNumber === true) { @@ -44,7 +32,6 @@ const btn2 = document.getElementById('btn2'); // BOTÓN FORMULARIO 'segundo' }); -console.log(validator); diff --git a/src/style.css b/src/style.css index e88caf3..9b358bf 100644 --- a/src/style.css +++ b/src/style.css @@ -2,9 +2,9 @@ display: none; } -* { +/* * { box-sizing: border-box; -} +} */ body { margin: 0; @@ -247,6 +247,7 @@ p2 { width: 57px; height: 29px; left: 504px; - top: 610px; + top: 630px; + +} -} \ No newline at end of file diff --git a/src/validator.js b/src/validator.js index 8446194..5238e07 100644 --- a/src/validator.js +++ b/src/validator.js @@ -1,7 +1,7 @@ const isValid = function (creditCardNumber) { const reverse = function(array) { let newArray = []; - let size = 16; + let size = array.length; let lastPosition = size - 1; for (let i = lastPosition; i >= 0; i--) { newArray.push(array[i]); @@ -13,11 +13,10 @@ const isValid = function (creditCardNumber) { const multiply = function(array) { let newArray = []; - for (let index = 0; index < 16; index++) { + for (let index = 0; index < array.length; index++) { if (index % 2 !== 0) { - const castedNumber = Number(array[index]); //arreglo de Strings + const castedNumber = Number(array[index]); const newNumber = castedNumber * 2; - newArray.push(String(newNumber)); } else { newArray.push(array[index]); @@ -28,7 +27,7 @@ const isValid = function (creditCardNumber) { const sumDigits = function(array) { let newArray = []; - for (let index = 0; index < 16; index++) { + for (let index = 0; index < array.length; index++) { const temp = Number(array[index]); if (temp >= 10) { const tempArray = array[index].split(''); //arreglo de Strings diff --git a/test/validator.spec.js b/test/validator.spec.js index e3d0453..7676658 100644 --- a/test/validator.spec.js +++ b/test/validator.spec.js @@ -11,16 +11,16 @@ describe('validator', () => { expect(typeof validator.isValid).toBe('function'); }); - it.skip('debería retornar true para "4083952015263"', () => { - // escribe aquí tu test + it('debería retornar true para "4083952015263"', () => { + expect(validator.isValid ('4083952015263')).toBe(true); }); - it.skip('debería retornar true para "79927398713"', () => { - // escribe aquí tu test + it('debería retornar true para "79927398713"', () => { + expect(validator.isValid ('79927398713')).toBe(true); }); - it.skip('debería retornar false para "1234567890"', () => { - // escribe aquí tu test + it('debería retornar false para "1234567890"', () => { + expect(validator.isValid ('1234567890')).toBe(false); }); }); @@ -29,16 +29,16 @@ describe('validator', () => { expect(typeof validator.maskify).toBe('function'); }); - it.skip('Debería retornar "############5616" para "4556364607935616"', () => { - // escribe aquí tu test + it('Debería retornar "############5616" para "4556364607935616"', () => { + expect(validator.maskify('4556364607935616')).toBe("############5616"); }); - it.skip('Debería retornar "1" para "1"', () => { - // escribe aquí tu test + it('Debería retornar "1" para "1"', () => { + expect(validator.maskify('1')).toBe("1"); }); - it.skip('Debería retornar "######orld" para "helloworld"', () => { - // escribe aquí tu test + it('Debería retornar "######orld" para "helloworld"', () => { + expect(validator.maskify('helloworld')).toBe("######orld"); }); }); }); From 5a695be43cfadbf20666898b0fcb92d3d1fb76cc Mon Sep 17 00:00:00 2001 From: rosterry58 Date: Thu, 5 Mar 2020 09:46:25 -0500 Subject: [PATCH 4/7] subiendo cambios en readme, html, javascript y css --- README.md | 371 ++---------------- "src/im\303\241genes/check.png" | Bin 0 -> 1599 bytes "src/im\303\241genes/logo visa.jpg" | Bin 26556 -> 0 bytes "src/im\303\241genes/mantenimiento.png" | Bin 0 -> 120475 bytes "src/im\303\241genes/protopapel.jpeg" | Bin 0 -> 86108 bytes "src/im\303\241genes/prototipo1.PNG" | Bin 0 -> 31394 bytes "src/im\303\241genes/prototipo2.PNG" | Bin 0 -> 49879 bytes "src/im\303\241genes/test.PNG" | Bin 0 -> 25284 bytes "src/im\303\241genes/x.png" | Bin 0 -> 1688 bytes src/index.html | 16 +- src/index.js | 43 +- ...p\303\241gina en construcci\303\263n.html" | 23 ++ src/style.css | 161 +++++--- 13 files changed, 187 insertions(+), 427 deletions(-) create mode 100644 "src/im\303\241genes/check.png" delete mode 100644 "src/im\303\241genes/logo visa.jpg" create mode 100644 "src/im\303\241genes/mantenimiento.png" create mode 100644 "src/im\303\241genes/protopapel.jpeg" create mode 100644 "src/im\303\241genes/prototipo1.PNG" create mode 100644 "src/im\303\241genes/prototipo2.PNG" create mode 100644 "src/im\303\241genes/test.PNG" create mode 100644 "src/im\303\241genes/x.png" create mode 100644 "src/p\303\241gina en construcci\303\263n.html" diff --git a/README.md b/README.md index 76452b7..f5f4087 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,14 @@ # Willapi -Willapi es una empresa peruana que fabrica polos y casacas para jóvenes mujeres y varones. Willapi es una palabra quechua que significa color anaranjado como el entusiasmo de los jóvenes. +Willapi es una empresa peruana que fabrica polos y casacas para jóvenes mujeres y varones. Willapi es una palabra quechua que significa color anaranjado. - +![imagotipo](src/imágenes/logo.PNG) ## Índice * [1. Descripción](#1-Descripción) -* [2. Objetivos de aprendizaje](#2-objetivos-de-aprendizaje) +* [2. Investigación UX](#2-Investigación-UX) +* [3. Objetivos de aprendizaje](#3-Objetivos-de-aprendizaje) *** @@ -15,99 +16,38 @@ Willapi es una empresa peruana que fabrica polos y casacas para jóvenes mujeres La página web que permite validar la tarjeta de crédito pertenece a un sitio web de venta de ropa para jóvenes, la función de las paginas permite realizar la validación de las tarjetas para continuar con la compra online, en una sola página se le solicita el correo electrónico al usuario para registro y posterior envío de su boleta o factura electrónica, luego en la siguiente página se le solicita el número de la tarjeta y el nombre que figura en la tarjeta para realizar la validación. -La siguiente imagen pertenece al prototipo inicial donde se diseñó el formulario y la interfaz utilizando los colores del imagotipo. -![prototipo] () +## 2. Investigación UX: +* `Explicar quiénes son los usuarios y los objetivos en relación con el producto.` +Los usuarios del producto son jóvenes varones y mujeres que les gusta la moda urbana y desean comprar ropa peruana de calidad. +El objetivo del producto es que el usuario pueda validar su tarjeta de crédito para continuar con la compra de los productos. +* `Explicar cómo el producto soluciona los problemas/necesidades de dichos usuarios.` +El producto facilita al usuario verificar su tarjeta porque actualmente los bancos tarjetas de crédito que se entregan a domicilio y a veces sin ningún contrato, entonces, el usuario no tiene la certeza de que esa tarjeta es válida. +* `Luego colocarás la foto de tu primer prototipo en papel.` +Pensé en una propuesta de dos páginas porque es incómodo para el usuario ver muchas páginas, por ello, la primera primera es para que el usuario ingrese solo su correo electrónico y la siguiente página es para realizar la validación de la tarjeta, si la tarjeta es válida puede ir a otra página con un link donde podrá finalizar la compra. +![prototipo](src/imágenes/protopapel.jpeg) +* `Agregar un resumen del feedback recibido indicando las mejoras a realizar.` +Al inicio le mostré mi prototipo a Lulú y me dijo que podría cambiar los colores para que se vea más juvenil y así lo hice, con solo un cambio de colores la página cambió de aspecto. Después, estaba muy complicada porque no podía empezar con el algoritmo de Luhn y Betsy me dijo dividiera los pasos del algoritmo de Luhn en tareas usando Trello, así lo hice y pude codear el algoritmo. Finalmente tenía dificultad al insertar una imágen al costado de una propiedad innerHTML, entonces Betsy hizo que me diera cuenta que estaba tomando el id de el contenedor global y cualquier elemento que inserte en el contenedor el innerHTML no lo iba a tener en cuenta, por ello, fue necesario crear una etiqueta

que tuviera un id para volver a plantear mi código. +* `Imagen del prototipo final.` +La siguiente imagen pertenece al prototipo inicial donde se diseñó el formulario y la interfaz utilizando los colores del imagotipo, para realizar el diseño utilicé Figma. +![prototipo](src/imágenes/prototipo1.PNG) +![prototipo](src/imágenes/prototipo2.PNG) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Tarjeta de crédito válida - -## Índice - -* [1. Preámbulo](#1-preámbulo) -* [2. Resumen del proyecto](#2-resumen-del-proyecto) -* [3. Objetivos de aprendizaje](#3-objetivos-de-aprendizaje) -* [4. Consideraciones generales](#4-consideraciones-generales) -* [5. Criterios de aceptación mínimos del proyecto](#5-criterios-de-aceptación-mínimos-del-proyecto) -* [6. Consideraciones técnicas](#6-consideraciones-técnicas) -* [7. Pistas, tips y lecturas complementarias](#7-pistas-tips-y-lecturas-complementarias) - -*** - -## 1. Preámbulo - -El [algoritmo de Luhn](https://es.wikipedia.org/wiki/Algoritmo_de_Luhn), -también llamado algoritmo de módulo 10, es un método de suma de verificación, -se utiliza para validar números de identificación; tales como el IMEI de los -celulares, tarjetas de crédito, etc. - -Este algoritmo es simple. Obtenemos la reversa del número a verificar (que -solamente contiene dígitos [0-9]); a todos los números que ocupan una posición -par se les debe multiplicar por dos, si este número es mayor o igual a 10, -debemos sumar los dígitos del resultado; el número a verificar será válido si -la suma de sus dígitos finales es un múltiplo de 10. - -![gráfica de algoritmo de Luhn](https://www.101computing.net/wp/wp-content/uploads/Luhn-Algorithm.png) - -## 2. Resumen del proyecto - -En este proyecto tendrás que construir una aplicación web que le permita a un -usuario validar el número de una tarjeta de crédito. Además, tendrás que -implementar funcionalidad para ocultar todos los dígitos de una tarjeta menos -los últimos cuatro. - -La temática es libre. Tú debes pensar en qué situaciones de la vida real se -necesitaría validar una tarjeta de crédito y pensar en cómo debe ser esa -experiencia de uso (qué pantallas, explicaciones, mensajes, colores, ¿marca?) -etc. - -## 3. Objetivos de aprendizaje +## 2. Objetivos de aprendizaje El objetivo principal de aprendizaje es adquirir experiencia desarrollando aplicaciones web (WebApp) que interactúen con el usuario a través del navegador @@ -147,6 +87,9 @@ Reflexiona y luego marca los objetivos que has llegado a **entender** y * [ ] [Testeo de tus funciones](https://jestjs.io/docs/es-ES/getting-started) +![prototipo](src/imágenes/test.PNG) + + ### Git y GitHub * [ ] [Comandos de git](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/scm/01-git/04-commands) @@ -158,271 +101,3 @@ Reflexiona y luego marca los objetivos que has llegado a **entender** y * [ ] Organizar y dividir el código en módulos (Modularización). * [ ] Uso de identificadores descriptivos (Nomenclatura | Semántica). * [ ] Uso de linter para seguir buenas prácticas (ESLINT). - -## 4. Consideraciones generales - -* Este proyecto se debe resolver de manera individual. -* El proyecto será entregado subiendo tu código a GitHub (`commit`/`push`) y la - interfaz será desplegada usando [GitHub pages](https://pages.github.com). Si - no sabes lo que es GitHub, no te preocupes, lo aprenderás durante este proyecto. -* Tiempo para completarlo: Toma como referencia 2 semanas. Trabaja durante el - primer Sprint (una semana) y al final, trata de fijar un estimado de cuándo lo - terminarás. - -## 5. Criterios de aceptación mínimos del proyecto - -Usa solo caracteres numéricos (dígitos) en la tarjeta a validar [0-9]. - -### Definición del producto - -En el `README.md`, cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso -para definir el producto final a nivel de experiencia y de interfaz. - -* Quiénes son los principales usuarios de producto. -* Cuáles son los objetivos de estos usuarios en relación con tu producto. -* Cómo crees que el producto que estás creando está resolviendo sus problemas. - -### Interfaz de usuario (UI) - -La interfaz debe permitir al usuario: - -* Insertar el número que queremos validar. -* Ver el resultado si es válido o no. -* Ocultar todos los dígitos de su número de tarjeta menos los últimos -4 caracteres. -* No debe poder ingresar un campo vacío. - -### UX (Diseño de experiencia de usuario) - -Antes de iniciar a codear, debes entender el problema que quieres solucionar y -cómo tu aplicación lo soluciona. - -* Trabaja tu primer prototipo con papel y lápiz (blanco y negro). -* Luego valida esta solución con una compañera (pedir feedback). -* Toma lo aprendido al momento de validar tu primer prototipo y desarrolla un - nuevo prototipo usando alguna herramienta para diseño de prototipos - ([Balsamiq](https://balsamiq.com/), [Figma](https://www.figma.com/), - [Google Slides](https://www.google.com/intl/es/slides/about/), etc.) -Estos puntos los presentarás en el `README.md`. - -### Scripts / Archivos - -#### General - -##### `README.md` - -Debe contener lo siguiente: - -* Un título con el nombre de tu proyecto. -* Un resumen de 1 o 2 líneas de qué se trata tu proyecto. -* La imagen final de tu proyecto. -* Investigación UX: - 1. Explicar quiénes son los usuarios y los objetivos en relación con el - producto. - 2. Explicar cómo el producto soluciona los problemas/necesidades de dichos - usuarios. - 3. Luego colocarás la foto de tu primer prototipo en papel. - 4. Agregar un resumen del feedback recibido indicando las mejoras a realizar. - 5. Imagen del prototipo final. - -#### Visualmente (HTML y CSS) - -Deberás maquetar de forma exacta el prototipo final que hiciste en balsamiq -utilizando HTML y CSS. En este momento elegirás los colores, tipo de fuente, -etc a usar. - -A continuación describimos los archivos que utilizarás: - -##### `src/index.html` - -En este archivo va el contenido que se mostrará al usuario (esqueleto HTML). -Encontrarás 3 etiquetas iniciales, las cuales si deseas puedes borrar y empezar -de cero: - -* `

`: encabezado de tu proyecto. -* `
`: contenido principal de tu proyecto. -* `
diff --git a/src/index.js b/src/index.js index 1ae55a6..48cdcc0 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ import validator from './validator.js'; const btn1 = document.getElementById('btn1'); // BOTÓN FORMULARIO 'inicio' btn1.addEventListener('click', () => { const email = document.getElementById('email').value; - if (email == "") { + if (email === '') { document.getElementById('email').focus(); } else { document.getElementById('email').focus(); @@ -15,24 +15,37 @@ const btn1 = document.getElementById('btn1'); // BOTÓN FORMULARIO 'inicio' const btn2 = document.getElementById('btn2'); // BOTÓN FORMULARIO 'segundo' btn2.addEventListener('click', () => { - const numeroTarjeta = document.getElementById('creditCardNumber'); - const isValidCardNumber = validator.isValid(numeroTarjeta.value); - - const numeroTarjetaEncriptado = validator.maskify(numeroTarjeta.value); - numeroTarjeta.value = numeroTarjetaEncriptado; + const creditCardNumber = document.getElementById('creditCardNumber').value; + const nameCliente = document.getElementById('nameCliente').value; + + if (creditCardNumber === '' && nameCliente === '') { + document.getElementById('status1').innerHTML= 'Ingresar datos requeridos'; + } else { + const numeroTarjeta = document.getElementById('creditCardNumber'); + const isValidCardNumber = validator.isValid(numeroTarjeta.value); + + const numeroTarjetaEncriptado = validator.maskify(numeroTarjeta.value); + numeroTarjeta.value = numeroTarjetaEncriptado; + + if (isValidCardNumber === true) { + document.getElementById('tarjeta válida').innerHTML= 'Tarjeta ingresada válida'; + document.getElementById('status1').style.display='none'; + document.getElementById('status2').style.display='block'; + setTimeout('document.location.reload()',20000); + } else { + document.getElementById('tarjeta inválida').innerHTML= 'Tarjeta ingresada inválida'; + document.getElementById('status1').style.display='none'; + document.getElementById('status3').style.display='block'; + setTimeout('document.location.reload()',10000); + } + + } - const status1 = document.getElementById('status1'); - if (isValidCardNumber === true) { - status1.innerHTML = 'Tarjeta válida'; - } - const status2 = document.getElementById('status2'); - if (isValidCardNumber === false) { - status2.innerHTML = 'Tarjeta inválida'; - } -}); + }); + diff --git "a/src/p\303\241gina en construcci\303\263n.html" "b/src/p\303\241gina en construcci\303\263n.html" new file mode 100644 index 0000000..ab7cbd3 --- /dev/null +++ "b/src/p\303\241gina en construcci\303\263n.html" @@ -0,0 +1,23 @@ + + + + + Página en construcción + + + + +
+
+ +
+
+
+ +
+
+ + + diff --git a/src/style.css b/src/style.css index 9b358bf..3519eb5 100644 --- a/src/style.css +++ b/src/style.css @@ -1,10 +1,44 @@ #segundo { display: none; - } +} -/* * { - box-sizing: border-box; -} */ +#fondo { + position: absolute; + width: 195px; + height: 134px; + top: 250px; +} +#status1 { + position: absolute; + width: 395px; + height: 34px; + left: 634px; + top: 1000px; + color: rgb(243, 9, 9); + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 28px; + line-height: 34px; +} + +#status2 { + display: none; + position: absolute; + width: 44px; + height: 45px; + left: 304px; + top: 1020px; +} + +#status3 { + display: none; + position: absolute; + width: 44px; + height: 45px; + left: 534px; + top: 1020px; +} body { margin: 0; @@ -17,7 +51,6 @@ hr { height: 1px; left: 0px; top: 205px; - border: 2px solid #F9B337; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); } @@ -35,7 +68,7 @@ hr { width: 230px; height: 50px; left: 605px; - top: 818px; + top: 788px; background: #06A09A; border: 1px solid #D8CACA; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); @@ -48,31 +81,22 @@ hr { color: #FFFFFF; } -#status1 { - position: absolute; - width: 395px; - height: 34px; - left: 634px; - top: 1000px; - font-family: Rambla; - font-style: normal; - font-weight: normal; - font-size: 28px; - line-height: 34px; -} - -#status2 { +#btn2 { position: absolute; - width: 395px; - height: 34px; - left: 634px; - top: 1000px; - color: rgb(243, 9, 9); + width: 230px; + height: 50px; + left: 605px; + top: 940px; + background: #F9B235; + border: 1px solid #D8CACA; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + transform: matrix(1, 0, 0, 1, 0, 0); font-family: Rambla; font-style: normal; font-weight: normal; - font-size: 28px; - line-height: 34px; + font-size: 24px; + line-height: 29px; + color: #FFFFFF; } h1 { @@ -95,13 +119,11 @@ h2 { height: 61px; left: 115px; top: 245px; - font-family: Rambla; font-style: normal; font-weight: normal; font-size: 50px; line-height: 61px; - color: #7E6C62; } @@ -119,38 +141,60 @@ p1 { color: #262323; } -#btn2 { +p2 { position: absolute; - width: 230px; - height: 50px; - left: 605px; - top: 911px; - background: #F9B235; - border: 1px solid #D8CACA; - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); - transform: matrix(1, 0, 0, 1, 0, 0); + width: 652px; + height: 34px; + left: 399px; + top: 433px; font-family: Rambla; font-style: normal; font-weight: normal; - font-size: 24px; - line-height: 29px; - color: #FFFFFF; + font-size: 28px; + line-height: 34px; + color: #585858; } -p2 { +p3 { position: absolute; - width: 652px; + width: 395px; height: 34px; - left: 399px; - top: 433px; - + left: 64px; + top: 2px; + color: rgb(0, 255, 0); + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 28px; + line-height: 34px; +} + +p4 { + position: absolute; + width: 395px; + height: 34px; + left: 484px; + top: 2px; + color: rgb(59, 59, 59); + font-family: Rambla; + font-style: normal; + font-weight: normal; + font-size: 28px; + line-height: 34px; +} + +p5 { + position: absolute; + width: 395px; + height: 34px; + left: 64px; + top: 2px; + color: rgb(255, 0, 0); font-family: Rambla; font-style: normal; font-weight: normal; font-size: 28px; line-height: 34px; - - color: #585858; } #email { @@ -163,13 +207,14 @@ p2 { border: 1px solid #D8CACA; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); border-radius: 41px; + padding-left: 25px; font-family: Rambla; font-style: normal; font-weight: normal; font-size: 24px; line-height: 29px; - color: rgba(0, 0, 0, 0.24); + outline: none; } .formulario { @@ -178,7 +223,6 @@ p2 { height: 401px; left: 381px; top: 487px; - background: #06A09A; border: 1px solid #D8CACA; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); @@ -188,12 +232,12 @@ p2 { position: absolute; width: 515px; height: 50px; - left: 82px; + left: 72px; top: 67px; - background: #E5E5E5; border: 1px solid #D8CACA; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + padding-left: 20px; transform: matrix(1, 0, 0, 1, 0, 0); } @@ -201,12 +245,12 @@ p2 { position: absolute; width: 515px; height: 50px; - left: 82px; + left: 72px; top: 305px; - background: #E5E5E5; border: 1px solid #D8CACA; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); + padding-left: 20px; transform: matrix(1, 0, 0, 1, 0, 0); } @@ -214,15 +258,13 @@ p2 { position: absolute; width: 244px; height: 34px; - left: 82px; + left: 72px; top: 26px; - font-family: Rambla; font-style: normal; font-weight: bold; font-size: 28px; line-height: 34px; - color: #FFFFFF; } @@ -230,15 +272,13 @@ p2 { position: absolute; width: 591px; height: 34px; - left: 82px; + left: 72px; top: 262px; - font-family: Rambla; font-style: normal; font-weight: bold; font-size: 28px; line-height: 34px; - color: #FFFFFF; } @@ -248,6 +288,5 @@ p2 { height: 29px; left: 504px; top: 630px; - } From c02c3d93fdd1ce0acb2f39660641be13cdf10726 Mon Sep 17 00:00:00 2001 From: rosterry58 Date: Thu, 5 Mar 2020 10:41:24 -0500 Subject: [PATCH 5/7] subiendo check de readme --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index f5f4087..dc5f16e 100644 --- a/README.md +++ b/README.md @@ -58,46 +58,46 @@ Reflexiona y luego marca los objetivos que has llegado a **entender** y ### UX -* [ ] [Diseñar la aplicación pensando y entendiendo al usuario](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/intro-ux/01-el-proceso-de-diseno/00-el-proceso-de-diseno) -* [ ] [Crear prototipos para obtener feedback e iterar](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/product-design/00-sketching/00-sketching) -* [ ] [Aplicar los principios de diseño visual](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/product-design/01-visual-design/01-visual-design-basics) +* [ x ] [Diseñar la aplicación pensando y entendiendo al usuario](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/intro-ux/01-el-proceso-de-diseno/00-el-proceso-de-diseno) +* [ x ] [Crear prototipos para obtener feedback e iterar](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/product-design/00-sketching/00-sketching) +* [ x ] [Aplicar los principios de diseño visual](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/product-design/01-visual-design/01-visual-design-basics) ### HTML y CSS * [ ] [Uso correcto de HTML semántico](https://developer.mozilla.org/en-US/docs/Glossary/Semantics#Semantics_in_HTML) -* [ ] [Uso de selectores de CSS](https://developer.mozilla.org/es/docs/Web/CSS/Selectores_CSS) -* [ ] [Construir tu aplicación respetando el diseño realizado](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/css/01-css/02-boxmodel-and-display) (maquetación). +* [ x ] [Uso de selectores de CSS](https://developer.mozilla.org/es/docs/Web/CSS/Selectores_CSS) +* [ x ] [Construir tu aplicación respetando el diseño realizado](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/css/01-css/02-boxmodel-and-display) (maquetación). ### DOM -* [ ] [Uso de selectores de nodos del DOM](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/browser/02-dom/03-1-dom-methods-selection) -* [ ] [Manejo de eventos del DOM](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/browser/02-dom/04-events) +* [ x ] [Uso de selectores de nodos del DOM](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/browser/02-dom/03-1-dom-methods-selection) +* [ x ] [Manejo de eventos del DOM](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/browser/02-dom/04-events) * [ ] [Manipulación dinámica del DOM](https://developer.mozilla.org/es/docs/Referencia_DOM_de_Gecko/Introducci%C3%B3n) ### Javascript -* [ ] [Manipulación de strings](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/javascript/06-strings/01-strings) -* [ ] [Uso de condicionales](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/javascript/02-flow-control/01-conditionals-and-loops) +* [ x ] [Manipulación de strings](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/javascript/06-strings/01-strings) +* [ x ] [Uso de condicionales](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/javascript/02-flow-control/01-conditionals-and-loops) * [ ] [Uso de bucles](https://lms.laboratoria.la/cohorts/lim-2020-01-bc-core-lim012/courses/javascript/02-flow-control/02-loops) -* [ ] [Uso de funciones](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/javascript/02-flow-control/03-functions) +* [ x ] [Uso de funciones](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/javascript/02-flow-control/03-functions) * [ ] [Datos atómicos y estructurados](https://www.todojs.com/tipos-datos-javascript-es6/) -* [ ] Utilizar ES Modules (`import` | `export`). +* [ x ] Utilizar ES Modules (`import` | `export`). ### Testing -* [ ] [Testeo de tus funciones](https://jestjs.io/docs/es-ES/getting-started) +* [ x ] [Testeo de tus funciones](https://jestjs.io/docs/es-ES/getting-started) ![prototipo](src/imágenes/test.PNG) ### Git y GitHub -* [ ] [Comandos de git](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/scm/01-git/04-commands) +* [ x ] [Comandos de git](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/scm/01-git/04-commands) (`add` | `commit` | `pull` | `status` | `push`). -* [ ] [Manejo de repositorios de GitHub](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/scm/02-github/01-github) (`clone` | `fork` | `gh-pages`). +* [ x ] [Manejo de repositorios de GitHub](https://lms.laboratoria.la/cohorts/lim-2019-09-bc-core-lim011/courses/scm/02-github/01-github) (`clone` | `fork` | `gh-pages`). ### Buenas prácticas de desarrollo -* [ ] Organizar y dividir el código en módulos (Modularización). -* [ ] Uso de identificadores descriptivos (Nomenclatura | Semántica). +* [ x ] Organizar y dividir el código en módulos (Modularización). +* [ x ] Uso de identificadores descriptivos (Nomenclatura | Semántica). * [ ] Uso de linter para seguir buenas prácticas (ESLINT). From 7a312f93ffb15ca995043f417854e017e6122416 Mon Sep 17 00:00:00 2001 From: rosterry58 Date: Fri, 6 Mar 2020 09:10:42 -0500 Subject: [PATCH 6/7] =?UTF-8?q?Actualizaci=C3=B3n=20de=20validator.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/validator.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/validator.js b/src/validator.js index 5238e07..37db1de 100644 --- a/src/validator.js +++ b/src/validator.js @@ -1,5 +1,5 @@ -const isValid = function (creditCardNumber) { - const reverse = function(array) { +const isValid = (creditCardNumber) => { + const reverse = (array) => { let newArray = []; let size = array.length; let lastPosition = size - 1; @@ -11,7 +11,7 @@ const isValid = function (creditCardNumber) { // // // return arr.reverse(); }; - const multiply = function(array) { + const multiply = (array) => { let newArray = []; for (let index = 0; index < array.length; index++) { if (index % 2 !== 0) { @@ -25,7 +25,7 @@ const isValid = function (creditCardNumber) { return newArray; }; - const sumDigits = function(array) { + const sumDigits = (array) => { let newArray = []; for (let index = 0; index < array.length; index++) { const temp = Number(array[index]); @@ -44,7 +44,7 @@ const isValid = function (creditCardNumber) { return newArray; }; - const sumTotal = function(array) { + const sumTotal = (array) => { let sum = 0; for (let i = 0; i < array.length; i++) { sum += Number(array[i]); @@ -60,7 +60,7 @@ const isValid = function (creditCardNumber) { return isValidCardNumber; }; -const maskify = function (creditCardNumber) { +const maskify = (creditCardNumber) => { let lastfour = creditCardNumber.length; let finalnumber = ""; for(let i = 0; i < lastfour - 4; i++) From 8f819a1bb6646848fc986bb56acd5c567b950eb9 Mon Sep 17 00:00:00 2001 From: rosterry58 Date: Fri, 6 Mar 2020 10:11:44 -0500 Subject: [PATCH 7/7] =?UTF-8?q?actualizaci=C3=B3n=20de=20html=20y=20css?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.html | 12 ++++++------ src/index.js | 8 ++++---- src/style.css | 18 +++++++++--------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/index.html b/src/index.html index f8a2afd..d4c9edf 100644 --- a/src/index.html +++ b/src/index.html @@ -17,13 +17,13 @@

Finalizar compra

- Ingrese su email para continuar +

Ingrese su email para continuar


Validación de tarjeta

- Es importante validar su tarjeta para continuar la compra +

Es importante validar su tarjeta para continuar la compra



@@ -38,13 +38,13 @@

Validación de tarjeta

- - Continuar con la compra aquí - +

+

Continuar con la compra aquí +

- +

diff --git a/src/index.js b/src/index.js index 48cdcc0..c859ed2 100644 --- a/src/index.js +++ b/src/index.js @@ -28,15 +28,15 @@ const btn2 = document.getElementById('btn2'); // BOTÓN FORMULARIO 'segundo' numeroTarjeta.value = numeroTarjetaEncriptado; if (isValidCardNumber === true) { - document.getElementById('tarjeta válida').innerHTML= 'Tarjeta ingresada válida'; + document.getElementById('tarjetaválida').innerHTML= 'Tarjeta ingresada válida'; document.getElementById('status1').style.display='none'; document.getElementById('status2').style.display='block'; - setTimeout('document.location.reload()',20000); + // setTimeout('document.location.reload()',20000); } else { - document.getElementById('tarjeta inválida').innerHTML= 'Tarjeta ingresada inválida'; + document.getElementById('tarjetainválida').innerHTML= 'Tarjeta ingresada inválida'; document.getElementById('status1').style.display='none'; document.getElementById('status3').style.display='block'; - setTimeout('document.location.reload()',10000); + // setTimeout('document.location.reload()',10000); } } diff --git a/src/style.css b/src/style.css index 3519eb5..a75a016 100644 --- a/src/style.css +++ b/src/style.css @@ -127,7 +127,7 @@ h2 { color: #7E6C62; } -p1 { +#ingresaremail { position: absolute; width: 306px; height: 29px; @@ -141,12 +141,12 @@ p1 { color: #262323; } -p2 { +#esimportantevalidar { position: absolute; width: 652px; height: 34px; left: 399px; - top: 433px; + top: 409px; font-family: Rambla; font-style: normal; font-weight: normal; @@ -155,12 +155,12 @@ p2 { color: #585858; } -p3 { +#tarjetaválida { position: absolute; width: 395px; height: 34px; left: 64px; - top: 2px; + top: -20px; color: rgb(0, 255, 0); font-family: Rambla; font-style: normal; @@ -169,12 +169,12 @@ p3 { line-height: 34px; } -p4 { +#continuarcompra { position: absolute; width: 395px; height: 34px; left: 484px; - top: 2px; + top: -20px; color: rgb(59, 59, 59); font-family: Rambla; font-style: normal; @@ -183,12 +183,12 @@ p4 { line-height: 34px; } -p5 { +#tarjetainválida { position: absolute; width: 395px; height: 34px; left: 64px; - top: 2px; + top: -20px; color: rgb(255, 0, 0); font-family: Rambla; font-style: normal;