From 04d9089f30c5bcee65b9ae98fa7739e70a6a3779 Mon Sep 17 00:00:00 2001 From: Martin Donnelly Date: Tue, 8 Aug 2017 01:06:02 +0100 Subject: [PATCH] update contract end --- app/js/modules/bitcoin.js | 15 +++-- app/js/modules/fx.js | 2 +- app/js/modules/password.js | 128 +++++++++++++++++++------------------ app/live/js/app.js | 2 +- lib/newdata.json | 2 +- views/pages/slackV2.ejs | 5 +- 6 files changed, 79 insertions(+), 75 deletions(-) diff --git a/app/js/modules/bitcoin.js b/app/js/modules/bitcoin.js index c5d567f..e003278 100644 --- a/app/js/modules/bitcoin.js +++ b/app/js/modules/bitcoin.js @@ -15,6 +15,7 @@ let BitcoinModel = Backbone.Model.extend({ balance: 0.0 }; this.set('btcdata', data); + this.set('balance', 0); this.update(); this.updateHourly(); }, @@ -22,7 +23,7 @@ let BitcoinModel = Backbone.Model.extend({ this.getBTC(); //this.getBalance(); const now = new Date(); - const mod = 60000 - (now.getTime() % 60000); + const mod = 300000 - (now.getTime() % 300000); let btcupdateFn = function() { this.update(); @@ -82,7 +83,7 @@ let BitcoinModel = Backbone.Model.extend({ balance }; } - + data.stub = Math.random(Number.MAX_SAFE_INTEGER).toString(32); this.set('btcdata', data); // total = myBTC * g; @@ -90,6 +91,7 @@ let BitcoinModel = Backbone.Model.extend({ getBTC: function () { let self = this; let url = this.get('url'); + console.log('>> getBTC'); $.ajax({ type: 'GET', url: url, @@ -135,10 +137,8 @@ let BitcoinModel = Backbone.Model.extend({ }, success: function (data) { let balance = data.balance; - let btcdata = self.get('btcdata'); - btcdata.balance = balance; - self.set('btcdata', btcdata); + self.set('balance', balance); self.recalc(); }, error: function (xhr, type) { @@ -158,14 +158,15 @@ let Bitcoin = Backbone.View.extend({ }, render: function () { let btcdata = this.model.get('btcdata'); + let balance = this.model.get('balance'); //console.log(`Balance: ${btcdata.balance.toFixed(4)}`); //console.log(btcdata.lastGBP); - let owned = parseFloat(btcdata.lastGBP) * parseFloat(btcdata.balance); + let owned = parseFloat(btcdata.lastGBP) * parseFloat(balance); //console.log(`owned: ${owned}`); let title = 'High: $' + parseFloat(btcdata.highs.usd.toFixed(2)) + ' / Low $' + parseFloat(btcdata.lows.usd.toFixed(2)); this.$btc.removeClass(); this.$btc.addClass(btcdata.eclass); - this.$btc.html(`$${parseFloat(btcdata.lastUSD.toFixed(2)) } / £${parseFloat(btcdata.lastGBP.toFixed(2))}
${btcdata.balance} £${parseFloat(owned.toFixed(2))}
` ); + this.$btc.html(`$${parseFloat(btcdata.lastUSD.toFixed(2)) } / £${parseFloat(btcdata.lastGBP.toFixed(2))}
₿${balance} £${parseFloat(owned.toFixed(2))}
` ); this.$btc.prop('title', title); } }); diff --git a/app/js/modules/fx.js b/app/js/modules/fx.js index 8ed3647..7dbe4b1 100644 --- a/app/js/modules/fx.js +++ b/app/js/modules/fx.js @@ -58,7 +58,7 @@ let FxModel = Backbone.Model.extend({ }); -let FxView = Backbone.View.extend({ +const FxView = Backbone.View.extend({ tagName: 'div', initialize: function () { _.bindAll(this, 'render'); diff --git a/app/js/modules/password.js b/app/js/modules/password.js index 329fd85..c44a9a8 100644 --- a/app/js/modules/password.js +++ b/app/js/modules/password.js @@ -2,80 +2,82 @@ * Created by mdonnel on 20/04/2017. */ _.templateSettings = { - interpolate: /\{\{(.+?)\}\}/g + evaluate: /\{\{(.+?)\}\}/g, + interpolate: /\{\{=(.+?)\}\}/g, + escape: /\{\{-(.+?)\}\}/g }; Array.prototype.random = function () { - return this[Math.floor((Math.random() * this.length))]; + return this[Math.floor((Math.random() * this.length))]; }; -let PasswordView = Backbone.View.extend({ - el:'#passwords', - passwordTemplate: _.template($('#password-template').html()), - initialize: function() { - this.alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; -this.whitespace = ['.', '~', '#', '!', '$', '+', '-', '+']; -this.numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; -this.left = ['Alabama', - 'Alaska', - 'Arizona', - 'Maryland', - 'Nevada', - 'Mexico', - 'Texas', - 'Utah', - 'Glasgow', - 'Inverness', - 'Edinburgh', - 'Dumbarton', - 'Balloch', - 'Renton', - 'Cardross', - 'Dundee', - 'Paisley', - 'Hamilton', - 'Greenock', - 'Falkirk', - 'Irvine', - 'Renfrew', - 'Erskine', - 'London', - 'Hammersmith', - 'Islington', - 'Silver', 'Black', 'Yellow', 'Purple', 'White', 'Pink', 'Red', 'Orange', 'Brown', 'Green', 'Blue', 'Amber', 'Aqua', 'Azure', 'Bronze', 'Coral', 'Copper', 'Crimson', 'Cyan', 'Ginger', 'Gold', 'Indigo', 'Jade' +const PasswordView = Backbone.View.extend({ + el: '#passwords', + passwordTemplate: _.template($('#password-template').html()), + initialize: function () { + this.alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; + this.whitespace = ['.', '~', '#', '!', '$', '+', '-', '+']; + this.numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; + this.left = ['Alabama', + 'Alaska', + 'Arizona', + 'Maryland', + 'Nevada', + 'Mexico', + 'Texas', + 'Utah', + 'Glasgow', + 'Inverness', + 'Edinburgh', + 'Dumbarton', + 'Balloch', + 'Renton', + 'Cardross', + 'Dundee', + 'Paisley', + 'Hamilton', + 'Greenock', + 'Falkirk', + 'Irvine', + 'Renfrew', + 'Erskine', + 'London', + 'Hammersmith', + 'Islington', + 'Silver', 'Black', 'Yellow', 'Purple', 'White', 'Pink', 'Red', 'Orange', 'Brown', 'Green', 'Blue', 'Amber', 'Aqua', 'Azure', 'Bronze', 'Coral', 'Copper', 'Crimson', 'Cyan', 'Ginger', 'Gold', 'Indigo', 'Jade' -]; + ]; - this.right = ['Aganju', 'Cygni', 'Akeron', 'Antares', 'Aragoth', 'Ardus', 'Carpenter', 'Cooper', 'Dahin', 'Capella', 'Endriago', 'Gallina', 'Fenris', 'Freya', 'Glenn', 'Grissom', 'Jotunheim', 'Kailaasa', 'Lagarto', 'Muspelheim', 'Nifleheim', 'Primus', 'Vega', 'Ragnarok', 'Shepard', 'Slayton', 'Tarsis', 'Mercury', 'Venus', 'Mars', 'Earth', 'Terra', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto', 'Europa', 'Ganymede', 'Callisto', 'Titan', 'Juno', 'Eridanus', 'Scorpius', 'Crux', 'Cancer', 'Taurus', 'Lyra', 'Andromeda', 'Virgo', 'Aquarius', 'Cygnus', 'Corvus', 'Taurus', 'Draco', 'Perseus', 'Pegasus', 'Gemini', 'Columbia', 'Bootes', 'Orion', 'Deneb', 'Merope', 'Agate', 'Amber', 'Beryl', 'Calcite', 'Citrine', 'Coral', 'Diamond', 'Emerald', 'Garnet', 'Jade', 'Lapis', 'Moonstone', 'Obsidian', 'Onyx', 'Opal', 'Pearl', 'Quartz', 'Ruby', 'Sapphire', 'Topaz', 'Iron', 'Lead', 'Nickel', 'Copper', 'Zinc', 'Tin', 'Manes', 'Argon', 'Neon', 'Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot', 'Golf', 'Hotel', 'India', 'Juliett', 'Kilo', 'Lima', 'Mike', 'November', 'Oscar', 'Papa', 'Quebec', 'Romeo', 'Sierra', 'Tango', 'Uniform', 'Victor', 'Whisky', 'Xray', 'Yankee', 'Zulu']; + this.right = ['Aganju', 'Cygni', 'Akeron', 'Antares', 'Aragoth', 'Ardus', 'Carpenter', 'Cooper', 'Dahin', 'Capella', 'Endriago', 'Gallina', 'Fenris', 'Freya', 'Glenn', 'Grissom', 'Jotunheim', 'Kailaasa', 'Lagarto', 'Muspelheim', 'Nifleheim', 'Primus', 'Vega', 'Ragnarok', 'Shepard', 'Slayton', 'Tarsis', 'Mercury', 'Venus', 'Mars', 'Earth', 'Terra', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto', 'Europa', 'Ganymede', 'Callisto', 'Titan', 'Juno', 'Eridanus', 'Scorpius', 'Crux', 'Cancer', 'Taurus', 'Lyra', 'Andromeda', 'Virgo', 'Aquarius', 'Cygnus', 'Corvus', 'Taurus', 'Draco', 'Perseus', 'Pegasus', 'Gemini', 'Columbia', 'Bootes', 'Orion', 'Deneb', 'Merope', 'Agate', 'Amber', 'Beryl', 'Calcite', 'Citrine', 'Coral', 'Diamond', 'Emerald', 'Garnet', 'Jade', 'Lapis', 'Moonstone', 'Obsidian', 'Onyx', 'Opal', 'Pearl', 'Quartz', 'Ruby', 'Sapphire', 'Topaz', 'Iron', 'Lead', 'Nickel', 'Copper', 'Zinc', 'Tin', 'Manes', 'Argon', 'Neon', 'Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot', 'Golf', 'Hotel', 'India', 'Juliett', 'Kilo', 'Lima', 'Mike', 'November', 'Oscar', 'Papa', 'Quebec', 'Romeo', 'Sierra', 'Tango', 'Uniform', 'Victor', 'Whisky', 'Xray', 'Yankee', 'Zulu']; - this.passwordOut = this.$('#passwordOut'); - _.bindAll(this, "newClick"); - }, - events: { - "click #newPassword" : "newClick" - }, - numberCluster: function () { - return this.numbers.random() + this.numbers.random() + this.numbers.random(); - }, - randomAmount: function (i) { - let str = ''; + this.passwordOut = this.$('#passwordOut'); + _.bindAll(this, "newClick"); + }, + events: { + "click #newPassword": "newClick" + }, + numberCluster: function () { + return this.numbers.random() + this.numbers.random() + this.numbers.random(); + }, + randomAmount: function (i) { + let str = ''; - for (let t = 0; t < i; t++) { - str = str + this.alpha.random(); - } + for (let t = 0; t < i; t++) { + str = str + this.alpha.random(); + } - return str; -}, - newClick: function(e) { - let long= (this.left.random() + ' ' + this.right.random() + ' ' + this.numberCluster()).split(' ').join(this.whitespace.random()); - let short = (this.randomAmount(5) + ' ' + this.randomAmount(5)).split(' ').join(this.whitespace.random()); + return str; + }, + newClick: function (e) { + let long = (this.left.random() + ' ' + this.right.random() + ' ' + this.numberCluster()).split(' ').join(this.whitespace.random()); + let short = (this.randomAmount(5) + ' ' + this.randomAmount(5)).split(' ').join(this.whitespace.random()); - this.passwordOut.removeClass('mui--hide'); - this.passwordOut.empty().append(this.passwordTemplate({ - long: long, - short: short - })); - } + this.passwordOut.removeClass('mui--hide'); + this.passwordOut.empty().append(this.passwordTemplate({ + long: long, + short: short + })); + } }); diff --git a/app/live/js/app.js b/app/live/js/app.js index 951936c..8e11b17 100644 --- a/app/live/js/app.js +++ b/app/live/js/app.js @@ -1 +1 @@ -"use strict";var BitcoinModel,Bitcoin,FxModel,FxView,_typeof,TrainModel,TrainView,WeatherModel,Weather,WeatherSlim,PasswordView,popitout,popitoutSmall,EventModel=Backbone.Model.extend({initialize:function(){this.update()},getDays:function(t,e){var i=void 0,a=void 0;return i=t.getTime(),a=e.getTime(),(a-i)/864e5},update:function(){var t,e=new Date,i=36e5-e.getTime()%36e5,a={};a.days=Math.ceil(this.getDays(e,this.get("event"))),a.weeks=Math.ceil(this.getDays(e,this.get("event"))/7),this.set("data",a),t=function(){this.update()},setTimeout(t.bind(this),i+10)}}),EventView=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.id="e_"+Math.random().toString(36).substr(2,9),this.$events=$("#events"),this.$myEvent=null,this.$el=this.$events,this.initView(),this.render()},render:function(){var t=this.model.get("label"),e=this.model.get("data"),i=t+" "+e.days+" days / "+e.weeks+" weeks";this.$myEvent.empty().append(i)},initView:function(){var t="
';this.$html=$(t),this.$events.append(this.$html),this.$myEvent=$("#"+this.id)}});BitcoinModel=Backbone.Model.extend({initialize:function(){this.set("url","/btc"),this.set("balanceUrl","/balance");var t={lastGBP:0,lastUSD:0,lows:{gbp:0,usd:0},highs:{gbp:0,usd:0},eclass:"",balance:0};this.set("btcdata",t),this.update(),this.updateHourly()},update:function(){var t,e,i;this.getBTC(),t=new Date,e=6e4-t.getTime()%6e4,i=function(){this.update()},setTimeout(i.bind(this),e+10)},updateHourly:function(){var t,e,i;this.getBalance(),t=new Date,e=36e5-t.getTime()%36e5,i=function(){this.update()},setTimeout(i.bind(this),e+10)},recalc:function(){var t=this.get("btcdata"),e=t.lastGBP,i=void 0,a=t.gbp,n=t.usd,s=t.lows,o=t.highs,r=t.eclass,l=t.balance;void 0!==a&&(0!==t.lastGBP?r=a>e?"up":"down":(s.gbp=a,s.usd=n,o.gbp=a,o.usd=n),e=a,i=n,a"+t.balance+" £"+parseFloat(e.toFixed(2))+""),this.$btc.prop("title",i)}}),FxModel=Backbone.Model.extend({initialize:function(){this.set("url","/fx"),this.set("fxdata",{}),this.update()},update:function(){var t,e,i;this.getFX(),t=new Date,e=9e5-t.getTime()%9e5,i=function(){this.update()},setTimeout(i.bind(this),e+10)},getFX:function(){var t=this.get("url"),e=this;$.ajax({type:"GET",url:t,data:"",dataType:"json",timeout:1e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(t){var i=1/t.rates.GBP,a=i*t.rates.SEK,n={usd:1,gbp:t.rates.GBP,sek:t.rates.SEK,gpbe:i,sekex:a};e.set("fxdata",n)},error:function(t,e){}})}}),FxView=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$fx=$("#fx")},render:function(){var t=this.model.get("fxdata");this.$fx.html("£1 = $"+parseFloat(t.gpbe.toFixed(2))+" = "+parseFloat(t.sekex.toFixed(2))+" SEK")}}),_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},TrainModel=Backbone.Model.extend({initialize:function(){var t=this.get("from"),e=this.get("to"),i="/getnexttraintimes?from="+t+"&to="+e,a="/gettrains?from="+t+"&to="+e,n=t+e;this.set("url",i),this.set("routeUrl",a),this.set("target",n),this.set("visible",!1),this.update()},update:function(){var t,e=new Date,i=6e4-e.getTime()%6e4;e.getHours()>=6&&this.getTrain(),t=function(){this.update()},setTimeout(t.bind(this),i+10)},getTrain:function(){var t=this.get("url"),e=this;$.ajax({type:"GET",url:t,data:"",dataType:"json",timeout:1e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(t){e.set("trainData",t)},error:function(t,e){}})},getRoute:function(){var t=this.get("routeUrl"),e=this;!0===this.get("visible")?this.set("visible",!1):$.ajax({type:"GET",url:t,data:"",dataType:"json",timeout:1e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(t){e.set("route",t),e.set("visible",!0)},error:function(t,e){}})}}),TrainView=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$trains=$("#trains"),this.$traininfo=$("#traininfo"),this.$traintext=$("#trainResults"),this.$el=this.$trains,this.initView()},events:{click:"showTrains"},render:function(){var t,e,i,a,n,s,o,r,l,d,h,u,c,m,p,g,b,f,w,v,y,T,C,$,A=void 0,x=void 0,S=this.model.get("trainData"),E=this.model.get("visible"),k=this.model.get("route");if(A="on time"===S.eta.toLowerCase()?S.sta:S.eta,x="on time"===S.eta.toLowerCase()?"ontime":"delayed",this.$button.html(A),this.$button.removeClass("delayed").removeClass("ontime").addClass(x),E){if(t="
"+k.locationName+" TO "+k.filterLocationName+'
\n \n \n \n \n \n ',e=[],"object"===_typeof(k.trainServices)&&null!==k.trainServices){i=!0,a=!1,n=void 0;try{for(s=k.trainServices[Symbol.iterator]();!(i=(o=s.next()).done);i=!0)r=o.value,l=r.destination[0],d=null!==l.via?""+l.via+"":"",h=null!==r.platform?r.platform:"💠",u=null!==r.sta?r.sta:"D "+r.std,c=null!==r.eta?r.eta:r.etd,e.push({location:l.locationName,time:u,status:c,platform:h,cancel:r.cancelReason,type:"train"}),t=r.isCancelled?t+"\n \n \n \n \n ":t+"\n \n \n \n \n "}catch(t){a=!0,n=t}finally{try{!i&&s.return&&s.return()}finally{if(a)throw n}}}if("object"===_typeof(k.busServices)&&null!==k.busServices){m=!0,p=!1,g=void 0;try{for(b=k.busServices[Symbol.iterator]();!(m=(f=b.next()).done);m=!0)w=f.value,v=w.destination[0],y=null!==v.via?""+v.via+"":"",T=null!==w.platform?w.platform:"",C=null!==w.sta?w.sta:"D "+w.std,$=null!==w.eta?w.eta:w.etd,e.push({location:v.locationName,time:C,status:$,platform:T,cancel:w.cancelReason,type:"bus"}),t=t+"\n \n \n \n \n "}catch(t){p=!0,g=t}finally{try{!m&&b.return&&b.return()}finally{if(p)throw g}}}t+="
DestinationTimeStatusPlatform
"+l.locationName+" "+d+""+u+'❌ '+r.cancelReason+"
"+l.locationName+" "+d+""+u+""+c+""+h+"
🚌 "+v.locationName+" "+y+""+C+""+$+""+T+"
",this.$traintext.empty().html(t),this.$traintext.removeClass("mui--hide").addClass("mui--show")}else this.$traintext.removeClass("mui--show").addClass("mui--hide")},initView:function(){var t,e=this,i=this.model.get("target"),a="
"+i.toUpperCase()+':
';this.$html=$(a),this.$html.on("click",function(){e.model.getRoute()}),this.$trains.append(this.$html),this.$button=$("#"+i),t="click #$(target)",this.events[t]="showTrains"},showTrains:function(){}}),WeatherModel=Backbone.Model.extend({initialize:function(){var t=this.get("geo");this.set("url","https://api.darksky.net/forecast/9ad2a41d420f3cf4960571bb886f710c/"+t.coords.latitude.toString()+","+t.coords.longitude.toString()+"?units=uk2&exclude=minutely,hourly,alerts,flags"),this.update()},update:function(){var t,e,i;this.getWeather(),t=new Date,e=18e5-t.getTime()%18e5,i=function(){this.update()},setTimeout(i.bind(this),e+10)},getWeather:function(){var t=this;$.ajax({type:"GET",url:t.get("url"),data:"",dataType:"jsonp",timeout:1e4,context:$("body"),contentType:"application/json",headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(e){var i={temperature:e.currently.temperature,icon:e.currently.icon,summary:e.currently.summary,daily:e.daily.summary};t.set(i)},error:function(t,e){}})}}),Weather=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$weatherText=$("#weatherDescription"),this.$weatherTemp=$("#temp"),this.$weatherIcon=$("#weatherIcon")},render:function(){var t='';this.$weatherTemp.empty().html(parseInt(this.model.get("temperature"))+"°c "),this.$weatherText.empty().html(this.model.get("summary")),this.$weatherIcon.empty().html(t)}}),WeatherSlim=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$weather=$("#weather"),this.render()},render:function(){var t=this.model.get("summary"),e=this.model.get("temperature"),i=this.model.get("daily"),a=t+" "+e+"° "+i+"";this.$weather.empty().html(a)}}),_.templateSettings={interpolate:/\{\{(.+?)\}\}/g},Array.prototype.random=function(){return this[Math.floor(Math.random()*this.length)]},PasswordView=Backbone.View.extend({el:"#passwords",passwordTemplate:_.template($("#password-template").html()),initialize:function(){this.alpha=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"],this.whitespace=[".","~","#","!","$","+","-","+"],this.numbers=["0","1","2","3","4","5","6","7","8","9"],this.left=["Alabama","Alaska","Arizona","Maryland","Nevada","Mexico","Texas","Utah","Glasgow","Inverness","Edinburgh","Dumbarton","Balloch","Renton","Cardross","Dundee","Paisley","Hamilton","Greenock","Falkirk","Irvine","Renfrew","Erskine","London","Hammersmith","Islington","Silver","Black","Yellow","Purple","White","Pink","Red","Orange","Brown","Green","Blue","Amber","Aqua","Azure","Bronze","Coral","Copper","Crimson","Cyan","Ginger","Gold","Indigo","Jade"],this.right=["Aganju","Cygni","Akeron","Antares","Aragoth","Ardus","Carpenter","Cooper","Dahin","Capella","Endriago","Gallina","Fenris","Freya","Glenn","Grissom","Jotunheim","Kailaasa","Lagarto","Muspelheim","Nifleheim","Primus","Vega","Ragnarok","Shepard","Slayton","Tarsis","Mercury","Venus","Mars","Earth","Terra","Jupiter","Saturn","Uranus","Neptune","Pluto","Europa","Ganymede","Callisto","Titan","Juno","Eridanus","Scorpius","Crux","Cancer","Taurus","Lyra","Andromeda","Virgo","Aquarius","Cygnus","Corvus","Taurus","Draco","Perseus","Pegasus","Gemini","Columbia","Bootes","Orion","Deneb","Merope","Agate","Amber","Beryl","Calcite","Citrine","Coral","Diamond","Emerald","Garnet","Jade","Lapis","Moonstone","Obsidian","Onyx","Opal","Pearl","Quartz","Ruby","Sapphire","Topaz","Iron","Lead","Nickel","Copper","Zinc","Tin","Manes","Argon","Neon","Alpha","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliett","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whisky","Xray","Yankee","Zulu"],this.passwordOut=this.$("#passwordOut"),_.bindAll(this,"newClick")},events:{"click #newPassword":"newClick"},numberCluster:function(){return this.numbers.random()+this.numbers.random()+this.numbers.random()},randomAmount:function(t){var e,i="";for(e=0;e';this.$html=$(t),this.$events.append(this.$html),this.$myEvent=$("#"+this.id)}});BitcoinModel=Backbone.Model.extend({initialize:function(){this.set("url","/btc"),this.set("balanceUrl","/balance");var t={lastGBP:0,lastUSD:0,lows:{gbp:0,usd:0},highs:{gbp:0,usd:0},eclass:"",balance:0};this.set("btcdata",t),this.set("balance",0),this.update(),this.updateHourly()},update:function(){var t,e,i;this.getBTC(),t=new Date,e=3e5-t.getTime()%3e5,i=function(){this.update()},setTimeout(i.bind(this),e+10)},updateHourly:function(){var t,e,i;this.getBalance(),t=new Date,e=36e5-t.getTime()%36e5,i=function(){this.update()},setTimeout(i.bind(this),e+10)},recalc:function(){var t=this.get("btcdata"),e=t.lastGBP,i=void 0,a=t.gbp,n=t.usd,s=t.lows,o=t.highs,r=t.eclass,l=t.balance;void 0!==a&&(0!==t.lastGBP?r=a>e?"up":"down":(s.gbp=a,s.usd=n,o.gbp=a,o.usd=n),e=a,i=n,a₿"+e+" £"+parseFloat(i.toFixed(2))+""),this.$btc.prop("title",a)}}),FxModel=Backbone.Model.extend({initialize:function(){this.set("url","/fx"),this.set("fxdata",{}),this.update()},update:function(){var t,e,i;this.getFX(),t=new Date,e=9e5-t.getTime()%9e5,i=function(){this.update()},setTimeout(i.bind(this),e+10)},getFX:function(){var t=this.get("url"),e=this;$.ajax({type:"GET",url:t,data:"",dataType:"json",timeout:1e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(t){var i=1/t.rates.GBP,a=i*t.rates.SEK,n={usd:1,gbp:t.rates.GBP,sek:t.rates.SEK,gpbe:i,sekex:a};e.set("fxdata",n)},error:function(t,e){}})}}),FxView=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$fx=$("#fx")},render:function(){var t=this.model.get("fxdata");this.$fx.html("£1 = $"+parseFloat(t.gpbe.toFixed(2))+" = "+parseFloat(t.sekex.toFixed(2))+" SEK")}}),_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},TrainModel=Backbone.Model.extend({initialize:function(){var t=this.get("from"),e=this.get("to"),i="/getnexttraintimes?from="+t+"&to="+e,a="/gettrains?from="+t+"&to="+e,n=t+e;this.set("url",i),this.set("routeUrl",a),this.set("target",n),this.set("visible",!1),this.update()},update:function(){var t,e=new Date,i=6e4-e.getTime()%6e4;e.getHours()>=6&&this.getTrain(),t=function(){this.update()},setTimeout(t.bind(this),i+10)},getTrain:function(){var t=this.get("url"),e=this;$.ajax({type:"GET",url:t,data:"",dataType:"json",timeout:1e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(t){e.set("trainData",t)},error:function(t,e){}})},getRoute:function(){var t=this.get("routeUrl"),e=this;!0===this.get("visible")?this.set("visible",!1):$.ajax({type:"GET",url:t,data:"",dataType:"json",timeout:1e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(t){e.set("route",t),e.set("visible",!0)},error:function(t,e){}})}}),TrainView=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$trains=$("#trains"),this.$traininfo=$("#traininfo"),this.$traintext=$("#trainResults"),this.$el=this.$trains,this.initView()},events:{click:"showTrains"},render:function(){var t,e,i,a,n,s,o,r,l,d,h,u,c,m,p,g,b,f,w,v,y,T,A,C,$=void 0,x=void 0,S=this.model.get("trainData"),E=this.model.get("visible"),k=this.model.get("route");if($="on time"===S.eta.toLowerCase()?S.sta:S.eta,x="on time"===S.eta.toLowerCase()?"ontime":"delayed",this.$button.html($),this.$button.removeClass("delayed").removeClass("ontime").addClass(x),E){if(t="
"+k.locationName+" TO "+k.filterLocationName+'
\n \n \n \n \n \n ',e=[],"object"===_typeof(k.trainServices)&&null!==k.trainServices){i=!0,a=!1,n=void 0;try{for(s=k.trainServices[Symbol.iterator]();!(i=(o=s.next()).done);i=!0)r=o.value,l=r.destination[0],d=null!==l.via?""+l.via+"":"",h=null!==r.platform?r.platform:"💠",u=null!==r.sta?r.sta:"D "+r.std,c=null!==r.eta?r.eta:r.etd,e.push({location:l.locationName,time:u,status:c,platform:h,cancel:r.cancelReason,type:"train"}),t=r.isCancelled?t+"\n \n \n \n \n ":t+"\n \n \n \n \n "}catch(t){a=!0,n=t}finally{try{!i&&s.return&&s.return()}finally{if(a)throw n}}}if("object"===_typeof(k.busServices)&&null!==k.busServices){m=!0,p=!1,g=void 0;try{for(b=k.busServices[Symbol.iterator]();!(m=(f=b.next()).done);m=!0)w=f.value,v=w.destination[0],y=null!==v.via?""+v.via+"":"",T=null!==w.platform?w.platform:"",A=null!==w.sta?w.sta:"D "+w.std,C=null!==w.eta?w.eta:w.etd,e.push({location:v.locationName,time:A,status:C,platform:T,cancel:w.cancelReason,type:"bus"}),t=t+"\n \n \n \n \n "}catch(t){p=!0,g=t}finally{try{!m&&b.return&&b.return()}finally{if(p)throw g}}}t+="
DestinationTimeStatusPlatform
"+l.locationName+" "+d+""+u+'❌ '+r.cancelReason+"
"+l.locationName+" "+d+""+u+""+c+""+h+"
🚌 "+v.locationName+" "+y+""+A+""+C+""+T+"
",this.$traintext.empty().html(t),this.$traintext.removeClass("mui--hide").addClass("mui--show")}else this.$traintext.removeClass("mui--show").addClass("mui--hide")},initView:function(){var t,e=this,i=this.model.get("target"),a="
"+i.toUpperCase()+':
';this.$html=$(a),this.$html.on("click",function(){e.model.getRoute()}),this.$trains.append(this.$html),this.$button=$("#"+i),t="click #$(target)",this.events[t]="showTrains"},showTrains:function(){}}),WeatherModel=Backbone.Model.extend({initialize:function(){var t=this.get("geo");this.set("url","https://api.darksky.net/forecast/9ad2a41d420f3cf4960571bb886f710c/"+t.coords.latitude.toString()+","+t.coords.longitude.toString()+"?units=uk2&exclude=minutely,hourly,alerts,flags"),this.update()},update:function(){var t,e,i;this.getWeather(),t=new Date,e=18e5-t.getTime()%18e5,i=function(){this.update()},setTimeout(i.bind(this),e+10)},getWeather:function(){var t=this;$.ajax({type:"GET",url:t.get("url"),data:"",dataType:"jsonp",timeout:1e4,context:$("body"),contentType:"application/json",headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"PUT, GET, POST, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type"},success:function(e){var i={temperature:e.currently.temperature,icon:e.currently.icon,summary:e.currently.summary,daily:e.daily.summary};t.set(i)},error:function(t,e){}})}}),Weather=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$weatherText=$("#weatherDescription"),this.$weatherTemp=$("#temp"),this.$weatherIcon=$("#weatherIcon")},render:function(){var t='';this.$weatherTemp.empty().html(parseInt(this.model.get("temperature"))+"°c "),this.$weatherText.empty().html(this.model.get("summary")),this.$weatherIcon.empty().html(t)}}),WeatherSlim=Backbone.View.extend({tagName:"div",initialize:function(){_.bindAll(this,"render"),this.model.bind("change",this.render),this.$weather=$("#weather"),this.render()},render:function(){var t=this.model.get("summary"),e=this.model.get("temperature"),i=this.model.get("daily"),a=t+" "+e+"° "+i+"";this.$weather.empty().html(a)}}),_.templateSettings={evaluate:/\{\{(.+?)\}\}/g,interpolate:/\{\{=(.+?)\}\}/g,escape:/\{\{-(.+?)\}\}/g},Array.prototype.random=function(){return this[Math.floor(Math.random()*this.length)]},PasswordView=Backbone.View.extend({el:"#passwords",passwordTemplate:_.template($("#password-template").html()),initialize:function(){this.alpha=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"],this.whitespace=[".","~","#","!","$","+","-","+"],this.numbers=["0","1","2","3","4","5","6","7","8","9"],this.left=["Alabama","Alaska","Arizona","Maryland","Nevada","Mexico","Texas","Utah","Glasgow","Inverness","Edinburgh","Dumbarton","Balloch","Renton","Cardross","Dundee","Paisley","Hamilton","Greenock","Falkirk","Irvine","Renfrew","Erskine","London","Hammersmith","Islington","Silver","Black","Yellow","Purple","White","Pink","Red","Orange","Brown","Green","Blue","Amber","Aqua","Azure","Bronze","Coral","Copper","Crimson","Cyan","Ginger","Gold","Indigo","Jade"],this.right=["Aganju","Cygni","Akeron","Antares","Aragoth","Ardus","Carpenter","Cooper","Dahin","Capella","Endriago","Gallina","Fenris","Freya","Glenn","Grissom","Jotunheim","Kailaasa","Lagarto","Muspelheim","Nifleheim","Primus","Vega","Ragnarok","Shepard","Slayton","Tarsis","Mercury","Venus","Mars","Earth","Terra","Jupiter","Saturn","Uranus","Neptune","Pluto","Europa","Ganymede","Callisto","Titan","Juno","Eridanus","Scorpius","Crux","Cancer","Taurus","Lyra","Andromeda","Virgo","Aquarius","Cygnus","Corvus","Taurus","Draco","Perseus","Pegasus","Gemini","Columbia","Bootes","Orion","Deneb","Merope","Agate","Amber","Beryl","Calcite","Citrine","Coral","Diamond","Emerald","Garnet","Jade","Lapis","Moonstone","Obsidian","Onyx","Opal","Pearl","Quartz","Ruby","Sapphire","Topaz","Iron","Lead","Nickel","Copper","Zinc","Tin","Manes","Argon","Neon","Alpha","Bravo","Charlie","Delta","Echo","Foxtrot","Golf","Hotel","India","Juliett","Kilo","Lima","Mike","November","Oscar","Papa","Quebec","Romeo","Sierra","Tango","Uniform","Victor","Whisky","Xray","Yankee","Zulu"],this.passwordOut=this.$("#passwordOut"),_.bindAll(this,"newClick")},events:{"click #newPassword":"newClick"},numberCluster:function(){return this.numbers.random()+this.numbers.random()+this.numbers.random()},randomAmount:function(t){var e,i="";for(e=0;eMonday August 07, 2017 - The 218th day of 2017, and there are 146 days until the end of the year","tv":{"entries":[{"summary":"Game of Thrones 7x4 - The Spoils of War","dtstart":"2017-08-07T01:00:00.000Z","dtend":"2017-08-07T02:00:00.000Z","description":"Coming Soon...","timeStart":"2:00:00","timeEnd":"3:00:00","duration":"1 hour","combined":"2:00:00 - 'Game of Thrones 7x4 - The Spoils of War, 1 hour","recur":null,"long":"Monday, 2:00:00 - ","longcombined":"Monday, 2:00:00 - Game of Thrones 7x4 - The Spoils of War, 1 hour"},{"summary":"Rick and Morty 3x3 - Pickle Rick","dtstart":"2017-08-07T03:30:00.000Z","dtend":"2017-08-07T04:00:00.000Z","description":"Coming Soon...","timeStart":"4:30:00","timeEnd":"5:00:00","duration":"30 minutes","combined":"4:30:00 - 'Rick and Morty 3x3 - Pickle Rick, 30 minutes","recur":null,"long":"Monday, 4:30:00 - ","longcombined":"Monday, 4:30:00 - Rick and Morty 3x3 - Pickle Rick, 30 minutes"},{"summary":"Last Week Tonight With John Oliver 4x20 - Season 4\\, Episode 20","dtstart":"2017-08-07T03:00:00.000Z","dtend":"2017-08-07T03:30:00.000Z","description":"Coming Soon...","timeStart":"4:00:00","timeEnd":"4:30:00","duration":"30 minutes","combined":"4:00:00 - 'Last Week Tonight With John Oliver 4x20 - Season 4\\, Episode 20, 30 minutes","recur":null,"long":"Monday, 4:00:00 - ","longcombined":"Monday, 4:00:00 - Last Week Tonight With John Oliver 4x20 - Season 4\\, Episode 20, 30 minutes"}]},"cal":{"today":[{"summary":"Summer Bank Holiday (Scotland)","dtstart":"2017-08-06T23:00:00.000Z","dtend":"2017-08-07T23:00:00.000Z","description":"Public holiday in: Scotland","timeStart":"0:00:00","timeEnd":"0:00:00","duration":"1 day","combined":"0:00:00 - 'Summer Bank Holiday (Scotland), 1 day","recur":null,"long":"Monday, 0:00:00 - ","longcombined":"Monday, 0:00:00 - Summer Bank Holiday (Scotland), 1 day"}],"tomorrow":[],"week":[{"summary":"Update Timesheet","dtstart":"2017-08-11T14:30:00.150Z","dtend":"2017-08-11T15:30:00.150Z","description":"Update the timesheet using https://outsauce.backofficeportal.co","timeStart":"15:30:00","timeEnd":"16:30:00","duration":"1 hour","combined":"15:30:00 - 'Update Timesheet, 1 hour","recur":"FREQ=WEEKLY;COUNT=15;BYDAY=FR","long":"Friday, 15:30:00 - ","longcombined":"Friday, 15:30:00 - Update Timesheet, 1 hour"}]},"swedish":{"xml":{"$":{"xmlns:wotd":"http://www.transparent.com/word-of-the-day/"},"words":{"date":"08-07-2017","langname":"Swedish","wordtype":"noun","word":"(ett) utkast","wordsound":"http://wotd.transparent.com/swedish/level-1/sound/00047_WOTD_Swedish_Words.mp3","translation":"draft","fnphrase":"Första utkastet är färdigt imorgon.","phrasesound":"http://wotd.transparent.com/swedish/level-1/sound/00047_WOTD_Swedish_Sentences.mp3","enphrase":"The first draft will be ready by tomorrow.","wotd:transliteratedWord":"","wotd:transliteratedSentence":"","notes":""}}},"fitbit":{},"ftse":[{"name":"Glencore Plc","price":"346.15","change_amount":"+8.40","change_percent":"+2.49%"},{"name":"Anglo American","price":"1,300.00","change_amount":"+29.50","change_percent":"+2.32%"},{"name":"Coca-Cola HBC AG","price":"2,399.50","change_amount":"+51.00","change_percent":"+2.17%"},{"name":"Rio Tinto Plc","price":"3,611.00","change_amount":"+65.50","change_percent":"+1.85%"},{"name":"Persimmon Plc","price":"2,507.00","change_amount":"+43.00","change_percent":"+1.75%"},{"name":"BHP Billiton Plc","price":"1,388.75","change_amount":"+23.50","change_percent":"+1.72%"},{"name":"Taylor Wimpey Plc","price":"190.55","change_amount":"+2.70","change_percent":"+1.44%"},{"name":"Barratt Developments Plc","price":"596.25","change_amount":"+7.00","change_percent":"+1.19%"},{"name":"Legal & General Group Plc","price":"275.65","change_amount":"+3.10","change_percent":"+1.14%"},{"name":"Ashtead Group Plc","price":"1,662.50","change_amount":"+18.00","change_percent":"+1.09%"}],"quotes":{"quote":"I have never killed anyone, but I have read some obituary notices with great satisfaction.","author":"Clarence Darrow","category":"Famous"}},"expire":3600000,"date":{"year":2017,"month":8,"day":7}} +{"last":1502149049653,"data":{"trains":{"last":"2017-08-07T23:11:44.938Z","data":[]},"weather":{"currently":"Clear. Around 9 to 19 degrees.","today":"Light rain in the evening.","later":"Light rain throughout the week, with temperatures falling to 18°C on Saturday.","alerts":{},"data":{"latitude":55.95,"longitude":-4.566667,"timezone":"Europe/London","offset":1,"currently":{"time":1502147504,"summary":"Clear","icon":"clear-night","nearestStormDistance":13,"nearestStormBearing":330,"precipIntensity":0,"precipProbability":0,"temperature":11.66,"apparentTemperature":11.66,"dewPoint":8.06,"humidity":0.79,"windSpeed":3.99,"windGust":5.19,"windBearing":248,"visibility":10,"cloudCover":0,"pressure":1013.9,"ozone":357.65,"uvIndex":0},"minutely":{"summary":"Clear for the hour.","icon":"clear-night","data":[{"time":1502147460,"precipIntensity":0,"precipProbability":0},{"time":1502147520,"precipIntensity":0,"precipProbability":0},{"time":1502147580,"precipIntensity":0,"precipProbability":0},{"time":1502147640,"precipIntensity":0,"precipProbability":0},{"time":1502147700,"precipIntensity":0,"precipProbability":0},{"time":1502147760,"precipIntensity":0,"precipProbability":0},{"time":1502147820,"precipIntensity":0,"precipProbability":0},{"time":1502147880,"precipIntensity":0,"precipProbability":0},{"time":1502147940,"precipIntensity":0,"precipProbability":0},{"time":1502148000,"precipIntensity":0,"precipProbability":0},{"time":1502148060,"precipIntensity":0,"precipProbability":0},{"time":1502148120,"precipIntensity":0,"precipProbability":0},{"time":1502148180,"precipIntensity":0,"precipProbability":0},{"time":1502148240,"precipIntensity":0,"precipProbability":0},{"time":1502148300,"precipIntensity":0,"precipProbability":0},{"time":1502148360,"precipIntensity":0,"precipProbability":0},{"time":1502148420,"precipIntensity":0,"precipProbability":0},{"time":1502148480,"precipIntensity":0,"precipProbability":0},{"time":1502148540,"precipIntensity":0,"precipProbability":0},{"time":1502148600,"precipIntensity":0,"precipProbability":0},{"time":1502148660,"precipIntensity":0,"precipProbability":0},{"time":1502148720,"precipIntensity":0,"precipProbability":0},{"time":1502148780,"precipIntensity":0,"precipProbability":0},{"time":1502148840,"precipIntensity":0,"precipProbability":0},{"time":1502148900,"precipIntensity":0,"precipProbability":0},{"time":1502148960,"precipIntensity":0,"precipProbability":0},{"time":1502149020,"precipIntensity":0,"precipProbability":0},{"time":1502149080,"precipIntensity":0,"precipProbability":0},{"time":1502149140,"precipIntensity":0,"precipProbability":0},{"time":1502149200,"precipIntensity":0,"precipProbability":0},{"time":1502149260,"precipIntensity":0,"precipProbability":0},{"time":1502149320,"precipIntensity":0,"precipProbability":0},{"time":1502149380,"precipIntensity":0,"precipProbability":0},{"time":1502149440,"precipIntensity":0,"precipProbability":0},{"time":1502149500,"precipIntensity":0,"precipProbability":0},{"time":1502149560,"precipIntensity":0.1524,"precipIntensityError":0.1016,"precipProbability":0.01,"precipType":"rain"},{"time":1502149620,"precipIntensity":0,"precipProbability":0},{"time":1502149680,"precipIntensity":0,"precipProbability":0},{"time":1502149740,"precipIntensity":0.1778,"precipIntensityError":0.1016,"precipProbability":0.01,"precipType":"rain"},{"time":1502149800,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.01,"precipType":"rain"},{"time":1502149860,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.01,"precipType":"rain"},{"time":1502149920,"precipIntensity":0,"precipProbability":0},{"time":1502149980,"precipIntensity":0.1778,"precipIntensityError":0.1016,"precipProbability":0.01,"precipType":"rain"},{"time":1502150040,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.01,"precipType":"rain"},{"time":1502150100,"precipIntensity":0.1778,"precipIntensityError":0.1016,"precipProbability":0.01,"precipType":"rain"},{"time":1502150160,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502150220,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502150280,"precipIntensity":0.2032,"precipIntensityError":0.127,"precipProbability":0.03,"precipType":"rain"},{"time":1502150340,"precipIntensity":0.2032,"precipIntensityError":0.127,"precipProbability":0.03,"precipType":"rain"},{"time":1502150400,"precipIntensity":0.1778,"precipIntensityError":0.1016,"precipProbability":0.02,"precipType":"rain"},{"time":1502150460,"precipIntensity":0.2032,"precipIntensityError":0.127,"precipProbability":0.03,"precipType":"rain"},{"time":1502150520,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502150580,"precipIntensity":0.1778,"precipIntensityError":0.1016,"precipProbability":0.02,"precipType":"rain"},{"time":1502150640,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502150700,"precipIntensity":0.2032,"precipIntensityError":0.127,"precipProbability":0.03,"precipType":"rain"},{"time":1502150760,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502150820,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502150880,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502150940,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.02,"precipType":"rain"},{"time":1502151000,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.01,"precipType":"rain"},{"time":1502151060,"precipIntensity":0.1778,"precipIntensityError":0.127,"precipProbability":0.01,"precipType":"rain"}]},"hourly":{"summary":"Light rain tomorrow evening.","icon":"rain","data":[{"time":1502146800,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":11.66,"apparentTemperature":11.66,"dewPoint":7.93,"humidity":0.78,"windSpeed":4.09,"windGust":5.33,"windBearing":250,"visibility":10,"cloudCover":0,"pressure":1013.9,"ozone":357.57,"uvIndex":0},{"time":1502150400,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":10.82,"apparentTemperature":10.82,"dewPoint":7.74,"humidity":0.81,"windSpeed":3.67,"windGust":4.64,"windBearing":237,"visibility":10,"cloudCover":0,"pressure":1013.87,"ozone":357.96,"uvIndex":0},{"time":1502154000,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":10.01,"apparentTemperature":10.01,"dewPoint":7.53,"humidity":0.85,"windSpeed":2.85,"windGust":4,"windBearing":209,"visibility":10,"cloudCover":0,"pressure":1013.81,"ozone":358.18,"uvIndex":0},{"time":1502157600,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":9.48,"apparentTemperature":9.48,"dewPoint":7.32,"humidity":0.86,"windSpeed":2.76,"windGust":3.47,"windBearing":263,"visibility":10,"cloudCover":0,"pressure":1013.69,"ozone":358.27,"uvIndex":0},{"time":1502161200,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":9.33,"apparentTemperature":9.33,"dewPoint":7.2,"humidity":0.87,"windSpeed":2.57,"windGust":3.05,"windBearing":242,"visibility":10,"cloudCover":0,"pressure":1013.61,"ozone":358.27,"uvIndex":0},{"time":1502164800,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":9.41,"apparentTemperature":9.41,"dewPoint":7.19,"humidity":0.86,"windSpeed":2,"windGust":2.74,"windBearing":233,"visibility":10,"cloudCover":0,"pressure":1013.55,"ozone":358.08,"uvIndex":0},{"time":1502168400,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":9.56,"apparentTemperature":9.56,"dewPoint":7.27,"humidity":0.86,"windSpeed":1.57,"windGust":2.58,"windBearing":286,"visibility":10,"cloudCover":0,"pressure":1013.52,"ozone":357.79,"uvIndex":0},{"time":1502172000,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":10.29,"apparentTemperature":10.29,"dewPoint":7.54,"humidity":0.83,"windSpeed":2.13,"windGust":2.63,"windBearing":277,"visibility":10,"cloudCover":0,"pressure":1013.57,"ozone":357.47,"uvIndex":0},{"time":1502175600,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":11.95,"apparentTemperature":11.95,"dewPoint":8.21,"humidity":0.78,"windSpeed":2.07,"windGust":3.12,"windBearing":221,"visibility":10,"cloudCover":0,"pressure":1013.76,"ozone":357.15,"uvIndex":1},{"time":1502179200,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":13.98,"apparentTemperature":13.98,"dewPoint":9.06,"humidity":0.72,"windSpeed":2.72,"windGust":3.87,"windBearing":358,"visibility":10,"cloudCover":0.01,"pressure":1014.06,"ozone":356.83,"uvIndex":1},{"time":1502182800,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":15.51,"apparentTemperature":15.51,"dewPoint":9.64,"humidity":0.68,"windSpeed":3.5,"windGust":4.51,"windBearing":319,"visibility":10,"cloudCover":0.01,"pressure":1014.28,"ozone":356.33,"uvIndex":2},{"time":1502186400,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":16.42,"apparentTemperature":16.42,"dewPoint":9.71,"humidity":0.65,"windSpeed":3.58,"windGust":4.84,"windBearing":322,"visibility":10,"cloudCover":0,"pressure":1014.33,"ozone":355.69,"uvIndex":3},{"time":1502190000,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":16.93,"apparentTemperature":16.93,"dewPoint":9.51,"humidity":0.62,"windSpeed":3.53,"windGust":5.04,"windBearing":343,"visibility":10,"cloudCover":0,"pressure":1014.33,"ozone":354.96,"uvIndex":4},{"time":1502193600,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":17.28,"apparentTemperature":17.28,"dewPoint":9.35,"humidity":0.6,"windSpeed":3.55,"windGust":5.3,"windBearing":1,"visibility":10,"cloudCover":0.05,"pressure":1014.37,"ozone":354.19,"uvIndex":4},{"time":1502197200,"summary":"Partly Cloudy","icon":"partly-cloudy-day","precipIntensity":0.0432,"precipProbability":0.01,"precipType":"rain","temperature":17.93,"apparentTemperature":17.93,"dewPoint":9.31,"humidity":0.57,"windSpeed":3.74,"windGust":5.72,"windBearing":6,"visibility":10,"cloudCover":0.28,"pressure":1014.46,"ozone":353.31,"uvIndex":4},{"time":1502200800,"summary":"Partly Cloudy","icon":"partly-cloudy-day","precipIntensity":0.0584,"precipProbability":0.01,"precipType":"rain","temperature":18.33,"apparentTemperature":18.33,"dewPoint":9.31,"humidity":0.56,"windSpeed":4.07,"windGust":6.19,"windBearing":7,"visibility":10,"cloudCover":0.58,"pressure":1014.56,"ozone":352.4,"uvIndex":3},{"time":1502204400,"summary":"Mostly Cloudy","icon":"partly-cloudy-day","precipIntensity":0.066,"precipProbability":0.02,"precipType":"rain","temperature":18.73,"apparentTemperature":18.73,"dewPoint":9.44,"humidity":0.55,"windSpeed":4.44,"windGust":6.62,"windBearing":10,"visibility":10,"cloudCover":0.77,"pressure":1014.75,"ozone":351.49,"uvIndex":2},{"time":1502208000,"summary":"Mostly Cloudy","icon":"partly-cloudy-day","precipIntensity":0.0838,"precipProbability":0.03,"precipType":"rain","temperature":19.14,"apparentTemperature":19.14,"dewPoint":9.86,"humidity":0.55,"windSpeed":4.87,"windGust":7.03,"windBearing":17,"visibility":10,"cloudCover":0.76,"pressure":1015.06,"ozone":350.44,"uvIndex":1},{"time":1502211600,"summary":"Drizzle","icon":"rain","precipIntensity":0.1651,"precipProbability":0.09,"precipType":"rain","temperature":18.96,"apparentTemperature":18.96,"dewPoint":10.44,"humidity":0.58,"windSpeed":5.33,"windGust":7.39,"windBearing":24,"visibility":10,"cloudCover":0.64,"pressure":1015.41,"ozone":349.41,"uvIndex":1},{"time":1502215200,"summary":"Light Rain","icon":"rain","precipIntensity":0.2362,"precipProbability":0.15,"precipType":"rain","temperature":18.29,"apparentTemperature":18.29,"dewPoint":10.82,"humidity":0.62,"windSpeed":5.61,"windGust":7.44,"windBearing":30,"visibility":10,"cloudCover":0.53,"pressure":1015.89,"ozone":348.64,"uvIndex":0},{"time":1502218800,"summary":"Drizzle","icon":"rain","precipIntensity":0.1829,"precipProbability":0.11,"precipType":"rain","temperature":17.36,"apparentTemperature":17.36,"dewPoint":10.84,"humidity":0.66,"windSpeed":5.54,"windGust":6.96,"windBearing":31,"visibility":10,"cloudCover":0.45,"pressure":1016.47,"ozone":348.24,"uvIndex":0},{"time":1502222400,"summary":"Partly Cloudy","icon":"partly-cloudy-day","precipIntensity":0.0914,"precipProbability":0.03,"precipType":"rain","temperature":16.3,"apparentTemperature":16.3,"dewPoint":10.63,"humidity":0.69,"windSpeed":5.23,"windGust":6.18,"windBearing":32,"visibility":10,"cloudCover":0.38,"pressure":1017.14,"ozone":348.15,"uvIndex":0},{"time":1502226000,"summary":"Partly Cloudy","icon":"partly-cloudy-night","precipIntensity":0.0432,"precipProbability":0.01,"precipType":"rain","temperature":15.29,"apparentTemperature":15.29,"dewPoint":10.26,"humidity":0.72,"windSpeed":4.97,"windGust":5.65,"windBearing":32,"visibility":10,"cloudCover":0.32,"pressure":1017.76,"ozone":348.4,"uvIndex":0},{"time":1502229600,"summary":"Partly Cloudy","icon":"partly-cloudy-night","precipIntensity":0,"precipProbability":0,"temperature":14.4,"apparentTemperature":14.4,"dewPoint":9.69,"humidity":0.73,"windSpeed":4.92,"windGust":5.62,"windBearing":27,"visibility":10,"cloudCover":0.26,"pressure":1018.21,"ozone":349.16,"uvIndex":0},{"time":1502233200,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":13.49,"apparentTemperature":13.49,"dewPoint":9.02,"humidity":0.74,"windSpeed":4.96,"windGust":5.82,"windBearing":19,"visibility":10,"cloudCover":0.22,"pressure":1018.59,"ozone":350.28,"uvIndex":0},{"time":1502236800,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":12.59,"apparentTemperature":12.59,"dewPoint":8.4,"humidity":0.76,"windSpeed":5.08,"windGust":6.04,"windBearing":12,"visibility":10,"cloudCover":0.17,"pressure":1018.96,"ozone":351.31,"uvIndex":0},{"time":1502240400,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":11.74,"apparentTemperature":11.74,"dewPoint":7.85,"humidity":0.77,"windSpeed":5.27,"windGust":6.11,"windBearing":7,"visibility":10,"cloudCover":0.11,"pressure":1019.31,"ozone":352.28,"uvIndex":0},{"time":1502244000,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":11.03,"apparentTemperature":11.03,"dewPoint":7.34,"humidity":0.78,"windSpeed":5.53,"windGust":6.22,"windBearing":3,"visibility":10,"cloudCover":0.05,"pressure":1019.64,"ozone":353.22,"uvIndex":0},{"time":1502247600,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":10.58,"apparentTemperature":10.58,"dewPoint":7.02,"humidity":0.79,"windSpeed":5.74,"windGust":6.58,"windBearing":359,"visibility":10,"cloudCover":0.01,"pressure":1019.99,"ozone":353.33,"uvIndex":0},{"time":1502251200,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":10.19,"apparentTemperature":10.19,"dewPoint":6.92,"humidity":0.8,"windSpeed":5.83,"windGust":7.33,"windBearing":354,"visibility":10,"cloudCover":0,"pressure":1020.32,"ozone":352.26,"uvIndex":0},{"time":1502254800,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":9.87,"apparentTemperature":8.58,"dewPoint":7.02,"humidity":0.82,"windSpeed":5.86,"windGust":8.38,"windBearing":351,"visibility":10,"cloudCover":0,"pressure":1020.64,"ozone":350.43,"uvIndex":0},{"time":1502258400,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":10.24,"apparentTemperature":10.24,"dewPoint":7.31,"humidity":0.82,"windSpeed":6.04,"windGust":9.57,"windBearing":350,"visibility":10,"cloudCover":0.01,"pressure":1020.98,"ozone":348.47,"uvIndex":0},{"time":1502262000,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":11.87,"apparentTemperature":11.87,"dewPoint":7.93,"humidity":0.77,"windSpeed":6.57,"windGust":11.24,"windBearing":356,"visibility":10,"cloudCover":0,"pressure":1021.33,"ozone":346.37,"uvIndex":1},{"time":1502265600,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":14.03,"apparentTemperature":14.03,"dewPoint":8.77,"humidity":0.71,"windSpeed":7.11,"windGust":13.08,"windBearing":3,"visibility":10,"cloudCover":0,"pressure":1021.67,"ozone":344.02,"uvIndex":1},{"time":1502269200,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":15.79,"apparentTemperature":15.79,"dewPoint":9.41,"humidity":0.66,"windSpeed":7.39,"windGust":14.06,"windBearing":6,"visibility":10,"cloudCover":0,"pressure":1021.94,"ozone":341.99,"uvIndex":2},{"time":1502272800,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":16.88,"apparentTemperature":16.88,"dewPoint":9.66,"humidity":0.62,"windSpeed":7.34,"windGust":13.33,"windBearing":2,"visibility":10,"cloudCover":0.02,"pressure":1022.07,"ozone":340.37,"uvIndex":3},{"time":1502276400,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":17.63,"apparentTemperature":17.63,"dewPoint":9.71,"humidity":0.6,"windSpeed":7.16,"windGust":11.75,"windBearing":355,"visibility":10,"cloudCover":0.04,"pressure":1022.12,"ozone":339,"uvIndex":4},{"time":1502280000,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":18.13,"apparentTemperature":18.13,"dewPoint":9.73,"humidity":0.58,"windSpeed":7.15,"windGust":10.7,"windBearing":350,"visibility":10,"cloudCover":0.08,"pressure":1022.17,"ozone":337.81,"uvIndex":4},{"time":1502283600,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":18.65,"apparentTemperature":18.65,"dewPoint":9.74,"humidity":0.56,"windSpeed":7.5,"windGust":10.88,"windBearing":346,"visibility":10,"cloudCover":0.13,"pressure":1022.26,"ozone":336.79,"uvIndex":4},{"time":1502287200,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":19.08,"apparentTemperature":19.08,"dewPoint":9.73,"humidity":0.55,"windSpeed":8.05,"windGust":11.62,"windBearing":343,"visibility":10,"cloudCover":0.18,"pressure":1022.38,"ozone":335.78,"uvIndex":3},{"time":1502290800,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":19.62,"apparentTemperature":19.62,"dewPoint":9.72,"humidity":0.53,"windSpeed":8.33,"windGust":12.27,"windBearing":341,"visibility":10,"cloudCover":0.23,"pressure":1022.47,"ozone":335.11,"uvIndex":2},{"time":1502294400,"summary":"Partly Cloudy","icon":"partly-cloudy-day","precipIntensity":0,"precipProbability":0,"temperature":20.01,"apparentTemperature":20.01,"dewPoint":9.74,"humidity":0.52,"windSpeed":8.2,"windGust":12.66,"windBearing":340,"visibility":10,"cloudCover":0.25,"pressure":1022.56,"ozone":335,"uvIndex":2},{"time":1502298000,"summary":"Partly Cloudy","icon":"partly-cloudy-day","precipIntensity":0,"precipProbability":0,"temperature":19.92,"apparentTemperature":19.92,"dewPoint":9.77,"humidity":0.52,"windSpeed":7.83,"windGust":12.94,"windBearing":340,"visibility":10,"cloudCover":0.25,"pressure":1022.62,"ozone":335.21,"uvIndex":1},{"time":1502301600,"summary":"Partly Cloudy","icon":"partly-cloudy-day","precipIntensity":0,"precipProbability":0,"temperature":19.12,"apparentTemperature":19.12,"dewPoint":9.67,"humidity":0.54,"windSpeed":7.4,"windGust":12.91,"windBearing":337,"visibility":10,"cloudCover":0.25,"pressure":1022.84,"ozone":334.57,"uvIndex":1},{"time":1502305200,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":17.87,"apparentTemperature":17.87,"dewPoint":9.34,"humidity":0.57,"windSpeed":6.99,"windGust":12.43,"windBearing":330,"visibility":10,"cloudCover":0.22,"pressure":1023.33,"ozone":332.54,"uvIndex":0},{"time":1502308800,"summary":"Clear","icon":"clear-day","precipIntensity":0,"precipProbability":0,"temperature":16.09,"apparentTemperature":16.09,"dewPoint":8.88,"humidity":0.62,"windSpeed":6.51,"windGust":11.62,"windBearing":320,"visibility":10,"cloudCover":0.18,"pressure":1023.96,"ozone":329.72,"uvIndex":0},{"time":1502312400,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":14.46,"apparentTemperature":14.46,"dewPoint":8.44,"humidity":0.67,"windSpeed":6,"windGust":10.69,"windBearing":311,"visibility":10,"cloudCover":0.15,"pressure":1024.47,"ozone":326.95,"uvIndex":0},{"time":1502316000,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":13.33,"apparentTemperature":13.33,"dewPoint":8.11,"humidity":0.71,"windSpeed":5.4,"windGust":9.54,"windBearing":295,"visibility":10,"cloudCover":0.1,"pressure":1024.79,"ozone":324.2,"uvIndex":0},{"time":1502319600,"summary":"Clear","icon":"clear-night","precipIntensity":0,"precipProbability":0,"temperature":12.38,"apparentTemperature":12.38,"dewPoint":7.81,"humidity":0.74,"windSpeed":4.78,"windGust":8.26,"windBearing":284,"visibility":10,"cloudCover":0.06,"pressure":1024.99,"ozone":321.4,"uvIndex":0}]},"daily":{"summary":"Light rain throughout the week, with temperatures falling to 18°C on Saturday.","icon":"rain","data":[{"time":1502146800,"summary":"Light rain in the evening.","icon":"rain","sunriseTime":1502167038,"sunsetTime":1502223189,"moonPhase":0.52,"precipIntensity":0.0457,"precipIntensityMax":0.2362,"precipIntensityMaxTime":1502215200,"precipProbability":0.15,"precipType":"rain","temperatureMin":9.33,"temperatureMinTime":1502161200,"temperatureMax":19.14,"temperatureMaxTime":1502208000,"apparentTemperatureMin":9.33,"apparentTemperatureMinTime":1502161200,"apparentTemperatureMax":19.14,"apparentTemperatureMaxTime":1502208000,"dewPoint":8.99,"humidity":0.71,"windSpeed":2.1,"windGust":7.44,"windGustTime":1502215200,"windBearing":352,"visibility":10,"cloudCover":0.21,"pressure":1014.77,"ozone":354.1,"uvIndex":4,"uvIndexTime":1502190000},{"time":1502233200,"summary":"Partly cloudy in the evening.","icon":"partly-cloudy-day","sunriseTime":1502253554,"sunsetTime":1502309458,"moonPhase":0.55,"precipIntensity":0,"precipIntensityMax":0,"precipProbability":0,"temperatureMin":9.87,"temperatureMinTime":1502254800,"temperatureMax":20.01,"temperatureMaxTime":1502294400,"apparentTemperatureMin":8.58,"apparentTemperatureMinTime":1502254800,"apparentTemperatureMax":20.01,"apparentTemperatureMaxTime":1502294400,"dewPoint":8.72,"humidity":0.67,"windSpeed":6.32,"windGust":14.06,"windGustTime":1502269200,"windBearing":348,"visibility":10,"cloudCover":0.11,"pressure":1021.72,"ozone":341.13,"uvIndex":4,"uvIndexTime":1502276400},{"time":1502319600,"summary":"Light rain overnight.","icon":"rain","sunriseTime":1502340071,"sunsetTime":1502395725,"moonPhase":0.59,"precipIntensity":0,"precipIntensityMax":0,"precipProbability":0,"temperatureMin":9.54,"temperatureMinTime":1502337600,"temperatureMax":18.67,"temperatureMaxTime":1502380800,"apparentTemperatureMin":8.86,"apparentTemperatureMinTime":1502337600,"apparentTemperatureMax":18.67,"apparentTemperatureMaxTime":1502380800,"dewPoint":8.72,"humidity":0.69,"windSpeed":5.37,"windGust":26.5,"windGustTime":1502402400,"windBearing":245,"visibility":10,"cloudCover":0.43,"pressure":1023.37,"ozone":307.65,"uvIndex":4,"uvIndexTime":1502362800},{"time":1502406000,"summary":"Light rain until evening.","icon":"rain","sunriseTime":1502426588,"sunsetTime":1502481990,"moonPhase":0.62,"precipIntensity":0.3683,"precipIntensityMax":1.0262,"precipIntensityMaxTime":1502431200,"precipProbability":0.42,"precipType":"rain","temperatureMin":14.59,"temperatureMinTime":1502420400,"temperatureMax":17.82,"temperatureMaxTime":1502470800,"apparentTemperatureMin":14.59,"apparentTemperatureMinTime":1502420400,"apparentTemperatureMax":17.82,"apparentTemperatureMaxTime":1502470800,"dewPoint":11.84,"humidity":0.76,"windSpeed":11.51,"windGust":30.84,"windGustTime":1502420400,"windBearing":232,"visibility":7.96,"cloudCover":0.88,"pressure":1012.29,"ozone":303.67,"uvIndex":3,"uvIndexTime":1502452800},{"time":1502492400,"summary":"Mostly cloudy until evening.","icon":"partly-cloudy-day","sunriseTime":1502513105,"sunsetTime":1502568255,"moonPhase":0.66,"precipIntensity":0.0533,"precipIntensityMax":0.1067,"precipIntensityMaxTime":1502539200,"precipProbability":0.06,"precipType":"rain","temperatureMin":12.28,"temperatureMinTime":1502517600,"temperatureMax":17.58,"temperatureMaxTime":1502553600,"apparentTemperatureMin":12.28,"apparentTemperatureMinTime":1502517600,"apparentTemperatureMax":17.58,"apparentTemperatureMaxTime":1502553600,"dewPoint":9.49,"humidity":0.72,"windSpeed":9.5,"windGust":21.84,"windGustTime":1502492400,"windBearing":275,"visibility":10,"cloudCover":0.55,"pressure":1016.18,"ozone":320.94,"uvIndex":3,"uvIndexTime":1502539200},{"time":1502578800,"summary":"Mostly cloudy throughout the day.","icon":"partly-cloudy-day","sunriseTime":1502599623,"sunsetTime":1502654518,"moonPhase":0.69,"precipIntensity":0.0102,"precipIntensityMax":0.0483,"precipIntensityMaxTime":1502658000,"precipProbability":0.02,"precipType":"rain","temperatureMin":10.72,"temperatureMinTime":1502600400,"temperatureMax":18.39,"temperatureMaxTime":1502640000,"apparentTemperatureMin":10.72,"apparentTemperatureMinTime":1502600400,"apparentTemperatureMax":18.39,"apparentTemperatureMaxTime":1502640000,"dewPoint":8.37,"humidity":0.67,"windSpeed":7.26,"windGust":17.41,"windGustTime":1502604000,"windBearing":223,"cloudCover":0.68,"pressure":1021.02,"ozone":311.82,"uvIndex":3,"uvIndexTime":1502622000},{"time":1502665200,"summary":"Light rain throughout the day.","icon":"rain","sunriseTime":1502686141,"sunsetTime":1502740779,"moonPhase":0.73,"precipIntensity":0.4597,"precipIntensityMax":1.2624,"precipIntensityMaxTime":1502712000,"precipProbability":0.54,"precipType":"rain","temperatureMin":13.36,"temperatureMinTime":1502672400,"temperatureMax":18.58,"temperatureMaxTime":1502726400,"apparentTemperatureMin":13.36,"apparentTemperatureMinTime":1502672400,"apparentTemperatureMax":18.58,"apparentTemperatureMaxTime":1502726400,"dewPoint":11.13,"humidity":0.76,"windSpeed":8.95,"windGust":19.46,"windGustTime":1502712000,"windBearing":190,"cloudCover":0.8,"pressure":1012.67,"ozone":305.34,"uvIndex":3,"uvIndexTime":1502712000},{"time":1502751600,"summary":"Light rain in the morning.","icon":"rain","sunriseTime":1502772658,"sunsetTime":1502827040,"moonPhase":0.77,"precipIntensity":0.0838,"precipIntensityMax":0.3404,"precipIntensityMaxTime":1502784000,"precipProbability":0.31,"precipType":"rain","temperatureMin":11.75,"temperatureMinTime":1502773200,"temperatureMax":18.32,"temperatureMaxTime":1502812800,"apparentTemperatureMin":11.75,"apparentTemperatureMinTime":1502773200,"apparentTemperatureMax":18.32,"apparentTemperatureMaxTime":1502812800,"dewPoint":10.03,"humidity":0.74,"windSpeed":8.21,"windGust":13.05,"windGustTime":1502794800,"windBearing":254,"cloudCover":0.38,"pressure":1014.94,"ozone":324.15,"uvIndex":4,"uvIndexTime":1502798400}]},"flags":{"sources":["datapoint","isd","nearest-precip","metwarn","cmc","gfs","madis","darksky"],"datapoint-stations":["uk-301777","uk-3134","uk-322052","uk-322595","uk-322659","uk-350056","uk-351269","uk-351289","uk-351397","uk-351465","uk-352102","uk-352379","uk-352954","uk-354999","uk-371524","uk-371606"],"isd-stations":["031070-99999","031160-99999","031200-99999","031290-99999","031330-99999","031340-99999","031350-99999","031360-99999","031380-99999","031390-99999","031400-99999","031430-99999","031450-99999","031480-99999","031490-99999","031520-99999"],"units":"uk2"}}},"history":["Today in 1296 the Scottish Coronation Stone, the Stone of Destiny, was removed from Scone Abbey.","The stone was taken on the orders of King Edward I of England, and was transported to Westminster Abbey, where it was used to crown English monarchs until it was returned to Scotland in 1996. The stone itself is a block of red sandstone, and was said to have been used by Jacob, father of the twelve tribes of Israel, as a pillow.","On 8 August 1503 King James IV of Scotland married Margaret Tudor, sister of Henry VIII of England.","The wedding was christened the Marriage of the Thistle and the Rose, and was designed to creata stable relations between the two feuding kingdoms.","In the coming century it was also to form the basis from which the Stewarts made claim to the English crown.","Netscape Communications Corp. goes public after generating revenues of $16.6 million in the previous 12 months. Shares jumped from $28 to $75 before closing at $58 the first day. Netscape was co-founded by Marc Andreessen who had earlier written the MOSAIC web browser while a student at the University of Illinois."],"today":"Tuesday August 08, 2017 - The 219th day of 2017, and there are 145 days until the end of the year","tv":{"entries":[{"summary":"Shadowhunters 2x19 - Hail and Farewell","dtstart":"2017-08-08T00:00:00.000Z","dtend":"2017-08-08T01:00:00.000Z","description":"With Valentine and Sebastian on the loose\\, the Downworlders","timeStart":"1:00:00","timeEnd":"2:00:00","duration":"1 hour","combined":"1:00:00 - 'Shadowhunters 2x19 - Hail and Farewell, 1 hour","recur":null,"long":"Tuesday, 1:00:00 - ","longcombined":"Tuesday, 1:00:00 - Shadowhunters 2x19 - Hail and Farewell, 1 hour"}]},"cal":{"today":[],"tomorrow":[],"week":[{"summary":"Update Timesheet","dtstart":"2017-08-11T14:30:00.085Z","dtend":"2017-08-11T15:30:00.085Z","description":"Update the timesheet using https://outsauce.backofficeportal.co","timeStart":"15:30:00","timeEnd":"16:30:00","duration":"1 hour","combined":"15:30:00 - 'Update Timesheet, 1 hour","recur":"FREQ=WEEKLY;COUNT=15;BYDAY=FR","long":"Friday, 15:30:00 - ","longcombined":"Friday, 15:30:00 - Update Timesheet, 1 hour"}]},"swedish":{"xml":{"$":{"xmlns:wotd":"http://www.transparent.com/word-of-the-day/"},"words":{"date":"08-07-2017","langname":"Swedish","wordtype":"noun","word":"(ett) utkast","wordsound":"http://wotd.transparent.com/swedish/level-1/sound/00047_WOTD_Swedish_Words.mp3","translation":"draft","fnphrase":"Första utkastet är färdigt imorgon.","phrasesound":"http://wotd.transparent.com/swedish/level-1/sound/00047_WOTD_Swedish_Sentences.mp3","enphrase":"The first draft will be ready by tomorrow.","wotd:transliteratedWord":"","wotd:transliteratedSentence":"","notes":""}}},"fitbit":{},"ftse":[{"name":"Anglo American","price":"1,270.50","change_amount":"+40.00","change_percent":"+3.15%"},{"name":"Glencore Plc","price":"337.80","change_amount":"+8.95","change_percent":"+2.65%"},{"name":"Rio Tinto Plc","price":"3,546.00","change_amount":"+90.50","change_percent":"+2.55%"},{"name":"ConvaTec Group Plc","price":"284.50","change_amount":"+6.60","change_percent":"+2.32%"},{"name":"BHP Billiton Plc","price":"1,365.00","change_amount":"+30.50","change_percent":"+2.23%"},{"name":"Coca-Cola HBC AG","price":"2,348.00","change_amount":"+46.00","change_percent":"+1.96%"},{"name":"Persimmon Plc","price":"2,464.00","change_amount":"+46.00","change_percent":"+1.87%"},{"name":"Randgold Resources","price":"7,100.00","change_amount":"+130.00","change_percent":"+1.83%"},{"name":"Taylor Wimpey Plc","price":"187.90","change_amount":"+3.10","change_percent":"+1.65%"},{"name":"Fresnillo","price":"1,457.00","change_amount":"+23.00","change_percent":"+1.58%"}],"quotes":{"quote":"Not everything that can be counted counts, and not everything that counts can be counted.","author":"Albert Einstein","category":"Famous"}},"expire":3600000,"date":{"year":2017,"month":8,"day":8}} diff --git a/views/pages/slackV2.ejs b/views/pages/slackV2.ejs index c3326e9..2ee9729 100644 --- a/views/pages/slackV2.ejs +++ b/views/pages/slackV2.ejs @@ -24,7 +24,7 @@ @@ -39,7 +39,7 @@