From 88dcd9395ec7f559860d6f5d3d6479930ef463be Mon Sep 17 00:00:00 2001 From: Emilio Date: Wed, 29 Apr 2020 21:27:15 +0200 Subject: [PATCH 1/2] =?UTF-8?q?a=C3=B1adido=20gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Emilio/.gitignore | 58 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Emilio/.gitignore diff --git a/Emilio/.gitignore b/Emilio/.gitignore new file mode 100644 index 00000000..9b216871 --- /dev/null +++ b/Emilio/.gitignore @@ -0,0 +1,58 @@ +# Created by https://www.gitignore.io/api/macos,windows +# Edit at https://www.gitignore.io/?templates=macos,windows + +### macOS ### +# General +**/.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.gitignore.io/api/macos,windows \ No newline at end of file From 64d1acaf4bd45f0dd6ce1550244e7bd347f27731 Mon Sep 17 00:00:00 2001 From: Emilio Date: Mon, 18 May 2020 10:56:52 +0200 Subject: [PATCH 2/2] =?UTF-8?q?a=C3=B1ado=20proyecto=20place?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 2 + Emilio/Proyecto2/.gitignore | 387 +++++++++++++++++++++++++++++++++ Emilio/Proyecto2/README.md | 21 ++ Emilio/Proyecto2/css/style.css | 216 ++++++++++++++++++ Emilio/Proyecto2/index.html | 45 ++++ Emilio/Proyecto2/js/api.js | 144 ++++++++++++ Emilio/Proyecto2/js/main.js | 39 ++++ Emilio/Proyecto2/js/script.js | 95 ++++++++ 9 files changed, 949 insertions(+) delete mode 100644 .DS_Store create mode 100644 .gitignore create mode 100644 Emilio/Proyecto2/.gitignore create mode 100644 Emilio/Proyecto2/README.md create mode 100644 Emilio/Proyecto2/css/style.css create mode 100644 Emilio/Proyecto2/index.html create mode 100644 Emilio/Proyecto2/js/api.js create mode 100644 Emilio/Proyecto2/js/main.js create mode 100644 Emilio/Proyecto2/js/script.js diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 114f5f5fe15d5c76216f1dc2cbd99ec4f1938518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&2G~`5T0$*#0hE%5>k8g1&Kq2k`|~CLJDbph{T_81qVQ_-B^t)$1br$L_<(6 zyaVtCJPJ?1gYW?G&F)g!4j@hlp`B=V*1O-#?tJ@~B_h!s_uE8GBC?QJR~pEEBHYet zL6&sQC1@dicob8gMwIlT1+=L!3>XIfH3oR^*6A)q6wnFf_HT0JM~RPCJ{oQ#UHv8n zC88>jDSiQEl=h+m_EQPF3hbEA1SF3RXedhoP70h7c}ubW=a&8?J=Np;?4L$qnzdSA z#L{wQrCPJBhSgYYyl@A}#Lc{HoOZp@GyZzyWdmQA_md<#FMIxzFqj-PFYhLC=7n)E zlEz^_0Oa}8FzzRlZZeMhsr2Kj2Ft2j^@HZdblTq9-n4Jr+L~?J)195xrhR?;=4@8C z)~~eh^bUuw&!%r?Z$B_|I4N;dO1Y@@5A_j+-;njn9mP=+9|Of6*2o9_9wuN!A)R3| zhWO_4BC+p)FHWBWbcjh07bf9r30uRmNYKwqOd@<2r%W!4_l1RV0vs=+0S!u6UKn|7 zjqXv8cFCa!P)43=|nyR-aA2|D9jI|BFWE%P?RV_^%icl|6T_i;(o)x)2=SwKmcr s5)0$zN=p-D`Z|^czKS=Hq@c~_0(3{~xzebCm_GuN29p^E{wf3C0eTZ0{Qv*} diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..9bea4330 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/Emilio/Proyecto2/.gitignore b/Emilio/Proyecto2/.gitignore new file mode 100644 index 00000000..c814ae05 --- /dev/null +++ b/Emilio/Proyecto2/.gitignore @@ -0,0 +1,387 @@ +### Firebase ### +.idea +**/node_modules/* +**/.firebaserc + +### Firebase Patch ### +.runtimeconfig.json +.firebase/ + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + diff --git a/Emilio/Proyecto2/README.md b/Emilio/Proyecto2/README.md new file mode 100644 index 00000000..44b8fc62 --- /dev/null +++ b/Emilio/Proyecto2/README.md @@ -0,0 +1,21 @@ +Project Api Place + +Segundo proyecto del master Fictizia + +Comenzando 🚀 +Empezaremos iniciando sesion con nuestra cuenta de Github a traves del boton indicado. Una vez que estemos en nuestra sesión, añadiremos el nombre de cualquier sitio o establecimiento en el buscador, y con el cual, la api de google place nos devolvera un json con todos los resultados acordes a la busqueda, que saldran señalizados en el mapa de googleMaps. + +Podremos pinchar sobre cada marker, y al hacer click sobre alguno, aparecerá una ventana con los datos del establecimiento o lugar y un botón para añadirlo como favorito, y asi podremos hacer una lista de favoritos en nuestra sesion de usuario a traves de la base de datos en tiempo real de firebase. + +Podremos consultar nuestra lista de guardados haciendo click en el boton "te doy tus favoritos guardados", al hacerlo nos dara los resultados que hayamos guardado en la base de datos de firebase. + +Finalmente podremos borrar cada seleccion de nuestra lista de favoritos guardados con el boton de borrar. + +Construido con 🛠️ +Vanilla JS +Maps JavaScript API +Places API GoogleMaps +Firebase + +Emilio José Germán - Version 2.0- egerman17 + diff --git a/Emilio/Proyecto2/css/style.css b/Emilio/Proyecto2/css/style.css new file mode 100644 index 00000000..45016cb4 --- /dev/null +++ b/Emilio/Proyecto2/css/style.css @@ -0,0 +1,216 @@ + +.btn { + font-size: 20px; + padding: 6px 12px; + margin: 10px; + display: inline-block; + text-decoration: none; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 5px; +} +.btn:focus, +.btn:active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus { + color: #333; + text-decoration: none; +} +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} + +/* default +---------------------------- */ +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} + + +#map { + height: 600px; + } + /* Optional: Makes the sample page fill the window. */ + html, body { + height: 100%; + margin: 0; + padding: 0; + } + #description { + font-family: Roboto; + font-size: 15px; + font-weight: 300; + } + + #infowindow-content .title { + font-weight: bold; + } + + #infowindow-content { + display: none; + } + + #map #infowindow-content { + display: inline; + } + + .pac-card { + margin: 10px 10px 0 0; + border-radius: 2px 0 0 2px; + box-sizing: border-box; + -moz-box-sizing: border-box; + outline: none; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); + background-color: #fff; + font-family: Roboto; + + } + + #pac-container { + padding-bottom: 12px; + margin-right: 12px; + } + + .pac-controls { + display: inline-block; + padding: 5px 11px; + } + + .pac-controls label { + font-family: Roboto; + font-size: 13px; + font-weight: 300; + } + + #pac-input { + background-color: #fff; + font-family: Roboto; + font-size: 15px; + font-weight: 300; + margin: 12px; + padding: 0 11px 0 13px; + text-overflow: ellipsis; + width: 400px; + height: 40px; + text-align: center; + border-radius: 5px; + } + + #pac-input:focus { + border-color: #4d90fe; + } + + #title { + color: #fff; + background-color: #4d90fe; + font-size: 25px; + font-weight: 500; + padding: 6px 12px; + } + #target { + width: 345px; + } + body{ + background-color:#f7f7f7; + } + + h1{ + text-align: center; + margin:50px; + } + +div.container{ + display: block; + text-align: center; +} + +div.panel-body{ + margin:25px; + +} + +div.alerta{ + + font-size: 20px; + margin-left: 40px; + font-family: 'Courier New', Courier, monospace; +} +div.place{ + background-color:#f7f7f7; + display: inline-block ; +} +#datosGuardados{ + display: inline-block ; + display: inline-block; + padding: 30px; + margin: 30px; + text-align: -webkit-center; + +} +.basefire{ + background:#E5EAF0; + width: 500px; + padding: 30px; + border: 1px solid #43B17D; + border-radius: 10px; + margin: 30px; + box-sizing: content-box; + text-align: center; + display: inline-block; +} + +#añadir{ + + cursor: pointer; + text-align: center; + width: 200px; + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; + border-radius: 10px; + +} + +#añadir:focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} + +.delete-button{ + cursor: pointer; +} diff --git a/Emilio/Proyecto2/index.html b/Emilio/Proyecto2/index.html new file mode 100644 index 00000000..ee342c4a --- /dev/null +++ b/Emilio/Proyecto2/index.html @@ -0,0 +1,45 @@ + + + + + + + + Find-Place + + + + + +
+

