Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
function attachEvents() { let submitBtn = document.getElementById("submit"); submitBtn.addEventListener("click", getLocationId); let locationInput = document.getElementById("location"); let locationObj = {}; let forecastDiv = document.getElementById("forecast"); let currentWeatherDiv = document.getElementById("current"); let upcomingWeatherDiv = document.getElementById("upcoming"); var requestOptions = { method: 'GET', redirect: 'follow' }; function getLocationId() { let loc = locationInput.value; wipeDivs("forecasts"); wipeDivs("forecast-info") fetch("http://localhost:3030/jsonstore/forecaster/locations", requestOptions) .then(response => response.text()) .then(r => JSON.parse(r)) .then(r => locationObj = r.find(l => l.name == loc)) .then(r => today(locationObj)) .then(r => forecoming(locationObj)) .catch(error => invalidData()); } function today(locationObj) { forecastDiv.style.display = "block"; console.log(locationObj.name) fetch(`http://localhost:3030/jsonstore/forecaster/today/${locationObj.code}`, requestOptions) .then(response => response.text()) .then(result => JSON.parse(result)) .then(r => populateToday(r)) .catch(error => invalidData()); } function forecoming(locationObj) { fetch(`http://localhost:3030/jsonstore/forecaster/upcoming/${locationObj.code}`, requestOptions) .then(response => response.text()) .then(result => JSON.parse(result)) .then(r => populateUpcoming(r)) .catch(error => invalidData()); } function populateToday(obj) { console.log(obj); let wrapperDiv = document.createElement("div"); wrapperDiv.className = "forecasts"; let symbSpan = document.createElement("span"); symbSpan.className = "condition symbol" symbSpan.textContent = chooseSymbol(obj.forecast.condition); conditionSpan = document.createElement("span"); conditionSpan.className = "condition"; let placeSpan = document.createElement("span"); placeSpan.className = "forecast-data"; placeSpan.textContent = obj.name; let tempSpan = document.createElement("span"); tempSpan.className = "forecast-data"; tempSpan.textContent = `${obj.forecast.high}°/${obj.forecast.low}°`; let typeSpan = document.createElement("span"); typeSpan.className = "forecast-data"; typeSpan.textContent = `${obj.forecast.condition}`; conditionSpan.appendChild(placeSpan); conditionSpan.appendChild(tempSpan); conditionSpan.appendChild(typeSpan) wrapperDiv.appendChild(symbSpan); wrapperDiv.appendChild(conditionSpan); currentWeatherDiv.appendChild(wrapperDiv) } function populateUpcoming(obj) { let arr = obj.forecast; console.log(arr) let wrapperDiv = document.createElement("div"); wrapperDiv.className = "forecast-info"; arr.forEach(d => { let upcomingSpan=document.createElement("span"); upcomingSpan.className="upcoming"; let symbSpan = document.createElement("span"); symbSpan.className = "condition symbol"; symbSpan.textContent = chooseSymbol(d.condition); let tempSpan = document.createElement("span"); tempSpan.className = "forecast-data"; tempSpan.textContent = `${d.high}°/${d.low}°`; conditionSpan = document.createElement("span"); conditionSpan.className = "condition"; conditionSpan.textContent = d.condition; upcomingSpan.appendChild(symbSpan); upcomingSpan.appendChild(tempSpan); upcomingSpan.appendChild(conditionSpan); wrapperDiv.appendChild(upcomingSpan) }) upcomingWeatherDiv.appendChild(wrapperDiv); } function chooseSymbol(str) { let symb = ""; switch (str) { case "Sunny": symb = "☀"; break; case "Partly sunny": symb = "⛅"; break; case "Overcast": symb = "☁"; break; case "Rain": symb = "☂"; break; } return symb; } function invalidData(){ let erDiv=document.createElement("div"); erDiv.className="forecasts"; erDiv.textContent="Error"; currentWeatherDiv.appendChild(erDiv) } function wipeDivs(divsClassName){ let divsToWipe=Array.from(document.getElementsByClassName(divsClassName)); divsToWipe.forEach(d=>d.remove()) } } attachEvents();
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)