diff --git a/docs/widgets.md b/docs/widgets.md index cf16db52..991c7a1d 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -151,6 +151,8 @@ A simple, live-updating local weather component, showing temperature, conditions **`city`** | `string` | Required | A city name to use for fetching weather. This can also be a state code or country code, following the ISO-3166 format **`units`** | `string` | _Optional_ | The units to use for displaying data, can be either `metric` or `imperial`. Defaults to `metric` **`hideDetails`** | `boolean` | _Optional_ | If set to `true`, the additional details (wind, humidity, pressure, etc) will not be shown. Defaults to `false` +**`lat`** | `number` | _Optional_ | To show weather for a specific location, you can provide the latitude and longitude coordinates. If provided, this will override the `city` option +**`lon`** | `number` | _Optional_ | To show weather for a specific location, you can provide the latitude and longitude coordinates. If provided, this will override the `city` option #### Example @@ -160,7 +162,7 @@ A simple, live-updating local weather component, showing temperature, conditions apiKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx city: London units: metric - hideDetails: false + hideDetails: true ``` #### Info diff --git a/src/components/Widgets/Weather.vue b/src/components/Widgets/Weather.vue index 364e1bb4..a72a0dde 100644 --- a/src/components/Widgets/Weather.vue +++ b/src/components/Widgets/Weather.vue @@ -46,7 +46,12 @@ export default { return this.options.units || 'metric'; }, endpoint() { - const { apiKey, city } = this.options; + const { + apiKey, city, lat, lon, + } = this.options; + if (lat && lon) { + return `${widgetApiEndpoints.weather}?lat=${lat}&lon=${lon}&appid=${apiKey}&units=${this.units}`; + } return `${widgetApiEndpoints.weather}?q=${city}&appid=${apiKey}&units=${this.units}`; }, tempDisplayUnits() { @@ -106,7 +111,11 @@ export default { checkProps() { const ops = this.options; if (!ops.apiKey) this.error('Missing API key for OpenWeatherMap'); - if (!ops.city) this.error('A city name is required to fetch weather'); + + if ((!ops.lat || !ops.lon) && !ops.city) { + this.error('A city name or lat + lon is required to fetch weather'); + } + if (ops.units && ops.units !== 'metric' && ops.units !== 'imperial') { this.error('Invalid units specified, must be either \'metric\' or \'imperial\''); }