123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- var selects = document.querySelector('.selects');
- var weatherDiv = document.querySelector('.weather');
- function get(url){
- return new Promise(function(resolve,reject){
- var xhr = new XMLHttpRequest();
- xhr.open('GET',url,true);
- xhr.onload = function(){
- if(xhr.status == 200){
- resolve(JSON.parse(xhr.responseText));
- }
- else{
- reject(xhr.statusText);
- }
- }
- xhr.onerror = function(){
- reject('not found');
- }
- xhr.send();
- });
- }
- function show(obj){
- var weather = obj.query.results.channel.item.description;
- var resWeather = weather.replace(/href|CDATA|[\!]|[\[]|[\]]/g,"");
- var resWeather2 = resWeather.slice(1,resWeather.length - 1);
- var resWeather3 = resWeather2.replace(/Full Forecast at Yahoo Weather/g,"");
- var resWeather4 = resWeather3.slice(0,resWeather3.length - 28);
- weatherDiv.innerHTML = resWeather4;
- }
- function* myGenerator(){
- try{
- var object = yield get('https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.json');
- var keys = Object.keys(object);
- var select = document.createElement("select");
- for (var i = 0; i < keys.length; i++) {
- var option = document.createElement("option");
- option.innerHTML = keys[i];
- option.value = keys[i];
- select.appendChild(option);
- }
- select.onchange = function(){
- run(onchange1);
- }
- function* onchange1(){
- try{
- var mainSelect = document.getElementById("main")
- var select = document.createElement("select");
- for (var i = 0; i < object[mainSelect.value].length; i++) {
- var option = document.createElement("option")
- option.innerHTML = object[mainSelect.value][i];
- select.appendChild(option);
- }
- if(selects.children.length > 1){
- selects.replaceChild(select,mainSelect.nextElementSibling);
- }
- else
- selects.appendChild(select);
- var obj = yield get("https://query.yahooapis.com/v1/public/yql?" + 'q=' + encodeURIComponent("select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\'" + select.value + "\') and u='c'") + '&format=json');
- show(obj);
- select.onchange = function(){
- run(onchange2);
- }
- function* onchange2(){
- try{
- var obj2 = yield get("https://query.yahooapis.com/v1/public/yql?" + 'q=' + encodeURIComponent("select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\'" + select.value + "\') and u='c'") + '&format=json');
- show(obj2);
- }catch(error){
- throw error;
- }
- }
- }catch(error){
- throw error;
- }
- }
- selects.appendChild(select);
- select.id = "main";
- }catch(error){
- throw error;
- }
- }
- function run(g){
- var gen = g();
- function handle(result){
- if(!result.done){
- result.value.then(function(data){
- handle(gen.next(data));
- }).catch(function(error){
- throw(error);
- handle(gen.next());
- })
- }
- }
- handle(gen.next());
- }
- run(myGenerator);
|