Bienvenido a tu lista de sitios favoritos

+
+
+
+
+
+ + + + +
+ +
+
+
+
+
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/Emilio/Proyecto2/js/api.js b/Emilio/Proyecto2/js/api.js new file mode 100644 index 00000000..aad84c8e --- /dev/null +++ b/Emilio/Proyecto2/js/api.js @@ -0,0 +1,144 @@ +////Script dedicado para iniciar google maps y el buscador de establecimientos. Se utiliza tambien firebase para añadir los favoritos. + +// Utilizaremos los datos que nos da la api de google place para que nos devuelva un json de los datos +// de los establecimientos que busquemos. Podremos buscar por tipo establecimiento o nombre del mismo. +// Una vez buscados, hacemos click encima del elemento que hemos buscado y aparecerá una ventana con los +// datos del establecimiento y un boton para añadir. + +export function initMap() { + + let location = new Object(); + /// Capturamos la localización del navegador para situarnos en el mapa. + + navigator.geolocation.getCurrentPosition(position => { + + location.lat = position.coords.latitude; + location.lng = position.coords.longitude; + const localizacion = { + lat: location.lat, + lng: location.lng + }; + const map = new google.maps.Map(document.getElementById('map'), { + center: { + lat: location.lat, + lng: location.lng + }, + zoom: 14 + }); + console.log(map, "mapa") + console.log(localizacion) + + + // Creando el search box + var input = document.getElementById('pac-input'); + var searchBox = new google.maps.places.SearchBox(input); + console.log("lo que buscamos", searchBox); + map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); + + // Sesga los resultados de SearchBox hacia la vista del mapa actual. + map.addListener('bounds_changed', function () { + searchBox.setBounds(map.getBounds()); + }); + + // Escucha el evento que se dispara cuando el usuario busca un establecimiento hace una llamada a la api place, y nos da un json con datos. + + searchBox.addListener('places_changed', function () { + var places = searchBox.getPlaces(); + console.log("places searchbox", places); + if (places.length == 0) { + console.warn("no hay datos disponibles"); + alert("no hay datos disponibles"); + return; + } + + //// recogemos los datos para pintar la ventana info + places.forEach(function (place) { + console.log("lugares", places) + console.log("resultados for", place); + let content = ` +

