From c4b687550d90ed7c6b4475d66fa0d107b384c20a Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 31 Dec 2023 19:41:56 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Adds=20support=20for=20lat+lon=20lo?= =?UTF-8?q?cation=20(#1142)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/widgets.md | 4 +++- src/components/Widgets/Weather.vue | 13 +++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/widgets.md b/docs/widgets.md index cf16db5210..991c7a1d26 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 364e1bb465..a72a0dded1 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\''); }