From 1178c5a0f6ffc56120895b0406f59e05d83322f7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 10 Apr 2020 15:05:05 -0500 Subject: [PATCH 01/23] html --- package.json | 2 +- src/Google.PNG | Bin 0 -> 5012 bytes src/facebook.PNG | Bin 0 -> 7034 bytes src/index.html | 21 +++++++++ src/styles.css | 115 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 src/Google.PNG create mode 100644 src/facebook.PNG create mode 100644 src/styles.css diff --git a/package.json b/package.json index 9a365577..796f1d15 100644 --- a/package.json +++ b/package.json @@ -33,4 +33,4 @@ "stylelint": "^10.1.0", "stylelint-config-recommended": "^2.2.0" } -} \ No newline at end of file +} diff --git a/src/Google.PNG b/src/Google.PNG new file mode 100644 index 0000000000000000000000000000000000000000..63478916730ae3e40a98b5d10f9342274d0e7e94 GIT binary patch literal 5012 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 F{SP?Y6QKYA literal 0 HcmV?d00001 diff --git a/src/facebook.PNG b/src/facebook.PNG new file mode 100644 index 0000000000000000000000000000000000000000..84b0957d9d7ef221f8d03dea07c96a00cb50e4c0 GIT binary patch literal 7034 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 Document + +
< JS >
Únete a la red social de programadoras
+
+
+
+
+

+
+
¿Has olvidado la contraseña?
+
+
+

o

+ + +

+

+
¿No tienes cuenta?
+ + +
+ \ No newline at end of file diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 00000000..3df4a743 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,115 @@ +body{ + text-align: center; +} +.header{ + font-weight: bolder; + font-size: 48px; + background:rgb(252, 248, 36); + text-align: center; + + justify-content: center; + align-items: center; + height: 108px; + } + + #subtitle{ + font-size: 16px; + font-weight: bold; + margin-bottom: 10px; + } + +#form{ + outline: none; + display:flex; + justify-content: center; + align-items: center; + height: 260px; + margin-top: 10px; + } +#account{ + background-color:blue; + display:flex; + justify-content: center; + align-items: center; + height: 260px; + } + + .forms{ + outline: none; + border: 0; + height: 60px; + width: 308px; + margin-top: 10px; + background: linear-gradient(to top, #d1d6d5 0%, #ffffff 103%) + } + + .buttons{ + outline: none; + background:white; + border: 0; + outline: none; + height: 60px; + width: 308px; + font: bolder; + font-size: 24px; + } + + #login{ + background: rgb(252, 248, 36); + font-weight: bold; + } + h3{ + display: inline-block; + position: relative; + } + + h3::after,h3::before{ + content: ""; + position: absolute; + width: 125px; + height: 1px; + background-color: gray; + top: 0.6em; + } + + h3::before{ + left: -145px; + } + h3::after{ + right:-145px; +} + +.or{ +margin-top: -30px; +} +#facebook{ + background-image: url(../facebook.png); + background-size: 90% 90%; + background-repeat: no-repeat; + /* background-size: 300px 100px; */ + /* margin-top: 10px; + margin-bottom: 10px; */ +} +#google{ + background-image: url(../google.png); + background-size: 90% 90%; + background-repeat: no-repeat; +} +h5{ +color: #2F80ED; +text-align: right; +} + + +.singin{ + font: bold; + text-align: center; + display: inline-flex; +} +#link{ + text-align: center; + display: inline-flex; + text-decoration:none; + color: #2F80ED; + font-weight: bolder; + } From 00448ff5d8550c973c53d6f417a0d12d67994849 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 11 Apr 2020 15:51:17 -0500 Subject: [PATCH 02/23] view3 --- src/index.html | 55 ++++++++++++++++++--------------- src/styles.css | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 25 deletions(-) diff --git a/src/index.html b/src/index.html index d4183346..2585e60d 100644 --- a/src/index.html +++ b/src/index.html @@ -1,33 +1,38 @@ - - - - Document - + + + Document + -
< JS >
Únete a la red social de programadoras
-
-
-
-
-

-
-
¿Has olvidado la contraseña?
-
-
-

o

- - -

-

-
¿No tienes cuenta?
+
< JS >
Únete a la red social de programadoras
+ -
- + +
+
+
+
+
+

+
+
+
+
+ +
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/src/styles.css b/src/styles.css index 3df4a743..9ad9b2bb 100644 --- a/src/styles.css +++ b/src/styles.css @@ -113,3 +113,87 @@ text-align: right; color: #2F80ED; font-weight: bolder; } +.post{ + height: 86px; + width: 203px; + outline: none; + border: 0; + /* text-align:; */ + margin-top: 10px; + background: linear-gradient(to top, #d1d6d5 0%, #ffffff 103%); + display:inline-flex; + margin-top: 10px; + +} + +.photo{ + height: 86px; + width: 81px; + background-color: lightcoral; + display: inline-flex; + margin-top: 10px; + float: left; +} + +#div{ + background-color: rgb(252, 248, 36); + border: 0; + height: 20px; +} + +#menu{ + height: 40px; +} + +.buttonMenu{ + height: 40px; + width: 40px; + background-color: white; + background-size: 100% 100%; + background-repeat: no-repeat; + outline: none; + border: 0; + margin-left: 20px; + margin-right: 20px; +} + +#Menu{ + background-image: url(../Inicio.png); +} + +#Group{ + background-image: url(../Grupo.png); +} + +#Notific{ + background-image: url(../Notificaciones.png); +} +#Settings{ + background-image: url(../Configuración.png); +} +.buttonLike{ + + height: 30px; + width: 30px; + position:relative; + margin-left:285px; + background-image: url(../like.png); + background-size: 100% 100%; + background-repeat: no-repeat; + outline: none; + border: 0; + background-color: white; +} + +#puntos{ + height: 20px; + width: 50px; + background-image: url(../Puntos.png); + background-size: 100% 100%; + background-repeat: no-repeat; + outline: none; + border: 0; + background-color: white; + left: 25px; + margin-left:285px; +} \ No newline at end of file From 2b5572bb028966ae0358812e3137e99549dbb3e1 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Sat, 11 Apr 2020 18:34:12 -0500 Subject: [PATCH 03/23] se crean las vistas de inicio y registro en js, clases para css se unifican, se hace router en index.js pero no cambia a pantalla de registro --- src/Views/main.js | 19 ++++ src/Views/register.js | 20 ++++ src/example.js | 6 +- src/images/CodeMakers.png | Bin 0 -> 51222 bytes src/{ => images}/Google.PNG | Bin src/{ => images}/facebook.PNG | Bin src/index.html | 30 ++---- src/index.js | 20 +++- src/styles.css | 173 +++++++++++++--------------------- 9 files changed, 136 insertions(+), 132 deletions(-) create mode 100644 src/Views/main.js create mode 100644 src/Views/register.js create mode 100644 src/images/CodeMakers.png rename src/{ => images}/Google.PNG (100%) rename src/{ => images}/facebook.PNG (100%) diff --git a/src/Views/main.js b/src/Views/main.js new file mode 100644 index 00000000..2fceb775 --- /dev/null +++ b/src/Views/main.js @@ -0,0 +1,19 @@ +const root = document.querySelector('#root'); +root.innerHTML = ''; + +export const renderLoginView = () => { + const mainView = ` +
+ + + +

¿Has olvidado la contraseña?

+
+

o

+
+ + +

¿No tienes cuenta? Registrate

+
`; + root.innerHTML = mainView; +}; diff --git a/src/Views/register.js b/src/Views/register.js new file mode 100644 index 00000000..c5594dd5 --- /dev/null +++ b/src/Views/register.js @@ -0,0 +1,20 @@ +const root = document.querySelector('#root'); +root.innerHTML = ''; + +export const renderRegisterView = () => { + const registerView = ` +

ABRE UNA CUENTA

+
+ + +
+
+
+
+
+
+ +

¿Ya tienes una cuenta? Inicia Sesión

+
`; + root.innerHTML = registerView; +}; diff --git a/src/example.js b/src/example.js index 52d2c7ea..320e8301 100644 --- a/src/example.js +++ b/src/example.js @@ -1,3 +1,3 @@ -export const example = () => { - // aquí tu código -} \ No newline at end of file +// export const example = () => { +// // aquí tu código +// } diff --git a/src/images/CodeMakers.png b/src/images/CodeMakers.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3490feae773c9edbb669a7ebb3c396a953eddd GIT binary patch literal 51222 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�J-Wzu&jQuaO}yk;%C2r)xL-vf~| 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 literal 0 HcmV?d00001 diff --git a/src/Google.PNG b/src/images/Google.PNG similarity index 100% rename from src/Google.PNG rename to src/images/Google.PNG diff --git a/src/facebook.PNG b/src/images/facebook.PNG similarity index 100% rename from src/facebook.PNG rename to src/images/facebook.PNG diff --git a/src/index.html b/src/index.html index d4183346..a46ce034 100644 --- a/src/index.html +++ b/src/index.html @@ -4,30 +4,20 @@ - Document + Code Makers -
< JS >
Únete a la red social de programadoras
-
-
-
-
-

-
-
¿Has olvidado la contraseña?
-
-
-

o

- - -

-

-
¿No tienes cuenta?
+
+
+ +

Unete a la Red Social de Programadoras

+
+
+ - -
-
\ No newline at end of file diff --git a/src/index.js b/src/index.js index 35868bab..a63eeec3 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,19 @@ -import { example } from './example.js'; +import { renderLoginView } from './Views/main.js'; +import { renderRegisterView } from './Views/register.js'; -example(); +const registerButton = document.querySelector('#register'); +const loginButton = document.querySelector('#login'); + +const router = (route) => { + switch (route) { + case 'register': + renderRegisterView(); + break; + default: + renderLoginView(); + break; + } +}; +window.addEventListener('DOMContentLoader', router()); +loginButton.addEventListener('click', router()); +registerButton.addEventListener('click', router('register')); diff --git a/src/styles.css b/src/styles.css index 3df4a743..25117b45 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,115 +1,74 @@ -body{ - text-align: center; -} -.header{ - font-weight: bolder; - font-size: 48px; - background:rgb(252, 248, 36); - text-align: center; - - justify-content: center; - align-items: center; - height: 108px; - } - - #subtitle{ - font-size: 16px; - font-weight: bold; - margin-bottom: 10px; - } - -#form{ - outline: none; - display:flex; - justify-content: center; - align-items: center; - height: 260px; - margin-top: 10px; - } -#account{ - background-color:blue; - display:flex; - justify-content: center; - align-items: center; - height: 260px; - } - - .forms{ - outline: none; - border: 0; - height: 60px; - width: 308px; - margin-top: 10px; - background: linear-gradient(to top, #d1d6d5 0%, #ffffff 103%) - } +@import url('https://fonts.googleapis.com/css?family=Roboto:500,700&display=swap'); - .buttons{ - outline: none; - background:white; +html, body { + margin: 0; + padding: 0; + height: 100%; + font-family: 'Roboto', sans-serif; +} +/* contenedor principal */ +.container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +/* header */ +header { + background: #EBE134; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +.codeMakers {width: 12rem; height: 4rem;} +.views { + width: 90%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +/* iniciar sesion con fb y google */ +.conectWithSocialMedia { + display: flex; + flex-direction: column; + align-items: center; +} +.buttons{ border: 0; - outline: none; - height: 60px; - width: 308px; - font: bolder; - font-size: 24px; + height: 4rem; + width: 100%; } - - #login{ - background: rgb(252, 248, 36); - font-weight: bold; - } - h3{ - display: inline-block; - position: relative; - } - - h3::after,h3::before{ - content: ""; - position: absolute; - width: 125px; - height: 1px; - background-color: gray; - top: 0.6em; - } - - h3::before{ - left: -145px; - } - h3::after{ - right:-145px; -} - -.or{ -margin-top: -30px; +/* formulario */ +.registerForm { + width: 90%; + height: 50%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; } -#facebook{ - background-image: url(../facebook.png); - background-size: 90% 90%; - background-repeat: no-repeat; - /* background-size: 300px 100px; */ - /* margin-top: 10px; - margin-bottom: 10px; */ +input { + border: 0; + width: 100%; + height: 2rem; + background: linear-gradient(0deg, rgba(154,156,156,1) 0%, rgba(245,245,242,1) 100%); } -#google{ - background-image: url(../google.png); - background-size: 90% 90%; - background-repeat: no-repeat; +button { + width: 100%; + height: 2.5rem; + border: 0; } -h5{ -color: #2F80ED; -text-align: right; +.registerButton { + border: 0; + background: #EBE134; + font-weight: bold; } - - -.singin{ +.spanLink { font: bold; - text-align: center; - display: inline-flex; -} -#link{ - text-align: center; - display: inline-flex; - text-decoration:none; - color: #2F80ED; - font-weight: bolder; - } + color: blue; + cursor: pointer; +} \ No newline at end of file From fdd8f73240c8a48e3c43e6ec9eb9c8c3a67ef696 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Mon, 13 Apr 2020 22:32:57 -0500 Subject: [PATCH 04/23] =?UTF-8?q?se=20conectan=20las=20vista=20de=20login,?= =?UTF-8?q?=20registro=20y=20recuperar=20contrase=C3=B1a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Views/index.js | 11 +++++ docs/Views/main.js | 19 ++++++++ docs/Views/passwordRecovery.js | 20 ++++++++ docs/Views/register.js | 20 ++++++++ docs/Views/router.js | 27 +++++++++++ docs/example.js | 3 ++ docs/images/CodeMakers.png | Bin 0 -> 51222 bytes docs/images/Google.PNG | Bin 0 -> 5012 bytes docs/images/facebook.PNG | Bin 0 -> 7034 bytes docs/index.html | 23 +++++++++ docs/index.js | 8 ++++ docs/styles.css | 82 +++++++++++++++++++++++++++++++++ src/Views/index.js | 11 +++++ src/Views/main.js | 14 +++--- src/Views/passwordRecovery.js | 20 ++++++++ src/Views/register.js | 14 +++--- src/Views/router.js | 27 +++++++++++ src/index.js | 23 +++------ src/styles.css | 10 +++- 19 files changed, 300 insertions(+), 32 deletions(-) create mode 100644 docs/Views/index.js create mode 100644 docs/Views/main.js create mode 100644 docs/Views/passwordRecovery.js create mode 100644 docs/Views/register.js create mode 100644 docs/Views/router.js create mode 100644 docs/example.js create mode 100644 docs/images/CodeMakers.png create mode 100644 docs/images/Google.PNG create mode 100644 docs/images/facebook.PNG create mode 100644 docs/index.html create mode 100644 docs/index.js create mode 100644 docs/styles.css create mode 100644 src/Views/index.js create mode 100644 src/Views/passwordRecovery.js create mode 100644 src/Views/router.js diff --git a/docs/Views/index.js b/docs/Views/index.js new file mode 100644 index 00000000..0f48c15e --- /dev/null +++ b/docs/Views/index.js @@ -0,0 +1,11 @@ +import Main from './main.js'; +import Register from './register.js'; +import Recovery from './passwordRecovery.js'; + +const components = { + principal: Main, + register: Register, + recoveryPass: Recovery, +}; + +export { components }; diff --git a/docs/Views/main.js b/docs/Views/main.js new file mode 100644 index 00000000..9a1a2ebd --- /dev/null +++ b/docs/Views/main.js @@ -0,0 +1,19 @@ +export default () => { + const mainView = ` +
+ + + +

¿Has olvidado la contraseña?

+
+

o

+
+ + +

¿No tienes cuenta?Registrate

+
`; + const views = document.createElement('div'); + views.setAttribute('class', 'viewsStyle'); + views.innerHTML = mainView; + return views; +}; diff --git a/docs/Views/passwordRecovery.js b/docs/Views/passwordRecovery.js new file mode 100644 index 00000000..b9576fe5 --- /dev/null +++ b/docs/Views/passwordRecovery.js @@ -0,0 +1,20 @@ +export default () => { + const recView = document.createElement('div'); + recView.setAttribute('class', 'viewsStyle'); + recView.innerHTML = ''; + recView.innerHTML = ` +

Recupera tu contraseña

+

Te enviaremos un correo electrónico para recuperar tu contraseña

+
+ + +
+

o

+
+ + +

¿Ya tienes una cuenta? Inicia Sesión

+

¿No tienes cuenta?Registrate

+
`; + return recView; +}; diff --git a/docs/Views/register.js b/docs/Views/register.js new file mode 100644 index 00000000..f6c38994 --- /dev/null +++ b/docs/Views/register.js @@ -0,0 +1,20 @@ +export default () => { + const regView = document.createElement('div'); + regView.setAttribute('class', 'viewsStyle'); + regView.innerHTML = ''; + regView.innerHTML = ` +

ABRE UNA CUENTA

+
+ + +
+
+
+
+
+
+ +

¿Ya tienes una cuenta? Inicia Sesión

+
`; + return regView; +}; diff --git a/docs/Views/router.js b/docs/Views/router.js new file mode 100644 index 00000000..0b2e45a5 --- /dev/null +++ b/docs/Views/router.js @@ -0,0 +1,27 @@ +import { components } from './index.js'; + +const router = (route) => { + const container = document.querySelector('#root'); + container.innerHTML = ''; + switch (route) { + case '': + case '#/': + case '#/login': { + container.appendChild(components.principal()); + return; + } + case '#/register': { + container.appendChild(components.register()); + return; + } + case '#/passwordRecovery': { + container.appendChild(components.recoveryPass()); + return; + } + default: { + break; + } + } +}; + +export { router }; diff --git a/docs/example.js b/docs/example.js new file mode 100644 index 00000000..320e8301 --- /dev/null +++ b/docs/example.js @@ -0,0 +1,3 @@ +// export const example = () => { +// // aquí tu código +// } diff --git a/docs/images/CodeMakers.png b/docs/images/CodeMakers.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3490feae773c9edbb669a7ebb3c396a953eddd GIT binary patch literal 51222 zcmaI8by$>L_XbLL3?)bns5H{uAr>u?(jiDlHw?`nNGQ^cg>*LzNQcZw2uR9M(lFEj z1Lr~C@B7~0IoEamcrL|Zp1ti@Jg|;uwN4q z0RM6#Dl-NAf$jO^feKdn2=i~?2RwUaO=T>sszlNYD}3N*Vz-CJo>*8EUDpqGpKFmV z7FJ)$qkGCv{mi#>2wPdyrhAhEX#&XZ7Si(Ex(n)8Q|qAywHPIl`fQy|2MSKk_e7sf zD+IRC1{zw^rzBw&5E0#CWB5`KJsSvHo1XKOTHE3gZ4qs$X@Osz1kO&|>~tOH`1`Kr zpi%e7(5|a*Ki)-ADx5CjKWh5+`*U79RUCir0q%k5eTWjIx1X{fo<4}aYf|g*a%C_@ zl>7NUjS3NaB&ZPNjALNTSMTVIg}!-PkxkKNnQ+-@DMBw^ zzX2!Z3IBa18#M3w!$?rnlBng!UhMyV@Mo>%y?Xi9XzXhNlDf37U#k)`>c&z@QgF~lB!efz@RPEcu=aNC-P)cDG^(#^%lf52 zpgb$&(Qk@n`-F>S`v~As4TEI6?>=8=Tqjw_S!Z7NS{HMWACC*y|GOF)yV?1ORz}LM zS%FP{pVCR#laL4Fjc@bF50bB+1+3GNGttA~byi|{VkAdva= z%1~w16Sa6g^fa5|pXcURMH%m)pbOEK-S+bndO>qJrmIrRl)s8;`{4BJn3ko~I)7sT z@hrbB|4orQha%H5*WbqkVq_{5ayixFyAXWhYUcMVifK>ph90=H_y>jk!lS>sXHF`A zH6t9-6HABOoUGVA*k>qh7WBfYWfoESml)GR9lK=wQ+lV`-zis5$qe3X$@2b{A9v~* z51$%AiA00~1qS;`r6bng%>o-nt@imcF1Q5sxr~6x+*nI9Gcy?@Mwxj2eDU5RTM8ph zEv-+NKlCacE!Ha#>TJltT1M4_8fD1er?VsRDs)$>eN(DsTc{PUz+9bPYX%>$o*#MjX{r8D}4GCJ?pF5d#*ro`=D`}oz z^Mj3Xol}thQQj|5Nhn=}ew&50VY#VvgxaUUgQUR|(gL^&^5Pq%{r@wE}m6N@<#?LyieFA=%QhtiH^^oKN~lFduq)31Z|ET%=&op7@FUk zbm5$o_xEwzB5XnDS=2lyUx;@(z$-bu+|HRZ?BxCXo?8a0IK;4SEp6@db>lkGLly`2 z5YdlT@$|r@$+&%OjW9OMjgjHuAmmmJd_IcLKSKYJbh!M-Xj_mM*m-R62KuduCtB5O8hKjwx_cX-~H9Vt%sxHTVgp^oKD+;MwPL-6=4b; z3mUpM4X>KmqmQ5v)7;F>d;JQ%U zEa;8<-=?{zc5gT+uD^9~5qm!m`+HCE;s%nG3><3=oHcoewv0boPGJ4#&MX^BE4K4# z2Hxf~;`n1}yqe8ETNKHI2c3w8r6q@Pzc>H6&Uxe<=W{eN@&djCTmiHAG9ni&BIdC|yO4H{$%y{kyUS z5$>CH`#y<8T28d?@1rTTVqHA81amBkTTOkDpTk7qwqQ>^y1X{TGcGB%qCL;eIw z(hvV9xB>6I1+yDU%}F>I*w+^Fpec<_&&iqNf*VA%GlxI;jPzdpSCx*d2+}Ihugz| z+cbC|%oYi%`^szCW2wKJHkHC>IAUp~*EuI_+)QTR&ak+99RTtFnkm_d=~RfQC^GKDiP-NIP05Wn^VX}U@@EWzN^kitT}c5^rv@SQ zFxEG}H|3uc;ZIyQ^%&sLcnvXVecl&yVt1%j$0pvgJNi+5?bD}E&y)4pt1B6nK1dF8 zoKdXnA;i3RyS>P>Y1gRNdDlJG!H6b=7A%YmOS-_=w0jz$xbcDXCSMW^(U!%dK<4lT+sF#R>lhL{(ghVVkfY#fI^7d2xPFRRlMG_11p$V9q4Qp z3$HOqAd2~Y(b7Z)-Ua_xwaa^==zxzBj4WWiY0 ziF_22LHMI#47+A%vKl z0X((xw6`=YZF5t0R6?ChDZaSX0S8*>qJ>Zy0Nn|H5t)QV^SCuRI&mHodAAHsR@ zOS(ZOVa3VpoC+1x+K~|aDz0=K!@@5P5A#8V2I+F+Mqj>}RBam?-=C8Wl=oM%Q`nS{ zC=k3PE~dtp>7$Cimy6PJx$e)%mvXC z+8Adj63fU49QUXrSFU5f9kMrm>p6sLy*?u&BgE35;+_RltFy(ET;HP!!$b=RdgXi; zaFQ*S-eaeRvc1YroFgzR?hMQlz%aDETM1;GJaMCYgz zU-fk?2f|B&4L8hPqei!1mo+stEd{N_xn+|4MwN@L&s^J%@{A}kLF3;91Fobg400m3 z1D`y3nQRlHCO=KO#2;!Jn|`JAKqchWkH{jz_Pld?)xd5w_Q<`&xX=_AJBV!uuc{ry zsAJF@Y1dL!RYi}~&WqLjDT*%hJTHf)bA{FHl>VZ;z4xP01~n{7nVym1&r`o$rL(%T zo4{mfeBs9rAq^&2IvPVKwz0spmM5Pxt*ar%@*(7Tn{FXNu0X1e97?@wlh1W)8Pm3s z`fN4Nb3{5(Z66N|e(16St!{wu^3{h7jec}z@h zf@N}}Zx&V7J*Q_!n=L{2pQb_yN<|1B5a5@ZN=oD=Y}>HK#ve=I)+Z{8Xm^+7E4PWZ zij@mAuNU5RZTuBYY1xt+ztHO;5&d?Q<=xha*QH=J z+#y!`OFb1$$3LB1I|7o<1AiFXZ?{-=MGNNp!B5lPJpFZMBUnYL3h$AANPfQK39ITn z_K4{$v5IVl-3>p%4Z32XtLT;T%gq%L7It?&#O<#N{(!>H3GTZ0kUwgw#__~K^Dtt! z2&x(a*m;ped*0mjZ6e{&rYPa>EH1c{vMb>6bk$5kqR|T6c^rIGJ=v1(*Mc178Ou1M z`S`1}-U;coY|k~OmyN%kI@8-@6+Z(UU}eWF4JB!tyNReGfl@n823`qKMcbNr;C9{T z!qz*N10=iWEdfUxw2JTk+u|!g~D zkN34cH-GbPhT-LcGD5qctgwzjFrNLmw0XOJ1`@Nq6f)*-!_5XOTRfQ)clt3aYn3k-^}PG824e>Jn1~6>VQy3GhvAdBQSu+6{8Emhng6XPVvfp^ly2cqUlF((`>mAG{#UK7&2ELEU20sgX-)L9ZOafAMs2+lExM z?8vM-{S-H^xxKiV*q16@vQ$UGzbnbOmyMcDyFS)fh!l%)sWm~i1>^Id?en>#elYtZ zYO8(f^#ONXqXU(PeOkb&65;*73O_Z zn;aA;vs&sn26y%GNlh7w+RvoZciy_O-BI8<1_G_}!7d^CYP9BBz| zd)nl`=| zWM|D-nVC4~Y#8q!5RjQNqd`Z}m*RT%k&H!Lg5puCe}f>;w`V~U`i5%q^`;Wh0S0Xq>6D();o|U7LB3!>N44p=i5clzG#?u8{c`9oPRV|__;_jP| zGVpTMe<(IBAD+%WCzx9x#gLd#rhH4z|J(zF4Uo#aC{4-|BFL+p+}x3$H6-4bL;OB@VNT3uUH2T;PI>pwHb1_Al;?f^vTdXNdpTI37+wH^a;NoJ z0D#a|PIn?pcE_(7AWwZ>1m1e#EnG`-CUAIvohU|>nU$!GshOHLZjwX&kFb%CI*Lnr zvytk~CDpSlYlZF;uaLdH&&wNJpFfYjA~&3w{AmGcs_k{RDbi3(o}M?AcZ3Rp#a~1F>KmR0xg{(qTdIYdY3g{Fc zN)HjjPM=NOcC(r9&}+Rx=R1GYAQ{dzG!fs|2%Q)of11loAIvvI!DL8P&crm;z6n&I zs*FsN5BPjuJCYd(%Df~?*_PapYkH|6@eO{2zUvt>COb+vgkf1R?!RnqU%+X;1Qy3Y zkX!Bk9y+m$e*B01jYbTHs(mVyVOlGctZ3dtwwN05jraiL>*R&QTJ(<4KdB?qaYWAs zdExghfhs;8_4XqVXFNNfc3*q}=wd`O72`IS?wpy2Ld{fS?k-;hG%sYkSSYPYdcjo6 z74b_PAAD~snJS5`p@MLk@Fi%goJ4CS{)i2eZjd6axkeuzcige;dF=8d)&({wvN1os zIe^QHGH!5xY7>zn!gpUxLLgL1HG$_-e8EsYtgq*n)Jw9crIStD>A1~a+p&x6yao3p z+L>{`5K?KFC>xK7UJs_M%3^&@HFCg{jlexN-2V%(eADN_#R`Oc0r;L%&t9qRHF_2k zUZvIiQh8wzfDNae7J3XjOpFDhwn=QN3N2OUD@+;$TV(Z0+8gQxYTc5`O!_ z4})^hOie&~24}E+*ROYDoVG8V5$BnW>Ak=r1G_l`)ijgw;%My2HOYL8cd$GZ0?Dd} z$$;75$FD5WV26{&^&Caz0wCsYJ|#1u6CYX;P5yYTK9cSS9mOwG(1uF5xXRsb=jIgT zN00ggE{yzWhI< z$?T~+-J#zs^5MN|yFy03X^q_1Dk=o9-C`TNOOJJj^?HXg!me#u*0aZ^%#Y`heO6)M zS8>7#i53qb_R85C%`}sfc^9FZ|L90n5vDm~kwckee|`@k^cx+FEc7)ew#$tCgk?^Y zLq*?)D*ERX+-_DDd)npdNhsoMY_Quk2Jc3j)6qkhHct0pM*~33J0ecRvG3c z!-X5=6^eh<^a#ZI^)mV}=r{D3ethcsBxWnMs}GfR+e#pK7z>JCwpzm`g-1;zv?H;mk8x)sxUv<&#HVSha+;@^=Q;v=9QI3XEz29cUMS z9xN9U$IgDQ^MljybmbTRJR*5^0gB#g5xAAr7QQ%M(JL@9#v+#1Wd&?VRh5hvrf)_*vZ$v6`VKOE&Dcrc(2JH)NTLF zX}~nJ6?{MEw#V)6n+t-PsrITNk$#Fq>~fYKHVI$rMHEFWQwl^B`7Kvk_p1juv$hmv zTlOD$dZH-v0K9|=<`TbcgTG3>4hJzMDn@9$4GVBGH4DKU*<77X_E5HAj+?kFWu>=| zULsa6uAJRw8>{z`!j04>*3U#NOX-{&!IPdkwLQ00~bLTyv5s`;VpLdD3JVVV7A1#3!B zWio>%#!e54L-ClJR8b}C@LhXfI$Q%X)`PioqaxJJ?YCKM1mzIy95Op%2@>`*M1`_- z*99G)!RrbOSo@IuJv)Dg4qh9iqfW=;c)mZ7mCQw{Jo%1AR%i+egMZ;#v!lbA3}XR*Fe0SHguL+9g{#_OI-5WKVRr^!3Fq9uDQxF>P}CKikBDYK!Rf zuvNRBeouW*mfq#f02BxM#70$Xv@=U z-M9fTDu0CcIMrXd-2VBHurpl1OX2m4VvC~5h1M@$z6f)>@Sb(D4k?CBW!dUf#@cRt zl)?GL$$iVH=ht0*VuLqBY$J^8Osh4-@o7q1zu@LtTQ3amSH`;eu?JQL-L&4@E7LKv zH(1`&gYaLmJiP~evMvc-gHZEsG8=|HP}y4P{(jRnY>>!+ia-?oJ^Z#>&5E~>0{lO`2a}=eRB|}^{#ZT~1*JMAG7=_sqjDp9 zGGWO}u;Av?tFuVoktm`-Xf%#zW|bi)6b_+Uxv; zH(;XQXUOxQ?VokO5`>%MZAS4FIaPl_veF+0nkF| ztBmEuIfu{pLN$NhAxG0c%pEAnf^OHs*?e`IsTL;YRTr!&3)V!DZkz#-Wc*2>L50lM z4v_utrC~E>kCdq5<4SAR!mHk%$NQgce`i$(7`yw;HRQvUP8KQY!ow^m;+AyAR8LiV z{BC#W_nUt=k&+{~F8|Q-!08*(1yNCez}3%jCKjfj2eXZ^@376-7S9V-@fnue zzU|SVGyV68CHDq%;w)H9&PWRGT^}5~S;(;R^o$;(twbpmnU*^PO@zLGplB0?QI(`7 zRaor8ouT5+&9tWMAievyQ3D_peI1uk5%*S3uQ7hG#{EUoW7|MqQ?j?J>;z@88^Jem z&XtF&`ZA151~F_Sy#0@;BSET_#75rw&T0I{BJ?_y|GA-nk&76moZ1z>=q!dnu+2jB zkB1^RHxoOHKQLE${T^-l@`VT77FLWyli}G2rsRcQH9e-?K1;um0xK@Y=6llp^uU>) z9zTzxRYLlnCviv-@vxIONq2^X>gpBSDhVlzLe11z%&Ydz5z>5d#INrrbxkzg=ay5; zEGlBGW1$m4PoK9q4v&qEmB!c=3kN!wek7Y{6uG8|R~ui-IfbCMccmT?OF5YeRO#h=6HXp@%q_e$3`8SXyoch?7?5*9S4WM3^U=5q~IV4#lz<)q`4HaiYW zw|Cd`4w*sz0}7i0KpQ@=Th2oiQ?mv8q{XOSGtU-rF!_>l5V%%;Icu1!lyXLe%=+}x z26hRGeI)leuQ?6#%Ll=?ze}=nN`9UiiaygSe6fDdL3o*TwcomOW6`1Pa*M(}M3va2 zjXJ>Jls2p*5>t^FSGPI=iukA!Loq78^oLJdDKRrPuXCicxJb00wnA>ad-dv-%>=`r z)42WO>KQbC?a}%N>XS6`c&_fAPNSXOM~Lt4Rf6X5-HnNo#LS!=OzNg3-NmVL*9lsv zKntR58j?LHsZB8$>rUIvs&6M2y@1okC$PGzphH!&DBL88D^bYI$u=_TH|bDj?B=ke zTHyJ<&cl!Fu&t4sz)iTDm@RfG84pE^oLT#S< z|2*)l55~?}KwwCkE*Ysyt;>_0*a;3*m|nh%YD@m;Dn*mS4UIz3=W`O2^pAjc4Yk5` z2(nZ+=BRIMxsTUc(xJJ5l7Tx?2nZHWvg)j7Dym;M`yK}zgboJ%aB(&Pc*bknq%b&A z2bm+UOM#Kl4-T4iCk?%jg1kgtH>_?e(^T>A4^TER8sm>KUq>P>oPkgAIwF+aa{qpSUt%ln=|u%osR+@A}) ziWVXTYcF)Jmq7TFc*%6nEB75h8K2zi*m%6Y+Q>~3E&nK&m7WQ1g@7(uTe%e-qmYF} zq1*XzVBN2Bap0IZ6)`3Y>=LV#6^(1+pA^WF0b8@vSYI=Q>*b?#{iTASW1$t$bg8VS zkPQtg>=O02AGvR=x{PjF&b5+Qvo&+4yJ|(^M(AtwE_ksL%F7Cnd^Zik`!BGZa;R51 zn2vx~c7-Y zOq_sR#<5xy70Has@Gp1LZuVP4`J7(~)Ty{F_4!*=vcFYpj6^}Of~l?DV%nZbjUVeF zwDV!Ab_ZnZRPNtNXBW(ttiPDz<&fl%2~QvMAS&2$^Ef-t!@AmrmKqSg`7~@=vz-Nn z;D~k#3|TV)FYc;g3m{dYexgZ~81lhy z`J6R&)ravo20dSU{T)|laZcqAabm(UF+kIZVAzzDeKkr_Suk9xOaWS04FykL;iZJZ z%?;q{scK#9-?Ks~Cg_H`Rn_@vqB)BwohbC4^Nz$*(Nvb9(@+P~cu!2bgZg+Rwh%jVkG?R>F zJwCp@-VRDW_gqT2QsKLit%Y^_*1*4odz znm=|@b*t$V>Tp+ESW#mT~ik^?7}{V?rfn5C7XC{X`LlWVN)x6hU8EHOQiG z;N#{eMjsGdwvz~3DdKjhxtUhe7V0j4$-duNe6%?^V*rpOQ!Ci`&2E1;s%NNp1L;_K!qxFXu$+;c$)70(;l2v9-TXX%$N6Ssckiv5t$ z7SVD|_~9u9xscqNpYy+TtvE$<7_{&I+WZ9ng-i-3Wrqwb?aPo_H#ll(F1$*^nAJH> zNb0^+4Dm1(*v9lMkz5G!?N1{8JB;f`A}&cVq#_*f%Y*4Y{@a)tsBxbk$mL=P16$quMLp*Jo0s1iME*gi(K*NXK!#VEMq)&5kuq%tAd zv;yaf4UYOM&bmuX@?){`w;oyDiO7wNwGKxTOTzdy0i2VT0B7edy|^29Wgu|*6Xy`M zl70Y^Lr(gvJFWvL1Y#q*g~snf4|{^7 zy|Zt|cin`&>-X||MV#%Er&=ADtV3L`}K@{W*ZMir=+efPz};2v!2=+KqS9W?*eq!xIMq!P6m(O=>p3XX&{Sf zPFBC)~^f^-c1Maq~Mpb=X*T>BF$6 z)$aI;6lj}>EP3hDy;;8mq6ta~U)8S5G~i}3QXimMmQUce(jdw{SJ4ZMC%_n0`h3e2 zo%flxOLJNB3%N2LJvvZ|A%}uhTTq0H8y6l9c9HPSCN(J7K3#@&sdk1F9$j6rrc3(^ z+O>8Ogb*4#2D;#U+Tiks<<`4#KgLgix|eH;>97D~A0I%s>=|RID_xpCYkV5j$xCn< z+||Jocya@q#^5}Apn_&qW{?#1kcF1Mt*d)uvPZ3=64GhAqaOiojZF_)L?PCe0Bag6 zfZOxf9|3O52)~q}^t$EEW99Lx=)luX?>}bJxD?BGW8P=RWo)YakySqp?eJdTlWNsNxf1;qx@#7lJJEr4kmQ~4G>{axsi;Sq~$)}R?=2&9klUE_t zg}av{BO}j8jDI-*mL$+@D z!%u9hZinQ%E#oy4Zwn7rg&SzcaA@&ST*8TtDVCM7x21xG2fR5YGosQ;V!vl21kl0{?CMK;<>ckR4Z3_{tU(U? zj+>~*x|oVdj3{1RlvSBk*h#x0DMJ+8_j~9?t^Dt)F&g@YOKnEcv5vStX^tQ{o1+o& z7pC`zJU~~SC~YjfbGtA>kL5Cyk=p~r6?J4-SR>^0r-fhZDfsHNFRh~eY-7K5jXu{* zG|*oG++~?SMNsAw|Kolh<+E!V;ViDc!q;aZyOVcBsn@ z{P4@;mLRjr2Ggq63aCxQQt;WQ#Jz73Z|w|X0f3<)P2a4GD(D8iIIf-fRIi_#>0xgO z8%5$>##I4i>3I8k8jXI;PiyfzNqg#BhlgH2a`lS>KRYc@FdCZWmNPO*E(D3fmiRp; zPP1}yf?3n(98Kkkmq>fk6+Sl%_j<;@#iZ}KGpOY)=w2{c?-gji>PtND3}WsIFv-{v zggP+(3Jm$>y~UAc`t{DZvBu1K3jiGo<@mAW}ar4Cs^Wtc@-MzrbdO$w;(TjU-zCsi5xcHrxR{#i8gI6 zb>Vaah((^8NM5yqgx5qKOIK^r))C*m+dv89J(2Di^vXp)wdKN8vfNZcqS7VNtu>gk z<5-wJDtY^ME|Z}~y3=c9uRaUrH2kKR0qix(=_~zPJ0f5wT?8C~a);J6FpX3>4~bHo zlM`tWbp9uz4yK+a(8e5>M<1jRUA1<4dXaq17?yidcO1>$@=}~!d%t_kA^)+aT6A1I z%U%tAw|kL^QYz5h!;A=g%G%py6&eIfAyzaHf+lK94RI^Jwk?R6*Edw&vf_x=yVnsb z?Kkw*SD}i#p&F#w@o!?NoXPMHFEm^eL+0Qt9ROqSb>O!c{T66LS!Cmz@|q%oq8SjR-*6~s)vy}jwMk8y9|gc0p!zq4v~1ntL~ z?h5$mjUIgswsfr@Z$A`r4#{Zw+Uy$x#{j&3;I|C>Tz^ZYNzXrmFKjzGRK}t=r7nD) z#mI{(U=i!ms@-{Xsb9^Xb?bSrtd#N3C--h&*$+G+i}p90R-fduJ1%$ZoZoHlAH`OQ zd2CHxY5h?GV8kr!ZhG%-9W7(0pi5_r272$uGZ_Nt8Rp_XM0TeUXhWl}|jmOSD^JI}3OO~i^(Q_0g@#t)RX()fc5t$N;Dbqq?f<52`tBRmD^PWn!o}e&w>A$&qjgr^$St=t%v;ivWnB>K9gb47VGg)o&6!zIHo_ zS{|oO3gD533TvV1yIc;7$~lq6B2GWp{O0e~?Xy%igPO$z2*TizV|Ua$9ErUq8`sHy z@JLz3GiXs^&x#LJYXlLL`e>)BjI;hzaKC$+v36>6o2(&G9<0GTQXp1NuoDs%Kc|7W z(TDto0uQ2D?hWpC;8I>N9iJQx6pJg25MEw>S<4N48Cai3c0R-&)~6&%;MG*pX+_SY!?Bz?xypIx^xkjGo12M#}YLS}Cp zpDno#h|mTRzM@w??^d&Mz6!qadWM|5?*!v!T+Po^l0ccdmChekB(H#D;9We-^zFc^ zDtL=?SdOua=!^S=@0Gg4mI+lQ7=EP*z$*|k6cPbk6h))O{UB$b&9Vj$g9^Fx!1>eD z)8wkV3kEE{XL zd;wh9`$JLa#PfkCjdq3(ag6{Mo@~cm8z>mqErFH7BUr|vzx&OY7Pw^DM(=mrsG)a} zg`gu&GrbY$BfAXr9iaK_fsN7M<}-?(dJ#AjyTu5lu4Tc`#MGyf{mU6tAYOh$bv9)6 zGKTw0m6OIIq;E0k!`nBhevm-neWXU3MN~i__EFCXnt>_n0+OtwB;lcx%mDWigw``u$8z>cM)U!oOnyNLJNm7_fULH6vK=Yp-JRI6?A(o*iHUUbN zs}Qh~jW2iD`CKCqX60HqJ9)ourq_Iz2k?xX!VXmDc72Y^Cm`b-9DO(sLh_EV|={Nc=n@StU?rgF4mQ? z4i7EsrUi`8mMsQE?wnDm`^F3ip|oNds2QFto$KgUyZO4^c@3)TQ|sV891NP@Zea}7%;~dAf23^oUe(p~n{(4jYVy=t`TZc`__;8=9p6ph<_HrqyLB`T1l$7}3lhN* zY!|VUDYK1{C@U0)`}pO7oG{k0R?NxH!=Np}+K_6-H>ivG_8|1ZT0(q03;t%vLEqaQ zN{OF4)bulvUh*ehb$N-K9CqpU=UA9gCSwZcBrR3upJ!~B2%T7fu-6D-^Z2e+viNF~ zea5_3&CRU(Fv_K4(06f95pmaDmrNOc)0Z2X;(+ImYk)E=HR{ZkFvEMA;X5&9L@2C1 zLV33#(ZXcP3}ye_B=fP@kK<|kypo0~>$t8eRt_t{FI6*X9hl1|%g*rI6f*1i<=Jcn zISU_Vdq)$^x}<~U`hH*4e?Wa7`7VYthOx`vC_~I6>8iVKuc4*p(VUY251M9JbBM5nB@KbrKEhz>|D4|Hjr z^%%N~5^P)y$9)OI_#8JcZBb@xCbbC(gk2KlkdQNJJx%G=r|@lsZ+VqWHo&;8;FdXU!#;=-`(YsfFvn(*kMZ}h47J9&=#KFCDv z2a>8vW@6+J>wEq%zwv z(_dlAZKd=RRqC1z!|(&ICu$XIvyc*lGV9PJ)!`aeSWGU;eXzT`yGpuVki>vPE%mq6 zlHMwRSX(8OIGHDeWXZjVDN8k|@3dFqRh>{o+t@VCG<~UOwZaX?yl8U}eVZGrttc*2 zBFzK&({S|5T`;{m$Ki)f*RWGvi)AQ$)4`gbeM6&}&RU7jsKI0h6E`pdSb`)BalV86Tvoy8y3)9!~@d=J&<8m1puq{}1q4wv_p zzFn++NxAeo^6TBLoK4ZB&YNP=JjxDx=#I5W!Kvh#=YB$p-1CwG0ly3pRPI$zRVa;u zK>^;Tw9;0K@RQ**m3Ik8NgX4CRki?K>M6~ODrZtnacr&qGcqZDT(XR^B)FsI^p~D= zWd{2A#M^Vv(ZBZW6d|}HgyfNqeErqbFxmq=UayeR1W- zl?HwcjM8sd>1)zfdORos8%4Us?nfzzi>Gk)sj!CV5fXr0R@JmuenjU($yocln2v`EzpTn zz#FQN8kK3Mw(E2ZlHr#|f()kaJqKp`;vC4nO*HP`x}McgIq_sI4YwGq>^*O>L`rjn2c(2HCl5mFx#EW-`IU0Y-QW~;ItCA z7D%^=SjfvFH?Wdt+HquX&$tc^93+b#rrQrmYBZZ4LYi#XfcA-rfzfw-Z$An$FpvnN z59WZs323H%s+`QxzQLg`%)B5!7YP!-Z6@o}mp^zQS>>k!%s(X!UOWQv^-75SGw0HJ zT4qwWF~hB>a7lb04S1qI{I4({Bp>>?J)4FX?~$~i?WR&08(opI90P%@+yd{K#}?kVtP0@#=fIX$Fp<>Av~;a zbimv7PhK-;okF>4nv&rVluEyz;M$FzXQq#rqBsNEmwM+4Lb`iKrD$Z>08eJ^kl2|1 z3aYFKWXX$L73_1A@7GUeH!x)juqFatM->Y8$G6Q?eYz?KMVNekV3$y(_|Jsun=z?I zBwf$E%wGWhIU!vC4vA4pBkW6PN`xidi;Q>PkodN{$CGy~^?zJuzU`}U?ciNI8a==C zY=a3H6Sd)4+kExijT1SgJEV*0WCizSHpRYt9cOMeU%uAe^SE=~ioRQ|LXK(a1MVlG zz8NsGP*MtwjT(shipf{(R&y1?x}0uw=)PS5?oo4xQ0}!f?wA0qOQo(rU-mJ`}PT>2<_yhenQdmNxtGRh(KHcQr^U3&01tu@Icj0 za?2ED8S`pQTA4f|+0>WV6GkiCeNZ(}?MRylxx7z(m0(udPumOtIk?c>43_?h8w*9)3U5?U$;p-)@5x!$9Oj8!pZlz6le7}+K zQ20_ubSgQaO~Vwm37FY7JH^ZwMoP`p_9_;~?reKWV3%UTmfpJ6Vm-bUtc9Ty4pL5^ zwl%Wq0r2BqJkav^#D?g4+A!=B`q$;RB|54ACQvqEJruv`88UBoR<`+OR984;U^ML+bL%2O?^k^yI{PD6L2nAxn4o*~jntk|c zgwm6p?#(#bAK~L(MJ;66<Oe0dnnTGhE_Y(IQBH?-mAP}9gA zy$4)1npJNam2oV3Y(DYmf5slA3lu4VxuuuyEmMS>bCpN_m2>lNsdcj|v?zgrCZe7P zlzay{z#Cr5Mi}T96#WV{#?@{QGWRbha!a)~UUUAMzgOzp68$vKkp zRh&u;Z}MjmI{cC!6&Aat)uq5tIDZnjsLFyP5128&Npp6zHdL|627nR6S$}5qKmFQM ziy==sSIrKqAUT!EC4<PrWWMvTn& zO@Q8oaoZO|U|_ejm5k)c<@Ed5OXz_oz%Zo<;q}12UPwuA(x2(gPcMM}8vxI<;r&f- zQpw9x-{00-F`+X^-2)0?l^gSR5kT!gsHp!!ozobXbkHSf8~IYbs3CD6EHWA% zI+0eeMgNvXBO1(0X5hjCbOFD&%}BY0W038R>S#0~5mX0s&m_fPm_`?fN$HV)YquVx z2po?*;%g(roy5pX;wX_1hB1qk&bmAS}{>*nR|$D+-Ql-C+-n&6aXe31QE_>q$WG7y8M6mdhd9+y6*iyh+b2a7z`36h~C>M5lN6p zf*^X25o)4_CC*kuKX&Q?)sZ1*b#)hYCcw9rxPL@zb zd$EuNq1Q2%r(8)wWJLoz+5(PPx9W&JykDlvXY#GeD&9@m*b8o`I;d?|R~swtK1z#Q z$#r@Mp|DqqF#b<>ppXTzJMfo7k%Urd@OLr$`O1oBt3e*g{-kE zhvp&+d1Yr(o2j+3wP@1yv6k4gBR#R=PKI{<1r}-N|Dspq9}}aYC}un9+kBH}=iBa= z?18GhADf+I9E<&@D7BhyF^CElIrg75Xl0s_(@gv;E;(E!7JiPEc2Y-wgnB)PhCsvq zBPkZT8DRE^iFzpc;(y75Yzuq7+uKI8oRE9)t20&Ao6)#srRA_;xmW7$CJA$1yXi>? z10`s;+p00kl*^tOj%qPAS?7>e9@qxk8bT8Z6RJUi>QQK)Hl~bq=lPBCIlWMIQn=fKbyx{w!*{XB&w>`->hEVJa<(yuZTUz@+Q)#}3O_$b zY|Fcyz6iA8d#6W<+VIG6w%YBXd+E|LI{ihZE2Gt(J1uiLh(lTD5-pFI_NShn;t3F! z4KfP&^8LZGb)IAs z&|R}rth5o$OgpEon!;63!Jg0iNh0peCS&EtjL-ERw8wuahR2 zL2{X&MJ!f~Ux#%qb7TJ!X`g-v_g_o(Hm)rpq&8xuLM=<3+bXiLavIAk#s-artm;Rh zY|C;pJo>kq-FU*=_m1b_C6DE(V%Px|1U+uZZI$qb1kPv6T{L z(sG(~rpY8^EV>VmAoC^zefkz@P52Qem7|j?tU~!!rebst8eyV}Go~@>-}5Iv;FhiT zzByfjmGpco>pU@a@ySx2t>x7et)>%bMs9|;z9bPVy(;^lX?kBA?fzAnu9nJ1KTzy& zf(?E)fTVSE>zbg>jhZ)_s@duq1~eHoYCx29Dn3u)W;}hLtlgI|nVNAm13dw~t|x+hQT32Mee z;ao^=QM0lREH3W#npzCW3H}cb&+un*Q#D_T7)b=3me^Q!`#aSi*p1F3+iRZFIN&QX|r>$fO3ZVHAG;n$C+$5q)^ zIBfh)%tYvJm^MAa(n*g+!i+ypobM;uToj#QlnJ}9QEjQ!f)5Y-wV5}xW<>F#vXZYg z+b5GQVplHp{Pp_(X#o;;>_K69yuIz^TB&Vxnnc^h9Y`bkLuYIOw4zY5d;-`8=EQAJf;3; zLbKyd^xJOl?8I@H=>Fly9ch&1&NxQKN`tDu*xGI#)98KG$5PTlEMgo{x?6RhgT%9t zKDyC9vc=bI+gTz^>Lx)(G&b|#RJZr4o|Wc@-tjYZOdgfY3{|h#GBMA>v}P;q5}8B; z#FQC?Xep$EzpSJ1Wv9y=B9*6EqcX}Y-%xWa;#8Dh_~fZlJOigxQa&Y#Khg8 zUcj~G@&@^5lfTnxJ#jWjTk?$r*`2cySdIre5>!~J&c1P@UIgD|%+=w9F^R&;UNLqu z;pG;#+v)wM%O&6TZZ@}$EI$@^bp^>7Eg+JjiU$w0ZTq>o(YD%KcJ)rDSStFXJo2qr zc|cjJVX=`XX~YiQrG%X-&T^rJ!+A)#mxrn%eRnltMRv#)p+{z9zg$LdLZF~1@iG%5 z91lmAM+_u-)RXP`B`wMlD(}}Gdw+FyG;sG_na>y;7_gY5k8UwPS7Ln#g^Fvh@aa>9 zfiFEOoM0#Z+_}VYLa#FE_uw@IvR zfTnR<7w8-HJXYow1Mg1;<1e$)QMfTm?0&m`$RxPjRxczKwmljdc<77y**~+bk?EepM&+Hs zK_M}GGo}SA|57T#D0AjUnm2o^vV>NP1z)D`&0oz3?wwL0n(ay&${Rm(a|f;DCz~Tc znDV8`zNsi78J9P9Tgnx^Jy7E*0Ti#ocj3Br?2~&3-Hh^Ewryj$ZAm31eDo`)FHZ<= zmUmdH>tX&kE$8-v4-`W2!`qu!#lnStq-+9MT}K5TTb&+HRZ~vqkoD&~OY=rEU7-3t zw{B6d6*D$nazfu- zX_K|9I^>NSK}a(XbV}@J(U`C79n>~juw$dQ�J-Wzu&jQuaO}yk;%C2r)xL-vf~| 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 literal 0 HcmV?d00001 diff --git a/docs/images/Google.PNG b/docs/images/Google.PNG new file mode 100644 index 0000000000000000000000000000000000000000..63478916730ae3e40a98b5d10f9342274d0e7e94 GIT binary patch literal 5012 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 F{SP?Y6QKYA literal 0 HcmV?d00001 diff --git a/docs/images/facebook.PNG b/docs/images/facebook.PNG new file mode 100644 index 0000000000000000000000000000000000000000..84b0957d9d7ef221f8d03dea07c96a00cb50e4c0 GIT binary patch literal 7034 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 + + + + + + Code Makers + + + +
+
+ +

Unete a la Red Social de Programadoras

+
+
+ + + + + \ No newline at end of file diff --git a/docs/index.js b/docs/index.js new file mode 100644 index 00000000..5725fca1 --- /dev/null +++ b/docs/index.js @@ -0,0 +1,8 @@ +import { router } from './Views/router.js'; + +const init = () => { + router(window.location.hash); + window.addEventListener('hashchange', () => router(window.location.hash)); +}; + +window.addEventListener('load', init); diff --git a/docs/styles.css b/docs/styles.css new file mode 100644 index 00000000..85c97ca9 --- /dev/null +++ b/docs/styles.css @@ -0,0 +1,82 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto:500,700&display=swap'); + +html, body { + margin: 0; + padding: 0; + height: 100%; + font-family: 'Roboto', sans-serif; +} +/* contenedor principal */ +.container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +/* header */ +header { + background: #EBE134; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +.codeMakers {width: 12rem; height: 4rem;} +.views { + width: 90%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +/* iniciar sesion con fb y google */ +.conectWithSocialMedia { + display: flex; + flex-direction: column; + align-items: center; +} +.buttons{ + border: 0; + height: 4rem; + width: 100%; + } +/* formulario */ +.registerForm { + width: 100%; + height: 50%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; +} +.recoveryForm { + width: 100%;; + height: 20%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; +} +input { + border: 0; + width: 100%; + height: 2rem; + background: linear-gradient(0deg, rgba(154,156,156,1) 0%, rgba(245,245,242,1) 100%); +} +button { + width: 100%; + height: 2.5rem; + border: 0; +} +.registerButton { + border: 0; + background: #EBE134; + font-weight: bold; +} +.spanLink { + font: bold; + color: blue; + cursor: pointer; +} \ No newline at end of file diff --git a/src/Views/index.js b/src/Views/index.js new file mode 100644 index 00000000..0f48c15e --- /dev/null +++ b/src/Views/index.js @@ -0,0 +1,11 @@ +import Main from './main.js'; +import Register from './register.js'; +import Recovery from './passwordRecovery.js'; + +const components = { + principal: Main, + register: Register, + recoveryPass: Recovery, +}; + +export { components }; diff --git a/src/Views/main.js b/src/Views/main.js index 2fceb775..9a1a2ebd 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -1,19 +1,19 @@ -const root = document.querySelector('#root'); -root.innerHTML = ''; - -export const renderLoginView = () => { +export default () => { const mainView = `
-

¿Has olvidado la contraseña?

+

¿Has olvidado la contraseña?

o

-

¿No tienes cuenta? Registrate

+

¿No tienes cuenta?Registrate

`; - root.innerHTML = mainView; + const views = document.createElement('div'); + views.setAttribute('class', 'viewsStyle'); + views.innerHTML = mainView; + return views; }; diff --git a/src/Views/passwordRecovery.js b/src/Views/passwordRecovery.js new file mode 100644 index 00000000..b9576fe5 --- /dev/null +++ b/src/Views/passwordRecovery.js @@ -0,0 +1,20 @@ +export default () => { + const recView = document.createElement('div'); + recView.setAttribute('class', 'viewsStyle'); + recView.innerHTML = ''; + recView.innerHTML = ` +

Recupera tu contraseña

+

Te enviaremos un correo electrónico para recuperar tu contraseña

+
+ + +
+

o

+
+ + +

¿Ya tienes una cuenta? Inicia Sesión

+

¿No tienes cuenta?Registrate

+
`; + return recView; +}; diff --git a/src/Views/register.js b/src/Views/register.js index c5594dd5..f6c38994 100644 --- a/src/Views/register.js +++ b/src/Views/register.js @@ -1,8 +1,8 @@ -const root = document.querySelector('#root'); -root.innerHTML = ''; - -export const renderRegisterView = () => { - const registerView = ` +export default () => { + const regView = document.createElement('div'); + regView.setAttribute('class', 'viewsStyle'); + regView.innerHTML = ''; + regView.innerHTML = `

ABRE UNA CUENTA

@@ -14,7 +14,7 @@ export const renderRegisterView = () => {

-

¿Ya tienes una cuenta? Inicia Sesión

+

¿Ya tienes una cuenta? Inicia Sesión

`; - root.innerHTML = registerView; + return regView; }; diff --git a/src/Views/router.js b/src/Views/router.js new file mode 100644 index 00000000..0b2e45a5 --- /dev/null +++ b/src/Views/router.js @@ -0,0 +1,27 @@ +import { components } from './index.js'; + +const router = (route) => { + const container = document.querySelector('#root'); + container.innerHTML = ''; + switch (route) { + case '': + case '#/': + case '#/login': { + container.appendChild(components.principal()); + return; + } + case '#/register': { + container.appendChild(components.register()); + return; + } + case '#/passwordRecovery': { + container.appendChild(components.recoveryPass()); + return; + } + default: { + break; + } + } +}; + +export { router }; diff --git a/src/index.js b/src/index.js index a63eeec3..5725fca1 100644 --- a/src/index.js +++ b/src/index.js @@ -1,19 +1,8 @@ -import { renderLoginView } from './Views/main.js'; -import { renderRegisterView } from './Views/register.js'; +import { router } from './Views/router.js'; -const registerButton = document.querySelector('#register'); -const loginButton = document.querySelector('#login'); - -const router = (route) => { - switch (route) { - case 'register': - renderRegisterView(); - break; - default: - renderLoginView(); - break; - } +const init = () => { + router(window.location.hash); + window.addEventListener('hashchange', () => router(window.location.hash)); }; -window.addEventListener('DOMContentLoader', router()); -loginButton.addEventListener('click', router()); -registerButton.addEventListener('click', router('register')); + +window.addEventListener('load', init); diff --git a/src/styles.css b/src/styles.css index 25117b45..85c97ca9 100644 --- a/src/styles.css +++ b/src/styles.css @@ -44,13 +44,21 @@ header { } /* formulario */ .registerForm { - width: 90%; + width: 100%; height: 50%; display: flex; flex-direction: column; align-items: center; justify-content: space-around; } +.recoveryForm { + width: 100%;; + height: 20%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; +} input { border: 0; width: 100%; From 4777314032900990c848024c09a3795da85df199 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Wed, 15 Apr 2020 22:22:27 -0500 Subject: [PATCH 05/23] se hace el login con Google, muestra los datos del usuario en consola --- src/Views/main.js | 17 ++++++++++++++++- src/Views/router.js | 6 +++--- src/index.html | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/Views/main.js b/src/Views/main.js index 9a1a2ebd..c32d7392 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -4,7 +4,7 @@ export default () => { -

¿Has olvidado la contraseña?

+

¿Has olvidado la contraseña?

o

@@ -15,5 +15,20 @@ export default () => { const views = document.createElement('div'); views.setAttribute('class', 'viewsStyle'); views.innerHTML = mainView; + + // const loginButton = views.querySelector('#loginButton'); + // const passRec = views.querySelector('#recover'); + // const facebookLogin = views.querySelector('#facebookLogin'); + const googleLogin = views.querySelector('#googleLogin'); + + const provider = new firebase.auth.GoogleAuthProvider(); + googleLogin.addEventListener('click', () => { + firebase.auth() + .signInWithPopup(provider) + .then((result) => { + console.log(result.user); + }); + }); + return views; }; diff --git a/src/Views/router.js b/src/Views/router.js index 0b2e45a5..d27b20eb 100644 --- a/src/Views/router.js +++ b/src/Views/router.js @@ -8,15 +8,15 @@ const router = (route) => { case '#/': case '#/login': { container.appendChild(components.principal()); - return; + break; } case '#/register': { container.appendChild(components.register()); - return; + break; } case '#/passwordRecovery': { container.appendChild(components.recoveryPass()); - return; + break; } default: { break; diff --git a/src/index.html b/src/index.html index a46ce034..45b792cc 100644 --- a/src/index.html +++ b/src/index.html @@ -19,5 +19,23 @@ + + + + + \ No newline at end of file From 666eaa04094a40048703219b049951b14af0866c Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Thu, 16 Apr 2020 08:04:36 -0500 Subject: [PATCH 06/23] copia de ultimos cambios en docs --- docs/Views/main.js | 17 ++++++++++++++++- docs/Views/router.js | 6 +++--- docs/index.html | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/docs/Views/main.js b/docs/Views/main.js index 9a1a2ebd..c32d7392 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -4,7 +4,7 @@ export default () => { -

¿Has olvidado la contraseña?

+

¿Has olvidado la contraseña?

o

@@ -15,5 +15,20 @@ export default () => { const views = document.createElement('div'); views.setAttribute('class', 'viewsStyle'); views.innerHTML = mainView; + + // const loginButton = views.querySelector('#loginButton'); + // const passRec = views.querySelector('#recover'); + // const facebookLogin = views.querySelector('#facebookLogin'); + const googleLogin = views.querySelector('#googleLogin'); + + const provider = new firebase.auth.GoogleAuthProvider(); + googleLogin.addEventListener('click', () => { + firebase.auth() + .signInWithPopup(provider) + .then((result) => { + console.log(result.user); + }); + }); + return views; }; diff --git a/docs/Views/router.js b/docs/Views/router.js index 0b2e45a5..d27b20eb 100644 --- a/docs/Views/router.js +++ b/docs/Views/router.js @@ -8,15 +8,15 @@ const router = (route) => { case '#/': case '#/login': { container.appendChild(components.principal()); - return; + break; } case '#/register': { container.appendChild(components.register()); - return; + break; } case '#/passwordRecovery': { container.appendChild(components.recoveryPass()); - return; + break; } default: { break; diff --git a/docs/index.html b/docs/index.html index a46ce034..45b792cc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -19,5 +19,23 @@ + + + + + \ No newline at end of file From 746336a2dac31220da4d69c4599d45f140b1e367 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Thu, 16 Apr 2020 20:53:45 -0500 Subject: [PATCH 07/23] =?UTF-8?q?login=20con=20facebook,=20pruebas=20con?= =?UTF-8?q?=20registro=20con=20email=20y=20contrase=C3=B1a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Views/main.js | 16 +++++----------- docs/Views/passwordRecovery.js | 6 ++++++ docs/Views/register.js | 20 ++++++++++++++++---- docs/firebase/login.js | 22 ++++++++++++++++++++++ src/Views/main.js | 16 +++++----------- src/Views/passwordRecovery.js | 6 ++++++ src/Views/register.js | 20 ++++++++++++++++---- src/firebase/login.js | 22 ++++++++++++++++++++++ 8 files changed, 98 insertions(+), 30 deletions(-) create mode 100644 docs/firebase/login.js create mode 100644 src/firebase/login.js diff --git a/docs/Views/main.js b/docs/Views/main.js index c32d7392..68b4a0ac 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -1,3 +1,5 @@ +import loginFunctions from '../firebase/login.js'; + export default () => { const mainView = `
@@ -18,17 +20,9 @@ export default () => { // const loginButton = views.querySelector('#loginButton'); // const passRec = views.querySelector('#recover'); - // const facebookLogin = views.querySelector('#facebookLogin'); + const facebookLogin = views.querySelector('#facebookLogin'); const googleLogin = views.querySelector('#googleLogin'); - - const provider = new firebase.auth.GoogleAuthProvider(); - googleLogin.addEventListener('click', () => { - firebase.auth() - .signInWithPopup(provider) - .then((result) => { - console.log(result.user); - }); - }); - + googleLogin.addEventListener('click', loginFunctions.google); + facebookLogin.addEventListener('click', loginFunctions.facebook); return views; }; diff --git a/docs/Views/passwordRecovery.js b/docs/Views/passwordRecovery.js index b9576fe5..b0ca834a 100644 --- a/docs/Views/passwordRecovery.js +++ b/docs/Views/passwordRecovery.js @@ -1,3 +1,5 @@ +import loginFunctions from '../firebase/login.js'; + export default () => { const recView = document.createElement('div'); recView.setAttribute('class', 'viewsStyle'); @@ -16,5 +18,9 @@ export default () => {

¿Ya tienes una cuenta? Inicia Sesión

¿No tienes cuenta?Registrate

`; + + const googleLogin = recView.querySelector('#googleLogin'); + googleLogin.addEventListener('click', loginFunctions.google); + return recView; }; diff --git a/docs/Views/register.js b/docs/Views/register.js index f6c38994..cb883904 100644 --- a/docs/Views/register.js +++ b/docs/Views/register.js @@ -1,3 +1,5 @@ +import loginFunctions from '../firebase/login.js'; + export default () => { const regView = document.createElement('div'); regView.setAttribute('class', 'viewsStyle'); @@ -9,12 +11,22 @@ export default () => {
-
-
+

-
- +

¿Ya tienes una cuenta? Inicia Sesión

`; + + const registerEmail = regView.querySelector('#registerEmail'); + const registerPassword = regView.querySelector('#registerPassword'); + const registerButton1 = regView.querySelector('#registerButton1'); + const googleLogin = regView.querySelector('#googleLogin'); + + googleLogin.addEventListener('click', loginFunctions.google); + registerButton1.addEventListener('click', (e) => { + e.preventDefault(); + loginFunctions.email(registerEmail.value, registerPassword.value); + }); + return regView; }; diff --git a/docs/firebase/login.js b/docs/firebase/login.js new file mode 100644 index 00000000..d90a6071 --- /dev/null +++ b/docs/firebase/login.js @@ -0,0 +1,22 @@ +export default { + google: () => { + const provider = new firebase.auth.GoogleAuthProvider(); + firebase.auth() + .signInWithPopup(provider) + .then((result) => { + console.log(result.user); + }); + }, + email: (email, password) => { + const emailAuth = firebase.auth().createUserWithEmailAndPassword(email, password); + console.log(emailAuth); + }, + facebook: () => { + const provider = new firebase.auth.FacebookAuthProvider(); + firebase.auth() + .signInWithPopup(provider) + .then((result) => { + console.log(result.user); + }); + }, +}; diff --git a/src/Views/main.js b/src/Views/main.js index c32d7392..68b4a0ac 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -1,3 +1,5 @@ +import loginFunctions from '../firebase/login.js'; + export default () => { const mainView = `
@@ -18,17 +20,9 @@ export default () => { // const loginButton = views.querySelector('#loginButton'); // const passRec = views.querySelector('#recover'); - // const facebookLogin = views.querySelector('#facebookLogin'); + const facebookLogin = views.querySelector('#facebookLogin'); const googleLogin = views.querySelector('#googleLogin'); - - const provider = new firebase.auth.GoogleAuthProvider(); - googleLogin.addEventListener('click', () => { - firebase.auth() - .signInWithPopup(provider) - .then((result) => { - console.log(result.user); - }); - }); - + googleLogin.addEventListener('click', loginFunctions.google); + facebookLogin.addEventListener('click', loginFunctions.facebook); return views; }; diff --git a/src/Views/passwordRecovery.js b/src/Views/passwordRecovery.js index b9576fe5..b0ca834a 100644 --- a/src/Views/passwordRecovery.js +++ b/src/Views/passwordRecovery.js @@ -1,3 +1,5 @@ +import loginFunctions from '../firebase/login.js'; + export default () => { const recView = document.createElement('div'); recView.setAttribute('class', 'viewsStyle'); @@ -16,5 +18,9 @@ export default () => {

¿Ya tienes una cuenta? Inicia Sesión

¿No tienes cuenta?Registrate

`; + + const googleLogin = recView.querySelector('#googleLogin'); + googleLogin.addEventListener('click', loginFunctions.google); + return recView; }; diff --git a/src/Views/register.js b/src/Views/register.js index f6c38994..cb883904 100644 --- a/src/Views/register.js +++ b/src/Views/register.js @@ -1,3 +1,5 @@ +import loginFunctions from '../firebase/login.js'; + export default () => { const regView = document.createElement('div'); regView.setAttribute('class', 'viewsStyle'); @@ -9,12 +11,22 @@ export default () => {
-
-
+

-
- +

¿Ya tienes una cuenta? Inicia Sesión

`; + + const registerEmail = regView.querySelector('#registerEmail'); + const registerPassword = regView.querySelector('#registerPassword'); + const registerButton1 = regView.querySelector('#registerButton1'); + const googleLogin = regView.querySelector('#googleLogin'); + + googleLogin.addEventListener('click', loginFunctions.google); + registerButton1.addEventListener('click', (e) => { + e.preventDefault(); + loginFunctions.email(registerEmail.value, registerPassword.value); + }); + return regView; }; diff --git a/src/firebase/login.js b/src/firebase/login.js new file mode 100644 index 00000000..d90a6071 --- /dev/null +++ b/src/firebase/login.js @@ -0,0 +1,22 @@ +export default { + google: () => { + const provider = new firebase.auth.GoogleAuthProvider(); + firebase.auth() + .signInWithPopup(provider) + .then((result) => { + console.log(result.user); + }); + }, + email: (email, password) => { + const emailAuth = firebase.auth().createUserWithEmailAndPassword(email, password); + console.log(emailAuth); + }, + facebook: () => { + const provider = new firebase.auth.FacebookAuthProvider(); + firebase.auth() + .signInWithPopup(provider) + .then((result) => { + console.log(result.user); + }); + }, +}; From 710cb2b23a568ad74bd845af74d90efc9cb7eabf Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Mon, 20 Apr 2020 22:32:37 -0500 Subject: [PATCH 08/23] the base for the home page with their styles is uploaded --- src/Views/home.js | 35 +++++++ src/Views/index.js | 2 + src/Views/main.js | 4 +- src/Views/passwordRecovery.js | 5 + src/Views/register.js | 6 +- src/Views/router.js | 4 + src/firebase/login.js | 2 +- src/images/casa.svg | 52 ++++++++++ src/images/corazon (1).svg | 43 ++++++++ src/images/profile.svg | 189 ++++++++++++++++++++++++++++++++++ src/styles.css | 59 ++++++++++- 11 files changed, 393 insertions(+), 8 deletions(-) create mode 100644 src/Views/home.js create mode 100644 src/images/casa.svg create mode 100644 src/images/corazon (1).svg create mode 100644 src/images/profile.svg diff --git a/src/Views/home.js b/src/Views/home.js new file mode 100644 index 00000000..ad8889ba --- /dev/null +++ b/src/Views/home.js @@ -0,0 +1,35 @@ +export default () => { + const homeView = document.createElement('div'); + homeView.setAttribute('class', 'Home'); + const header = document.querySelector('header'); + header.style.display = 'none'; + homeView.innerHTML = ''; + homeView.innerHTML = ` +
+
+ logo + Home + Profile +
+
+
+
+ + +
+
+
+
+
+
+ +

+
+
+
00
+ +
+
+
`; + return homeView; +}; diff --git a/src/Views/index.js b/src/Views/index.js index 0f48c15e..ce70158d 100644 --- a/src/Views/index.js +++ b/src/Views/index.js @@ -1,11 +1,13 @@ import Main from './main.js'; import Register from './register.js'; import Recovery from './passwordRecovery.js'; +import Home from './home.js'; const components = { principal: Main, register: Register, recoveryPass: Recovery, + home: Home, }; export { components }; diff --git a/src/Views/main.js b/src/Views/main.js index 68b4a0ac..8624aba6 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -18,10 +18,12 @@ export default () => { views.setAttribute('class', 'viewsStyle'); views.innerHTML = mainView; + // Nodos // const loginButton = views.querySelector('#loginButton'); - // const passRec = views.querySelector('#recover'); const facebookLogin = views.querySelector('#facebookLogin'); const googleLogin = views.querySelector('#googleLogin'); + + // Listeners googleLogin.addEventListener('click', loginFunctions.google); facebookLogin.addEventListener('click', loginFunctions.facebook); return views; diff --git a/src/Views/passwordRecovery.js b/src/Views/passwordRecovery.js index b0ca834a..6d72c891 100644 --- a/src/Views/passwordRecovery.js +++ b/src/Views/passwordRecovery.js @@ -19,8 +19,13 @@ export default () => {

¿No tienes cuenta?Registrate

`; + // Nodos const googleLogin = recView.querySelector('#googleLogin'); + const facebookLogin = recView.querySelector('#facebookLogin'); + + // Listeners googleLogin.addEventListener('click', loginFunctions.google); + facebookLogin.addEventListener('click', loginFunctions.facebook); return recView; }; diff --git a/src/Views/register.js b/src/Views/register.js index cb883904..7f6bc1ce 100644 --- a/src/Views/register.js +++ b/src/Views/register.js @@ -16,13 +16,17 @@ export default () => {

¿Ya tienes una cuenta? Inicia Sesión

`; - + // Nodos const registerEmail = regView.querySelector('#registerEmail'); const registerPassword = regView.querySelector('#registerPassword'); const registerButton1 = regView.querySelector('#registerButton1'); const googleLogin = regView.querySelector('#googleLogin'); + const facebookLogin = regView.querySelector('#facebookLogin'); + // Listeners googleLogin.addEventListener('click', loginFunctions.google); + facebookLogin.addEventListener('click', loginFunctions.facebook); + registerButton1.addEventListener('click', (e) => { e.preventDefault(); loginFunctions.email(registerEmail.value, registerPassword.value); diff --git a/src/Views/router.js b/src/Views/router.js index d27b20eb..3ed91590 100644 --- a/src/Views/router.js +++ b/src/Views/router.js @@ -18,6 +18,10 @@ const router = (route) => { container.appendChild(components.recoveryPass()); break; } + case '#/home': { + container.appendChild(components.home()); + break; + } default: { break; } diff --git a/src/firebase/login.js b/src/firebase/login.js index d90a6071..f8bfddf8 100644 --- a/src/firebase/login.js +++ b/src/firebase/login.js @@ -4,7 +4,7 @@ export default { firebase.auth() .signInWithPopup(provider) .then((result) => { - console.log(result.user); + console.log(result); }); }, email: (email, password) => { diff --git a/src/images/casa.svg b/src/images/casa.svg new file mode 100644 index 00000000..b1c4a0d5 --- /dev/null +++ b/src/images/casa.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/corazon (1).svg b/src/images/corazon (1).svg new file mode 100644 index 00000000..3daeba62 --- /dev/null +++ b/src/images/corazon (1).svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/profile.svg b/src/images/profile.svg new file mode 100644 index 00000000..c700cfae --- /dev/null +++ b/src/images/profile.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/styles.css b/src/styles.css index 85c97ca9..4ab8f78f 100644 --- a/src/styles.css +++ b/src/styles.css @@ -75,8 +75,57 @@ button { background: #EBE134; font-weight: bold; } -.spanLink { - font: bold; - color: blue; - cursor: pointer; -} \ No newline at end of file + + +/* vista de home */ +.Home { + width: 112%; + height: auto; +} +.homeOptions { + width: 100%; + display: flex; + justify-content: space-around; + align-items: center; +} + .btnHeader {width: 2rem; height: 2rem;} +.sesionPrincipal { + padding: 0; + margin: 1rem 0; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +.newPost {width: 90%; align-content: center;} +.postForm {width: 100%;} +#submitNewPost {width: 25%; align-self: flex-start; height: 1.5rem;} +hr {width: 90%; border-color: #EBE134;} +.postContainer { + width: 90%; + padding: 0.5rem; + display: flex; + flex-direction: column; + border: #ffffff 0.2rem ridge; +} + .post { + display: flex; + width: 100%; + justify-content: space-around; + + } + .postAuthor { + width: 4rem; + height: 4rem; + } + .postContent { + width: 85%; + height: 4rem; + border: #ffffff 0.2rem ridge; + } + .postOptions { + width: 100%; + display: flex; + justify-content: flex-end; + } + .likes {width: 1rem; height: 1rem;} \ No newline at end of file From 9935a29ddd202dff431d17fd6ff695b37bf30f97 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Tue, 21 Apr 2020 22:43:46 -0500 Subject: [PATCH 09/23] modifications in the registration and access functions, they direct to the home page. button logout is added. first attempts with firestore --- docs/Views/home.js | 40 +++++++ docs/Views/index.js | 2 + docs/Views/main.js | 14 ++- docs/Views/passwordRecovery.js | 5 + docs/Views/register.js | 8 +- docs/Views/router.js | 4 + docs/firebase/login.js | 101 ++++++++++++++++-- docs/images/casa.svg | 52 +++++++++ docs/images/cerrar-sesion.svg | 1 + docs/images/corazon (1).svg | 43 ++++++++ docs/images/profile.svg | 189 +++++++++++++++++++++++++++++++++ docs/styles.css | 59 +++++++++- src/Views/home.js | 9 +- src/Views/main.js | 10 +- src/Views/register.js | 2 +- src/firebase/login.js | 101 ++++++++++++++++-- src/images/cerrar-sesion.svg | 1 + 17 files changed, 606 insertions(+), 35 deletions(-) create mode 100644 docs/Views/home.js create mode 100644 docs/images/casa.svg create mode 100644 docs/images/cerrar-sesion.svg create mode 100644 docs/images/corazon (1).svg create mode 100644 docs/images/profile.svg create mode 100644 src/images/cerrar-sesion.svg diff --git a/docs/Views/home.js b/docs/Views/home.js new file mode 100644 index 00000000..1f28c920 --- /dev/null +++ b/docs/Views/home.js @@ -0,0 +1,40 @@ +import loginFunctions from '../firebase/login.js'; + +export default () => { + const homeView = document.createElement('div'); + homeView.setAttribute('class', 'Home'); + const header = document.querySelector('header'); + header.style.display = 'none'; + homeView.innerHTML = ''; + homeView.innerHTML = ` +
+
+ logo + Home + Profile + Cerrar Sesion +
+
+
+
+ + +
+
+
+
+
+
+ +

+
+
+
00
+ +
+
+
`; + const logOutBtn = homeView.querySelector('#logOutBtn'); + logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); + return homeView; +}; diff --git a/docs/Views/index.js b/docs/Views/index.js index 0f48c15e..ce70158d 100644 --- a/docs/Views/index.js +++ b/docs/Views/index.js @@ -1,11 +1,13 @@ import Main from './main.js'; import Register from './register.js'; import Recovery from './passwordRecovery.js'; +import Home from './home.js'; const components = { principal: Main, register: Register, recoveryPass: Recovery, + home: Home, }; export { components }; diff --git a/docs/Views/main.js b/docs/Views/main.js index 68b4a0ac..c80e5605 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -3,7 +3,7 @@ import loginFunctions from '../firebase/login.js'; export default () => { const mainView = `
- +

¿Has olvidado la contraseña?

@@ -18,11 +18,19 @@ export default () => { views.setAttribute('class', 'viewsStyle'); views.innerHTML = mainView; - // const loginButton = views.querySelector('#loginButton'); - // const passRec = views.querySelector('#recover'); + // Nodos + const loginEmail = views.querySelector('#loginEmail'); + const loginPassword = views.querySelector('#loginPassword'); + const loginButton = views.querySelector('#loginButton'); const facebookLogin = views.querySelector('#facebookLogin'); const googleLogin = views.querySelector('#googleLogin'); + + // Listeners googleLogin.addEventListener('click', loginFunctions.google); facebookLogin.addEventListener('click', loginFunctions.facebook); + loginButton.addEventListener('click', (e) => { + e.preventDefault(); + loginFunctions.emailLogIn(loginEmail.value, loginPassword.value); + }); return views; }; diff --git a/docs/Views/passwordRecovery.js b/docs/Views/passwordRecovery.js index b0ca834a..6d72c891 100644 --- a/docs/Views/passwordRecovery.js +++ b/docs/Views/passwordRecovery.js @@ -19,8 +19,13 @@ export default () => {

¿No tienes cuenta?Registrate

`; + // Nodos const googleLogin = recView.querySelector('#googleLogin'); + const facebookLogin = recView.querySelector('#facebookLogin'); + + // Listeners googleLogin.addEventListener('click', loginFunctions.google); + facebookLogin.addEventListener('click', loginFunctions.facebook); return recView; }; diff --git a/docs/Views/register.js b/docs/Views/register.js index cb883904..f3e6b878 100644 --- a/docs/Views/register.js +++ b/docs/Views/register.js @@ -16,16 +16,20 @@ export default () => {

¿Ya tienes una cuenta? Inicia Sesión

`; - + // Nodos const registerEmail = regView.querySelector('#registerEmail'); const registerPassword = regView.querySelector('#registerPassword'); const registerButton1 = regView.querySelector('#registerButton1'); const googleLogin = regView.querySelector('#googleLogin'); + const facebookLogin = regView.querySelector('#facebookLogin'); + // Listeners googleLogin.addEventListener('click', loginFunctions.google); + facebookLogin.addEventListener('click', loginFunctions.facebook); + registerButton1.addEventListener('click', (e) => { e.preventDefault(); - loginFunctions.email(registerEmail.value, registerPassword.value); + loginFunctions.emailRegister(registerEmail.value, registerPassword.value); }); return regView; diff --git a/docs/Views/router.js b/docs/Views/router.js index d27b20eb..3ed91590 100644 --- a/docs/Views/router.js +++ b/docs/Views/router.js @@ -18,6 +18,10 @@ const router = (route) => { container.appendChild(components.recoveryPass()); break; } + case '#/home': { + container.appendChild(components.home()); + break; + } default: { break; } diff --git a/docs/firebase/login.js b/docs/firebase/login.js index d90a6071..b35314a0 100644 --- a/docs/firebase/login.js +++ b/docs/firebase/login.js @@ -1,22 +1,103 @@ +/* eslint-disable no-console */ +/* eslint-disable no-alert */ +export const database = firebase.firestore(); + export default { google: () => { const provider = new firebase.auth.GoogleAuthProvider(); - firebase.auth() - .signInWithPopup(provider) + firebase.auth().signInWithPopup(provider) .then((result) => { - console.log(result.user); + const user = result.user; + database.collection('users').add({ + name: user.displayName, + email: user.email, + photo: user.photoURL, + }) + .then((docRef) => { + console.log('Document written with ID: ', docRef.id); + }) + .catch((error) => { + console.error('Error adding document: ', error); + }); + window.location.hash = '#/home'; }); }, - email: (email, password) => { - const emailAuth = firebase.auth().createUserWithEmailAndPassword(email, password); - console.log(emailAuth); - }, facebook: () => { const provider = new firebase.auth.FacebookAuthProvider(); - firebase.auth() - .signInWithPopup(provider) + firebase.auth().signInWithPopup(provider) .then((result) => { - console.log(result.user); + const user = result.user; + database.collection('users').add({ + name: user.displayName, + email: user.email, + photo: user.photoURL, + }) + .then((docRef) => { + console.log('Document written with ID: ', docRef.id); + }) + .catch((error) => { + console.error('Error adding document: ', error); + }); + window.location.hash = '#/home'; + }); + }, + emailRegister: (mail, password) => { + firebase.auth().createUserWithEmailAndPassword(mail, password) + .then(() => { + database.collection('users').add({ + name: '', + email: mail, + photo: '', + }) + .then((docRef) => { + console.log('Document written with ID: ', docRef.id); + }) + .catch((error) => { + console.error('Error adding document: ', error); + }); + window.location.hash = '#/home'; + }).catch((error) => { + const errorCode = error.code; + switch (errorCode) { + case 'auth/email-already-in-use': + alert('El email ingresado ya existe'); + break; + case 'auth/weak-password': + alert('La contraseña ingresada no es segura, intente de nuevo'); + break; + default: + alert(errorCode); + } + }); + }, + emailLogIn: (email, password) => { + firebase.auth().signInWithEmailAndPassword(email, password) + .then(() => { + window.location.hash = '#/home'; + }).catch((error) => { + const errorCode = error.code; + switch (errorCode) { + case 'auth/user-not-found': + alert('Usuario no encontrado, intenta de nuevo o registrate'); + break; + case 'auth/wrong-password': + alert('La contraseña es incorrecta, intenta de nuevo'); + break; + case 'auth/invalid-email': + alert('El correo ingresado no es válido'); + break; + default: + alert('Algo salió mal. Intente de nuevo'); + } + }); + }, + sesionLogOut: () => { + firebase.auth().signOut() + .then(() => { + alert('Sesión cerrada'); + window.location.hash = '#/login'; + }).catch(() => { + alert('Algo salió mal. Intente de nuevo'); }); }, }; diff --git a/docs/images/casa.svg b/docs/images/casa.svg new file mode 100644 index 00000000..b1c4a0d5 --- /dev/null +++ b/docs/images/casa.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/cerrar-sesion.svg b/docs/images/cerrar-sesion.svg new file mode 100644 index 00000000..1e35d224 --- /dev/null +++ b/docs/images/cerrar-sesion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/corazon (1).svg b/docs/images/corazon (1).svg new file mode 100644 index 00000000..3daeba62 --- /dev/null +++ b/docs/images/corazon (1).svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/profile.svg b/docs/images/profile.svg new file mode 100644 index 00000000..c700cfae --- /dev/null +++ b/docs/images/profile.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/styles.css b/docs/styles.css index 85c97ca9..4ab8f78f 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -75,8 +75,57 @@ button { background: #EBE134; font-weight: bold; } -.spanLink { - font: bold; - color: blue; - cursor: pointer; -} \ No newline at end of file + + +/* vista de home */ +.Home { + width: 112%; + height: auto; +} +.homeOptions { + width: 100%; + display: flex; + justify-content: space-around; + align-items: center; +} + .btnHeader {width: 2rem; height: 2rem;} +.sesionPrincipal { + padding: 0; + margin: 1rem 0; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +.newPost {width: 90%; align-content: center;} +.postForm {width: 100%;} +#submitNewPost {width: 25%; align-self: flex-start; height: 1.5rem;} +hr {width: 90%; border-color: #EBE134;} +.postContainer { + width: 90%; + padding: 0.5rem; + display: flex; + flex-direction: column; + border: #ffffff 0.2rem ridge; +} + .post { + display: flex; + width: 100%; + justify-content: space-around; + + } + .postAuthor { + width: 4rem; + height: 4rem; + } + .postContent { + width: 85%; + height: 4rem; + border: #ffffff 0.2rem ridge; + } + .postOptions { + width: 100%; + display: flex; + justify-content: flex-end; + } + .likes {width: 1rem; height: 1rem;} \ No newline at end of file diff --git a/src/Views/home.js b/src/Views/home.js index ad8889ba..1f28c920 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -1,3 +1,5 @@ +import loginFunctions from '../firebase/login.js'; + export default () => { const homeView = document.createElement('div'); homeView.setAttribute('class', 'Home'); @@ -8,8 +10,9 @@ export default () => {
logo - Home - Profile + Home + Profile + Cerrar Sesion
@@ -31,5 +34,7 @@ export default () => {
`; + const logOutBtn = homeView.querySelector('#logOutBtn'); + logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); return homeView; }; diff --git a/src/Views/main.js b/src/Views/main.js index 8624aba6..c80e5605 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -3,7 +3,7 @@ import loginFunctions from '../firebase/login.js'; export default () => { const mainView = `
- +

¿Has olvidado la contraseña?

@@ -19,12 +19,18 @@ export default () => { views.innerHTML = mainView; // Nodos - // const loginButton = views.querySelector('#loginButton'); + const loginEmail = views.querySelector('#loginEmail'); + const loginPassword = views.querySelector('#loginPassword'); + const loginButton = views.querySelector('#loginButton'); const facebookLogin = views.querySelector('#facebookLogin'); const googleLogin = views.querySelector('#googleLogin'); // Listeners googleLogin.addEventListener('click', loginFunctions.google); facebookLogin.addEventListener('click', loginFunctions.facebook); + loginButton.addEventListener('click', (e) => { + e.preventDefault(); + loginFunctions.emailLogIn(loginEmail.value, loginPassword.value); + }); return views; }; diff --git a/src/Views/register.js b/src/Views/register.js index 7f6bc1ce..f3e6b878 100644 --- a/src/Views/register.js +++ b/src/Views/register.js @@ -29,7 +29,7 @@ export default () => { registerButton1.addEventListener('click', (e) => { e.preventDefault(); - loginFunctions.email(registerEmail.value, registerPassword.value); + loginFunctions.emailRegister(registerEmail.value, registerPassword.value); }); return regView; diff --git a/src/firebase/login.js b/src/firebase/login.js index f8bfddf8..b35314a0 100644 --- a/src/firebase/login.js +++ b/src/firebase/login.js @@ -1,22 +1,103 @@ +/* eslint-disable no-console */ +/* eslint-disable no-alert */ +export const database = firebase.firestore(); + export default { google: () => { const provider = new firebase.auth.GoogleAuthProvider(); - firebase.auth() - .signInWithPopup(provider) + firebase.auth().signInWithPopup(provider) .then((result) => { - console.log(result); + const user = result.user; + database.collection('users').add({ + name: user.displayName, + email: user.email, + photo: user.photoURL, + }) + .then((docRef) => { + console.log('Document written with ID: ', docRef.id); + }) + .catch((error) => { + console.error('Error adding document: ', error); + }); + window.location.hash = '#/home'; }); }, - email: (email, password) => { - const emailAuth = firebase.auth().createUserWithEmailAndPassword(email, password); - console.log(emailAuth); - }, facebook: () => { const provider = new firebase.auth.FacebookAuthProvider(); - firebase.auth() - .signInWithPopup(provider) + firebase.auth().signInWithPopup(provider) .then((result) => { - console.log(result.user); + const user = result.user; + database.collection('users').add({ + name: user.displayName, + email: user.email, + photo: user.photoURL, + }) + .then((docRef) => { + console.log('Document written with ID: ', docRef.id); + }) + .catch((error) => { + console.error('Error adding document: ', error); + }); + window.location.hash = '#/home'; + }); + }, + emailRegister: (mail, password) => { + firebase.auth().createUserWithEmailAndPassword(mail, password) + .then(() => { + database.collection('users').add({ + name: '', + email: mail, + photo: '', + }) + .then((docRef) => { + console.log('Document written with ID: ', docRef.id); + }) + .catch((error) => { + console.error('Error adding document: ', error); + }); + window.location.hash = '#/home'; + }).catch((error) => { + const errorCode = error.code; + switch (errorCode) { + case 'auth/email-already-in-use': + alert('El email ingresado ya existe'); + break; + case 'auth/weak-password': + alert('La contraseña ingresada no es segura, intente de nuevo'); + break; + default: + alert(errorCode); + } + }); + }, + emailLogIn: (email, password) => { + firebase.auth().signInWithEmailAndPassword(email, password) + .then(() => { + window.location.hash = '#/home'; + }).catch((error) => { + const errorCode = error.code; + switch (errorCode) { + case 'auth/user-not-found': + alert('Usuario no encontrado, intenta de nuevo o registrate'); + break; + case 'auth/wrong-password': + alert('La contraseña es incorrecta, intenta de nuevo'); + break; + case 'auth/invalid-email': + alert('El correo ingresado no es válido'); + break; + default: + alert('Algo salió mal. Intente de nuevo'); + } + }); + }, + sesionLogOut: () => { + firebase.auth().signOut() + .then(() => { + alert('Sesión cerrada'); + window.location.hash = '#/login'; + }).catch(() => { + alert('Algo salió mal. Intente de nuevo'); }); }, }; diff --git a/src/images/cerrar-sesion.svg b/src/images/cerrar-sesion.svg new file mode 100644 index 00000000..1e35d224 --- /dev/null +++ b/src/images/cerrar-sesion.svg @@ -0,0 +1 @@ + \ No newline at end of file From b5936b0874cf0f02ca0a4f12e64f616caabcd401 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Wed, 22 Apr 2020 20:42:12 -0500 Subject: [PATCH 10/23] username and photo are obtained and displayed on the screen, the collection of posts is made but they still cannot be shown --- docs/Views/home.js | 18 +++++++++++++-- docs/firebase/login.js | 12 ++++++---- docs/firebase/showData.js | 46 +++++++++++++++++++++++++++++++++++++++ src/Views/home.js | 18 +++++++++++++-- src/firebase/login.js | 12 ++++++---- src/firebase/showData.js | 46 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 docs/firebase/showData.js create mode 100644 src/firebase/showData.js diff --git a/docs/Views/home.js b/docs/Views/home.js index 1f28c920..cb8e8c8f 100644 --- a/docs/Views/home.js +++ b/docs/Views/home.js @@ -1,4 +1,5 @@ import loginFunctions from '../firebase/login.js'; +import { userAccess, createNewPost } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -11,13 +12,14 @@ export default () => {
logo Home - Profile + Profile Cerrar Sesion
- +
Bienvenida ""
+
@@ -36,5 +38,17 @@ export default () => { `; const logOutBtn = homeView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); + const userPhoto = homeView.querySelector('#userPhoto'); + const userName = homeView.querySelector('#username'); + + const newPostContent = homeView.querySelector('#newTextPost'); + const submitNewPost = homeView.querySelector('#submitNewPost'); + + userAccess(userName, userPhoto); + submitNewPost.addEventListener('click', (e) => { + e.preventDefault(); + createNewPost(newPostContent.value); + }); + return homeView; }; diff --git a/docs/firebase/login.js b/docs/firebase/login.js index b35314a0..3fc58703 100644 --- a/docs/firebase/login.js +++ b/docs/firebase/login.js @@ -9,6 +9,7 @@ export default { .then((result) => { const user = result.user; database.collection('users').add({ + id: user.uid, name: user.displayName, email: user.email, photo: user.photoURL, @@ -28,6 +29,7 @@ export default { .then((result) => { const user = result.user; database.collection('users').add({ + id: user.uid, name: user.displayName, email: user.email, photo: user.photoURL, @@ -43,11 +45,13 @@ export default { }, emailRegister: (mail, password) => { firebase.auth().createUserWithEmailAndPassword(mail, password) - .then(() => { + .then((result) => { + const user = result.user; database.collection('users').add({ - name: '', - email: mail, - photo: '', + id: user.uid, + name: user.displayName, + email: user.email, + photo: user.photoURL, }) .then((docRef) => { console.log('Document written with ID: ', docRef.id); diff --git a/docs/firebase/showData.js b/docs/firebase/showData.js new file mode 100644 index 00000000..3be81757 --- /dev/null +++ b/docs/firebase/showData.js @@ -0,0 +1,46 @@ +import { database } from './login.js'; + +export const userAccess = (username, photo) => { + firebase.auth().onAuthStateChanged((user) => { + if (user) { + const userId = firebase.auth().currentUser.uid; + database.collection('users').where('id', '==', userId) + .get() + .then((querySnapshot) => { + querySnapshot.forEach((doc) => { + username.textContent = doc.data().name; + photo.src = doc.data().photo; + console.log(`${doc.id} => ${doc.data().email}`); + }); + }); + console.log(user); + } else { + console.log('No user is signed in'); + } + }); +}; + +export const createNewPost = (content) => { + database.collection('posts').add({ + postContent: content, + date: new Date(), + }) + .then((docRef) => { + console.log(docRef); + }); +}; + +export const postTemplate = () => { + const docRef = database.collection('posts'); + docRef.get() + .then((doc) => { + if (doc.exists) { + console.log('Document data:', doc.data()); + } else { + // doc.data() will be undefined in this case + console.log('No such document!'); + } + }).catch((error) => { + console.log('Error getting document:', error); + }); +}; diff --git a/src/Views/home.js b/src/Views/home.js index 1f28c920..cb8e8c8f 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -1,4 +1,5 @@ import loginFunctions from '../firebase/login.js'; +import { userAccess, createNewPost } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -11,13 +12,14 @@ export default () => {
logo Home - Profile + Profile Cerrar Sesion
- +
Bienvenida ""
+
@@ -36,5 +38,17 @@ export default () => { `; const logOutBtn = homeView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); + const userPhoto = homeView.querySelector('#userPhoto'); + const userName = homeView.querySelector('#username'); + + const newPostContent = homeView.querySelector('#newTextPost'); + const submitNewPost = homeView.querySelector('#submitNewPost'); + + userAccess(userName, userPhoto); + submitNewPost.addEventListener('click', (e) => { + e.preventDefault(); + createNewPost(newPostContent.value); + }); + return homeView; }; diff --git a/src/firebase/login.js b/src/firebase/login.js index b35314a0..3fc58703 100644 --- a/src/firebase/login.js +++ b/src/firebase/login.js @@ -9,6 +9,7 @@ export default { .then((result) => { const user = result.user; database.collection('users').add({ + id: user.uid, name: user.displayName, email: user.email, photo: user.photoURL, @@ -28,6 +29,7 @@ export default { .then((result) => { const user = result.user; database.collection('users').add({ + id: user.uid, name: user.displayName, email: user.email, photo: user.photoURL, @@ -43,11 +45,13 @@ export default { }, emailRegister: (mail, password) => { firebase.auth().createUserWithEmailAndPassword(mail, password) - .then(() => { + .then((result) => { + const user = result.user; database.collection('users').add({ - name: '', - email: mail, - photo: '', + id: user.uid, + name: user.displayName, + email: user.email, + photo: user.photoURL, }) .then((docRef) => { console.log('Document written with ID: ', docRef.id); diff --git a/src/firebase/showData.js b/src/firebase/showData.js new file mode 100644 index 00000000..3be81757 --- /dev/null +++ b/src/firebase/showData.js @@ -0,0 +1,46 @@ +import { database } from './login.js'; + +export const userAccess = (username, photo) => { + firebase.auth().onAuthStateChanged((user) => { + if (user) { + const userId = firebase.auth().currentUser.uid; + database.collection('users').where('id', '==', userId) + .get() + .then((querySnapshot) => { + querySnapshot.forEach((doc) => { + username.textContent = doc.data().name; + photo.src = doc.data().photo; + console.log(`${doc.id} => ${doc.data().email}`); + }); + }); + console.log(user); + } else { + console.log('No user is signed in'); + } + }); +}; + +export const createNewPost = (content) => { + database.collection('posts').add({ + postContent: content, + date: new Date(), + }) + .then((docRef) => { + console.log(docRef); + }); +}; + +export const postTemplate = () => { + const docRef = database.collection('posts'); + docRef.get() + .then((doc) => { + if (doc.exists) { + console.log('Document data:', doc.data()); + } else { + // doc.data() will be undefined in this case + console.log('No such document!'); + } + }).catch((error) => { + console.log('Error getting document:', error); + }); +}; From eb5eb86ff890c9295fa0724b4d802f06b686cce8 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Sun, 26 Apr 2020 01:12:25 -0500 Subject: [PATCH 11/23] The posts are shown on the screen although they do not have a proper style. The timestamp is changed to show the post creation date. users are no longer duplicated in firestore --- docs/Views/home.js | 19 +++-------- docs/firebase/login.js | 72 ++++++++++++++++----------------------- docs/firebase/showData.js | 71 ++++++++++++++++++++++++++------------ src/Views/home.js | 19 +++-------- src/firebase/login.js | 72 ++++++++++++++++----------------------- src/firebase/showData.js | 71 ++++++++++++++++++++++++++------------ 6 files changed, 168 insertions(+), 156 deletions(-) diff --git a/docs/Views/home.js b/docs/Views/home.js index cb8e8c8f..c58322f5 100644 --- a/docs/Views/home.js +++ b/docs/Views/home.js @@ -18,36 +18,25 @@ export default () => {
-
Bienvenida ""
+
Bienvenida
-
-
-
-
- -

-
-
-
00
- -
-
+
`; const logOutBtn = homeView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); const userPhoto = homeView.querySelector('#userPhoto'); const userName = homeView.querySelector('#username'); - + const postContainer = homeView.querySelector('.sesionPrincipal1'); const newPostContent = homeView.querySelector('#newTextPost'); const submitNewPost = homeView.querySelector('#submitNewPost'); userAccess(userName, userPhoto); submitNewPost.addEventListener('click', (e) => { e.preventDefault(); - createNewPost(newPostContent.value); + createNewPost(newPostContent.value, postContainer); }); return homeView; diff --git a/docs/firebase/login.js b/docs/firebase/login.js index 3fc58703..d7b92e88 100644 --- a/docs/firebase/login.js +++ b/docs/firebase/login.js @@ -6,59 +6,47 @@ export default { google: () => { const provider = new firebase.auth.GoogleAuthProvider(); firebase.auth().signInWithPopup(provider) - .then((result) => { - const user = result.user; - database.collection('users').add({ - id: user.uid, - name: user.displayName, - email: user.email, - photo: user.photoURL, - }) - .then((docRef) => { - console.log('Document written with ID: ', docRef.id); - }) - .catch((error) => { - console.error('Error adding document: ', error); - }); + .then(() => { + // const user = result.user; + const currentUser = firebase.auth().currentUser; + console.log(currentUser); + database.collection('users').doc(currentUser.uid).set({ + id: currentUser.uid, + name: currentUser.displayName, + email: currentUser.email, + photo: currentUser.photoURL, + }); window.location.hash = '#/home'; }); }, facebook: () => { const provider = new firebase.auth.FacebookAuthProvider(); firebase.auth().signInWithPopup(provider) - .then((result) => { - const user = result.user; - database.collection('users').add({ - id: user.uid, - name: user.displayName, - email: user.email, - photo: user.photoURL, - }) - .then((docRef) => { - console.log('Document written with ID: ', docRef.id); - }) - .catch((error) => { - console.error('Error adding document: ', error); - }); + .then(() => { + // const user = result.user; + const currentUser = firebase.auth().currentUser; + console.log(currentUser); + database.collection('users').doc(currentUser.uid).set({ + id: currentUser.uid, + name: currentUser.displayName, + email: currentUser.email, + photo: currentUser.photoURL, + }); window.location.hash = '#/home'; }); }, emailRegister: (mail, password) => { firebase.auth().createUserWithEmailAndPassword(mail, password) - .then((result) => { - const user = result.user; - database.collection('users').add({ - id: user.uid, - name: user.displayName, - email: user.email, - photo: user.photoURL, - }) - .then((docRef) => { - console.log('Document written with ID: ', docRef.id); - }) - .catch((error) => { - console.error('Error adding document: ', error); - }); + .then(() => { + // const user = result.user; + const currentUser = firebase.auth().currentUser; + console.log(currentUser); + database.collection('users').doc(currentUser.uid).set({ + id: currentUser.uid, + name: currentUser.displayName, + email: currentUser.email, + photo: currentUser.photoURL, + }); window.location.hash = '#/home'; }).catch((error) => { const errorCode = error.code; diff --git a/docs/firebase/showData.js b/docs/firebase/showData.js index 3be81757..18b9a549 100644 --- a/docs/firebase/showData.js +++ b/docs/firebase/showData.js @@ -1,3 +1,4 @@ +/* eslint-disable no-param-reassign */ import { database } from './login.js'; export const userAccess = (username, photo) => { @@ -10,37 +11,65 @@ export const userAccess = (username, photo) => { querySnapshot.forEach((doc) => { username.textContent = doc.data().name; photo.src = doc.data().photo; - console.log(`${doc.id} => ${doc.data().email}`); + // console.log(`${doc.id} => ${doc.data().email}`); }); }); - console.log(user); + // console.log(user); } else { console.log('No user is signed in'); } }); }; -export const createNewPost = (content) => { - database.collection('posts').add({ - postContent: content, - date: new Date(), - }) - .then((docRef) => { - console.log(docRef); +const dateConverter = (timeStampFormat) => { + const date = new Date(timeStampFormat * 1000); + const month = date.getMonth() + 1; + const day = date.getDate(); + const year = date.getFullYear(); + const hour = date.getHours(); + const minute = date.getMinutes(); + return (`${day}-${month}-${year} / ${hour}:${minute}`); +}; + +const postTemplate = (templateContainer) => { + database.collection('posts').get().then((querySnapshot) => { + querySnapshot.forEach((doc) => { + // doc.data() is never undefined for query doc snapshots + // console.log(doc.id, ' => ', doc.data()); + const timestampFormat = doc.data().date.seconds; + const newDateFormat = dateConverter(timestampFormat); + const userTemplate = ` +
+
+
+ +
+ ${doc.data().postNameOwner}
+ ${doc.data().postContent}
+ ${newDateFormat} +
+
+
+
00
+ +
+
`; + templateContainer.innerHTML += userTemplate; }); + }); }; -export const postTemplate = () => { - const docRef = database.collection('posts'); - docRef.get() - .then((doc) => { - if (doc.exists) { - console.log('Document data:', doc.data()); - } else { - // doc.data() will be undefined in this case - console.log('No such document!'); - } - }).catch((error) => { - console.log('Error getting document:', error); +export const createNewPost = (content, container) => { + const currentUser = firebase.auth().currentUser; + database.collection('posts').add({ + postOwner: currentUser.uid, + postNameOwner: currentUser.displayName, + postPhotoOwner: currentUser.photoURL, + postContent: content, + date: firebase.firestore.FieldValue.serverTimestamp(), + likes: {}, + }) + .then(() => { + postTemplate(container); }); }; diff --git a/src/Views/home.js b/src/Views/home.js index cb8e8c8f..c58322f5 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -18,36 +18,25 @@ export default () => {
-
Bienvenida ""
+
Bienvenida
-
-
-
-
- -

-
-
-
00
- -
-
+
`; const logOutBtn = homeView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); const userPhoto = homeView.querySelector('#userPhoto'); const userName = homeView.querySelector('#username'); - + const postContainer = homeView.querySelector('.sesionPrincipal1'); const newPostContent = homeView.querySelector('#newTextPost'); const submitNewPost = homeView.querySelector('#submitNewPost'); userAccess(userName, userPhoto); submitNewPost.addEventListener('click', (e) => { e.preventDefault(); - createNewPost(newPostContent.value); + createNewPost(newPostContent.value, postContainer); }); return homeView; diff --git a/src/firebase/login.js b/src/firebase/login.js index 3fc58703..d7b92e88 100644 --- a/src/firebase/login.js +++ b/src/firebase/login.js @@ -6,59 +6,47 @@ export default { google: () => { const provider = new firebase.auth.GoogleAuthProvider(); firebase.auth().signInWithPopup(provider) - .then((result) => { - const user = result.user; - database.collection('users').add({ - id: user.uid, - name: user.displayName, - email: user.email, - photo: user.photoURL, - }) - .then((docRef) => { - console.log('Document written with ID: ', docRef.id); - }) - .catch((error) => { - console.error('Error adding document: ', error); - }); + .then(() => { + // const user = result.user; + const currentUser = firebase.auth().currentUser; + console.log(currentUser); + database.collection('users').doc(currentUser.uid).set({ + id: currentUser.uid, + name: currentUser.displayName, + email: currentUser.email, + photo: currentUser.photoURL, + }); window.location.hash = '#/home'; }); }, facebook: () => { const provider = new firebase.auth.FacebookAuthProvider(); firebase.auth().signInWithPopup(provider) - .then((result) => { - const user = result.user; - database.collection('users').add({ - id: user.uid, - name: user.displayName, - email: user.email, - photo: user.photoURL, - }) - .then((docRef) => { - console.log('Document written with ID: ', docRef.id); - }) - .catch((error) => { - console.error('Error adding document: ', error); - }); + .then(() => { + // const user = result.user; + const currentUser = firebase.auth().currentUser; + console.log(currentUser); + database.collection('users').doc(currentUser.uid).set({ + id: currentUser.uid, + name: currentUser.displayName, + email: currentUser.email, + photo: currentUser.photoURL, + }); window.location.hash = '#/home'; }); }, emailRegister: (mail, password) => { firebase.auth().createUserWithEmailAndPassword(mail, password) - .then((result) => { - const user = result.user; - database.collection('users').add({ - id: user.uid, - name: user.displayName, - email: user.email, - photo: user.photoURL, - }) - .then((docRef) => { - console.log('Document written with ID: ', docRef.id); - }) - .catch((error) => { - console.error('Error adding document: ', error); - }); + .then(() => { + // const user = result.user; + const currentUser = firebase.auth().currentUser; + console.log(currentUser); + database.collection('users').doc(currentUser.uid).set({ + id: currentUser.uid, + name: currentUser.displayName, + email: currentUser.email, + photo: currentUser.photoURL, + }); window.location.hash = '#/home'; }).catch((error) => { const errorCode = error.code; diff --git a/src/firebase/showData.js b/src/firebase/showData.js index 3be81757..18b9a549 100644 --- a/src/firebase/showData.js +++ b/src/firebase/showData.js @@ -1,3 +1,4 @@ +/* eslint-disable no-param-reassign */ import { database } from './login.js'; export const userAccess = (username, photo) => { @@ -10,37 +11,65 @@ export const userAccess = (username, photo) => { querySnapshot.forEach((doc) => { username.textContent = doc.data().name; photo.src = doc.data().photo; - console.log(`${doc.id} => ${doc.data().email}`); + // console.log(`${doc.id} => ${doc.data().email}`); }); }); - console.log(user); + // console.log(user); } else { console.log('No user is signed in'); } }); }; -export const createNewPost = (content) => { - database.collection('posts').add({ - postContent: content, - date: new Date(), - }) - .then((docRef) => { - console.log(docRef); +const dateConverter = (timeStampFormat) => { + const date = new Date(timeStampFormat * 1000); + const month = date.getMonth() + 1; + const day = date.getDate(); + const year = date.getFullYear(); + const hour = date.getHours(); + const minute = date.getMinutes(); + return (`${day}-${month}-${year} / ${hour}:${minute}`); +}; + +const postTemplate = (templateContainer) => { + database.collection('posts').get().then((querySnapshot) => { + querySnapshot.forEach((doc) => { + // doc.data() is never undefined for query doc snapshots + // console.log(doc.id, ' => ', doc.data()); + const timestampFormat = doc.data().date.seconds; + const newDateFormat = dateConverter(timestampFormat); + const userTemplate = ` +
+
+
+ +
+ ${doc.data().postNameOwner}
+ ${doc.data().postContent}
+ ${newDateFormat} +
+
+
+
00
+ +
+
`; + templateContainer.innerHTML += userTemplate; }); + }); }; -export const postTemplate = () => { - const docRef = database.collection('posts'); - docRef.get() - .then((doc) => { - if (doc.exists) { - console.log('Document data:', doc.data()); - } else { - // doc.data() will be undefined in this case - console.log('No such document!'); - } - }).catch((error) => { - console.log('Error getting document:', error); +export const createNewPost = (content, container) => { + const currentUser = firebase.auth().currentUser; + database.collection('posts').add({ + postOwner: currentUser.uid, + postNameOwner: currentUser.displayName, + postPhotoOwner: currentUser.photoURL, + postContent: content, + date: firebase.firestore.FieldValue.serverTimestamp(), + likes: {}, + }) + .then(() => { + postTemplate(container); }); }; From 5b1c8770c4a0603cc7eb24d1d9d34167de551bf9 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Sun, 26 Apr 2020 22:01:42 -0500 Subject: [PATCH 12/23] the view for feed and create post is done. Button to modify and delete are placed but still do not have functionality --- docs/Views/createPost.js | 36 +++++++++++++++++++++++++++++++++++ docs/Views/home.js | 12 +++--------- docs/Views/index.js | 2 ++ docs/Views/router.js | 4 ++++ docs/firebase/showData.js | 32 +++++++++++++++++++++++-------- docs/images/writePost.svg | 1 + docs/styles.css | 40 ++++++++++++++++++++++++++++++++++----- src/Views/createPost.js | 36 +++++++++++++++++++++++++++++++++++ src/Views/home.js | 12 +++--------- src/Views/index.js | 2 ++ src/Views/router.js | 4 ++++ src/firebase/showData.js | 32 +++++++++++++++++++++++-------- src/images/writePost.svg | 1 + src/styles.css | 40 ++++++++++++++++++++++++++++++++++----- 14 files changed, 210 insertions(+), 44 deletions(-) create mode 100644 docs/Views/createPost.js create mode 100644 docs/images/writePost.svg create mode 100644 src/Views/createPost.js create mode 100644 src/images/writePost.svg diff --git a/docs/Views/createPost.js b/docs/Views/createPost.js new file mode 100644 index 00000000..6972b9ee --- /dev/null +++ b/docs/Views/createPost.js @@ -0,0 +1,36 @@ +import { userAccess, createNewPost } from '../firebase/showData.js'; + +export default () => { + const createPostView = document.createElement('div'); + createPostView.setAttribute('class', 'Home'); + const header = document.querySelector('header'); + header.style.display = 'none'; + createPostView.innerHTML = ''; + createPostView.innerHTML = ` +
+
+ logo + Home + createPost + Profile + Cerrar Sesion +
+
+
+
+
Hola:

+ + +
+
`; + const newPostContent = createPostView.querySelector('#newTextPost'); + const userPhoto = createPostView.querySelector('#userPhoto'); + const userName = createPostView.querySelector('#username'); + userAccess(userName, userPhoto); + const submitNewPost = createPostView.querySelector('#submitNewPost'); + submitNewPost.addEventListener('click', (e) => { + e.preventDefault(); + createNewPost(newPostContent.value); + }); + return createPostView; +}; diff --git a/docs/Views/home.js b/docs/Views/home.js index c58322f5..c5b71e24 100644 --- a/docs/Views/home.js +++ b/docs/Views/home.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess, createNewPost } from '../firebase/showData.js'; +import { userAccess, postTemplate } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -12,6 +12,7 @@ export default () => {
logo Home + createPost Profile Cerrar Sesion
@@ -19,8 +20,6 @@ export default () => {
Bienvenida
- -
@@ -30,14 +29,9 @@ export default () => { const userPhoto = homeView.querySelector('#userPhoto'); const userName = homeView.querySelector('#username'); const postContainer = homeView.querySelector('.sesionPrincipal1'); - const newPostContent = homeView.querySelector('#newTextPost'); - const submitNewPost = homeView.querySelector('#submitNewPost'); userAccess(userName, userPhoto); - submitNewPost.addEventListener('click', (e) => { - e.preventDefault(); - createNewPost(newPostContent.value, postContainer); - }); + postTemplate(postContainer); return homeView; }; diff --git a/docs/Views/index.js b/docs/Views/index.js index ce70158d..36b55a43 100644 --- a/docs/Views/index.js +++ b/docs/Views/index.js @@ -2,12 +2,14 @@ import Main from './main.js'; import Register from './register.js'; import Recovery from './passwordRecovery.js'; import Home from './home.js'; +import CreatePost from './createPost.js'; const components = { principal: Main, register: Register, recoveryPass: Recovery, home: Home, + createPost: CreatePost, }; export { components }; diff --git a/docs/Views/router.js b/docs/Views/router.js index 3ed91590..785d5ce4 100644 --- a/docs/Views/router.js +++ b/docs/Views/router.js @@ -22,6 +22,10 @@ const router = (route) => { container.appendChild(components.home()); break; } + case '#/createPost': { + container.appendChild(components.createPost()); + break; + } default: { break; } diff --git a/docs/firebase/showData.js b/docs/firebase/showData.js index 18b9a549..b0988ec3 100644 --- a/docs/firebase/showData.js +++ b/docs/firebase/showData.js @@ -31,8 +31,10 @@ const dateConverter = (timeStampFormat) => { return (`${day}-${month}-${year} / ${hour}:${minute}`); }; -const postTemplate = (templateContainer) => { +export const postTemplate = (templateContainer) => { database.collection('posts').get().then((querySnapshot) => { + const docRef = database.collection('posts'); + docRef.orderBy('date', 'desc'); querySnapshot.forEach((doc) => { // doc.data() is never undefined for query doc snapshots // console.log(doc.id, ' => ', doc.data()); @@ -50,8 +52,10 @@ const postTemplate = (templateContainer) => {
-
00
+ + +
`; templateContainer.innerHTML += userTemplate; @@ -59,17 +63,29 @@ const postTemplate = (templateContainer) => { }); }; -export const createNewPost = (content, container) => { - const currentUser = firebase.auth().currentUser; +export const createNewPost = (content) => { + const currentUserData = firebase.auth().currentUser; database.collection('posts').add({ - postOwner: currentUser.uid, - postNameOwner: currentUser.displayName, - postPhotoOwner: currentUser.photoURL, + postOwner: currentUserData.uid, + postNameOwner: currentUserData.displayName, + postPhotoOwner: currentUserData.photoURL, postContent: content, date: firebase.firestore.FieldValue.serverTimestamp(), likes: {}, }) .then(() => { - postTemplate(container); + alert('Tu post se ha guardado'); }); }; + +// const deletePost = (deletebtn) => { +// database.collection('posts').where('postOwner', '==', currentUserData.uid).delete() +// .then(() => { +// const deletebtn = document.querySelector('.delete'); +// deletebtn.appendChild +// console.log('Document successfully deleted!'); +// }) +// .catch((error) => { +// console.error('Error removing document: ', error); +// }); +// }; diff --git a/docs/images/writePost.svg b/docs/images/writePost.svg new file mode 100644 index 00000000..edfd0d5f --- /dev/null +++ b/docs/images/writePost.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/styles.css b/docs/styles.css index 4ab8f78f..29f7dae2 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -97,9 +97,28 @@ button { flex-direction: column; align-items: center; } -.newPost {width: 90%; align-content: center;} -.postForm {width: 100%;} -#submitNewPost {width: 25%; align-self: flex-start; height: 1.5rem;} +.newPost { + width: 90%; + align-content: center; + display: flex; + flex-direction: column; +} +.welcome { + display: flex; + flex-direction: column; + align-items: center; + margin: 2rem 0; +} +.postForm { + width: 100%; + resize: none; +} +#submitNewPost { + width: 25%; + align-self: center; + height: 1.5rem; + margin: 1rem;} + hr {width: 90%; border-color: #EBE134;} .postContainer { width: 90%; @@ -120,12 +139,23 @@ hr {width: 90%; border-color: #EBE134;} } .postContent { width: 85%; - height: 4rem; + height: auto; border: #ffffff 0.2rem ridge; } + #date { + font-size: small; + color: #424040; + } + #ownerName {color: darkviolet;} .postOptions { width: 100%; display: flex; justify-content: flex-end; } - .likes {width: 1rem; height: 1rem;} \ No newline at end of file + .likes {width: 1rem; height: 1rem;} + + .delete { + margin: 0 0.2rem; + width: 4rem; + height: 1.5rem; + } \ No newline at end of file diff --git a/src/Views/createPost.js b/src/Views/createPost.js new file mode 100644 index 00000000..6972b9ee --- /dev/null +++ b/src/Views/createPost.js @@ -0,0 +1,36 @@ +import { userAccess, createNewPost } from '../firebase/showData.js'; + +export default () => { + const createPostView = document.createElement('div'); + createPostView.setAttribute('class', 'Home'); + const header = document.querySelector('header'); + header.style.display = 'none'; + createPostView.innerHTML = ''; + createPostView.innerHTML = ` +
+
+ logo + Home + createPost + Profile + Cerrar Sesion +
+
+
+
+
Hola:

+ + +
+
`; + const newPostContent = createPostView.querySelector('#newTextPost'); + const userPhoto = createPostView.querySelector('#userPhoto'); + const userName = createPostView.querySelector('#username'); + userAccess(userName, userPhoto); + const submitNewPost = createPostView.querySelector('#submitNewPost'); + submitNewPost.addEventListener('click', (e) => { + e.preventDefault(); + createNewPost(newPostContent.value); + }); + return createPostView; +}; diff --git a/src/Views/home.js b/src/Views/home.js index c58322f5..c5b71e24 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess, createNewPost } from '../firebase/showData.js'; +import { userAccess, postTemplate } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -12,6 +12,7 @@ export default () => {
logo Home + createPost Profile Cerrar Sesion
@@ -19,8 +20,6 @@ export default () => {
Bienvenida
- -
@@ -30,14 +29,9 @@ export default () => { const userPhoto = homeView.querySelector('#userPhoto'); const userName = homeView.querySelector('#username'); const postContainer = homeView.querySelector('.sesionPrincipal1'); - const newPostContent = homeView.querySelector('#newTextPost'); - const submitNewPost = homeView.querySelector('#submitNewPost'); userAccess(userName, userPhoto); - submitNewPost.addEventListener('click', (e) => { - e.preventDefault(); - createNewPost(newPostContent.value, postContainer); - }); + postTemplate(postContainer); return homeView; }; diff --git a/src/Views/index.js b/src/Views/index.js index ce70158d..36b55a43 100644 --- a/src/Views/index.js +++ b/src/Views/index.js @@ -2,12 +2,14 @@ import Main from './main.js'; import Register from './register.js'; import Recovery from './passwordRecovery.js'; import Home from './home.js'; +import CreatePost from './createPost.js'; const components = { principal: Main, register: Register, recoveryPass: Recovery, home: Home, + createPost: CreatePost, }; export { components }; diff --git a/src/Views/router.js b/src/Views/router.js index 3ed91590..785d5ce4 100644 --- a/src/Views/router.js +++ b/src/Views/router.js @@ -22,6 +22,10 @@ const router = (route) => { container.appendChild(components.home()); break; } + case '#/createPost': { + container.appendChild(components.createPost()); + break; + } default: { break; } diff --git a/src/firebase/showData.js b/src/firebase/showData.js index 18b9a549..b0988ec3 100644 --- a/src/firebase/showData.js +++ b/src/firebase/showData.js @@ -31,8 +31,10 @@ const dateConverter = (timeStampFormat) => { return (`${day}-${month}-${year} / ${hour}:${minute}`); }; -const postTemplate = (templateContainer) => { +export const postTemplate = (templateContainer) => { database.collection('posts').get().then((querySnapshot) => { + const docRef = database.collection('posts'); + docRef.orderBy('date', 'desc'); querySnapshot.forEach((doc) => { // doc.data() is never undefined for query doc snapshots // console.log(doc.id, ' => ', doc.data()); @@ -50,8 +52,10 @@ const postTemplate = (templateContainer) => {
-
00
+ + +
`; templateContainer.innerHTML += userTemplate; @@ -59,17 +63,29 @@ const postTemplate = (templateContainer) => { }); }; -export const createNewPost = (content, container) => { - const currentUser = firebase.auth().currentUser; +export const createNewPost = (content) => { + const currentUserData = firebase.auth().currentUser; database.collection('posts').add({ - postOwner: currentUser.uid, - postNameOwner: currentUser.displayName, - postPhotoOwner: currentUser.photoURL, + postOwner: currentUserData.uid, + postNameOwner: currentUserData.displayName, + postPhotoOwner: currentUserData.photoURL, postContent: content, date: firebase.firestore.FieldValue.serverTimestamp(), likes: {}, }) .then(() => { - postTemplate(container); + alert('Tu post se ha guardado'); }); }; + +// const deletePost = (deletebtn) => { +// database.collection('posts').where('postOwner', '==', currentUserData.uid).delete() +// .then(() => { +// const deletebtn = document.querySelector('.delete'); +// deletebtn.appendChild +// console.log('Document successfully deleted!'); +// }) +// .catch((error) => { +// console.error('Error removing document: ', error); +// }); +// }; diff --git a/src/images/writePost.svg b/src/images/writePost.svg new file mode 100644 index 00000000..edfd0d5f --- /dev/null +++ b/src/images/writePost.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/styles.css b/src/styles.css index 4ab8f78f..29f7dae2 100644 --- a/src/styles.css +++ b/src/styles.css @@ -97,9 +97,28 @@ button { flex-direction: column; align-items: center; } -.newPost {width: 90%; align-content: center;} -.postForm {width: 100%;} -#submitNewPost {width: 25%; align-self: flex-start; height: 1.5rem;} +.newPost { + width: 90%; + align-content: center; + display: flex; + flex-direction: column; +} +.welcome { + display: flex; + flex-direction: column; + align-items: center; + margin: 2rem 0; +} +.postForm { + width: 100%; + resize: none; +} +#submitNewPost { + width: 25%; + align-self: center; + height: 1.5rem; + margin: 1rem;} + hr {width: 90%; border-color: #EBE134;} .postContainer { width: 90%; @@ -120,12 +139,23 @@ hr {width: 90%; border-color: #EBE134;} } .postContent { width: 85%; - height: 4rem; + height: auto; border: #ffffff 0.2rem ridge; } + #date { + font-size: small; + color: #424040; + } + #ownerName {color: darkviolet;} .postOptions { width: 100%; display: flex; justify-content: flex-end; } - .likes {width: 1rem; height: 1rem;} \ No newline at end of file + .likes {width: 1rem; height: 1rem;} + + .delete { + margin: 0 0.2rem; + width: 4rem; + height: 1.5rem; + } \ No newline at end of file From 4a579826b70b906a725d0d1c43ecfe5fce438a16 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Sat, 2 May 2020 01:13:05 -0500 Subject: [PATCH 13/23] design details are arranged. delete button works but with all posts. attempt to modify post without success --- src/Views/createPost.js | 3 ++ src/Views/home.js | 18 +++++-- src/Views/main.js | 28 +++++----- src/Views/passwordRecovery.js | 11 ++-- src/Views/register.js | 13 ++--- src/firebase/login.js | 1 + src/firebase/showData.js | 98 ++++++++++++++++++++++------------- src/images/borrar.svg | 52 +++++++++++++++++++ src/images/rectification.svg | 1 + src/styles.css | 43 +++++++++------ 10 files changed, 188 insertions(+), 80 deletions(-) create mode 100644 src/images/borrar.svg create mode 100644 src/images/rectification.svg diff --git a/src/Views/createPost.js b/src/Views/createPost.js index 6972b9ee..991fd9d1 100644 --- a/src/Views/createPost.js +++ b/src/Views/createPost.js @@ -1,3 +1,4 @@ +import loginFunctions from '../firebase/login.js'; import { userAccess, createNewPost } from '../firebase/showData.js'; export default () => { @@ -23,6 +24,7 @@ export default () => {
`; + const logOutBtn = createPostView.querySelector('#logOutBtn'); const newPostContent = createPostView.querySelector('#newTextPost'); const userPhoto = createPostView.querySelector('#userPhoto'); const userName = createPostView.querySelector('#username'); @@ -32,5 +34,6 @@ export default () => { e.preventDefault(); createNewPost(newPostContent.value); }); + logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); return createPostView; }; diff --git a/src/Views/home.js b/src/Views/home.js index c5b71e24..6b1f5bb8 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess, postTemplate } from '../firebase/showData.js'; +import { userAccess, createNewPost, postTemplate } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -18,9 +18,11 @@ export default () => {
-
-
Bienvenida
-
+
+
Bienvenida
+ + +
`; @@ -30,7 +32,15 @@ export default () => { const userName = homeView.querySelector('#username'); const postContainer = homeView.querySelector('.sesionPrincipal1'); + const newPostContent = homeView.querySelector('#newTextPost'); + const submitNewPost = homeView.querySelector('#submitNewPost'); + userAccess(userName, userPhoto); + submitNewPost.addEventListener('click', (e) => { + e.preventDefault(); + createNewPost(newPostContent.value); + newPostContent.value = ''; + }); postTemplate(postContainer); return homeView; diff --git a/src/Views/main.js b/src/Views/main.js index c80e5605..60bfd5f9 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -1,29 +1,29 @@ import loginFunctions from '../firebase/login.js'; export default () => { - const mainView = ` + const loginView = document.createElement('div'); + loginView.setAttribute('class', 'viewsStyle'); + loginView.innerHTML = ` +

Inicia Sesión con tu email

¿Has olvidado la contraseña?

-

o

- - -

¿No tienes cuenta?Registrate

+

o ingresa con tu cuenta de:

+ + +

¿No tienes cuenta? Registrate

`; - const views = document.createElement('div'); - views.setAttribute('class', 'viewsStyle'); - views.innerHTML = mainView; // Nodos - const loginEmail = views.querySelector('#loginEmail'); - const loginPassword = views.querySelector('#loginPassword'); - const loginButton = views.querySelector('#loginButton'); - const facebookLogin = views.querySelector('#facebookLogin'); - const googleLogin = views.querySelector('#googleLogin'); + const loginEmail = loginView.querySelector('#loginEmail'); + const loginPassword = loginView.querySelector('#loginPassword'); + const loginButton = loginView.querySelector('#loginButton'); + const facebookLogin = loginView.querySelector('#facebookLogin'); + const googleLogin = loginView.querySelector('#googleLogin'); // Listeners googleLogin.addEventListener('click', loginFunctions.google); @@ -32,5 +32,5 @@ export default () => { e.preventDefault(); loginFunctions.emailLogIn(loginEmail.value, loginPassword.value); }); - return views; + return loginView; }; diff --git a/src/Views/passwordRecovery.js b/src/Views/passwordRecovery.js index 6d72c891..7b8dfed1 100644 --- a/src/Views/passwordRecovery.js +++ b/src/Views/passwordRecovery.js @@ -11,13 +11,12 @@ export default () => { -

o

- - -

¿Ya tienes una cuenta? Inicia Sesión

-

¿No tienes cuenta?Registrate

-
`; +

o ingresa con tu cuenta de:

+ + +

¿No tienes cuenta? Registrate

+ `; // Nodos const googleLogin = recView.querySelector('#googleLogin'); diff --git a/src/Views/register.js b/src/Views/register.js index f3e6b878..a99684f7 100644 --- a/src/Views/register.js +++ b/src/Views/register.js @@ -5,17 +5,18 @@ export default () => { regView.setAttribute('class', 'viewsStyle'); regView.innerHTML = ''; regView.innerHTML = ` -

ABRE UNA CUENTA

-
- - -
+

Abre una cuenta:



¿Ya tienes una cuenta? Inicia Sesión

-
`; + +
+

O ingresa con tu cuenta de:

+ + +
`; // Nodos const registerEmail = regView.querySelector('#registerEmail'); const registerPassword = regView.querySelector('#registerPassword'); diff --git a/src/firebase/login.js b/src/firebase/login.js index d7b92e88..c4026b6b 100644 --- a/src/firebase/login.js +++ b/src/firebase/login.js @@ -87,6 +87,7 @@ export default { firebase.auth().signOut() .then(() => { alert('Sesión cerrada'); + document.querySelector('header').style.display = ''; window.location.hash = '#/login'; }).catch(() => { alert('Algo salió mal. Intente de nuevo'); diff --git a/src/firebase/showData.js b/src/firebase/showData.js index b0988ec3..8d810098 100644 --- a/src/firebase/showData.js +++ b/src/firebase/showData.js @@ -1,3 +1,4 @@ +/* eslint-disable no-alert */ /* eslint-disable no-param-reassign */ import { database } from './login.js'; @@ -11,10 +12,8 @@ export const userAccess = (username, photo) => { querySnapshot.forEach((doc) => { username.textContent = doc.data().name; photo.src = doc.data().photo; - // console.log(`${doc.id} => ${doc.data().email}`); }); }); - // console.log(user); } else { console.log('No user is signed in'); } @@ -31,17 +30,65 @@ const dateConverter = (timeStampFormat) => { return (`${day}-${month}-${year} / ${hour}:${minute}`); }; +const deleteOption = (event) => { + database.collection('posts').doc(event.target.id).delete() + .then(() => { + alert('Document successfully deleted!'); + }) + .catch((error) => { + alert('Error removing document: ', error); + }); +}; + +export const createNewPost = (content) => { + const currentUserData = firebase.auth().currentUser; + database.collection('posts').add({ + postOwner: currentUserData.uid, + postNameOwner: currentUserData.displayName, + postPhotoOwner: currentUserData.photoURL, + postContent: content, + date: new Date(), + likes: {}, + }) + .then(() => { + alert('Tu post se ha guardado'); + }); +}; + +// const modifyOption = (content) => { +// const container = document.querySelector('.modify'); +// const newTextarea = document.createElement('textarea'); +// container.appendChild(newTextarea); +// newTextarea.innerHTML = content; +// const btn = document.querySelector('.btnsM'); +// btn.innerHTML = 'Editar'; +// btn.onclick = (event) => { +// const postsRef = database.collection('posts').doc(event.target.id); +// const newContent = document.querySelector('#newTextPost').value; +// return postsRef.update({ +// postContent: newContent, +// }) +// .then(() => { +// console.log('Document successfully updated!'); +// btn.innerHTML = 'Guardar'; +// document.querySelector('#newTextPost').value = ''; +// }) +// .catch((error) => { +// // The document probably doesn't exist. +// console.error('Error updating document: ', error); +// }); +// }; +// }; + export const postTemplate = (templateContainer) => { - database.collection('posts').get().then((querySnapshot) => { + database.collection('posts').onSnapshot((querySnapshot) => { + templateContainer.innerHTML = ''; const docRef = database.collection('posts'); docRef.orderBy('date', 'desc'); querySnapshot.forEach((doc) => { - // doc.data() is never undefined for query doc snapshots - // console.log(doc.id, ' => ', doc.data()); const timestampFormat = doc.data().date.seconds; const newDateFormat = dateConverter(timestampFormat); const userTemplate = ` -
@@ -54,38 +101,19 @@ export const postTemplate = (templateContainer) => {
- - + +
`; templateContainer.innerHTML += userTemplate; - }); - }); -}; + const DeleteBtns = templateContainer.querySelectorAll('.delete'); + DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); -export const createNewPost = (content) => { - const currentUserData = firebase.auth().currentUser; - database.collection('posts').add({ - postOwner: currentUserData.uid, - postNameOwner: currentUserData.displayName, - postPhotoOwner: currentUserData.photoURL, - postContent: content, - date: firebase.firestore.FieldValue.serverTimestamp(), - likes: {}, - }) - .then(() => { - alert('Tu post se ha guardado'); + // const modifyBtns = templateContainer.querySelectorAll('.btnsM'); + // modifyBtns.forEach(btn => btn.addEventListener('click', (e) => { + // e.preventDefault(); + // modifyOption(doc.data().postContent); + // })); }); + }); }; - -// const deletePost = (deletebtn) => { -// database.collection('posts').where('postOwner', '==', currentUserData.uid).delete() -// .then(() => { -// const deletebtn = document.querySelector('.delete'); -// deletebtn.appendChild -// console.log('Document successfully deleted!'); -// }) -// .catch((error) => { -// console.error('Error removing document: ', error); -// }); -// }; diff --git a/src/images/borrar.svg b/src/images/borrar.svg new file mode 100644 index 00000000..62f5af1a --- /dev/null +++ b/src/images/borrar.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/rectification.svg b/src/images/rectification.svg new file mode 100644 index 00000000..0782e1a3 --- /dev/null +++ b/src/images/rectification.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/styles.css b/src/styles.css index 29f7dae2..095f7912 100644 --- a/src/styles.css +++ b/src/styles.css @@ -16,6 +16,7 @@ html, body { } /* header */ header { + padding: 0.2rem; background: #EBE134; width: 100%; display: flex; @@ -24,6 +25,9 @@ header { justify-content: center; } .codeMakers {width: 12rem; height: 4rem;} +.viewsStyle { + width: 90%; +} .views { width: 90%; height: 100%; @@ -35,12 +39,13 @@ header { .conectWithSocialMedia { display: flex; flex-direction: column; + justify-content: center; align-items: center; } .buttons{ border: 0; height: 4rem; - width: 100%; + margin: 0; } /* formulario */ .registerForm { @@ -53,11 +58,12 @@ header { } .recoveryForm { width: 100%;; - height: 20%; + height: 30%; + margin-bottom: 2rem; display: flex; flex-direction: column; align-items: center; - justify-content: space-between; + justify-content: space-around; } input { border: 0; @@ -73,6 +79,8 @@ button { .registerButton { border: 0; background: #EBE134; + border-radius: 18px 18px 18px 18px; + border: 6px outset #ebe234; font-weight: bold; } @@ -89,7 +97,7 @@ button { align-items: center; } .btnHeader {width: 2rem; height: 2rem;} -.sesionPrincipal { +.sesionPrincipal, .sesionPrincipal1 { padding: 0; margin: 1rem 0; width: 100%; @@ -121,17 +129,20 @@ button { hr {width: 90%; border-color: #EBE134;} .postContainer { + margin: 0.5rem 0.3rem; width: 90%; padding: 0.5rem; display: flex; flex-direction: column; - border: #ffffff 0.2rem ridge; + justify-content: center; + border-radius: 26px 26px 26px 26px; + border: 0.25rem dashed #bdb5bd; + background: rgb(243, 243, 243); } .post { display: flex; width: 100%; justify-content: space-around; - } .postAuthor { width: 4rem; @@ -139,8 +150,8 @@ hr {width: 90%; border-color: #EBE134;} } .postContent { width: 85%; - height: auto; - border: #ffffff 0.2rem ridge; + height: auto; + padding: 0.3rem; } #date { font-size: small; @@ -152,10 +163,12 @@ hr {width: 90%; border-color: #EBE134;} display: flex; justify-content: flex-end; } - .likes {width: 1rem; height: 1rem;} - - .delete { - margin: 0 0.2rem; - width: 4rem; - height: 1.5rem; - } \ No newline at end of file + .likes { + width: 1rem; + height: 1rem; + margin: 0.3rem 0.5rem; + } +textarea { + border-radius: 16px 16px 16px 16px; + border: 3px solid #EBE134; +} \ No newline at end of file From d693394a0059ebc60288045294634cdccee61702 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Sat, 2 May 2020 01:14:24 -0500 Subject: [PATCH 14/23] design details are arranged. delete button works but with all posts. attempt to modify post without success --- docs/Views/createPost.js | 3 ++ docs/Views/home.js | 18 +++++-- docs/Views/main.js | 28 +++++----- docs/Views/passwordRecovery.js | 11 ++-- docs/Views/register.js | 13 ++--- docs/firebase/login.js | 1 + docs/firebase/showData.js | 98 ++++++++++++++++++++++------------ docs/images/borrar.svg | 52 ++++++++++++++++++ docs/images/rectification.svg | 1 + docs/styles.css | 43 +++++++++------ 10 files changed, 188 insertions(+), 80 deletions(-) create mode 100644 docs/images/borrar.svg create mode 100644 docs/images/rectification.svg diff --git a/docs/Views/createPost.js b/docs/Views/createPost.js index 6972b9ee..991fd9d1 100644 --- a/docs/Views/createPost.js +++ b/docs/Views/createPost.js @@ -1,3 +1,4 @@ +import loginFunctions from '../firebase/login.js'; import { userAccess, createNewPost } from '../firebase/showData.js'; export default () => { @@ -23,6 +24,7 @@ export default () => {
`; + const logOutBtn = createPostView.querySelector('#logOutBtn'); const newPostContent = createPostView.querySelector('#newTextPost'); const userPhoto = createPostView.querySelector('#userPhoto'); const userName = createPostView.querySelector('#username'); @@ -32,5 +34,6 @@ export default () => { e.preventDefault(); createNewPost(newPostContent.value); }); + logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); return createPostView; }; diff --git a/docs/Views/home.js b/docs/Views/home.js index c5b71e24..6b1f5bb8 100644 --- a/docs/Views/home.js +++ b/docs/Views/home.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess, postTemplate } from '../firebase/showData.js'; +import { userAccess, createNewPost, postTemplate } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -18,9 +18,11 @@ export default () => {
-
-
Bienvenida
-
+
+
Bienvenida
+ + +
`; @@ -30,7 +32,15 @@ export default () => { const userName = homeView.querySelector('#username'); const postContainer = homeView.querySelector('.sesionPrincipal1'); + const newPostContent = homeView.querySelector('#newTextPost'); + const submitNewPost = homeView.querySelector('#submitNewPost'); + userAccess(userName, userPhoto); + submitNewPost.addEventListener('click', (e) => { + e.preventDefault(); + createNewPost(newPostContent.value); + newPostContent.value = ''; + }); postTemplate(postContainer); return homeView; diff --git a/docs/Views/main.js b/docs/Views/main.js index c80e5605..60bfd5f9 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -1,29 +1,29 @@ import loginFunctions from '../firebase/login.js'; export default () => { - const mainView = ` + const loginView = document.createElement('div'); + loginView.setAttribute('class', 'viewsStyle'); + loginView.innerHTML = ` +

Inicia Sesión con tu email

¿Has olvidado la contraseña?

-

o

- - -

¿No tienes cuenta?Registrate

+

o ingresa con tu cuenta de:

+ + +

¿No tienes cuenta? Registrate

`; - const views = document.createElement('div'); - views.setAttribute('class', 'viewsStyle'); - views.innerHTML = mainView; // Nodos - const loginEmail = views.querySelector('#loginEmail'); - const loginPassword = views.querySelector('#loginPassword'); - const loginButton = views.querySelector('#loginButton'); - const facebookLogin = views.querySelector('#facebookLogin'); - const googleLogin = views.querySelector('#googleLogin'); + const loginEmail = loginView.querySelector('#loginEmail'); + const loginPassword = loginView.querySelector('#loginPassword'); + const loginButton = loginView.querySelector('#loginButton'); + const facebookLogin = loginView.querySelector('#facebookLogin'); + const googleLogin = loginView.querySelector('#googleLogin'); // Listeners googleLogin.addEventListener('click', loginFunctions.google); @@ -32,5 +32,5 @@ export default () => { e.preventDefault(); loginFunctions.emailLogIn(loginEmail.value, loginPassword.value); }); - return views; + return loginView; }; diff --git a/docs/Views/passwordRecovery.js b/docs/Views/passwordRecovery.js index 6d72c891..7b8dfed1 100644 --- a/docs/Views/passwordRecovery.js +++ b/docs/Views/passwordRecovery.js @@ -11,13 +11,12 @@ export default () => { -

o

- - -

¿Ya tienes una cuenta? Inicia Sesión

-

¿No tienes cuenta?Registrate

-
`; +

o ingresa con tu cuenta de:

+ + +

¿No tienes cuenta? Registrate

+ `; // Nodos const googleLogin = recView.querySelector('#googleLogin'); diff --git a/docs/Views/register.js b/docs/Views/register.js index f3e6b878..a99684f7 100644 --- a/docs/Views/register.js +++ b/docs/Views/register.js @@ -5,17 +5,18 @@ export default () => { regView.setAttribute('class', 'viewsStyle'); regView.innerHTML = ''; regView.innerHTML = ` -

ABRE UNA CUENTA

-
- - -
+

Abre una cuenta:



¿Ya tienes una cuenta? Inicia Sesión

-
`; + +
+

O ingresa con tu cuenta de:

+ + +
`; // Nodos const registerEmail = regView.querySelector('#registerEmail'); const registerPassword = regView.querySelector('#registerPassword'); diff --git a/docs/firebase/login.js b/docs/firebase/login.js index d7b92e88..c4026b6b 100644 --- a/docs/firebase/login.js +++ b/docs/firebase/login.js @@ -87,6 +87,7 @@ export default { firebase.auth().signOut() .then(() => { alert('Sesión cerrada'); + document.querySelector('header').style.display = ''; window.location.hash = '#/login'; }).catch(() => { alert('Algo salió mal. Intente de nuevo'); diff --git a/docs/firebase/showData.js b/docs/firebase/showData.js index b0988ec3..8d810098 100644 --- a/docs/firebase/showData.js +++ b/docs/firebase/showData.js @@ -1,3 +1,4 @@ +/* eslint-disable no-alert */ /* eslint-disable no-param-reassign */ import { database } from './login.js'; @@ -11,10 +12,8 @@ export const userAccess = (username, photo) => { querySnapshot.forEach((doc) => { username.textContent = doc.data().name; photo.src = doc.data().photo; - // console.log(`${doc.id} => ${doc.data().email}`); }); }); - // console.log(user); } else { console.log('No user is signed in'); } @@ -31,17 +30,65 @@ const dateConverter = (timeStampFormat) => { return (`${day}-${month}-${year} / ${hour}:${minute}`); }; +const deleteOption = (event) => { + database.collection('posts').doc(event.target.id).delete() + .then(() => { + alert('Document successfully deleted!'); + }) + .catch((error) => { + alert('Error removing document: ', error); + }); +}; + +export const createNewPost = (content) => { + const currentUserData = firebase.auth().currentUser; + database.collection('posts').add({ + postOwner: currentUserData.uid, + postNameOwner: currentUserData.displayName, + postPhotoOwner: currentUserData.photoURL, + postContent: content, + date: new Date(), + likes: {}, + }) + .then(() => { + alert('Tu post se ha guardado'); + }); +}; + +// const modifyOption = (content) => { +// const container = document.querySelector('.modify'); +// const newTextarea = document.createElement('textarea'); +// container.appendChild(newTextarea); +// newTextarea.innerHTML = content; +// const btn = document.querySelector('.btnsM'); +// btn.innerHTML = 'Editar'; +// btn.onclick = (event) => { +// const postsRef = database.collection('posts').doc(event.target.id); +// const newContent = document.querySelector('#newTextPost').value; +// return postsRef.update({ +// postContent: newContent, +// }) +// .then(() => { +// console.log('Document successfully updated!'); +// btn.innerHTML = 'Guardar'; +// document.querySelector('#newTextPost').value = ''; +// }) +// .catch((error) => { +// // The document probably doesn't exist. +// console.error('Error updating document: ', error); +// }); +// }; +// }; + export const postTemplate = (templateContainer) => { - database.collection('posts').get().then((querySnapshot) => { + database.collection('posts').onSnapshot((querySnapshot) => { + templateContainer.innerHTML = ''; const docRef = database.collection('posts'); docRef.orderBy('date', 'desc'); querySnapshot.forEach((doc) => { - // doc.data() is never undefined for query doc snapshots - // console.log(doc.id, ' => ', doc.data()); const timestampFormat = doc.data().date.seconds; const newDateFormat = dateConverter(timestampFormat); const userTemplate = ` -
@@ -54,38 +101,19 @@ export const postTemplate = (templateContainer) => {
- - + +
`; templateContainer.innerHTML += userTemplate; - }); - }); -}; + const DeleteBtns = templateContainer.querySelectorAll('.delete'); + DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); -export const createNewPost = (content) => { - const currentUserData = firebase.auth().currentUser; - database.collection('posts').add({ - postOwner: currentUserData.uid, - postNameOwner: currentUserData.displayName, - postPhotoOwner: currentUserData.photoURL, - postContent: content, - date: firebase.firestore.FieldValue.serverTimestamp(), - likes: {}, - }) - .then(() => { - alert('Tu post se ha guardado'); + // const modifyBtns = templateContainer.querySelectorAll('.btnsM'); + // modifyBtns.forEach(btn => btn.addEventListener('click', (e) => { + // e.preventDefault(); + // modifyOption(doc.data().postContent); + // })); }); + }); }; - -// const deletePost = (deletebtn) => { -// database.collection('posts').where('postOwner', '==', currentUserData.uid).delete() -// .then(() => { -// const deletebtn = document.querySelector('.delete'); -// deletebtn.appendChild -// console.log('Document successfully deleted!'); -// }) -// .catch((error) => { -// console.error('Error removing document: ', error); -// }); -// }; diff --git a/docs/images/borrar.svg b/docs/images/borrar.svg new file mode 100644 index 00000000..62f5af1a --- /dev/null +++ b/docs/images/borrar.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/rectification.svg b/docs/images/rectification.svg new file mode 100644 index 00000000..0782e1a3 --- /dev/null +++ b/docs/images/rectification.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/styles.css b/docs/styles.css index 29f7dae2..095f7912 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -16,6 +16,7 @@ html, body { } /* header */ header { + padding: 0.2rem; background: #EBE134; width: 100%; display: flex; @@ -24,6 +25,9 @@ header { justify-content: center; } .codeMakers {width: 12rem; height: 4rem;} +.viewsStyle { + width: 90%; +} .views { width: 90%; height: 100%; @@ -35,12 +39,13 @@ header { .conectWithSocialMedia { display: flex; flex-direction: column; + justify-content: center; align-items: center; } .buttons{ border: 0; height: 4rem; - width: 100%; + margin: 0; } /* formulario */ .registerForm { @@ -53,11 +58,12 @@ header { } .recoveryForm { width: 100%;; - height: 20%; + height: 30%; + margin-bottom: 2rem; display: flex; flex-direction: column; align-items: center; - justify-content: space-between; + justify-content: space-around; } input { border: 0; @@ -73,6 +79,8 @@ button { .registerButton { border: 0; background: #EBE134; + border-radius: 18px 18px 18px 18px; + border: 6px outset #ebe234; font-weight: bold; } @@ -89,7 +97,7 @@ button { align-items: center; } .btnHeader {width: 2rem; height: 2rem;} -.sesionPrincipal { +.sesionPrincipal, .sesionPrincipal1 { padding: 0; margin: 1rem 0; width: 100%; @@ -121,17 +129,20 @@ button { hr {width: 90%; border-color: #EBE134;} .postContainer { + margin: 0.5rem 0.3rem; width: 90%; padding: 0.5rem; display: flex; flex-direction: column; - border: #ffffff 0.2rem ridge; + justify-content: center; + border-radius: 26px 26px 26px 26px; + border: 0.25rem dashed #bdb5bd; + background: rgb(243, 243, 243); } .post { display: flex; width: 100%; justify-content: space-around; - } .postAuthor { width: 4rem; @@ -139,8 +150,8 @@ hr {width: 90%; border-color: #EBE134;} } .postContent { width: 85%; - height: auto; - border: #ffffff 0.2rem ridge; + height: auto; + padding: 0.3rem; } #date { font-size: small; @@ -152,10 +163,12 @@ hr {width: 90%; border-color: #EBE134;} display: flex; justify-content: flex-end; } - .likes {width: 1rem; height: 1rem;} - - .delete { - margin: 0 0.2rem; - width: 4rem; - height: 1.5rem; - } \ No newline at end of file + .likes { + width: 1rem; + height: 1rem; + margin: 0.3rem 0.5rem; + } +textarea { + border-radius: 16px 16px 16px 16px; + border: 3px solid #EBE134; +} \ No newline at end of file From 86fc263915f20fc6595eb7b4eb9ee5144c6c4d64 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 3 May 2020 02:04:37 -0500 Subject: [PATCH 15/23] estilos, imagenes --- src/Views/register.js | 4 ++-- src/images/{Google.PNG => Google2.PNG} | Bin src/images/{facebook.PNG => facebook1.PNG} | Bin src/images/facebook4.png | Bin 0 -> 13058 bytes src/images/google4.png | Bin 0 -> 21162 bytes src/styles.css | 6 +++--- 6 files changed, 5 insertions(+), 5 deletions(-) rename src/images/{Google.PNG => Google2.PNG} (100%) rename src/images/{facebook.PNG => facebook1.PNG} (100%) create mode 100644 src/images/facebook4.png create mode 100644 src/images/google4.png diff --git a/src/Views/register.js b/src/Views/register.js index a99684f7..97b3183e 100644 --- a/src/Views/register.js +++ b/src/Views/register.js @@ -14,8 +14,8 @@ export default () => {

O ingresa con tu cuenta de:

- - + +
`; // Nodos const registerEmail = regView.querySelector('#registerEmail'); diff --git a/src/images/Google.PNG b/src/images/Google2.PNG similarity index 100% rename from src/images/Google.PNG rename to src/images/Google2.PNG diff --git a/src/images/facebook.PNG b/src/images/facebook1.PNG similarity index 100% rename from src/images/facebook.PNG rename to src/images/facebook1.PNG diff --git a/src/images/facebook4.png b/src/images/facebook4.png new file mode 100644 index 0000000000000000000000000000000000000000..640ee7acdf6072964723e6ba5c16f24760079597 GIT binary patch literal 13058 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 literal 0 HcmV?d00001 diff --git a/src/images/google4.png b/src/images/google4.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fd170e44712b24c728139ae8a9286de4a3bfd6 GIT binary patch literal 21162 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 Date: Sun, 3 May 2020 02:20:54 -0500 Subject: [PATCH 16/23] changes in edit function --- src/Views/createPost.js | 10 ++--- src/firebase/showData.js | 81 ++++++++++++++++++++++++++-------------- src/index.html | 17 ++++++++- src/styles.css | 48 +++++++++++++++++++++++- 4 files changed, 120 insertions(+), 36 deletions(-) diff --git a/src/Views/createPost.js b/src/Views/createPost.js index 991fd9d1..7a261399 100644 --- a/src/Views/createPost.js +++ b/src/Views/createPost.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess, createNewPost } from '../firebase/showData.js'; +import { userAccess } from '../firebase/showData.js'; export default () => { const createPostView = document.createElement('div'); @@ -25,15 +25,11 @@ export default () => {
`; const logOutBtn = createPostView.querySelector('#logOutBtn'); - const newPostContent = createPostView.querySelector('#newTextPost'); + // const newPostContent = createPostView.querySelector('#newTextPost'); const userPhoto = createPostView.querySelector('#userPhoto'); const userName = createPostView.querySelector('#username'); userAccess(userName, userPhoto); - const submitNewPost = createPostView.querySelector('#submitNewPost'); - submitNewPost.addEventListener('click', (e) => { - e.preventDefault(); - createNewPost(newPostContent.value); - }); + logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); return createPostView; }; diff --git a/src/firebase/showData.js b/src/firebase/showData.js index 8d810098..3c6a0b5a 100644 --- a/src/firebase/showData.js +++ b/src/firebase/showData.js @@ -2,6 +2,8 @@ /* eslint-disable no-param-reassign */ import { database } from './login.js'; +// const storage = firebase.storage(); + export const userAccess = (username, photo) => { firebase.auth().onAuthStateChanged((user) => { if (user) { @@ -40,6 +42,29 @@ const deleteOption = (event) => { }); }; +const editPost = (event) => { + // const postContent = event.target + document.querySelector('#modalEdit').style.display = 'block'; + document.querySelector('#editPostText').value = event.target.getAttribute('data-content'); + const btnEdit = document.querySelector('#submitEditPost'); + btnEdit.onclick = () => { + const postsRef = database.collection('posts').doc(event.target.id); + const newContent = document.querySelector('#newTextPost').value; + return postsRef.update({ + postContent: newContent, + }) + .then(() => { + console.log('Document successfully updated!'); + document.querySelector('#newTextPost').value = ''; + document.querySelector('#modalEdit').style.display = 'none'; + }) + .catch((error) => { + // The document probably doesn't exist. + console.error('Error updating document: ', error); + }); + }; +}; + export const createNewPost = (content) => { const currentUserData = firebase.auth().currentUser; database.collection('posts').add({ @@ -55,31 +80,6 @@ export const createNewPost = (content) => { }); }; -// const modifyOption = (content) => { -// const container = document.querySelector('.modify'); -// const newTextarea = document.createElement('textarea'); -// container.appendChild(newTextarea); -// newTextarea.innerHTML = content; -// const btn = document.querySelector('.btnsM'); -// btn.innerHTML = 'Editar'; -// btn.onclick = (event) => { -// const postsRef = database.collection('posts').doc(event.target.id); -// const newContent = document.querySelector('#newTextPost').value; -// return postsRef.update({ -// postContent: newContent, -// }) -// .then(() => { -// console.log('Document successfully updated!'); -// btn.innerHTML = 'Guardar'; -// document.querySelector('#newTextPost').value = ''; -// }) -// .catch((error) => { -// // The document probably doesn't exist. -// console.error('Error updating document: ', error); -// }); -// }; -// }; - export const postTemplate = (templateContainer) => { database.collection('posts').onSnapshot((querySnapshot) => { templateContainer.innerHTML = ''; @@ -89,19 +89,23 @@ export const postTemplate = (templateContainer) => { const timestampFormat = doc.data().date.seconds; const newDateFormat = dateConverter(timestampFormat); const userTemplate = ` +
+ + +
${doc.data().postNameOwner}
- ${doc.data().postContent}
+ ${doc.data().postContent}
${newDateFormat}
- +
`; @@ -109,6 +113,9 @@ export const postTemplate = (templateContainer) => { const DeleteBtns = templateContainer.querySelectorAll('.delete'); DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); + const btn = templateContainer.querySelectorAll('.edit'); + btn.forEach(bt => bt.addEventListener('click', editPost)); + // const modifyBtns = templateContainer.querySelectorAll('.btnsM'); // modifyBtns.forEach(btn => btn.addEventListener('click', (e) => { // e.preventDefault(); @@ -117,3 +124,23 @@ export const postTemplate = (templateContainer) => { }); }); }; + + +// const modifyOption = (e) => { +// btn.onclick = (event) => { +// const postsRef = database.collection('posts').doc(event.target.id); +// const newContent = document.querySelector('#newTextPost').value; +// return postsRef.update({ +// postContent: newContent, +// }) +// .then(() => { +// console.log('Document successfully updated!'); +// btn.innerHTML = 'Guardar'; +// document.querySelector('#newTextPost').value = ''; +// }) +// .catch((error) => { +// // The document probably doesn't exist. +// console.error('Error updating document: ', error); +// }); +// }; +// }; diff --git a/src/index.html b/src/index.html index 45b792cc..8c71a509 100644 --- a/src/index.html +++ b/src/index.html @@ -17,6 +17,20 @@
+ @@ -31,7 +45,8 @@ projectId: "socialnetwork-91278", storageBucket: "socialnetwork-91278.appspot.com", messagingSenderId: "179888650732", - appId: "1:179888650732:web:c72867485943264fdca8c9" + appId: "1:179888650732:web:c72867485943264fdca8c9", + storageBucket: "gs://socialnetwork-91278.appspot.com", }; // Initialize Firebase firebase.initializeApp(firebaseConfig); diff --git a/src/styles.css b/src/styles.css index 095f7912..5e7f2af5 100644 --- a/src/styles.css +++ b/src/styles.css @@ -171,4 +171,50 @@ hr {width: 90%; border-color: #EBE134;} textarea { border-radius: 16px 16px 16px 16px; border: 3px solid #EBE134; -} \ No newline at end of file +} +.modifyForm { + display: none; +} + +.flex{ + width: 100%; + height:100%; + display: flex; + justify-content: space-between; + align-items: center; +} +.modal{ + display: none; + position: fixed; + overflow: auto; + width: 100%; + height:100%; + background: rgba(0, 0, 0, 0.452); +} + +.contenido-modal{ + position: relative; + background-color: #ffffff; + margin: auto; + width: 90%; + box-shadow: 0 0 6px 0 rgba(0, 0, 0, .4); + animation-name: modal; + animation-duration: 1s; +} +@keyframes modal{ + from{top:-330px; opacity:0;} + to{top:0; opacity:1;} +} +.close{ + font-size: 1.5rem; + font-weight: bold; +} +.modal-header { + width: 95%; + height: 2rem; + padding: 0.5rem; + background: #EBE134; +} +.modal-body{ + padding: 20px 16px; +} From 0c8c55bb16a4376d09f428ac53e85d80e345138a Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 3 May 2020 03:14:25 -0500 Subject: [PATCH 17/23] main --- src/Views/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Views/main.js b/src/Views/main.js index 60bfd5f9..16612244 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -13,8 +13,8 @@ export default () => {

o ingresa con tu cuenta de:

- - + +

¿No tienes cuenta? Registrate

`; From 4c725019074e655f8292d85b2a70f6ba80113bf4 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Sun, 3 May 2020 16:05:53 -0500 Subject: [PATCH 18/23] modal created, EditPost function still not working properly --- src/Views/createPost.js | 35 ------------------------------ src/Views/home.js | 1 - src/Views/index.js | 2 -- src/Views/main.js | 8 +++---- src/Views/passwordRecovery.js | 6 +++--- src/Views/register.js | 8 +++---- src/Views/router.js | 4 ---- src/firebase/showData.js | 39 ++++++++-------------------------- src/images/Google2.PNG | Bin 0 -> 5012 bytes src/images/facebook1.PNG | Bin 0 -> 7034 bytes src/images/facebook4.png | Bin 0 -> 13058 bytes src/images/google4.png | Bin 0 -> 21162 bytes src/index.html | 2 +- src/styles.css | 3 +-- 14 files changed, 22 insertions(+), 86 deletions(-) delete mode 100644 src/Views/createPost.js create mode 100644 src/images/Google2.PNG create mode 100644 src/images/facebook1.PNG create mode 100644 src/images/facebook4.png create mode 100644 src/images/google4.png diff --git a/src/Views/createPost.js b/src/Views/createPost.js deleted file mode 100644 index 7a261399..00000000 --- a/src/Views/createPost.js +++ /dev/null @@ -1,35 +0,0 @@ -import loginFunctions from '../firebase/login.js'; -import { userAccess } from '../firebase/showData.js'; - -export default () => { - const createPostView = document.createElement('div'); - createPostView.setAttribute('class', 'Home'); - const header = document.querySelector('header'); - header.style.display = 'none'; - createPostView.innerHTML = ''; - createPostView.innerHTML = ` -
-
- logo - Home - createPost - Profile - Cerrar Sesion -
-
-
-
-
Hola:

- - -
-
`; - const logOutBtn = createPostView.querySelector('#logOutBtn'); - // const newPostContent = createPostView.querySelector('#newTextPost'); - const userPhoto = createPostView.querySelector('#userPhoto'); - const userName = createPostView.querySelector('#username'); - userAccess(userName, userPhoto); - - logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); - return createPostView; -}; diff --git a/src/Views/home.js b/src/Views/home.js index 6b1f5bb8..6cc91bfc 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -12,7 +12,6 @@ export default () => {
logo Home - createPost Profile Cerrar Sesion
diff --git a/src/Views/index.js b/src/Views/index.js index 36b55a43..ce70158d 100644 --- a/src/Views/index.js +++ b/src/Views/index.js @@ -2,14 +2,12 @@ import Main from './main.js'; import Register from './register.js'; import Recovery from './passwordRecovery.js'; import Home from './home.js'; -import CreatePost from './createPost.js'; const components = { principal: Main, register: Register, recoveryPass: Recovery, home: Home, - createPost: CreatePost, }; export { components }; diff --git a/src/Views/main.js b/src/Views/main.js index 60bfd5f9..77bdb989 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -9,12 +9,12 @@ export default () => { -

¿Has olvidado la contraseña?

+
¿Has olvidado la contraseña?
-

o ingresa con tu cuenta de:

- - +

O

+ +

¿No tienes cuenta? Registrate

`; diff --git a/src/Views/passwordRecovery.js b/src/Views/passwordRecovery.js index 7b8dfed1..a60314d7 100644 --- a/src/Views/passwordRecovery.js +++ b/src/Views/passwordRecovery.js @@ -12,9 +12,9 @@ export default () => {
-

o ingresa con tu cuenta de:

- - +

O

+ +

¿No tienes cuenta? Registrate

`; diff --git a/src/Views/register.js b/src/Views/register.js index a99684f7..4b2c2346 100644 --- a/src/Views/register.js +++ b/src/Views/register.js @@ -10,12 +10,12 @@ export default () => {

-

¿Ya tienes una cuenta? Inicia Sesión

+
¿Ya tienes una cuenta? Inicia Sesión
-

O ingresa con tu cuenta de:

- - +

O

+ +
`; // Nodos const registerEmail = regView.querySelector('#registerEmail'); diff --git a/src/Views/router.js b/src/Views/router.js index 785d5ce4..3ed91590 100644 --- a/src/Views/router.js +++ b/src/Views/router.js @@ -22,10 +22,6 @@ const router = (route) => { container.appendChild(components.home()); break; } - case '#/createPost': { - container.appendChild(components.createPost()); - break; - } default: { break; } diff --git a/src/firebase/showData.js b/src/firebase/showData.js index 3c6a0b5a..3dfd83f9 100644 --- a/src/firebase/showData.js +++ b/src/firebase/showData.js @@ -43,26 +43,30 @@ const deleteOption = (event) => { }; const editPost = (event) => { - // const postContent = event.target + const modalEdit = document.querySelector('#modalEdit'); document.querySelector('#modalEdit').style.display = 'block'; + const closeBtn = document.querySelector('#closeBtn'); + closeBtn.addEventListener('click', () => { + modalEdit.style.display = 'none'; + }); document.querySelector('#editPostText').value = event.target.getAttribute('data-content'); const btnEdit = document.querySelector('#submitEditPost'); - btnEdit.onclick = () => { + btnEdit.addEventListener('click', () => { const postsRef = database.collection('posts').doc(event.target.id); + console.log(event.target.id); const newContent = document.querySelector('#newTextPost').value; return postsRef.update({ postContent: newContent, }) .then(() => { - console.log('Document successfully updated!'); - document.querySelector('#newTextPost').value = ''; + alert('Document successfully updated!'); document.querySelector('#modalEdit').style.display = 'none'; }) .catch((error) => { // The document probably doesn't exist. console.error('Error updating document: ', error); }); - }; + }); }; export const createNewPost = (content) => { @@ -115,32 +119,7 @@ export const postTemplate = (templateContainer) => { const btn = templateContainer.querySelectorAll('.edit'); btn.forEach(bt => bt.addEventListener('click', editPost)); - - // const modifyBtns = templateContainer.querySelectorAll('.btnsM'); - // modifyBtns.forEach(btn => btn.addEventListener('click', (e) => { - // e.preventDefault(); - // modifyOption(doc.data().postContent); - // })); }); }); }; - -// const modifyOption = (e) => { -// btn.onclick = (event) => { -// const postsRef = database.collection('posts').doc(event.target.id); -// const newContent = document.querySelector('#newTextPost').value; -// return postsRef.update({ -// postContent: newContent, -// }) -// .then(() => { -// console.log('Document successfully updated!'); -// btn.innerHTML = 'Guardar'; -// document.querySelector('#newTextPost').value = ''; -// }) -// .catch((error) => { -// // The document probably doesn't exist. -// console.error('Error updating document: ', error); -// }); -// }; -// }; diff --git a/src/images/Google2.PNG b/src/images/Google2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..63478916730ae3e40a98b5d10f9342274d0e7e94 GIT binary patch literal 5012 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 F{SP?Y6QKYA literal 0 HcmV?d00001 diff --git a/src/images/facebook1.PNG b/src/images/facebook1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..84b0957d9d7ef221f8d03dea07c96a00cb50e4c0 GIT binary patch literal 7034 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 literal 0 HcmV?d00001 diff --git a/src/images/google4.png b/src/images/google4.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fd170e44712b24c728139ae8a9286de4a3bfd6 GIT binary patch literal 21162 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
diff --git a/docs/Views/index.js b/docs/Views/index.js index 36b55a43..085e3594 100644 --- a/docs/Views/index.js +++ b/docs/Views/index.js @@ -2,14 +2,14 @@ import Main from './main.js'; import Register from './register.js'; import Recovery from './passwordRecovery.js'; import Home from './home.js'; -import CreatePost from './createPost.js'; +import Profile from './profile.js'; const components = { principal: Main, register: Register, recoveryPass: Recovery, home: Home, - createPost: CreatePost, + profile: Profile, }; export { components }; diff --git a/docs/Views/main.js b/docs/Views/main.js index 60bfd5f9..77bdb989 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -9,12 +9,12 @@ export default () => { -

¿Has olvidado la contraseña?

+
¿Has olvidado la contraseña?
-

o ingresa con tu cuenta de:

- - +

O

+ +

¿No tienes cuenta? Registrate

`; diff --git a/docs/Views/passwordRecovery.js b/docs/Views/passwordRecovery.js index 7b8dfed1..a60314d7 100644 --- a/docs/Views/passwordRecovery.js +++ b/docs/Views/passwordRecovery.js @@ -12,9 +12,9 @@ export default () => {
-

o ingresa con tu cuenta de:

- - +

O

+ +

¿No tienes cuenta? Registrate

`; diff --git a/docs/Views/profile.js b/docs/Views/profile.js new file mode 100644 index 00000000..a87c2e96 --- /dev/null +++ b/docs/Views/profile.js @@ -0,0 +1,48 @@ +import loginFunctions from '../firebase/login.js'; +import { userAccess } from '../firebase/showData.js'; + +export default () => { + const profileView = document.createElement('div'); + profileView.setAttribute('class', 'Home'); + const header = document.querySelector('header'); + header.style.display = 'none'; + profileView.innerHTML = ''; + profileView.innerHTML = ` +
+
+ logo + Home + Profile + Cerrar Sesion +
+
+
+
+ photo +

+
+ +
+

Edita tus datos

+ + + + +
+
+
posts
+
`; + const logOutBtn = profileView.querySelector('#logOutBtn'); + logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); + const userPhoto = profileView.querySelector('#userPhoto'); + const userName = profileView.querySelector('#username'); + + userAccess(userName, userPhoto); + // submitNewPost.addEventListener('click', (e) => { + // e.preventDefault(); + // createNewPost(newPostContent.value); + // newPostContent.value = ''; + // }); + + return profileView; +}; \ No newline at end of file diff --git a/docs/Views/register.js b/docs/Views/register.js index a99684f7..4b2c2346 100644 --- a/docs/Views/register.js +++ b/docs/Views/register.js @@ -10,12 +10,12 @@ export default () => {

-

¿Ya tienes una cuenta? Inicia Sesión

+
¿Ya tienes una cuenta? Inicia Sesión
-

O ingresa con tu cuenta de:

- - +

O

+ +
`; // Nodos const registerEmail = regView.querySelector('#registerEmail'); diff --git a/docs/Views/router.js b/docs/Views/router.js index 785d5ce4..d5159eda 100644 --- a/docs/Views/router.js +++ b/docs/Views/router.js @@ -22,8 +22,8 @@ const router = (route) => { container.appendChild(components.home()); break; } - case '#/createPost': { - container.appendChild(components.createPost()); + case '#/profile': { + container.appendChild(components.profile()); break; } default: { diff --git a/docs/firebase/showData.js b/docs/firebase/showData.js index 8d810098..3dfd83f9 100644 --- a/docs/firebase/showData.js +++ b/docs/firebase/showData.js @@ -2,6 +2,8 @@ /* eslint-disable no-param-reassign */ import { database } from './login.js'; +// const storage = firebase.storage(); + export const userAccess = (username, photo) => { firebase.auth().onAuthStateChanged((user) => { if (user) { @@ -40,6 +42,33 @@ const deleteOption = (event) => { }); }; +const editPost = (event) => { + const modalEdit = document.querySelector('#modalEdit'); + document.querySelector('#modalEdit').style.display = 'block'; + const closeBtn = document.querySelector('#closeBtn'); + closeBtn.addEventListener('click', () => { + modalEdit.style.display = 'none'; + }); + document.querySelector('#editPostText').value = event.target.getAttribute('data-content'); + const btnEdit = document.querySelector('#submitEditPost'); + btnEdit.addEventListener('click', () => { + const postsRef = database.collection('posts').doc(event.target.id); + console.log(event.target.id); + const newContent = document.querySelector('#newTextPost').value; + return postsRef.update({ + postContent: newContent, + }) + .then(() => { + alert('Document successfully updated!'); + document.querySelector('#modalEdit').style.display = 'none'; + }) + .catch((error) => { + // The document probably doesn't exist. + console.error('Error updating document: ', error); + }); + }); +}; + export const createNewPost = (content) => { const currentUserData = firebase.auth().currentUser; database.collection('posts').add({ @@ -55,31 +84,6 @@ export const createNewPost = (content) => { }); }; -// const modifyOption = (content) => { -// const container = document.querySelector('.modify'); -// const newTextarea = document.createElement('textarea'); -// container.appendChild(newTextarea); -// newTextarea.innerHTML = content; -// const btn = document.querySelector('.btnsM'); -// btn.innerHTML = 'Editar'; -// btn.onclick = (event) => { -// const postsRef = database.collection('posts').doc(event.target.id); -// const newContent = document.querySelector('#newTextPost').value; -// return postsRef.update({ -// postContent: newContent, -// }) -// .then(() => { -// console.log('Document successfully updated!'); -// btn.innerHTML = 'Guardar'; -// document.querySelector('#newTextPost').value = ''; -// }) -// .catch((error) => { -// // The document probably doesn't exist. -// console.error('Error updating document: ', error); -// }); -// }; -// }; - export const postTemplate = (templateContainer) => { database.collection('posts').onSnapshot((querySnapshot) => { templateContainer.innerHTML = ''; @@ -89,19 +93,23 @@ export const postTemplate = (templateContainer) => { const timestampFormat = doc.data().date.seconds; const newDateFormat = dateConverter(timestampFormat); const userTemplate = ` +
+ + +
${doc.data().postNameOwner}
- ${doc.data().postContent}
+ ${doc.data().postContent}
${newDateFormat}
- +
`; @@ -109,11 +117,9 @@ export const postTemplate = (templateContainer) => { const DeleteBtns = templateContainer.querySelectorAll('.delete'); DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); - // const modifyBtns = templateContainer.querySelectorAll('.btnsM'); - // modifyBtns.forEach(btn => btn.addEventListener('click', (e) => { - // e.preventDefault(); - // modifyOption(doc.data().postContent); - // })); + const btn = templateContainer.querySelectorAll('.edit'); + btn.forEach(bt => bt.addEventListener('click', editPost)); }); }); }; + diff --git a/docs/images/Google2.PNG b/docs/images/Google2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..63478916730ae3e40a98b5d10f9342274d0e7e94 GIT binary patch literal 5012 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 F{SP?Y6QKYA literal 0 HcmV?d00001 diff --git a/docs/images/facebook1.PNG b/docs/images/facebook1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..84b0957d9d7ef221f8d03dea07c96a00cb50e4c0 GIT binary patch literal 7034 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 literal 0 HcmV?d00001 diff --git a/docs/images/google4.png b/docs/images/google4.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fd170e44712b24c728139ae8a9286de4a3bfd6 GIT binary patch literal 21162 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
+ @@ -31,7 +45,8 @@ projectId: "socialnetwork-91278", storageBucket: "socialnetwork-91278.appspot.com", messagingSenderId: "179888650732", - appId: "1:179888650732:web:c72867485943264fdca8c9" + appId: "1:179888650732:web:c72867485943264fdca8c9", + storageBucket: "gs://socialnetwork-91278.appspot.com", }; // Initialize Firebase firebase.initializeApp(firebaseConfig); diff --git a/docs/styles.css b/docs/styles.css index 095f7912..6962058e 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -17,7 +17,7 @@ html, body { /* header */ header { padding: 0.2rem; - background: #EBE134; + background: rgb(47, 141, 218); width: 100%; display: flex; flex-direction: column; @@ -78,9 +78,9 @@ button { } .registerButton { border: 0; - background: #EBE134; + background: rgb(47, 141, 218); border-radius: 18px 18px 18px 18px; - border: 6px outset #ebe234; + border: 6px outset rgb(47, 141, 218); font-weight: bold; } @@ -121,13 +121,8 @@ button { width: 100%; resize: none; } -#submitNewPost { - width: 25%; - align-self: center; - height: 1.5rem; - margin: 1rem;} -hr {width: 90%; border-color: #EBE134;} +hr {width: 90%; border-color: rgb(47, 141, 218);} .postContainer { margin: 0.5rem 0.3rem; width: 90%; @@ -170,5 +165,81 @@ hr {width: 90%; border-color: #EBE134;} } textarea { border-radius: 16px 16px 16px 16px; - border: 3px solid #EBE134; -} \ No newline at end of file + border: 3px solid rgb(47, 141, 218); +} +.modifyForm { + display: none; +} +/* modal */ +.flex{ + width: 100%; + height:100%; + display: flex; + justify-content: space-between; + align-items: center; +} +.modal{ + display: none; + position: fixed; + overflow: auto; + width: 100%; + height:100%; + background: rgba(0, 0, 0, 0.452); +} +.contenido-modal{ + position: relative; + background-color: #ffffff; + margin: auto; + width: 90%; + box-shadow: 0 0 6px 0 rgba(0, 0, 0, .4); + animation-name: modal; + animation-duration: 1s; +} +@keyframes modal{ + from{top:-330px; opacity:0;} + to{top:0; opacity:1;} +} +.close{ + font-size: 1.5rem; + font-weight: bold; +} +.modal-header { + width: 95%; + height: 2rem; + padding: 0.5rem; + background: #EBE134; +} +.modal-body{ + padding: 20px 16px; +} +/* profile view */ +.nameandphoto { + margin: 5%; + display: flex; + width: 80%; + justify-content: space-around; +} +.userPhoto { + border-radius: 3.5rem; + width: 6rem; + height: 6rem; +} + +.updateInfo { + display: flex; + flex-direction: column; + align-items: center; + width: 85%; + border-radius: 26px 26px 26px 26px; + border: 0.25rem dashed #bdb5bd; + background: rgb(243, 243, 243); + padding: 1rem; +} +.updateBtns { + width: 50%; + margin: 1rem; + background: rgb(47, 141, 218); + border-radius: 1rem; + border: 0.15rem solid rgb(0, 1, 41); + font-weight: bolder; +} diff --git a/src/Views/home.js b/src/Views/home.js index 6cc91bfc..a529e4c6 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -20,7 +20,7 @@ export default () => {
Bienvenida
- +
diff --git a/src/Views/index.js b/src/Views/index.js index ce70158d..085e3594 100644 --- a/src/Views/index.js +++ b/src/Views/index.js @@ -2,12 +2,14 @@ import Main from './main.js'; import Register from './register.js'; import Recovery from './passwordRecovery.js'; import Home from './home.js'; +import Profile from './profile.js'; const components = { principal: Main, register: Register, recoveryPass: Recovery, home: Home, + profile: Profile, }; export { components }; diff --git a/src/Views/profile.js b/src/Views/profile.js new file mode 100644 index 00000000..a87c2e96 --- /dev/null +++ b/src/Views/profile.js @@ -0,0 +1,48 @@ +import loginFunctions from '../firebase/login.js'; +import { userAccess } from '../firebase/showData.js'; + +export default () => { + const profileView = document.createElement('div'); + profileView.setAttribute('class', 'Home'); + const header = document.querySelector('header'); + header.style.display = 'none'; + profileView.innerHTML = ''; + profileView.innerHTML = ` +
+
+ logo + Home + Profile + Cerrar Sesion +
+
+
+
+ photo +

+
+ +
+

Edita tus datos

+ + + + +
+
+
posts
+
`; + const logOutBtn = profileView.querySelector('#logOutBtn'); + logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); + const userPhoto = profileView.querySelector('#userPhoto'); + const userName = profileView.querySelector('#username'); + + userAccess(userName, userPhoto); + // submitNewPost.addEventListener('click', (e) => { + // e.preventDefault(); + // createNewPost(newPostContent.value); + // newPostContent.value = ''; + // }); + + return profileView; +}; \ No newline at end of file diff --git a/src/Views/router.js b/src/Views/router.js index 3ed91590..d5159eda 100644 --- a/src/Views/router.js +++ b/src/Views/router.js @@ -22,6 +22,10 @@ const router = (route) => { container.appendChild(components.home()); break; } + case '#/profile': { + container.appendChild(components.profile()); + break; + } default: { break; } diff --git a/src/styles.css b/src/styles.css index 01fdd33a..6962058e 100644 --- a/src/styles.css +++ b/src/styles.css @@ -121,13 +121,8 @@ button { width: 100%; resize: none; } -#submitNewPost { - width: 25%; - align-self: center; - height: 1.5rem; - margin: 1rem;} -hr {width: 90%; border-color: #EBE134;} +hr {width: 90%; border-color: rgb(47, 141, 218);} .postContainer { margin: 0.5rem 0.3rem; width: 90%; @@ -170,7 +165,7 @@ hr {width: 90%; border-color: #EBE134;} } textarea { border-radius: 16px 16px 16px 16px; - border: 3px solid #EBE134; + border: 3px solid rgb(47, 141, 218); } .modifyForm { display: none; @@ -217,3 +212,34 @@ textarea { .modal-body{ padding: 20px 16px; } +/* profile view */ +.nameandphoto { + margin: 5%; + display: flex; + width: 80%; + justify-content: space-around; +} +.userPhoto { + border-radius: 3.5rem; + width: 6rem; + height: 6rem; +} + +.updateInfo { + display: flex; + flex-direction: column; + align-items: center; + width: 85%; + border-radius: 26px 26px 26px 26px; + border: 0.25rem dashed #bdb5bd; + background: rgb(243, 243, 243); + padding: 1rem; +} +.updateBtns { + width: 50%; + margin: 1rem; + background: rgb(47, 141, 218); + border-radius: 1rem; + border: 0.15rem solid rgb(0, 1, 41); + font-weight: bolder; +} From 1e4fd22e4c2b827aad197b845078a25fb3821c9f Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 4 May 2020 01:25:02 -0500 Subject: [PATCH 20/23] style --- docs/Views/main.js | 6 +++--- docs/Views/register.js | 4 ++-- docs/images/Google2.PNG | Bin 0 -> 5012 bytes docs/images/facebook1.PNG | Bin 0 -> 7034 bytes docs/images/facebook4.png | Bin 0 -> 13058 bytes docs/images/google4.png | Bin 0 -> 21162 bytes docs/styles.css | 7 ++++--- src/Views/main.js | 4 ++-- src/styles.css | 1 + 9 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 docs/images/Google2.PNG create mode 100644 docs/images/facebook1.PNG create mode 100644 docs/images/facebook4.png create mode 100644 docs/images/google4.png diff --git a/docs/Views/main.js b/docs/Views/main.js index 60bfd5f9..dc27820c 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -4,7 +4,7 @@ export default () => { const loginView = document.createElement('div'); loginView.setAttribute('class', 'viewsStyle'); loginView.innerHTML = ` -

Inicia Sesión con tu email

+

Inicia Sesión con tu email

@@ -13,8 +13,8 @@ export default () => {

o ingresa con tu cuenta de:

- - +
+

¿No tienes cuenta? Registrate

`; diff --git a/docs/Views/register.js b/docs/Views/register.js index a99684f7..97b3183e 100644 --- a/docs/Views/register.js +++ b/docs/Views/register.js @@ -14,8 +14,8 @@ export default () => {

O ingresa con tu cuenta de:

- - + +
`; // Nodos const registerEmail = regView.querySelector('#registerEmail'); diff --git a/docs/images/Google2.PNG b/docs/images/Google2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..63478916730ae3e40a98b5d10f9342274d0e7e94 GIT binary patch literal 5012 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 F{SP?Y6QKYA literal 0 HcmV?d00001 diff --git a/docs/images/facebook1.PNG b/docs/images/facebook1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..84b0957d9d7ef221f8d03dea07c96a00cb50e4c0 GIT binary patch literal 7034 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 literal 0 HcmV?d00001 diff --git a/docs/images/google4.png b/docs/images/google4.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fd170e44712b24c728139ae8a9286de4a3bfd6 GIT binary patch literal 21162 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 { const loginView = document.createElement('div'); loginView.setAttribute('class', 'viewsStyle'); loginView.innerHTML = ` -

Inicia Sesión con tu email

+

Inicia Sesión con tu email

@@ -13,7 +13,7 @@ export default () => {

o ingresa con tu cuenta de:

- +

¿No tienes cuenta? Registrate

`; diff --git a/src/styles.css b/src/styles.css index c195dc15..b7697c79 100644 --- a/src/styles.css +++ b/src/styles.css @@ -14,6 +14,7 @@ html, body { flex-direction: column; align-items: center; } + /* header */ header { padding: 0.2rem; From 55310c6ffb8e53c34cd4823623e90da28ae1dd2b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 4 May 2020 02:01:19 -0500 Subject: [PATCH 21/23] styless --- docs/Views/main.js | 2 +- src/Views/main.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Views/main.js b/docs/Views/main.js index 4659f9a3..8014a7fe 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -13,7 +13,7 @@ export default () => {

O

- +

¿No tienes cuenta? Registrate

`; diff --git a/src/Views/main.js b/src/Views/main.js index 4659f9a3..8014a7fe 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -13,7 +13,7 @@ export default () => {

O

- +

¿No tienes cuenta? Registrate

`; From 698168f420d87c25140d84ecc053f3bf6e382d53 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 4 May 2020 12:24:45 -0500 Subject: [PATCH 22/23] style3 --- docs/Views/main.js | 4 ++-- src/Views/main.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Views/main.js b/docs/Views/main.js index 8014a7fe..242de02e 100644 --- a/docs/Views/main.js +++ b/docs/Views/main.js @@ -3,7 +3,7 @@ import loginFunctions from '../firebase/login.js'; export default () => { const loginView = document.createElement('div'); loginView.setAttribute('class', 'viewsStyle'); - loginView.innerHTML = ` + loginView.innerHTML = `

Inicia Sesión con tu email

@@ -12,7 +12,7 @@ export default () => {
¿Has olvidado la contraseña?
-

O

+

¿No tienes cuenta? Registrate

diff --git a/src/Views/main.js b/src/Views/main.js index 8014a7fe..242de02e 100644 --- a/src/Views/main.js +++ b/src/Views/main.js @@ -3,7 +3,7 @@ import loginFunctions from '../firebase/login.js'; export default () => { const loginView = document.createElement('div'); loginView.setAttribute('class', 'viewsStyle'); - loginView.innerHTML = ` + loginView.innerHTML = `

Inicia Sesión con tu email

@@ -12,7 +12,7 @@ export default () => {
¿Has olvidado la contraseña?
-

O

+

¿No tienes cuenta? Registrate

From 32dc18ee6d77b31098e6b732b05be25dd471b908 Mon Sep 17 00:00:00 2001 From: MarianaOlimpia Date: Mon, 4 May 2020 22:41:29 -0500 Subject: [PATCH 23/23] posts are displayed on the profile screen. localstorage is used to display user data. function to edit posts does not work yet --- docs/Views/home.js | 9 ++-- docs/Views/profile.js | 35 +++++++++------- docs/firebase/login.js | 1 - docs/firebase/showData.js | 86 +++++++++++++++++++++++++-------------- docs/styles.css | 6 +-- src/Views/home.js | 9 ++-- src/Views/profile.js | 35 +++++++++------- src/firebase/login.js | 1 - src/firebase/showData.js | 86 +++++++++++++++++++++++++-------------- src/styles.css | 6 +-- 10 files changed, 162 insertions(+), 112 deletions(-) diff --git a/docs/Views/home.js b/docs/Views/home.js index a529e4c6..6ff13b55 100644 --- a/docs/Views/home.js +++ b/docs/Views/home.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess, createNewPost, postTemplate } from '../firebase/showData.js'; +import { createNewPost, postTemplate } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -12,13 +12,13 @@ export default () => {
logo Home - Profile + Profile Cerrar Sesion
-
Bienvenida
+
Bienvenida ${localStorage.getItem('displayName')}
@@ -27,14 +27,11 @@ export default () => {
`; const logOutBtn = homeView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); - const userPhoto = homeView.querySelector('#userPhoto'); - const userName = homeView.querySelector('#username'); const postContainer = homeView.querySelector('.sesionPrincipal1'); const newPostContent = homeView.querySelector('#newTextPost'); const submitNewPost = homeView.querySelector('#submitNewPost'); - userAccess(userName, userPhoto); submitNewPost.addEventListener('click', (e) => { e.preventDefault(); createNewPost(newPostContent.value); diff --git a/docs/Views/profile.js b/docs/Views/profile.js index a87c2e96..b9bfc27a 100644 --- a/docs/Views/profile.js +++ b/docs/Views/profile.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess } from '../firebase/showData.js'; +import { currentUserPosts } from '../firebase/showData.js'; export default () => { const profileView = document.createElement('div'); @@ -12,16 +12,16 @@ export default () => {
logo Home - Profile + Profile Cerrar Sesion
- photo -

+ photo +

${localStorage.getItem('displayName')}

- +

Edita tus datos

@@ -30,19 +30,24 @@ export default () => {

-
posts
+
+
`; const logOutBtn = profileView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); - const userPhoto = profileView.querySelector('#userPhoto'); - const userName = profileView.querySelector('#username'); + const postContainer = profileView.querySelector('.sesionPrincipal1'); - userAccess(userName, userPhoto); - // submitNewPost.addEventListener('click', (e) => { - // e.preventDefault(); - // createNewPost(newPostContent.value); - // newPostContent.value = ''; - // }); + // funcion provisional + const editBtn = profileView.querySelector('#editProfile'); + editBtn.addEventListener('click', () => { + const editFields = profileView.querySelector('.updateInfo'); + editFields.style.display = 'flex'; + const updateInfo = profileView.querySelector('#sendUpdate'); + updateInfo.addEventListener('click', () => { + editFields.style.display = 'none'; + }); + }); + currentUserPosts(postContainer); return profileView; -}; \ No newline at end of file +}; diff --git a/docs/firebase/login.js b/docs/firebase/login.js index c4026b6b..3c59bb96 100644 --- a/docs/firebase/login.js +++ b/docs/firebase/login.js @@ -9,7 +9,6 @@ export default { .then(() => { // const user = result.user; const currentUser = firebase.auth().currentUser; - console.log(currentUser); database.collection('users').doc(currentUser.uid).set({ id: currentUser.uid, name: currentUser.displayName, diff --git a/docs/firebase/showData.js b/docs/firebase/showData.js index 3dfd83f9..81ac06bf 100644 --- a/docs/firebase/showData.js +++ b/docs/firebase/showData.js @@ -4,23 +4,19 @@ import { database } from './login.js'; // const storage = firebase.storage(); -export const userAccess = (username, photo) => { - firebase.auth().onAuthStateChanged((user) => { - if (user) { - const userId = firebase.auth().currentUser.uid; - database.collection('users').where('id', '==', userId) - .get() - .then((querySnapshot) => { - querySnapshot.forEach((doc) => { - username.textContent = doc.data().name; - photo.src = doc.data().photo; - }); - }); - } else { - console.log('No user is signed in'); - } - }); -}; +firebase.auth().onAuthStateChanged((user) => { + if (user) { + console.log(user); + localStorage.setItem('uid', user.uid); + localStorage.setItem('displayName', user.displayName); + localStorage.setItem('photoURL', user.photoURL); + } else { + console.log('No user is signed in'); + localStorage.removeItem('uid'); + localStorage.removeItem('displayName'); + localStorage.removeItem('photoURL'); + } +}); const dateConverter = (timeStampFormat) => { const date = new Date(timeStampFormat * 1000); @@ -55,6 +51,7 @@ const editPost = (event) => { const postsRef = database.collection('posts').doc(event.target.id); console.log(event.target.id); const newContent = document.querySelector('#newTextPost').value; + console.log(newContent); return postsRef.update({ postContent: newContent, }) @@ -87,16 +84,10 @@ export const createNewPost = (content) => { export const postTemplate = (templateContainer) => { database.collection('posts').onSnapshot((querySnapshot) => { templateContainer.innerHTML = ''; - const docRef = database.collection('posts'); - docRef.orderBy('date', 'desc'); querySnapshot.forEach((doc) => { const timestampFormat = doc.data().date.seconds; const newDateFormat = dateConverter(timestampFormat); const userTemplate = ` -
- - -
@@ -109,17 +100,52 @@ export const postTemplate = (templateContainer) => {
- -
`; templateContainer.innerHTML += userTemplate; - const DeleteBtns = templateContainer.querySelectorAll('.delete'); - DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); - - const btn = templateContainer.querySelectorAll('.edit'); - btn.forEach(bt => bt.addEventListener('click', editPost)); }); }); }; +// obtener post propios +export const currentUserPosts = (postContainer) => { + postContainer.innerHTML = ''; + // const prueba = localStorage.getItem('uid'); + // console.log(prueba); + const currentUserRef = database.collection('posts'); + const query = currentUserRef.where('postOwner', '==', localStorage.getItem('uid')); + query.get() + .then((querySnapshot) => { + querySnapshot.forEach((doc) => { + // doc.data() is never undefined for query doc snapshots + const timestampFormat = doc.data().date.seconds; + const newDateFormat = dateConverter(timestampFormat); + const userTemplate = ` +
+
+ +
+ ${doc.data().postNameOwner}
+ ${doc.data().postContent}
+ ${newDateFormat} +
+
+
+ + + + +
+
`; + postContainer.innerHTML += userTemplate; + const DeleteBtns = postContainer.querySelectorAll('.delete'); + DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); + + const btn = postContainer.querySelectorAll('.edit'); + btn.forEach(bt => bt.addEventListener('click', editPost)); + }); + }) + .catch((error) => { + console.log('Error getting documents: ', error); + }); +}; diff --git a/docs/styles.css b/docs/styles.css index 2b975fd9..7a50eba2 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -168,9 +168,7 @@ textarea { border-radius: 16px 16px 16px 16px; border: 3px solid rgb(47, 141, 218); } -.modifyForm { - display: none; -} + /* modal */ .flex{ width: 100%; @@ -227,7 +225,7 @@ textarea { } .updateInfo { - display: flex; + display: none; flex-direction: column; align-items: center; width: 85%; diff --git a/src/Views/home.js b/src/Views/home.js index a529e4c6..6ff13b55 100644 --- a/src/Views/home.js +++ b/src/Views/home.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess, createNewPost, postTemplate } from '../firebase/showData.js'; +import { createNewPost, postTemplate } from '../firebase/showData.js'; export default () => { const homeView = document.createElement('div'); @@ -12,13 +12,13 @@ export default () => {
logo Home - Profile + Profile Cerrar Sesion
-
Bienvenida
+
Bienvenida ${localStorage.getItem('displayName')}
@@ -27,14 +27,11 @@ export default () => {
`; const logOutBtn = homeView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); - const userPhoto = homeView.querySelector('#userPhoto'); - const userName = homeView.querySelector('#username'); const postContainer = homeView.querySelector('.sesionPrincipal1'); const newPostContent = homeView.querySelector('#newTextPost'); const submitNewPost = homeView.querySelector('#submitNewPost'); - userAccess(userName, userPhoto); submitNewPost.addEventListener('click', (e) => { e.preventDefault(); createNewPost(newPostContent.value); diff --git a/src/Views/profile.js b/src/Views/profile.js index a87c2e96..b9bfc27a 100644 --- a/src/Views/profile.js +++ b/src/Views/profile.js @@ -1,5 +1,5 @@ import loginFunctions from '../firebase/login.js'; -import { userAccess } from '../firebase/showData.js'; +import { currentUserPosts } from '../firebase/showData.js'; export default () => { const profileView = document.createElement('div'); @@ -12,16 +12,16 @@ export default () => {
logo Home - Profile + Profile Cerrar Sesion
- photo -

+ photo +

${localStorage.getItem('displayName')}

- +

Edita tus datos

@@ -30,19 +30,24 @@ export default () => {

-
posts
+
+
`; const logOutBtn = profileView.querySelector('#logOutBtn'); logOutBtn.addEventListener('click', loginFunctions.sesionLogOut); - const userPhoto = profileView.querySelector('#userPhoto'); - const userName = profileView.querySelector('#username'); + const postContainer = profileView.querySelector('.sesionPrincipal1'); - userAccess(userName, userPhoto); - // submitNewPost.addEventListener('click', (e) => { - // e.preventDefault(); - // createNewPost(newPostContent.value); - // newPostContent.value = ''; - // }); + // funcion provisional + const editBtn = profileView.querySelector('#editProfile'); + editBtn.addEventListener('click', () => { + const editFields = profileView.querySelector('.updateInfo'); + editFields.style.display = 'flex'; + const updateInfo = profileView.querySelector('#sendUpdate'); + updateInfo.addEventListener('click', () => { + editFields.style.display = 'none'; + }); + }); + currentUserPosts(postContainer); return profileView; -}; \ No newline at end of file +}; diff --git a/src/firebase/login.js b/src/firebase/login.js index c4026b6b..3c59bb96 100644 --- a/src/firebase/login.js +++ b/src/firebase/login.js @@ -9,7 +9,6 @@ export default { .then(() => { // const user = result.user; const currentUser = firebase.auth().currentUser; - console.log(currentUser); database.collection('users').doc(currentUser.uid).set({ id: currentUser.uid, name: currentUser.displayName, diff --git a/src/firebase/showData.js b/src/firebase/showData.js index 3dfd83f9..81ac06bf 100644 --- a/src/firebase/showData.js +++ b/src/firebase/showData.js @@ -4,23 +4,19 @@ import { database } from './login.js'; // const storage = firebase.storage(); -export const userAccess = (username, photo) => { - firebase.auth().onAuthStateChanged((user) => { - if (user) { - const userId = firebase.auth().currentUser.uid; - database.collection('users').where('id', '==', userId) - .get() - .then((querySnapshot) => { - querySnapshot.forEach((doc) => { - username.textContent = doc.data().name; - photo.src = doc.data().photo; - }); - }); - } else { - console.log('No user is signed in'); - } - }); -}; +firebase.auth().onAuthStateChanged((user) => { + if (user) { + console.log(user); + localStorage.setItem('uid', user.uid); + localStorage.setItem('displayName', user.displayName); + localStorage.setItem('photoURL', user.photoURL); + } else { + console.log('No user is signed in'); + localStorage.removeItem('uid'); + localStorage.removeItem('displayName'); + localStorage.removeItem('photoURL'); + } +}); const dateConverter = (timeStampFormat) => { const date = new Date(timeStampFormat * 1000); @@ -55,6 +51,7 @@ const editPost = (event) => { const postsRef = database.collection('posts').doc(event.target.id); console.log(event.target.id); const newContent = document.querySelector('#newTextPost').value; + console.log(newContent); return postsRef.update({ postContent: newContent, }) @@ -87,16 +84,10 @@ export const createNewPost = (content) => { export const postTemplate = (templateContainer) => { database.collection('posts').onSnapshot((querySnapshot) => { templateContainer.innerHTML = ''; - const docRef = database.collection('posts'); - docRef.orderBy('date', 'desc'); querySnapshot.forEach((doc) => { const timestampFormat = doc.data().date.seconds; const newDateFormat = dateConverter(timestampFormat); const userTemplate = ` -
- - -
@@ -109,17 +100,52 @@ export const postTemplate = (templateContainer) => {
- -
`; templateContainer.innerHTML += userTemplate; - const DeleteBtns = templateContainer.querySelectorAll('.delete'); - DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); - - const btn = templateContainer.querySelectorAll('.edit'); - btn.forEach(bt => bt.addEventListener('click', editPost)); }); }); }; +// obtener post propios +export const currentUserPosts = (postContainer) => { + postContainer.innerHTML = ''; + // const prueba = localStorage.getItem('uid'); + // console.log(prueba); + const currentUserRef = database.collection('posts'); + const query = currentUserRef.where('postOwner', '==', localStorage.getItem('uid')); + query.get() + .then((querySnapshot) => { + querySnapshot.forEach((doc) => { + // doc.data() is never undefined for query doc snapshots + const timestampFormat = doc.data().date.seconds; + const newDateFormat = dateConverter(timestampFormat); + const userTemplate = ` +
+
+ +
+ ${doc.data().postNameOwner}
+ ${doc.data().postContent}
+ ${newDateFormat} +
+
+
+ + + + +
+
`; + postContainer.innerHTML += userTemplate; + const DeleteBtns = postContainer.querySelectorAll('.delete'); + DeleteBtns.forEach(btn => btn.addEventListener('click', deleteOption)); + + const btn = postContainer.querySelectorAll('.edit'); + btn.forEach(bt => bt.addEventListener('click', editPost)); + }); + }) + .catch((error) => { + console.log('Error getting documents: ', error); + }); +}; diff --git a/src/styles.css b/src/styles.css index 2b975fd9..7a50eba2 100644 --- a/src/styles.css +++ b/src/styles.css @@ -168,9 +168,7 @@ textarea { border-radius: 16px 16px 16px 16px; border: 3px solid rgb(47, 141, 218); } -.modifyForm { - display: none; -} + /* modal */ .flex{ width: 100%; @@ -227,7 +225,7 @@ textarea { } .updateInfo { - display: flex; + display: none; flex-direction: column; align-items: center; width: 85%;