+
+
+
+
+
+
+
+
+
+
+
+
+ `
+ navBar.style.display = 'block'
+ root.innerHTML = posts
+
+
+ //Nodos Imagen
+ const fileInput = document.querySelector("#file")
+ const sectionPosts = document.querySelector("#putPosts")
+ //Nodos publicación
+
+ const newPost = document.querySelector("#newPost")
+ newPost.addEventListener('click', readText)
+
+ readFile(fileInput, sectionPosts)
+
+ showPosts(sectionPosts)
+
+}
+
+function readFile(fileInput, sectionPosts) {
+ let url
+
+ //const fileInput = document.querySelector("#file")
+ fileInput.onchange = (e) => {
+ console.log(e);
+ let file = e.target.files[0]
+ console.log(file);
+ firebase.storage().ref("postsList").child(file.name).put(file)
+ .then(snap => {
+ console.log(snap);
+ return snap.ref.getDownloadURL()
+ })
+ .then(link => {
+ url = link
+ console.log(url);
+ const img = document.createElement('img')
+ img.src = url
+ sectionPosts.appendChild(img)
+ textImage()
+ })
+ .catch(err => {
+ alert("Error:", err);
+ })
+ }
+ function textImage() {
+ const text = document.querySelector('#body').value
+ const title = document.querySelector("#title").value
+
+ firebase.auth().onAuthStateChanged(function (user) {
+ //console.log(user);
+ const docRef = db.collection('datausers/').doc(user.uid);
+ docRef.get().then(function (snapshot) {
+ let userData = snapshot.data();
+ console.log(userData);
+ let post = {
+ title: title,
+ text: text,
+ user: userData.name,
+ photo: userData.photo,//photoURL
+ date: new Date(),
+ img: url,
+ uid: userData.uid
+ }
+ addNewPost(post)
+ .then(res => {
+ console.log(res)
+ })
+ .catch(err => {
+ console.log("No hay nuevo post", err)
+ })
+ addPostBD(post)
+
+ })
+
+ });
+
+ }
+
+}
+
+function readText() {
+ const text = document.querySelector('#body').value
+ const title = document.querySelector("#title").value
+ /* let user = firebase.auth().currentUser;
+ console.log(user);
+ */
+ firebase.auth().onAuthStateChanged(function (user) {
+ //console.log(user);
+ const docRef = db.collection('datausers/').doc(user.uid);
+ docRef.get().then(function (snapshot) {
+ let userData = snapshot.data();
+ console.log(userData);
+ let post = {
+ title: title,
+ text: text,
+ user: userData.name,
+ photo: userData.photo,//photoURL
+ date: new Date(),
+ uid: userData.uid
+ }
+ addNewPost(post)
+ .then(res => {
+ console.log(res)
+ })
+ .catch(err => {
+ console.log("No hay nuevo post", err)
+ })
+ addPostBD(post)
+
+ })
+
+ });
+
+}
+
+
+//Se agrega el post a la collección postsList en la BD
+function addNewPost(post) {
+ return firebase.firestore().collection("postsList").add(post)
+}
+
+
+/* function dataBD() {
+ firebase.firestore().collection("postsList").get().then(function (docs) {
+ docs.forEach(function (doc) {
+ console.log(doc.id);
+ });
+ });
+}
+dataBD()
+ */
+
+//Se agregan los post al perfil del usuario
+function addPostBD(post) {
+ let user = firebase.auth().currentUser;
+ console.log(user);
+ const docRef = db.collection('datausers/').doc(user.uid);
+ docRef.update({
+ post: firebase.firestore.FieldValue.arrayUnion(post)
+ })
+}
+
+//Muestra los posts en tiempo real
+function showPosts(sectionPosts) {
+
+ firebase.firestore().collection("postsList").onSnapshot(snap => {
+ clean(sectionPosts)
+ snap.forEach(doc => {
+ console.log(doc.data());
+
+ if (doc.data().img === undefined && doc.data().photo != undefined) {
+ let renderPosts = `
+
+
.photo})
${doc.data().user}
+
${doc.data().title}
+
${doc.data().text}
+
+
+
${doc.data().likes}
+
+
+
`
+ const newNode = document.createElement("div")
+ newNode.innerHTML = renderPosts
+ sectionPosts.appendChild(newNode)
+
+ } if (doc.data().img != undefined && doc.data().photo != undefined) {
+ let renderPosts = `
+
+
.photo})
${doc.data().user}
+
Titulo:${doc.data().title}
+
${doc.data().text}
+
.img})
+
+
+
${doc.data().likes}
+
+
+
+
`
+ const newNode = document.createElement("div")
+ newNode.innerHTML = renderPosts
+ sectionPosts.appendChild(newNode)
+
+ } /* else {
+ let renderPosts = `
+
Autor: ${doc.data().user}
+
Titulo:${doc.data().title}
+
${doc.data().text}
+
.img})
+
+
+
${doc.data().likes}
+
+
+
+
`
+ const newNode = document.createElement("div")
+ newNode.innerHTML = renderPosts
+ sectionPosts.appendChild(newNode)
+ } */
+
+ //LIKES
+ let btnLike = document.querySelectorAll('.btnLike')
+ //console.log(btnLike);
+ let btnClick = btnLike[btnLike.length - 1]
+ console.log(btnClick);
+
+ btnClick.addEventListener('click', counter)
+ //let resultLikes = document.querySelectorAll('.resultCounter')
+ //let listResultLikes = resultLikes[resultLikes.length - 1]
+ let countLikes = 0
+ function counter() {
+ let user = firebase.auth().currentUser;
+
+ console.log(user.displayName);
+ let whoLike = user.displayName
+
+ let idPost = btnClick.getAttribute('dataid')
+ console.log(idPost);
+ countLikes = countLikes + 1
+ console.log(countLikes);
+
+ const docPost = firebase.firestore().collection("postsList").doc(idPost)
+ docPost.get().then(docPost => {
+ let whosLikePost = docPost.data().whoLike
+ console.log(whosLikePost);
+ /* console.log(whosLikePost.includes(whoLike));
+ let checkUser = whosLikePost.includes(whoLike) */
+ if (whosLikePost === undefined) {
+ saveLikes(countLikes, idPost, whoLike)
+ btnClick.classList.add('colorLike')
+
+ } if (whosLikePost != undefined) {
+ console.log(whosLikePost.includes(whoLike));
+ let checkUser = whosLikePost.includes(whoLike)
+ if (checkUser === false) {
+ saveLikes(countLikes, idPost, whoLike)
+ btnClick.classList.add('colorLike')
+ }
+
+ }
+ });
+ }
+
+ //COMENTS
+ /* let btnComentPost = document.querySelectorAll('.comentPost')
+ let btnComent = btnComentPost[btnComentPost.length - 1]
+ console.log(btnComent); */
+ //EDITAR
+ /* let btnComentPost = document.querySelectorAll('.comentPost')
+ let btnComent = btnComentPost[btnComentPost.length - 1]
+ console.log(btnComent);
+ */
+ })
+ })
+
+
+}
+
+function saveLikes(countLikes, idPost, whoLike) {
+ const docPost = firebase.firestore().collection("postsList").doc(idPost)
+ docPost.update({
+ likes: firebase.firestore.FieldValue.increment(countLikes),
+ whoLike: [whoLike]
+ })
+}
+
+
+//Antes de poner el nuevo post limpia la sectionPost para evitar se dupliquen
+function clean(sectionPosts) {
+ sectionPosts.innerHTML = '';
+}
+
+
diff --git a/src/views/principal.js b/src/views/principal.js
new file mode 100644
index 00000000..b4111eab
--- /dev/null
+++ b/src/views/principal.js
@@ -0,0 +1,33 @@
+import { navBar } from "../main.js";
+
+export default () => {
+
+ const principal = `
+
+
+
+
+
Microcuentos
+
ilustrados
+
*Escribe un microcuento*
*Ilustra un microcuento*
++Escribe e ilustra++
+
+
+
+
+
+
+
+ `
+
+
+ navBar.style.display = 'none'
+
+ return principal
+}
\ No newline at end of file
diff --git a/src/views/profile.js b/src/views/profile.js
new file mode 100644
index 00000000..a09c539a
--- /dev/null
+++ b/src/views/profile.js
@@ -0,0 +1,320 @@
+import { root } from "../main.js";
+import { navBar } from "../main.js";
+//import { userObserver } from '/index.js'
+
+const db = firebase.firestore();
+
+export function userObserverProfile() {
+ firebase.auth().onAuthStateChanged(function (user) {
+ // if (user) {
+ const docRef = db.collection('datausers/').doc(user.uid);
+ docRef.get().then(function (snapshot) {
+ let myData = snapshot.data();
+ console.log(myData);
+ root.innerHTML = renderProfileView(myData)
+ edit()
+
+ })
+ /* } else {
+ // No user is signed in.
+ console.log('No user');
+ } */
+
+ });
+
+}
+
+/* export function renderProfileView(myData) {
+ //console.log(myData);
+ if (myData) {
+ const profile =
+ `
+
+
Mi perfil
+
+
+
+
+
+
+ ${myData.name}
+
+
+ ${myData.email}
+
+
${myData.interests}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Se han guardado tus cambios
+
+
+
+`
+ navBar.style.display = 'block'
+ return profile
+ }
+
+}
+ */
+export function renderProfileView(myData) {
+ //console.log(myData);
+ if (myData) {
+ const profile =
+ `
+
+
Mi perfil
+
+
+
+
+
+
+
${myData.name}
+
${myData.email}
+
+
${myData.interests}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Se han guardado tus cambios
+
+
+
+`
+ navBar.style.display = 'block'
+ return profile
+ }
+
+}
+
+/* export function renderProfileView(myData) {
+ //console.log(myData);
+ if (myData) {
+ const profile =
+ `
+
+
Mi perfil
+
+
+
+
+
+
+ ${myData.name}
+
+
+ ${myData.email}
+
+
${myData.interests}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Se han guardado tus cambios
+
+
+
+`
+ navBar.style.display = 'block'
+ return profile
+ }
+
+} */
+
+
+function edit() {
+ //Listeners modal
+ const btnCloseChange = document.querySelector('#btnCloseChange');
+ btnCloseChange.addEventListener('click', closeChange);
+ const saveChange = document.querySelector('#saveChange');
+ function closeChange() {
+ saveChange.classList.remove('is-active');
+ }
+
+ //Listeners Editar Perfil
+ let btnEditProfile = document.querySelector('#editProfile')
+ let btnSaveProfile = document.querySelector('#saveProfile')
+ btnEditProfile.addEventListener('click', editProfile)
+ btnSaveProfile.addEventListener('click', saveProfile)
+ let textareaInterest = document.querySelector('#interestsProfile')
+ //console.log(userObserver)
+
+
+ function editProfile() {
+ let file = document.querySelector('#file')
+ let nameProfile = document.querySelector('#nameProfile').contentEditable = 'true'
+ let emailProfile = document.querySelector('#emailProfile').contentEditable = 'true'
+ let prevImage = document.querySelector('#changeImage')
+ let photoProfile = document.querySelector('#photoProfile')
+ readFile(file, photoProfile, prevImage)
+
+
+ //console.log(text.innerHTML)
+ btnSaveProfile.classList.add('active');
+ textareaInterest.classList.add('active');
+ file.classList.add('active')
+ }
+
+ function readFile(file, photoProfile, prevImage) {
+
+
+ //const fileInput = document.querySelector("#file")
+ file.onchange = (e) => {
+ console.log(e);
+ let file = e.target.files[0]
+ console.log(file);
+ firebase.storage().ref("photoUsers").child(file.name).put(file)
+ .then(snap => {
+ console.log(snap);
+ return snap.ref.getDownloadURL()
+
+ })
+ .then(link => {
+ prevImage.remove()
+ let url = link
+ console.log(url);
+ const img = document.createElement('img')
+ img.id = 'newImage'
+ img.src = url
+ photoProfile.appendChild(img)
+ })
+
+
+ .catch(err => {
+ alert("Error:", err);
+ })
+
+ }
+ }
+
+
+ function saveProfile() {
+
+ let divInterest = document.querySelector('#interest')
+ let nameProfile = document.querySelector('#nameProfile')
+ let emailProfile = document.querySelector('#emailProfile')
+
+ //let textareaInterest = document.querySelector('#interestsProfile')
+ let interestsProfile = textareaInterest.value
+ divInterest.innerHTML = interestsProfile
+
+ //console.log(nameProfile.innerHTML)
+ //console.log(emailProfile.innerHTML)
+ let newNameProfile = nameProfile.innerHTML
+ let newEmailProfile = emailProfile.innerHTML
+
+ btnSaveProfile.classList.remove('active');
+ textareaInterest.classList.remove('active');
+ file.classList.remove('active');
+ if (btnSaveProfile.classList != 'active') {
+ nameProfile.contentEditable = 'false'
+ emailProfile.contentEditable = 'false'
+ }
+
+ //profileUpdate(newNameProfile, newEmailProfile)
+ saveProfileBD(newNameProfile, newEmailProfile, interestsProfile)
+
+ }
+
+ function saveProfileBD(newNameProfile, newEmailProfile, interestsProfile) {
+ let user = firebase.auth().currentUser;
+ let imagProfile = document.querySelector('#newImage')
+ let urlImage
+ if (imagProfile) {
+ urlImage = imagProfile.getAttribute('src')
+ console.log(urlImage);
+ const docRef = db.collection('datausers/').doc(user.uid);//la / y el + user.uid hace que no se duplique el usuario
+ docRef.update({
+ name: newNameProfile,
+ email: newEmailProfile,
+ interests: interestsProfile,
+ photo: urlImage,
+ //password: newPassword,
+ uid: user.uid
+ })
+ .then(function () {
+ saveChange.classList.add('is-active');
+ console.log(saveChange);
+ })
+ .catch(function (error) {
+ console.log('Hubo en error:', error);
+ })
+ } else {
+ let thisPhoto = document.querySelector('#thisPhoto')
+ urlImage = thisPhoto.getAttribute('src')
+ console.log(urlImage);
+ const docRef = db.collection('datausers/').doc(user.uid);//la / y el + user.uid hace que no se duplique el usuario
+ docRef.update({
+ name: newNameProfile,
+ email: newEmailProfile,
+ interests: interestsProfile,
+ photo: urlImage,
+ //password: newPassword,
+ uid: user.uid
+ })
+ .then(function () {
+ saveChange.classList.add('is-active');
+ console.log('Se actualizaron datos de perfil');
+ })
+ .catch(function (error) {
+ console.log('Hubo en error:', error);
+ })
+
+ }
+
+ /* const docRef = db.collection('datausers/').doc(user.uid);//la / y el + user.uid hace que no se duplique el usuario
+ docRef.update({
+ name: newNameProfile,
+ email: newEmailProfile,
+ interests: interestsProfile,
+ photo: urlImage,
+ //password: newPassword,
+ uid: user.uid
+ })
+ .then(function () {
+ saveChange.classList.add('is-active');
+ console.log(saveChange);
+ })
+ .catch(function (error) {
+ console.log('Hubo en error:', error);
+ }) */
+ }
+
+
+}
+
+
+
+
diff --git a/src/views/signIn.js b/src/views/signIn.js
new file mode 100644
index 00000000..2c1848b8
--- /dev/null
+++ b/src/views/signIn.js
@@ -0,0 +1,82 @@
+import { navBar } from "../main.js";
+export default () => {
+ const viewSignIn = `
+
+
+
+
+
+
+
+
ERROR
+
+
Comprueba tu correo o contraseña: debe contener al menos 6 caracteres,un número, una minúscula y una mayúscula.
+
+
+
+
+
+
+
+
+
+
ERROR
+
+
La cuenta ya existe
+
+
+
+
+
+
+
+
+
ERROR
+
+
No tienes una cuenta
+
+
+
+
+
+ `
+ navBar.style.display = 'none'
+ return viewSignIn
+}
\ No newline at end of file
diff --git a/src/views/viewcontroler.js b/src/views/viewcontroler.js
new file mode 100644
index 00000000..a4497bea
--- /dev/null
+++ b/src/views/viewcontroler.js
@@ -0,0 +1,15 @@
+/* import { components } from '../index.js'
+import { root } from "../main.js";
+// Funcion que cambia la vista
+export const changeView = (route) => {
+ root.innerHTML = '';
+ switch (route) {
+ case '#/Home': { return root.appendChild(components.home); }
+ case '#/Post': { return root.appendChild(components.post); }
+ case '#/My_profile': { return root.appendChild(components.profile); }
+ case '#/Exit': { return root.appendChild(components.exit); }
+ default:
+ break;
+ }
+ console.log(route);
+}; */
\ No newline at end of file
diff --git a/storage.rules b/storage.rules
new file mode 100644
index 00000000..d494542e
--- /dev/null
+++ b/storage.rules
@@ -0,0 +1,7 @@
+service firebase.storage {
+ match /b/{bucket}/o {
+ match /{allPaths=**} {
+ allow read, write: if request.auth!=null;
+ }
+ }
+}
diff --git a/test/example.spec.js b/test/example.spec.js
index 1aca05e9..f5775824 100644
--- a/test/example.spec.js
+++ b/test/example.spec.js
@@ -1,7 +1,32 @@
-import { example } from '../src/example.js';
+import mockFirebase from '../_mocks_/firebase-mock.js'
+//import { loginGoogle } from '../src/index.js';
+//import * as login from '../src/index.js'
-describe('example', () => {
+/* global.firebase = {
+ auth: jest.fn(() => ({
+ signInWithPopup: jest.fn(() => new Promise((resolve, reject) => {
+ resolve(true)
+ }))
+ }))
+}
+
+test('Login email', () => {
+ let email = 'ejemplo@hotmail.com'
+ let password = 'ejem'
+
+ expect(auth.loginUser(email, password)).toBe('No cumple con 6 caracteres')
+
+}) */
+
+
+
+
+global.firebase = mockFirebase();
+
+
+describe('loginGoogle', () => {
it('debería ser una función', () => {
- expect(typeof example).toBe('function');
+ expect(typeof loginGoogle).toBe('function');
});
-});
\ No newline at end of file
+});
+