${place.name}

+

${place.formatted_address}

+

Número de opiniones: ${place.user_ratings_total}

+

Reputación sobre cinco: ${place.rating}

+ `; + + // Creamos el contenedor y el boton añadir con su funcion añadir favoritos. + const container = document.createElement('div'); + const button = document.createElement('button'); + button.setAttribute("id", "añadir"); + container.innerHTML = content; + button.innerHTML = 'SOY TU FAVORITO'; + + // Evento que al pulsar el boton realizamos el añadido de base de datos firebase y lista favoritos + + button.addEventListener('click', (ev) => { + console.log("pulsado", ev, guardar); + + // añadimos los favoritos a firebase database en funcion del usuario que este logueado + const userId = firebase.auth().currentUser.uid; + var estId = place.place_id + console.log("userID", userId); + var favoritos = firebase.database().ref(userId).child('/favoritos/' + estId); + console.log(estId) + favoritos.set(guardar); + alert("tu favorito ha sido añadido satisfactoriamente"); + + }); + + container.appendChild(button); + + // array de datos para la base de datos firebase + var guardar = { + nombre: place.name, + direccion: place.formatted_address, + id: place.place_id, + rating: place.rating, + n_rating: place.user_ratings_total + }; + + + if (!place.geometry) { + console.log("Returned place contains no geometry"); + return; + } + ///icono del marker + var icon = { + url: place.icon, + size: new google.maps.Size(71, 71), + origin: new google.maps.Point(0, 0), + anchor: new google.maps.Point(17, 34), + scaledSize: new google.maps.Size(25, 25) + }; + //creando el objeto de la ventanainfo, y que recoja los datos del foreach + var infoVentana = new google.maps.InfoWindow({ + content: container + }); + + + console.log('Content: ', infoVentana.content); + + // Creando el marker por cada uno de los establecimientos. He cambiado el tema del push para que me funcione + + var marker = new google.maps.Marker({ + position: place.geometry.location, + icon: icon, + map: map, + title: place.name + }); + console.log("marker", marker); + console.log("ventana", infoVentana); + + creandoInfoVentana(marker, map, infoVentana); + + }); + + // Creando la ventana de la info del establecimiento + function creandoInfoVentana(marker, map, infoVentana) { + marker.addListener('click', function () { + infoVentana.open(map, this); + }); + } + }); + }); + +} \ No newline at end of file diff --git a/Emilio/Proyecto2/js/main.js b/Emilio/Proyecto2/js/main.js new file mode 100644 index 00000000..1f3556fe --- /dev/null +++ b/Emilio/Proyecto2/js/main.js @@ -0,0 +1,39 @@ + +import { registrar, salir, firebaseConfig, recogerDatos } from './script.js'; +import { initMap } from './api.js'; + +// Creamos Script, con sus datos correspondientes +var script = document.createElement('script'); +script.src = 'https://maps.googleapis.com/maps/api/js?key=---APIKEY---&callback=initMap&libraries=places'; +script.defer = true; +script.async = true; + +// llamamos a la fucion initMap con el objeto windows +window.initMap = initMap; + +// Append 'script' al elemento 'head' +document.head.appendChild(script); + +// iniciamos firebase +firebase.initializeApp(firebaseConfig); + +// Evento que al cliclar llamamos funcion registrar +document.getElementById("login").addEventListener("click", registrar); + +// Estado de la sesion del usuario + +firebase.auth().onAuthStateChanged(function (authData) { + + if (authData) { + console.log("bienvenido " + authData.email) + } else { + console.log("no hay ninguna sesion abierta") + } +}); + +// Evento para desloguear al hacer click, llamando a la funcion salir +document.getElementById("desloguear").addEventListener("click", salir); + +//Evento para pintar los datos que tenemos en la base de datos +document.getElementById("recoger").addEventListener("click", recogerDatos); + diff --git a/Emilio/Proyecto2/js/script.js b/Emilio/Proyecto2/js/script.js new file mode 100644 index 00000000..43e54b37 --- /dev/null +++ b/Emilio/Proyecto2/js/script.js @@ -0,0 +1,95 @@ +// Your web app's Firebase configuration +export var firebaseConfig = { + apiKey: "APIKEY", + authDomain: "find-place-369b7.firebaseapp.com", + databaseURL: "https://find-place-369b7.firebaseio.com", + projectId: "find-place-369b7", + storageBucket: "find-place-369b7.appspot.com", + messagingSenderId: "561570713110", + appId: "1:561570713110:web:a24cd18b10efd1aec02f37" +}; + +/// Registro con tu cuenta de github +export function registrar() { + const provider = new firebase.auth.GithubAuthProvider(); + console.log(provider); + firebase.auth().signInWithPopup(provider).then(result => { + console.log("resultado", result); + var authData = result.user.providerData[0]; + console.log("authdata", authData); + var ruta = result.user.uid; + var usuario = authData.uid; + const formulario = firebase.database().ref(ruta).child("datos"); + formulario.orderByChild('uid') + .equalTo(usuario) + .once('value', snap => { + const usuarioYaRegistrado = snap.val(); + if (usuarioYaRegistrado !== null) { + const alerta = `` + document.getElementById('alerta').innerHTML = alerta; + } else { + console.log("authData:", authData) + formulario.push(authData); + } + }); + }).catch(error => { + console.warn("error de login", error); + }); +} + +//// desloguearse de tu sesion +export function salir() { + firebase.auth().signOut().then(function () { + // Sign-out successful. + console.log("Se ha deslogueado correctamente"); + alert("se ha deslogueado correctamente"); + }).catch(function (error) { + console.log("Errores ") + // An error happened. + }); +}; + +//// darme lista de favoritos de la base de datos firebase + +export function recogerDatos() { + console.log("pulsado recoger datos"); + const userId = firebase.auth().currentUser.uid; + let elemento = firebase.database().ref(userId).child('/favoritos/'); + console.log("elemento en recogerdatos", elemento); + let fixed = document.getElementById("datosGuardados"); + + elemento.on('value', (snapshot) => { + console.log("antes del foreach", snapshot.val()); + + if (snapshot.val() === null && !fixed.innerHTML) { + alert("no tienes nada guardado en tu lista de favoritos") + } else { + fixed.innerHTML = ''; + snapshot.forEach((childSnapshot) => { + var datos = childSnapshot.val(); + console.log("datos", datos); + var id = datos.id; + const card = document.createElement('div'); + card.classList.add('basefire'); + card.innerHTML = ` + +

${datos.nombre}

+

${datos.direccion}

+

Número de opiniones: ${datos.n_rating}

+

Reputación sobre cinco: ${datos.rating}

+ `; + + ///// al pulsar boton borrar de la lista, borra de la base de datos esa localizacion. + card.addEventListener('click', () => { + const userId = firebase.auth().currentUser.uid; + var borrar = firebase.database().ref(userId).child('/favoritos/' + datos.id); + borrar.remove(); + }); + + fixed.appendChild(card); + }) + } + + }); +};