diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 4288c42..0000000 --- a/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "globals": { - "windyInit": true - } -} diff --git a/README.md b/README.md deleted file mode 100644 index 5cb6ef5..0000000 --- a/README.md +++ /dev/null @@ -1,24 +0,0 @@ -![](assets/intro4.gif) - -# Map Forecast API - -Map Forecast API is a simple-to-use library based on [Leaflet](https://leafletjs.com/) **1.4.x**. It allows you to use everything Leaflet or JavaScript offers, along with the Windy map visualizations we use at [Windy.com](https://www.windy.com/). - -This repository contains only Map Forecast API examples, check [https://api.windy.com/](https://api.windy.com/) for more info. - -Do you think any particular example or tutorial is lacking? PR is more than welcome! - -## Examples - - [Hello World](hello-world/) - - [Change Windy parameters](parameters/) - - [Observe what is happening inside](bcast/) - - [Mess with User Interface](navigation/) - - [Change units](metrics/) - - [Use weather picker](picker/) - - [Boat tracker](boat-tracker/) - -## Other resources - - [Windy API homepage](https://api.windy.com/) - - [Windy API community discussion](https://community.windy.com/category/12/windy-api) - - [Leaflet documentation](https://leafletjs.com/) - - [Leaflet Plugins](https://leafletjs.com/plugins.html) diff --git a/assets/intro4.gif b/assets/intro4.gif deleted file mode 100644 index bec99cc..0000000 Binary files a/assets/intro4.gif and /dev/null differ diff --git a/bcast/README.md b/bcast/README.md deleted file mode 100644 index ca5d46a..0000000 --- a/bcast/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Observe what is happening inside -Major broadcasts are emitted by `windyApi.broadcast`. Receiving and emitting messages in Windy API has the usual syntax and methods: `on, off, once, fire`. - -Tip: Use `verbose: true` as a parameter in start up `options` to see a nice colorful output in the browser's console. - -## Main broadcasts -### mapChanged -After the Leaflet map has been panned or zoomed. - -### paramsChanged -When a user changes some parameters (overlay, level, date etc...). Do not use this event to start any intensive action since Windy must now load and render all the data. Use `redrawFinished` instead. - -### redrawFinished -Triggered when Windy has successfully loaded and rendered requested data. Use this for triggering your own tasks. - -### metricChanged -After some of the units (wind, temp, ...) have been changed. - -### rqstOpen, rqstClose, closeAll -Requests to load and open or close lazy loaded plugins (see later) - -### pluginOpened, pluginClosed -Lazy loaded plugin was successfully loaded and opened/closed - -### redrawLayers -Forces various renderers to render layers, for example after reconfiguring color gradient or changing particle animation settings. - -### uiChanged -Whenever the User Interface has been changed. Information for other UI components to recalculate their respective sizes and adapt themselves to the new layout. diff --git a/bcast/index.html b/bcast/index.html deleted file mode 100644 index f22d4e1..0000000 --- a/bcast/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -
- - - diff --git a/bcast/script.js b/bcast/script.js deleted file mode 100644 index 390e6da..0000000 --- a/bcast/script.js +++ /dev/null @@ -1,30 +0,0 @@ -const options = { - key: 'PsLAtXpsPTZexBwUkO7Mx5I', // REPLACE WITH YOUR KEY !!! - - // Tip: Use verbose true for nice console output - // verbose: true -}; - -windyInit(options, windyAPI => { - const { store, broadcast } = windyAPI; - // broadcast is main Windy's event emmiter that - // let you know what is happening inside - - // Change overlays programatically - const overlays = ['rain', 'wind', 'temp', 'clouds']; - let i = 0; - - setInterval(() => { - i = i === 3 ? 0 : i + 1; - store.set('overlay', overlays[i]); - }, 800); - - // Observe the most important broadcasts - broadcast.on('paramsChanged', params => { - console.log('Params changed:', params); - }); - - broadcast.on('redrawFinished', params => { - console.log('Map was rendered:', params); - }); -}); diff --git a/boat-tracker/README.md b/boat-tracker/README.md deleted file mode 100644 index 8361170..0000000 --- a/boat-tracker/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Boat tracker -As you can see, all stuff is handled by a well documented Leaflet API. Create your own backend, serving GeoJSON tracks with boats/planes/cars and use the code below if you would like. diff --git a/boat-tracker/boats.json b/boat-tracker/boats.json deleted file mode 100644 index 2ac2f2d..0000000 --- a/boat-tracker/boats.json +++ /dev/null @@ -1 +0,0 @@ -{"result":{"FRA18":{"heading":174,"rank":1,"sail":"FRA18","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"74d 03h 35min 46s","track":[[46.0833333333,-3.095],[45.6702777778,-4.35666666667],[44.5063888889,-6.975],[43.9216666667,-8.39416666667],[43.395,-9.15416666667],[42.7519444444,-9.82055555556],[42.1961111111,-10.6541666667],[41.4177777778,-11.6663888889],[40.2736111111,-12.9677777778],[39.8872222222,-13.6791666667],[39.6094444444,-13.8930555556],[39.2536111111,-14.1636111111],[38.7052777778,-14.5086111111],[37.7972222222,-15.1430555556],[36.2969444444,-16.0886111111],[35.6466666667,-16.7894444444],[35.4427777778,-17.0416666667],[35.0619444444,-17.4816666667],[34.7294444444,-18.0238888889],[34.2888888889,-18.7463888889],[33.0644444444,-18.7925],[32.2513888889,-18.8563888889],[31.6713888889,-18.8691666667],[31.0358333333,-19.1147222222],[30.3522222222,-19.5277777778],[29.3366666667,-20.1108333333],[27.37,-21.0538888889],[26.3138888889,-21.44],[25.5269444444,-21.8838888889],[24.6716666667,-22.3902777778],[23.8538888889,-22.8505555556],[22.7197222222,-23.4197222222],[20.6688888889,-24.4644444444],[19.4338888889,-24.8516666667],[18.485,-25.0830555556],[17.5627777778,-25.3613888889],[17.2275,-26.0622222222],[16.2333333333,-26.2416666667],[14.0144444444,-26.73],[13.0286111111,-26.8380555556],[12.1786111111,-26.945],[11.3244444444,-27.0322222222],[10.4713888889,-27.0925],[9.47222222222,-27.2066666667],[8.03611111111,-27.6505555556],[7.345,-27.8072222222],[6.99944444444,-28.0908333333],[6.8025,-28.2108333333],[6.16722222222,-28.2172222222],[5.31277777778,-28.1236111111]]},"GBR99":{"heading":208,"rank":2,"sail":"GBR99","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"74d 19h 35min 15s","track":[[46.1169444444,-3.085],[45.6811111111,-4.41666666667],[44.5272222222,-6.90277777778],[43.8736111111,-8.38555555556],[43.3441666667,-9.13166666667],[42.7377777778,-9.80444444444],[42.1730555556,-10.1369444444],[41.2077777778,-9.35916666667],[39.8558333333,-10.5858333333],[39.2902777778,-11.5666666667],[38.9738888889,-11.9727777778],[38.6516666667,-12.2866666667],[38.2766666667,-12.7305555556],[37.7519444444,-13.2338888889],[36.4758333333,-14.0355555556],[35.7691666667,-14.3563888889],[35.4480555556,-14.6202777778],[35.0930555556,-15.1522222222],[34.7927777778,-15.5469444444],[34.2255555556,-16.2355555556],[33.5991666667,-17.8838888889],[33.1886111111,-18.3211111111],[32.8722222222,-18.9983333333],[32.1533333333,-19.1866666667],[31.4805555556,-19.2677777778],[30.2263888889,-19.3908333333],[28.1705555556,-20.3661111111],[27.1505555556,-20.7886111111],[26.2544444444,-21.0683333333],[25.3880555556,-21.7113888889],[24.5105555556,-22.2577777778],[23.3038888889,-22.8825],[21.2408333333,-23.8880555556],[20.0066666667,-24.2405555556],[19.1333333333,-24.4544444444],[17.9741666667,-24.7794444444],[16.9736111111,-24.9347222222],[15.8572222222,-25.4330555556],[13.7583333333,-26.0980555556],[12.6233333333,-26.4016666667],[11.6891666667,-26.535],[10.7436111111,-26.6752777778],[9.80722222222,-26.6805555556],[8.8375,-26.8675],[7.39,-27.1763888889],[6.78333333333,-27.3736111111],[6.05888888889,-27.3172222222],[5.51805555556,-27.2680555556],[4.8425,-27.1702777778],[4.23388888889,-27.4019444444]]},"FRA19":{"heading":175,"rank":3,"sail":"FRA19","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"78d 06h 38min 40s","track":[[46.1013888889,-3.10416666667],[45.6716666667,-4.37527777778],[44.6433333333,-6.87944444444],[44.0052777778,-8.02111111111],[43.5611111111,-8.87555555556],[43.0419444444,-9.61916666667],[42.5080555556,-10.1369444444],[41.7741666667,-11.2930555556],[40.8430555556,-12.7605555556],[40.4738888889,-13.4027777778],[40.0208333333,-13.7405555556],[39.5344444444,-14.0425],[39.0533333333,-14.3047222222],[38.2677777778,-14.9202777778],[36.8402777778,-16.0347222222],[36.0902777778,-16.5708333333],[35.7644444444,-16.9077777778],[35.4002777778,-17.2202777778],[34.9719444444,-17.5705555556],[34.4361111111,-18.1502777778],[33.6086111111,-18.5077777778],[32.8966666667,-18.5719444444],[32.1811111111,-18.8511111111],[31.6202777778,-19.2933333333],[30.9188888889,-19.6383333333],[29.7905555556,-20.1683333333],[28.0533333333,-21.1894444444],[27.0975,-21.6372222222],[26.3186111111,-21.9666666667],[25.5422222222,-22.4558333333],[24.7288888889,-22.9758333333],[23.7163888889,-23.5744444444],[21.5988888889,-24.4505555556],[20.3975,-24.8797222222],[19.8269444444,-25.0691666667],[18.6183333333,-25.5205555556],[17.7522222222,-25.7930555556],[16.5908333333,-26.1333333333],[14.6055555556,-26.5383333333],[13.5958333333,-26.4627777778],[12.7258333333,-26.5869444444],[11.8155555556,-26.7330555556],[10.9875,-26.8027777778],[9.91277777778,-26.9219444444],[8.27444444444,-27.3183333333],[7.60416666667,-27.7866666667],[7.25027777778,-28.1055555556],[7.11055555556,-28.0869444444],[6.55611111111,-28.1094444444],[5.84166666667,-28.0491666667]]},"FRA06":{"heading":190,"rank":4,"sail":"FRA06","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"80d 01h 45min 45s","track":[[46.0936111111,-3.09555555556],[45.6977777778,-4.16777777778],[44.49,-6.90527777778],[43.9066666667,-8.35027777778],[43.3733333333,-9.10222222222],[42.8030555556,-9.73111111111],[42.32,-10.3391666667],[41.445,-10.4188888889],[40.1088888889,-11.7841666667],[39.5483333333,-12.525],[39.3380555556,-12.9755555556],[39.0688888889,-13.3691666667],[38.6908333333,-13.7855555556],[37.99,-14.4866666667],[36.4777777778,-15.2069444444],[35.8211111111,-15.4933333333],[35.5166666667,-15.8402777778],[35.1730555556,-16.2616666667],[34.8844444444,-16.5877777778],[34.3580555556,-17.1997222222],[33.9933333333,-18.4536111111],[33.5758333333,-18.5427777778],[33.0525,-18.4472222222],[32.4733333333,-18.5236111111],[32.2144444444,-18.775],[31.3619444444,-18.9863888889],[29.7311111111,-20.1547222222],[28.6608333333,-20.7572222222],[27.8536111111,-21.1561111111],[27.1391666667,-21.4794444444],[26.3372222222,-21.7597222222],[25.2838888889,-22.2611111111],[23.6477777778,-23.2538888889],[22.8925,-23.6369444444],[22.1916666667,-23.9088888889],[21.3988888889,-24.3197222222],[20.6013888889,-24.6711111111],[19.6747222222,-25.0394444444],[17.8547222222,-25.6983333333],[16.905,-25.8333333333],[16.2380555556,-25.9447222222],[15.4125,-26.1191666667],[14.5877777778,-26.2966666667],[13.5880555556,-26.3325],[11.9119444444,-26.4836111111],[10.925,-26.5572222222],[10.1927777778,-26.6869444444],[9.41277777778,-26.9233333333],[8.94916666667,-27.1225],[8.49083333333,-27.2205555556]]},"FRA29":{"heading":191,"rank":5,"sail":"FRA29","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"80d 03h 11min 09s","track":[[46.1319444444,-3.09027777778],[45.6922222222,-4.33416666667],[44.6661111111,-6.70416666667],[44.0386111111,-7.9075],[43.5933333333,-8.73555555556],[43.0744444444,-9.58861111111],[42.5022222222,-10.2702777778],[41.8186111111,-11.2755555556],[40.8341666667,-12.6708333333],[40.2819444444,-13.1497222222],[39.8825,-13.3744444444],[39.5255555556,-13.59],[39.1197222222,-13.7083333333],[38.3433333333,-14.2436111111],[36.9080555556,-14.9344444444],[36.2019444444,-15.4119444444],[35.9669444444,-15.5105555556],[35.4727777778,-15.9052777778],[34.9702777778,-16.3761111111],[34.4394444444,-17.0711111111],[33.7847222222,-18.0522222222],[33.3108333333,-18.1563888889],[32.8341666667,-18.3669444444],[32.2883333333,-18.4430555556],[31.6236111111,-18.7852777778],[30.5733333333,-19.145],[28.7719444444,-20.075],[27.8175,-20.4566666667],[27.1597222222,-20.8433333333],[26.4269444444,-21.3336111111],[25.5872222222,-21.7905555556],[24.51,-22.3230555556],[22.7033333333,-23.3572222222],[21.6897222222,-23.8669444444],[20.8319444444,-24.2197222222],[19.9505555556,-24.6702777778],[19.1094444444,-25.0727777778],[17.9613888889,-25.5097222222],[16.0761111111,-26.175],[15.1175,-26.2697222222],[14.4425,-26.3252777778],[13.8183333333,-26.4019444444],[13.1058333333,-26.4313888889],[12.0088888889,-26.6380555556],[10.0708333333,-26.7066666667],[9.13083333333,-26.7752777778],[8.51944444444,-26.8944444444],[8.04555555556,-27.2172222222],[7.62611111111,-27.4219444444],[7.22611111111,-27.5036111111]]},"FRA1":{"heading":196,"rank":6,"sail":"FRA1","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"80d 06h 41min 54s \n +02h 00min 00s","track":[[46.1838888889,-3.0925],[45.8097222222,-4.43444444444],[44.7583333333,-6.76166666667],[44.1286111111,-7.78611111111],[43.7172222222,-8.41777777778],[43.3202777778,-9.14305555556],[42.915,-9.63833333333],[42.2688888889,-10.5761111111],[41.09,-11.6038888889],[40.4922222222,-11.955],[40.0566666667,-12.1361111111],[39.5077777778,-12.2038888889],[39.0225,-12.4147222222],[38.3183333333,-12.9494444444],[37.0363888889,-13.8752777778],[36.255,-14.4061111111],[35.7708333333,-14.5391666667],[35.3055555556,-14.8775],[34.8172222222,-15.2713888889],[34.3380555556,-16.0138888889],[33.685,-17.5241666667],[32.9852777778,-17.5897222222],[32.6013888889,-17.9197222222],[32.2463888889,-18.3758333333],[31.6144444444,-18.7316666667],[30.6427777778,-19.1569444444],[29.1013888889,-20.0708333333],[28.0583333333,-20.4541666667],[27.3933333333,-20.8305555556],[26.8897222222,-21.2433333333],[26.1302777778,-21.6322222222],[25.1497222222,-22.2183333333],[23.5113888889,-23.2408333333],[22.6622222222,-23.7008333333],[21.9002777778,-23.9761111111],[21.1905555556,-24.3002777778],[20.1252777778,-24.7666666667],[18.9927777778,-25.2325],[17.105,-25.9766666667],[16.1772222222,-26.135],[15.4566666667,-26.2780555556],[14.6372222222,-26.4380555556],[13.7991666667,-26.5230555556],[12.875,-26.6647222222],[11.1047222222,-26.9605555556],[10.0580555556,-27.0177777778],[9.31222222222,-27.1561111111],[8.70972222222,-27.4197222222],[8.24194444444,-27.6686111111],[7.72166666667,-27.8319444444]]},"FRA35":{"heading":192,"rank":7,"sail":"FRA35","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"87d 21h 45min 49s \n +02h 00min 00s","track":[[46.1644444444,-3.02027777778],[45.7908333333,-4.22944444444],[44.7833333333,-6.51722222222],[44.2236111111,-7.70805555556],[43.8847222222,-8.41222222222],[43.5108333333,-9.02972222222],[43.0875,-9.64083333333],[42.4908333333,-10.2047222222],[41.4733333333,-9.60611111111],[40.9783333333,-9.94027777778],[40.4427777778,-10.3191666667],[39.9672222222,-10.6036111111],[39.4436111111,-10.8269444444],[38.8119444444,-11.2791666667],[37.695,-12.0963888889],[36.9941666667,-12.7616666667],[36.4683333333,-13.1325],[35.9202777778,-13.5725],[35.4283333333,-13.975],[34.8738888889,-14.6930555556],[34.2991666667,-15.97],[34.1408333333,-16.7027777778],[33.9775,-17.0416666667],[33.8019444444,-17.4713888889],[33.3869444444,-17.5702777778],[32.8858333333,-18.0658333333],[31.8327777778,-18.6622222222],[31.0177777778,-18.9669444444],[30.4855555556,-19.3063888889],[29.7522222222,-19.7069444444],[29.0819444444,-20.1552777778],[28.1855555556,-20.7088888889],[26.7027777778,-21.5197222222],[25.7927777778,-21.9436111111],[25.1544444444,-22.4594444444],[24.4391666667,-22.9769444444],[23.7172222222,-23.4144444444],[22.82,-24.1688888889],[21.0975,-25.1116666667],[20.1202777778,-25.3422222222],[19.3816666667,-25.5758333333],[18.6380555556,-25.8736111111],[17.9669444444,-26.2705555556],[17.0066666667,-26.5366666667],[15.5075,-26.7194444444],[14.6741666667,-26.7072222222],[14.1425,-26.6886111111],[13.5619444444,-26.55],[13.0411111111,-26.6575],[12.4236111111,-26.8144444444]]},"HUN77":{"heading":210,"rank":8,"sail":"HUN77","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"93d 22h 52min 09s","track":[[46.1811111111,-2.87527777778],[45.9441666667,-3.79611111111],[45.2522222222,-5.6475],[44.7888888889,-6.72027777778],[44.4905555556,-7.48861111111],[44.2705555556,-8.05527777778],[43.7627777778,-8.53944444444],[43.2913888889,-9.21],[42.2566666667,-9.92194444444],[41.6969444444,-10.2591666667],[41.3186111111,-10.54],[40.87,-10.7113888889],[40.295,-10.8375],[39.4872222222,-11.0080555556],[38.1744444444,-11.6030555556],[37.6197222222,-12.3419444444],[37.1097222222,-12.69],[36.5580555556,-12.9375],[36.0108333333,-13.3208333333],[35.4063888889,-13.9419444444],[34.6075,-15.0011111111],[34.2336111111,-15.5502777778],[33.9483333333,-15.7883333333],[33.6455555556,-16.1644444444],[33.2683333333,-16.2058333333],[32.4908333333,-16.0161111111],[31.0475,-16.2038888889],[30.3266666667,-16.4005555556],[30.1580555556,-17.0772222222],[30.0736111111,-17.7883333333],[29.9136111111,-18.4713888889],[29.0177777778,-18.8588888889],[27.5177777778,-19.3672222222],[26.7327777778,-19.8694444444],[26.1386111111,-20.0563888889],[25.5236111111,-20.3252777778],[24.8358333333,-20.6438888889],[24.0083333333,-21.1527777778],[22.5722222222,-22.0402777778],[21.7291666667,-22.4019444444],[21.1697222222,-22.7130555556],[20.6383333333,-22.9563888889],[20.0463888889,-23.1736111111],[19.2477777778,-23.5438888889],[18.2869444444,-24.2844444444],[17.6622222222,-24.54],[17.1583333333,-24.64],[16.7222222222,-24.84],[16.2575,-25.0566666667],[15.7561111111,-25.3530555556]]},"FRA1000":{"heading":199,"rank":9,"sail":"FRA1000","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"99d 04h 56min 20s","track":[[46.1483333333,-2.85361111111],[45.8922222222,-3.60305555556],[45.2355555556,-5.2375],[44.8566666667,-6.20166666667],[44.5555555556,-6.84583333333],[44.2061111111,-7.49222222222],[43.8891666667,-8.06361111111],[43.5555555556,-8.72444444444],[42.8972222222,-9.49472222222],[42.4808333333,-9.65944444444],[42.1166666667,-9.89472222222],[41.705,-10.0977777778],[41.2061111111,-10.35],[40.57,-10.4855555556],[39.2577777778,-10.8875],[38.5013888889,-11.3113888889],[37.9483333333,-11.6311111111],[37.3222222222,-12.0183333333],[36.7419444444,-12.4627777778],[35.9558333333,-13.0761111111],[35.1158333333,-13.8408333333],[34.8063888889,-14.4061111111],[34.5558333333,-14.7333333333],[34.2252777778,-15.2463888889],[33.9852777778,-15.8627777778],[33.7708333333,-16.7438888889],[33.3383333333,-18.0344444444],[33.1819444444,-18.7686111111],[33.1094444444,-19.44],[32.9505555556,-20.1325],[32.8258333333,-20.8080555556],[32.2888888889,-21.2166666667],[30.9305555556,-21.7925],[30.015,-22.0552777778],[29.4122222222,-22.2336111111],[28.8313888889,-22.5430555556],[28.1516666667,-22.8183333333],[27.2219444444,-23.1891666667],[25.7369444444,-23.8097222222],[25.0547222222,-24.1575],[24.4827777778,-24.5561111111],[23.855,-25.0616666667],[23.2263888889,-25.5222222222],[22.4113888889,-26.0591666667],[20.9352777778,-26.8847222222],[20.1,-27.2066666667],[19.5263888889,-27.4372222222],[19.1172222222,-27.6219444444],[18.4930555556,-27.8416666667],[17.7158333333,-28.1391666667]]},"FRA14":{"heading":194,"rank":10,"sail":"FRA14","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"102d 20h 24min 09s","track":[[46.0561111111,-2.95166666667],[45.6861111111,-4.00583333333],[44.9811111111,-5.90861111111],[44.5569444444,-6.97472222222],[44.1927777778,-7.62916666667],[43.8252777778,-8.25138888889],[43.4597222222,-8.85111111111],[42.855,-9.65972222222],[41.5386111111,-10.3591666667],[40.7416666667,-10.5297222222],[40.2522222222,-10.7341666667],[39.8838888889,-11.1588888889],[39.3955555556,-11.4119444444],[38.7022222222,-11.8044444444],[37.5172222222,-12.6505555556],[36.8291666667,-13.2675],[36.2652777778,-13.6380555556],[35.7386111111,-14.0027777778],[35.2361111111,-14.4341666667],[34.79,-15.2680555556],[34.1022222222,-16.2908333333],[33.6797222222,-16.525],[33.345,-16.7538888889],[32.9130555556,-16.6169444444],[32.4883333333,-16.7602777778],[32.0108333333,-17.335],[30.7294444444,-17.9855555556],[30.0261111111,-18.2366666667],[29.4411111111,-18.585],[28.8038888889,-18.9783333333],[28.1591666667,-19.3369444444],[27.3436111111,-19.5891666667],[25.9872222222,-20.3258333333],[25.0791666667,-20.8255555556],[24.4266666667,-21.2211111111],[23.7722222222,-21.6291666667],[23.1752777778,-22.1827777778],[22.3633333333,-22.85],[20.8097222222,-23.8363888889],[20.075,-24.2266666667],[19.3430555556,-24.5361111111],[18.6908333333,-24.8022222222],[18.0447222222,-25.1952777778],[17.2397222222,-25.6622222222],[16.0575,-25.9594444444],[15.4352777778,-26.0722222222],[14.9091666667,-26.1738888889],[14.3405555556,-26.1430555556],[13.8608333333,-26.1425],[13.3122222222,-26.3108333333]]},"FRA1949":{"heading":190,"rank":11,"sail":"FRA1949","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"103d 21h 01min 00s","track":[[46.0530555556,-2.95888888889],[45.6505555556,-4.04083333333],[44.7533333333,-6.12333333333],[44.28,-7.04111111111],[43.9627777778,-7.73888888889],[43.775,-8.28555555556],[43.495,-8.84694444444],[43.0758333333,-9.61777777778],[42.0433333333,-10.3416666667],[41.5411111111,-11.0483333333],[41.1936111111,-11.3294444444],[40.7733333333,-11.6569444444],[40.2558333333,-11.8344444444],[39.4927777778,-12.2080555556],[38.2102777778,-13.2316666667],[37.5197222222,-13.8713888889],[36.9422222222,-14.1572222222],[36.4180555556,-14.425],[35.9322222222,-14.89],[35.3108333333,-15.4766666667],[34.7355555556,-16.2886111111],[34.4036111111,-16.8844444444],[34.1013888889,-17.2744444444],[33.9755555556,-17.7169444444],[33.7227777778,-18.1233333333],[33.3288888889,-18.6805555556],[32.0177777778,-18.8080555556],[31.3002777778,-19.0069444444],[30.6011111111,-19.2505555556],[29.9922222222,-19.5316666667],[29.3844444444,-19.7366666667],[28.5530555556,-20.0908333333],[27.2386111111,-20.5913888889],[26.4425,-21.0955555556],[25.7980555556,-21.4541666667],[25.1436111111,-21.7513888889],[24.4475,-22.0911111111],[23.5416666667,-22.5705555556],[22.0738888889,-23.3991666667],[21.2194444444,-23.7597222222],[20.7147222222,-24.0291666667],[20.1216666667,-24.3047222222],[19.4702777778,-24.5411111111],[18.6941666667,-24.875],[17.5602777778,-25.4366666667],[17.1225,-25.8963888889],[16.6819444444,-25.955],[16.2658333333,-26.0375],[15.7575,-26.1266666667],[15.1055555556,-26.2380555556]]},"SUI7":{"heading":205,"rank":12,"sail":"SUI7","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"105d 20h 10min 32s","track":[[46.1455555556,-2.87472222222],[45.8547222222,-3.74361111111],[45.255,-5.37388888889],[44.7383333333,-6.43666666667],[44.4094444444,-7.18138888889],[44.1383333333,-7.77944444444],[43.8572222222,-8.14722222222],[43.4808333333,-8.88833333333],[42.6105555556,-9.7525],[41.9894444444,-10.0216666667],[41.5555555556,-10.1719444444],[41.0738888889,-10.2425],[40.5683333333,-10.2916666667],[39.8872222222,-10.4672222222],[38.7158333333,-11.0261111111],[38.02,-11.575],[37.4038888889,-11.7747222222],[36.8247222222,-11.99],[36.3097222222,-12.335],[35.6719444444,-12.8883333333],[34.8680555556,-13.8236111111],[34.5227777778,-14.3897222222],[34.2766666667,-14.8586111111],[34.0066666667,-15.3402777778],[33.7425,-15.9388888889],[33.5633333333,-16.8258333333],[33.3366666667,-18.1030555556],[33.0513888889,-18.6672222222],[32.5597222222,-18.6258333333],[31.9725,-18.6441666667],[31.4202777778,-18.7436111111],[30.6919444444,-19.0102777778],[29.2530555556,-19.6172222222],[28.3202777778,-19.8494444444],[27.6713888889,-19.9955555556],[27.1077777778,-20.26],[26.4655555556,-20.4955555556],[25.7338888889,-20.815],[24.3525,-21.52],[23.5597222222,-21.9244444444],[23.0216666667,-22.32],[22.5244444444,-22.6866666667],[22.0344444444,-23.0055555556],[21.3152777778,-23.5125],[20.2338888889,-24.2558333333],[19.5672222222,-24.6686111111],[19.0375,-24.9397222222],[18.5191666667,-25.2027777778],[18.0363888889,-25.5013888889],[17.3847222222,-25.8438888889]]},"USA37":{"heading":202,"rank":13,"sail":"USA37","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"107d 00h 48min 18s","track":[[46.2063888889,-2.98194444444],[45.9205555556,-3.95833333333],[45.2883333333,-5.81555555556],[44.8725,-6.81083333333],[44.6555555556,-7.3575],[44.3638888889,-7.91166666667],[44.0147222222,-8.53833333333],[43.5125,-9.12527777778],[42.5219444444,-9.95361111111],[41.9366666667,-10.3291666667],[41.5038888889,-10.4836111111],[41.0222222222,-10.6594444444],[40.4938888889,-10.875],[39.8858333333,-11.1861111111],[38.7411111111,-11.9838888889],[38.0180555556,-12.4877777778],[37.5063888889,-12.8441666667],[37.0147222222,-13.2483333333],[36.5930555556,-13.7736111111],[36.0405555556,-14.4666666667],[35.1261111111,-15.5238888889],[34.6263888889,-16.1236111111],[34.3227777778,-16.5363888889],[33.9155555556,-16.8861111111],[33.5783333333,-17.3102777778],[33.1980555556,-18.0344444444],[32.1652777778,-18.5936111111],[31.5141666667,-18.7605555556],[31.0069444444,-18.9505555556],[30.5080555556,-19.2172222222],[29.9694444444,-19.4783333333],[29.2325,-19.9875],[27.8427777778,-20.8055555556],[27.0244444444,-21.1833333333],[26.4622222222,-21.5105555556],[25.8436111111,-21.8788888889],[25.3202777778,-22.2530555556],[24.6911111111,-22.6527777778],[23.4683333333,-23.4891666667],[22.7336111111,-23.9416666667],[22.2088888889,-24.2430555556],[21.6680555556,-24.5605555556],[21.1194444444,-24.8886111111],[20.3880555556,-25.2205555556],[19.1838888889,-25.7044444444],[18.5211111111,-25.9455555556],[18.0322222222,-26.0902777778],[17.5241666667,-26.2761111111],[17.0533333333,-26.3933333333],[16.3980555556,-26.63]]},"ESP33":{"heading":195,"rank":14,"sail":"ESP33","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"108d 21h 50min 45s \n +02h 00min 00s","track":[[46.4891666667,-1.78583333333],[46.5044444444,-1.79222222222],[46.5047222222,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79222222222],[46.5044444444,-1.79194444444],[46.5044444444,-1.79222222222],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.5044444444,-1.79194444444],[46.2683333333,-2.11944444444],[45.8925,-2.77694444444],[45.4733333333,-3.54944444444],[44.7738888889,-5.14972222222],[44.4525,-5.85222222222],[44.3530555556,-6.28527777778],[44.4063888889,-6.77138888889],[44.3455555556,-7.35972222222],[44.2147222222,-8.10388888889],[44.2922222222,-9.51055555556],[43.9172222222,-9.82305555556],[43.4072222222,-10.2283333333],[42.9302777778,-10.4580555556],[42.2838888889,-11.0061111111],[41.705,-11.8222222222],[40.8636111111,-13.3583333333],[40.4113888889,-14.3461111111],[40.2272222222,-15.1105555556],[40.0680555556,-15.7922222222],[39.5127777778,-16.0066666667],[38.7027777778,-16.2844444444],[37.2694444444,-16.8427777778],[36.4155555556,-17.1072222222],[35.8019444444,-17.2602777778],[35.2063888889,-17.4422222222],[34.5883333333,-17.6027777778],[33.7236111111,-17.8930555556]]},"FRA72":{"heading":185,"rank":15,"sail":"FRA72","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"109d 22h 04min 00s","track":[[46.2408333333,-2.95611111111],[46.0022222222,-3.95138888889],[45.3227777778,-5.83333333333],[44.9772222222,-6.88277777778],[44.7238888889,-7.45555555556],[44.2316666667,-7.99333333333],[43.7205555556,-8.55333333333],[43.1433333333,-9.34083333333],[42.1072222222,-9.99388888889],[41.4247222222,-10.1191666667],[40.9544444444,-10.2616666667],[40.5377777778,-10.4433333333],[40.03,-10.6597222222],[39.2705555556,-10.9169444444],[37.9672222222,-11.3630555556],[37.2838888889,-12.0761111111],[36.7066666667,-12.4958333333],[36.1366666667,-12.8580555556],[35.6525,-13.285],[35.1477777778,-13.9197222222],[34.5430555556,-15.0408333333],[34.1611111111,-15.6741666667],[33.9894444444,-16.0669444444],[33.8144444444,-16.4375],[33.3441666667,-16.1830555556],[32.5725,-15.9722222222],[31.2458333333,-16.2016666667],[30.49,-16.2819444444],[29.9122222222,-16.3919444444],[29.6783333333,-16.9569444444],[29.5030555556,-17.7086111111],[29.4105555556,-18.7675],[28.3663888889,-19.7519444444],[27.6297222222,-20.1252777778],[27.135,-20.3377777778],[26.5055555556,-20.6194444444],[25.9477777778,-21.1083333333],[25.2927777778,-21.6038888889],[24.1144444444,-22.6602777778],[23.3647222222,-23.2030555556],[22.8547222222,-23.6536111111],[22.3038888889,-24.0680555556],[21.7138888889,-24.3558333333],[20.9833333333,-24.8572222222],[19.7202777778,-25.4577777778],[18.9502777778,-25.6427777778],[18.4066666667,-25.7233333333],[17.8783333333,-25.9052777778],[17.3375,-26.0836111111],[16.6777777778,-26.1358333333]]},"NZL80":{"heading":180,"rank":16,"sail":"NZL80","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"110d 03h 58min 41s \n +02h 00min 00s","track":[[46.1313888889,-2.95166666667],[45.7719444444,-4.00055555556],[45.0472222222,-5.76305555556],[44.5005555556,-6.84555555556],[44.0963888889,-7.56777777778],[43.8705555556,-8.11861111111],[43.5727777778,-8.67777777778],[43.1111111111,-9.41555555556],[41.99,-10.3416666667],[41.3722222222,-10.9977777778],[40.9183333333,-11.2108333333],[40.4319444444,-11.3163888889],[39.8605555556,-11.4088888889],[39.0902777778,-11.5894444444],[37.7122222222,-12.1530555556],[36.9311111111,-12.7008333333],[36.4244444444,-13.0605555556],[35.86,-13.3338888889],[35.3075,-13.5372222222],[34.685,-14.2386111111],[34.0113888889,-15.0427777778],[33.6677777778,-15.4205555556],[33.4694444444,-15.9772222222],[33.3105555556,-16.4563888889],[33.0347222222,-16.5105555556],[32.5922222222,-16.7083333333],[31.5972222222,-17.7208333333],[30.9047222222,-18.1338888889],[30.3194444444,-18.4552777778],[29.6758333333,-18.9013888889],[28.9527777778,-19.2983333333],[28.0255555556,-19.7819444444],[26.8936111111,-20.6030555556],[26.0005555556,-21.0166666667],[25.3922222222,-21.3211111111],[24.6980555556,-21.7902777778],[24.0413888889,-22.185],[23.2261111111,-22.7636111111],[21.8519444444,-23.7602777778],[20.9586111111,-24.1422222222],[20.3980555556,-24.4936111111],[19.8555555556,-24.8177777778],[19.2025,-25.3266666667],[18.4366666667,-25.7697222222],[17.2591666667,-26.5936111111],[16.5858333333,-26.7188888889],[16.1191666667,-26.8427777778],[15.5672222222,-26.9577777778],[15.0580555556,-27.1205555556],[14.3763888889,-27.1186111111]]},"NED160":{"heading":188,"rank":17,"sail":"NED160","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"116d 09h 24min 12s","track":[[46.1430555556,-3.07472222222],[45.8766666667,-4.29722222222],[45.3225,-5.8575],[44.9858333333,-6.66805555556],[44.8155555556,-7.03694444444],[44.6022222222,-7.73805555556],[44.3063888889,-8.45333333333],[43.9727777778,-9.32694444444],[43.2022222222,-10.4883333333],[42.6966666667,-10.7430555556],[42.2422222222,-10.6855555556],[41.6841666667,-10.5794444444],[40.9908333333,-10.3069444444],[40.2055555556,-10.2933333333],[38.6252777778,-10.4130555556],[37.6880555556,-10.5491666667],[37.0922222222,-10.6675],[36.5033333333,-10.8716666667],[35.7655555556,-11.1425],[35.0452777778,-11.6713888889],[34.405,-12.1897222222],[33.8827777778,-12.6408333333],[33.5719444444,-13.04],[33.1219444444,-12.6561111111],[32.4936111111,-12.3275],[32.045,-12.8075],[31.8227777778,-14.7736111111],[31.6388888889,-15.8502777778],[31.4933333333,-16.6188888889],[31.3652777778,-17.2244444444],[30.8175,-17.5308333333],[30.0136111111,-17.7872222222],[28.5922222222,-18.4513888889],[28.3605555556,-18.5966666667],[28.2716666667,-19.3736111111],[28.1925,-20.0441666667],[28.1344444444,-20.7469444444],[28.2727777778,-21.7902777778],[26.9272222222,-22.2594444444],[26.1430555556,-22.5902777778],[25.5238888889,-22.9197222222],[24.8444444444,-23.3025],[24.2038888889,-23.6202777778],[23.3738888889,-24.0372222222],[21.8527777778,-24.6463888889],[21.0427777778,-24.9786111111],[20.3652777778,-25.2486111111],[19.7019444444,-25.5616666667],[18.9516666667,-25.6383333333],[18.0538888889,-25.7566666667]]},"FRA69":{"heading":192,"rank":18,"sail":"FRA69","timestamp":1489208400,"lat_dec":46.502272,"lon_dec":-1.790226,"1hour_heading":0,"1hour_speed":0,"1hour_vmg":0,"1hour_distance":0,"lastreport_heading":0,"lastreport_speed":0,"lastreport_vmg":0,"lastreport_distance":0,"24hour_heading":0,"24hour_speed":0,"24hour_vmg":0,"24hour_distance":0,"dtf":0,"dtl":0,"dtp":0,"darksky_twd":"-","darksky_tws":"-","darksky_air":"-","finished":"true","total_time":"124d 12h 38min 18s","track":[[46.1783333333,-2.74333333333],[45.8194444444,-3.33916666667],[45.0427777778,-4.73083333333],[44.6038888889,-5.66083333333],[44.5344444444,-6.43305555556],[44.2227777778,-6.84083333333],[44.0908333333,-7.35472222222],[43.84,-8.19111111111],[43.2161111111,-9.2875],[42.735,-9.74416666667],[42.4613888889,-9.885],[42.0475,-9.97777777778],[41.6033333333,-10.0480555556],[41.0194444444,-10.0119444444],[40.0552777778,-10.3913888889],[39.4608333333,-10.8261111111],[39.2775,-11.195],[38.9130555556,-11.5255555556],[38.6177777778,-11.9666666667],[38.1561111111,-12.3852777778],[37.4963888889,-12.9827777778],[37.0905555556,-12.9513888889],[36.705,-12.9830555556],[36.2355555556,-13.175],[35.7258333333,-13.5725],[35.2669444444,-14.2258333333],[34.5605555556,-15.2555555556],[34.2533333333,-15.9122222222],[33.9697222222,-16.3772222222],[33.6819444444,-16.8541666667],[33.2880555556,-16.9252777778],[33.0613888889,-17.3052777778],[32.4027777778,-17.9030555556],[31.8375,-17.7719444444],[31.3433333333,-17.9533333333],[30.815,-18.0719444444],[30.2411111111,-18.1891666667],[29.4577777778,-18.4997222222],[28.1977777778,-18.9608333333],[27.7847222222,-19.4022222222],[27.3602777778,-19.8463888889],[26.9913888889,-20.1352777778],[26.5525,-20.3894444444],[25.9255555556,-20.5847222222],[24.8536111111,-20.9902777778],[24.2075,-21.0763888889],[23.7119444444,-21.1605555556],[23.2897222222,-21.3138888889],[22.8238888889,-21.4005555556],[22.2444444444,-21.5394444444]]}}} \ No newline at end of file diff --git a/boat-tracker/index.html b/boat-tracker/index.html deleted file mode 100644 index f22d4e1..0000000 --- a/boat-tracker/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -
- - - diff --git a/boat-tracker/script.js b/boat-tracker/script.js deleted file mode 100644 index 054745a..0000000 --- a/boat-tracker/script.js +++ /dev/null @@ -1,94 +0,0 @@ -const options = { - key: 'PsLAtXpsPTZexBwUkO7Mx5I', // REPLACE WITH YOUR KEY !!! - lat: 14, - lon: -29, - zoom: 4, -}; - -windyInit(options, windyAPI => { - const { map } = windyAPI; - - const MARKER = encodeURIComponent(` - - - - `); - const MARKER_ICON_URL = `data:image/svg+xml;utf8,${MARKER}`; - - const BoatIcon = L.icon({ - iconUrl: MARKER_ICON_URL, - iconSize: [24, 24], - iconAnchor: [12, 12], - popupAnchor: [0, 0], - }); - - const markers = []; - - const updateIconStyle = () => { - for (const marker of markers) { - const icon = marker._icon; - if (!icon) { - continue; - } - const heading = icon.getAttribute('data-heading'); - if (icon.style.transform.indexOf('rotateZ') === -1) { - icon.style.transform = `${ - icon.style.transform - } rotateZ(${heading || 0}deg)`; - icon.style.transformOrigin = 'center'; - } - } - }; - - fetch('boats.json') - .then(response => response.json()) - .then(result => result.result) - .then(result => { - try { - let hue = 0; - for (const boatName of Object.keys(result)) { - hue = (hue + 60) % 360; - - const boat = result[boatName]; - - const layer = L.polyline(boat.track, { - color: `hsl(${hue}, 100%, 45%)`, - weight: 2, - }).addTo(map); - - layer.on('mouseover', function() { - layer.setStyle({ - weight: 4, - }); - }); - - layer.on('mouseout', function() { - layer.setStyle({ - weight: 2, - }); - }); - - const marker = L.marker(boat.track[boat.track.length - 1], { - icon: BoatIcon, - }).addTo(map); - - markers.push(marker); - marker._icon.setAttribute('data-heading', boat.heading); - marker.bindPopup(boatName); - - updateIconStyle(); - } - } catch (error) { - console.error(`Error querying boats: ${error.message}`); - } - }) - .catch(error => { - console.error(`Error querying boats: ${error.message}`); - }); - - // Handle some events. We need to update the rotation of icons ideally each time - // leaflet re-renders. them. - map.on('zoom', updateIconStyle); - map.on('zoomend', updateIconStyle); - map.on('viewreset', updateIconStyle); -}); diff --git a/hello-world/README.md b/hello-world/README.md deleted file mode 100644 index 42e64df..0000000 --- a/hello-world/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Hello world -Load the Leaflet library at the beginning of your script and after that the Windy API library from URL `https://api.windy.com/assets/map-forecast/libBoot.js`. - -The Leaflet CSS is loaded automatically. - -Your application must contain `
` in the place where you want to position the Windy map. Use CSS to resize or position Windy `div` as you wish. - -In your JS code call the function `windyInit( options, callback )`, where the options object must contain a mandatory API key in the `key` property. Other start-up values are optional, but it is highly recommended to put as many start-up parameters as possible. - -Your `callback` is called whenever Windy API is ready and as a parameter it receives the object with Windy API. - -You can use well documented [Leaflet API](https://leafletjs.com/) to do **anything with the Windy map**, or use a rich ecosystem of [Leaflet plugins](http://leafletjs.com/plugins.html). - - diff --git a/hello-world/index.html b/hello-world/index.html deleted file mode 100644 index f22d4e1..0000000 --- a/hello-world/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -
- - - diff --git a/hello-world/script.js b/hello-world/script.js deleted file mode 100644 index e043677..0000000 --- a/hello-world/script.js +++ /dev/null @@ -1,26 +0,0 @@ -const options = { - // Required: API key - key: 'PsLAtXpsPTZexBwUkO7Mx5I', // REPLACE WITH YOUR KEY !!! - - // Put additional console output - verbose: true, - - // Optional: Initial state of the map - lat: 50.4, - lon: 14.3, - zoom: 5, -}; - -// Initialize Windy API -windyInit(options, windyAPI => { - // windyAPI is ready, and contain 'map', 'store', - // 'picker' and other usefull stuff - - const { map } = windyAPI; - // .map is instance of Leaflet map - - L.popup() - .setLatLng([50.4, 14.3]) - .setContent('Hello World') - .openOn(map); -}); diff --git a/images/bg_hr.png b/images/bg_hr.png new file mode 100644 index 0000000..514aee5 Binary files /dev/null and b/images/bg_hr.png differ diff --git a/images/blacktocat.png b/images/blacktocat.png new file mode 100644 index 0000000..e160053 Binary files /dev/null and b/images/blacktocat.png differ diff --git a/images/icon_download.png b/images/icon_download.png new file mode 100644 index 0000000..5a793f1 Binary files /dev/null and b/images/icon_download.png differ diff --git a/images/sprite_download.png b/images/sprite_download.png new file mode 100644 index 0000000..f9f8de2 Binary files /dev/null and b/images/sprite_download.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..1416b84 --- /dev/null +++ b/index.html @@ -0,0 +1,82 @@ + + + + + + + + + + + Windyty API + + + + + +
+
+ View on GitHub + +

Windyty API

+

Windyty API

+ +
+ Download this project as a .zip file + Download this project as a tar.gz file +
+
+
+ + +
+
+

+Welcome to GitHub Pages.

+ +

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new gh-pages branch locally. If you’re using GitHub Desktop, simply sync your repository and you’ll see the new branch.

+ +

+Designer Templates

+ +

We’ve crafted some handsome templates for you to use. Go ahead and click 'Continue to layouts' to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved.

+ +

+Creating pages manually

+ +

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

+ +

+Authors and Contributors

+ +

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor’s GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

+ +

+Support or Contact

+ +

Having trouble with Pages? Check out our documentation or contact support and we’ll help you sort it out.

+
+
+ + + + + + + + + + diff --git a/javascripts/main.js b/javascripts/main.js new file mode 100644 index 0000000..d8135d3 --- /dev/null +++ b/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/metrics/README.md b/metrics/README.md deleted file mode 100644 index 3beb109..0000000 --- a/metrics/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Change units -Each of Windy's overlays has its own object in `windyApi.overlays` modules. Use these objects to change an overlay's metric. For example, for `wind` overlay, use the read only value `overlays.wind.metric` to get the actual value, `.listMetrics()` to get allowed ones, and `.setMetric(metric)` to set the metric to the new value. - diff --git a/metrics/index.html b/metrics/index.html deleted file mode 100644 index f22d4e1..0000000 --- a/metrics/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -
- - - diff --git a/metrics/script.js b/metrics/script.js deleted file mode 100644 index e77db96..0000000 --- a/metrics/script.js +++ /dev/null @@ -1,24 +0,0 @@ -const options = { - key: 'PsLAtXpsPTZexBwUkO7Mx5I', // REPLACE WITH YOUR KEY !!! -}; - -windyInit(options, windyAPI => { - // All the params are stored in windyAPI.store - const { overlays, broadcast } = windyAPI; - - const windMetric = overlays.wind.metric; - console.log(windMetric); - // 'kt' .. actually selected metric for wind overlay - // Read only value! Do not modify. - - overlays.wind.listMetrics(); - // ['kt', 'bft', 'm/s', 'km/h', 'mph'] .. available metrics - - overlays.wind.setMetric('bft'); - // Metric for wind was changed to bft - - broadcast.on('metricChanged', (overlay, newMetric) => { - // Any changes of any metric can be observed here - console.log(overlay, newMetric); - }); -}); diff --git a/navigation/README.md b/navigation/README.md deleted file mode 100644 index 3028ea7..0000000 --- a/navigation/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Mess with User Interface -Use CSS to mess with the user interface of the Windy map. All the stuff is well under the `#windy` selector. Just make sure that the Windy logo remains unscaled, clickable, and with opacity 1. diff --git a/navigation/index.html b/navigation/index.html deleted file mode 100644 index dadcef6..0000000 --- a/navigation/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - -
- - - diff --git a/navigation/script.js b/navigation/script.js deleted file mode 100644 index f599c1d..0000000 --- a/navigation/script.js +++ /dev/null @@ -1,5 +0,0 @@ -const options = { - key: 'PsLAtXpsPTZexBwUkO7Mx5I', // REPLACE WITH YOUR KEY !!! -}; - -windyInit(options, () => {}); diff --git a/navigation/style.css b/navigation/style.css deleted file mode 100644 index 0ce1104..0000000 --- a/navigation/style.css +++ /dev/null @@ -1,14 +0,0 @@ -#windy #bottom, -#windy #mobile-ovr-select, -#windy #embed-zoom { - display: none !important; -} - -#windy #logo-wrapper { - top: initial; - bottom: 65px; -} - -#windy #logo-wrapper #logo { - left: 80px; -} diff --git a/parameters/README.md b/parameters/README.md deleted file mode 100644 index cc5727c..0000000 --- a/parameters/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# Change Windy parameters - -Main Windy parameters like overlay, level, and forecast model are identified by a string identifier, for example `overlay` can be `rainAccu`, or `level` can be `850h`. - -The state of the Windy map is then stored in the key-value store which can be used via `windyAPI.store`. Use methods `.get(key)` or `.set(key,value)` to read or modify values. - -Handy method `.getAllowed(key)` will return an array of allowed values for a given key. - -Windy parameters can be changed at **start-up** (using start-up `options` object) which can lead to a faster loading time. - -Parameters can also be changed during **runtime**. - -`windyAPI.store` is also an Event Emitter so observe changes of parameters with methods `.on(), .off()`, or `.once()`. - -## Main items stored in windyAPI.store -### overlay -Color weather overlay. - -### level -Level used for actual displayed overlay or isolines. To get a list of available levels for the current combination of overlay and data provider, use `store.get('availLevels')` - -### availLevels -List of levels that are available for the current combination of product and overlay. - -### acTime -Accumulated time. - -### timestamp -Timestamp of actual weather moments. Use freely and without hesitation. - -### isolines -Isolines displayed over the map. - -### product -Product is a set of weather data that have the same resolution, boundaries, time range, and so on. For simplification, you can think of product as a weather model. - -### particlesAnim -Animation of wind/waves particles over the map. Set the value to `on`, or `off` if you want to hide or show them. - -### graticule -Display the graticule over the map. Set it to `true` or `false`. - -### latlon -Display lat/lon values on the weather picker. Set it to `true` or `false`. - -### englishLabels -Show English map labels instead of localized labels. Set it to `true` or `false`. - -### lang -Desired language for Windy. By default, the language is determined by the user's browser settings and set to `auto`. - -### hourFormat -Time format, Set it to `12h` or `24h`. - -### numDirection -Display directions in Weather picker as a number or string (for example NW). Set it to `true` or `false`.. - -### favOverlays -List of overlays that are displayed in the overlays menu. Always create a new array when you want to modify this list (`.store` is primitive and can't compare arrays) - - - diff --git a/parameters/index.html b/parameters/index.html deleted file mode 100644 index f22d4e1..0000000 --- a/parameters/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -
- - - diff --git a/parameters/script.js b/parameters/script.js deleted file mode 100644 index 0389c1c..0000000 --- a/parameters/script.js +++ /dev/null @@ -1,37 +0,0 @@ -const options = { - key: 'PsLAtXpsPTZexBwUkO7Mx5I', // REPLACE WITH YOUR KEY !!! - - // Changing Windy parameters at start-up time - // (recommended for faster start-up) - lat: 50.4, - lon: 14.3, - zoom: 5, - - timestamp: Date.now() + 3 * 24 * 60 * 60 * 1000, - - hourFormat: '12h', - - // ...etc -}; - -windyInit(options, windyAPI => { - const { store } = windyAPI; - // All the params are stored in windyAPI.store - - const levels = store.getAllowed('availLevels'); - // levels = ['surface', '850h', ... ] - // Getting all available values for given key - - let i = 0; - setInterval(() => { - i = i === levels.length - 1 ? 0 : i + 1; - - // Changing Windy params at runtime - store.set('level', levels[i]); - }, 500); - - // Observing change of .store value - store.on('level', level => { - console.log(`Level was changed: ${level}`); - }); -}); diff --git a/params.json b/params.json new file mode 100644 index 0000000..389c1f6 --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"Windyty API","tagline":"Windyty API","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here [using GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/), select a template crafted by a designer, and publish. After your page is generated, you can check out the new `gh-pages` branch locally. If you’re using GitHub Desktop, simply sync your repository and you’ll see the new branch.\r\n\r\n### Designer Templates\r\nWe’ve crafted some handsome templates for you to use. Go ahead and click 'Continue to layouts' to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved.\r\n\r\n### Creating pages manually\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor’s GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out our [documentation](https://help.github.com/pages) or [contact support](https://github.com/contact) and we’ll help you sort it out.\r\n","google":"UA-56263486-8","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/picker/README.md b/picker/README.md deleted file mode 100644 index 709a4cf..0000000 --- a/picker/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Use the weather picker -The weather picker works **only on desktop** and is not intended for mobile use. It resides at `windyApi.picker`. It can be opened programmatically by calling `.open({ lat, lon })` or closed by `.close()` methods. - -If the picker is opened outside of the visible map, it can lead to an exception or it is closed afterwards. Also panning the map, so the picker gets outside the map, leads to auto closing of the picker. The picker emits messages about its own state, so use methods `.on(), .off()` or `.once()` to observe `pickerOpened`, `pickerClosed` and `pickerMoved` broadcasts. - -While the picker is opened, use its method `.getParams()` to get picker coordinates and raw meteorological values in the location of the picker. - -## Converting raw meteorological values to readable numbers -Raw meteorological units returned from the weather picker are usually described in respective documentation for `ECMWF`, `GFS` or other used forecast models. Use `windApi.utils` to convert these values to something more useful. - -Most popular overlays have these values: - -### wind -Array `[ U, V ]`, where U and V are wind vectors in `m/s`. To compute wind magnitude and direction use `utils.wind2obj( values )`, which returns `{ dir: 210.4334, wind: 10.2 }` - -### temperature, dewPoint -Temperature in `K` - -### rain, rainAccumulation -Rain for a duration of 3 hours or the selected accumulation period in `mm` - -### waves, swell -Array `[ U, V, size]` where U and V are direction vectors and wave size is in `m`. Period in seconds is computed as `Math.sqrt( U * U + V * V )`. Use `utils.wave2obj( values )`, which returns `{ dir: 325.9878, size: 2.4, period: 8 }` - -To convert values to user's selected metrics use `.convertNumber(num)` or `.convertValue(num)` methods of respective `overlays` instance. While `converNumber` just recalculates value and return a number, `convertValue` adds name of a metric and returns a string. For example `overlays.wind.convertNumber(10)` returns 19, while `overlays.wind.convertValue(10)` return "19kt". - diff --git a/picker/index.html b/picker/index.html deleted file mode 100644 index f22d4e1..0000000 --- a/picker/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -
- - - diff --git a/picker/script.js b/picker/script.js deleted file mode 100644 index 27b6782..0000000 --- a/picker/script.js +++ /dev/null @@ -1,40 +0,0 @@ -const options = { - key: 'PsLAtXpsPTZexBwUkO7Mx5I', // REPLACE WITH YOUR KEY !!! - lat: 50.4, - lon: 14.3, - zoom: 5, -}; - -windyInit(options, windyAPI => { - const { picker, utils, broadcast, store } = windyAPI; - - picker.on('pickerOpened', ({ lat, lon, values, overlay }) => { - // -> 48.4, 14.3, [ U,V, ], 'wind' - console.log('opened', lat, lon, values, overlay); - - const windObject = utils.wind2obj(values); - console.log(windObject); - }); - - picker.on('pickerMoved', ({ lat, lon, values, overlay }) => { - // picker was dragged by user to latLon coords - console.log('moved', lat, lon, values, overlay); - }); - - picker.on('pickerClosed', () => { - // picker was closed - }); - - store.on('pickerLocation', ({ lat, lon }) => { - console.log(lat, lon); - - const { values, overlay } = picker.getParams(); - console.log('location changed', lat, lon, values, overlay); - }); - - // Wait since wather is rendered - broadcast.once('redrawFinished', () => { - // Opening of a picker (async) - picker.open({ lat: 48.4, lon: 14.3 }); - }); -}); diff --git a/stylesheets/github-light.css b/stylesheets/github-light.css new file mode 100644 index 0000000..872a6f4 --- /dev/null +++ b/stylesheets/github-light.css @@ -0,0 +1,116 @@ +/* + Copyright 2014 GitHub Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +.pl-c /* comment */ { + color: #969896; +} + +.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */, +.pl-s .pl-v /* string variable */ { + color: #0086b3; +} + +.pl-e /* entity */, +.pl-en /* entity.name */ { + color: #795da3; +} + +.pl-s .pl-s1 /* string source */, +.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ { + color: #333; +} + +.pl-ent /* entity.name.tag */ { + color: #63a35c; +} + +.pl-k /* keyword, storage, storage.type */ { + color: #a71d5d; +} + +.pl-pds /* punctuation.definition.string, string.regexp.character-class */, +.pl-s /* string */, +.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */, +.pl-sr /* string.regexp */, +.pl-sr .pl-cce /* string.regexp constant.character.escape */, +.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */, +.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ { + color: #183691; +} + +.pl-v /* variable */ { + color: #ed6a43; +} + +.pl-id /* invalid.deprecated */ { + color: #b52a1d; +} + +.pl-ii /* invalid.illegal */ { + background-color: #b52a1d; + color: #f8f8f8; +} + +.pl-sr .pl-cce /* string.regexp constant.character.escape */ { + color: #63a35c; + font-weight: bold; +} + +.pl-ml /* markup.list */ { + color: #693a17; +} + +.pl-mh /* markup.heading */, +.pl-mh .pl-en /* markup.heading entity.name */, +.pl-ms /* meta.separator */ { + color: #1d3e81; + font-weight: bold; +} + +.pl-mq /* markup.quote */ { + color: #008080; +} + +.pl-mi /* markup.italic */ { + color: #333; + font-style: italic; +} + +.pl-mb /* markup.bold */ { + color: #333; + font-weight: bold; +} + +.pl-md /* markup.deleted, meta.diff.header.from-file */ { + background-color: #ffecec; + color: #bd2c00; +} + +.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ { + background-color: #eaffea; + color: #55a532; +} + +.pl-mdr /* meta.diff.range */ { + color: #795da3; + font-weight: bold; +} + +.pl-mo /* meta.output */ { + color: #1d3e81; +} + diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 0000000..3da3485 --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,425 @@ +/******************************************************************************* +Slate Theme for GitHub Pages +by Jason Costello, @jsncostello +*******************************************************************************/ + +@import url(github-light.css); + +/******************************************************************************* +MeyerWeb Reset +*******************************************************************************/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + vertical-align: baseline; +} + +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +ol, ul { + list-style: none; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +/******************************************************************************* +Theme Styles +*******************************************************************************/ + +body { + box-sizing: border-box; + color:#373737; + background: #212121; + font-size: 16px; + font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif; + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3, h4, h5, h6 { + margin: 10px 0; + font-weight: 700; + color:#222222; + font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif; + letter-spacing: -1px; +} + +h1 { + font-size: 36px; + font-weight: 700; +} + +h2 { + padding-bottom: 10px; + font-size: 32px; + background: url('../images/bg_hr.png') repeat-x bottom; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 21px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 16px; +} + +p { + margin: 10px 0 15px 0; +} + +footer p { + color: #f2f2f2; +} + +a { + text-decoration: none; + color: #007edf; + text-shadow: none; + + transition: color 0.5s ease; + transition: text-shadow 0.5s ease; + -webkit-transition: color 0.5s ease; + -webkit-transition: text-shadow 0.5s ease; + -moz-transition: color 0.5s ease; + -moz-transition: text-shadow 0.5s ease; + -o-transition: color 0.5s ease; + -o-transition: text-shadow 0.5s ease; + -ms-transition: color 0.5s ease; + -ms-transition: text-shadow 0.5s ease; +} + +a:hover, a:focus {text-decoration: underline;} + +footer a { + color: #F2F2F2; + text-decoration: underline; +} + +em { + font-style: italic; +} + +strong { + font-weight: bold; +} + +img { + position: relative; + margin: 0 auto; + max-width: 739px; + padding: 5px; + margin: 10px 0 10px 0; + border: 1px solid #ebebeb; + + box-shadow: 0 0 5px #ebebeb; + -webkit-box-shadow: 0 0 5px #ebebeb; + -moz-box-shadow: 0 0 5px #ebebeb; + -o-box-shadow: 0 0 5px #ebebeb; + -ms-box-shadow: 0 0 5px #ebebeb; +} + +p img { + display: inline; + margin: 0; + padding: 0; + vertical-align: middle; + text-align: center; + border: none; +} + +pre, code { + width: 100%; + color: #222; + background-color: #fff; + + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + font-size: 14px; + + border-radius: 2px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; +} + +pre { + width: 100%; + padding: 10px; + box-shadow: 0 0 10px rgba(0,0,0,.1); + overflow: auto; +} + +code { + padding: 3px; + margin: 0 3px; + box-shadow: 0 0 10px rgba(0,0,0,.1); +} + +pre code { + display: block; + box-shadow: none; +} + +blockquote { + color: #666; + margin-bottom: 20px; + padding: 0 0 0 20px; + border-left: 3px solid #bbb; +} + + +ul, ol, dl { + margin-bottom: 15px +} + +ul { + list-style-position: inside; + list-style: disc; + padding-left: 20px; +} + +ol { + list-style-position: inside; + list-style: decimal; + padding-left: 20px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + padding-left: 20px; + font-style: italic; +} + +dl p { + padding-left: 20px; + font-style: italic; +} + +hr { + height: 1px; + margin-bottom: 5px; + border: none; + background: url('../images/bg_hr.png') repeat-x center; +} + +table { + border: 1px solid #373737; + margin-bottom: 20px; + text-align: left; + } + +th { + font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 10px; + background: #373737; + color: #fff; + } + +td { + padding: 10px; + border: 1px solid #373737; + } + +form { + background: #f2f2f2; + padding: 20px; +} + +/******************************************************************************* +Full-Width Styles +*******************************************************************************/ + +.outer { + width: 100%; +} + +.inner { + position: relative; + max-width: 640px; + padding: 20px 10px; + margin: 0 auto; +} + +#forkme_banner { + display: block; + position: absolute; + top:0; + right: 10px; + z-index: 10; + padding: 10px 50px 10px 10px; + color: #fff; + background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%; + font-weight: 700; + box-shadow: 0 0 10px rgba(0,0,0,.5); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +#header_wrap { + background: #212121; + background: -moz-linear-gradient(top, #373737, #212121); + background: -webkit-linear-gradient(top, #373737, #212121); + background: -ms-linear-gradient(top, #373737, #212121); + background: -o-linear-gradient(top, #373737, #212121); + background: linear-gradient(top, #373737, #212121); +} + +#header_wrap .inner { + padding: 50px 10px 30px 10px; +} + +#project_title { + margin: 0; + color: #fff; + font-size: 42px; + font-weight: 700; + text-shadow: #111 0px 0px 10px; +} + +#project_tagline { + color: #fff; + font-size: 24px; + font-weight: 300; + background: none; + text-shadow: #111 0px 0px 10px; +} + +#downloads { + position: absolute; + width: 210px; + z-index: 10; + bottom: -40px; + right: 0; + height: 70px; + background: url('../images/icon_download.png') no-repeat 0% 90%; +} + +.zip_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom left; +} + +.tar_download_link { + display: block; + float: right; + width: 90px; + height:70px; + text-indent: -5000px; + overflow: hidden; + background: url(../images/sprite_download.png) no-repeat bottom right; + margin-left: 10px; +} + +.zip_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top left; +} + +.tar_download_link:hover { + background: url(../images/sprite_download.png) no-repeat top right; +} + +#main_content_wrap { + background: #f2f2f2; + border-top: 1px solid #111; + border-bottom: 1px solid #111; +} + +#main_content { + padding-top: 40px; +} + +#footer_wrap { + background: #212121; +} + + + +/******************************************************************************* +Small Device Styles +*******************************************************************************/ + +@media screen and (max-width: 480px) { + body { + font-size:14px; + } + + #downloads { + display: none; + } + + .inner { + min-width: 320px; + max-width: 480px; + } + + #project_title { + font-size: 32px; + } + + h1 { + font-size: 28px; + } + + h2 { + font-size: 24px; + } + + h3 { + font-size: 21px; + } + + h4 { + font-size: 18px; + } + + h5 { + font-size: 14px; + } + + h6 { + font-size: 12px; + } + + code, pre { + min-width: 320px; + max-width: 480px; + font-size: 11px; + } + +}