diff --git a/docs/widgets.md b/docs/widgets.md index 04259561..ded52484 100644 --- a/docs/widgets.md +++ b/docs/widgets.md @@ -18,6 +18,7 @@ Dashy has support for displaying dynamic content in the form of widgets. There a - [Stock Price History](#stock-price-history) - [Joke of the Day](#joke) - [Flight Data](#flight-data) + - [Public IP Address](#public-ip) - [Self-Hosted Services Widgets](#dynamic-widgets) - [System Info](#system-info) - [CPU History](#cpu-history-netdata) @@ -430,6 +431,24 @@ Displays airport departure and arrival flights, using data from [AeroDataBox](ht --- +### Public IP + +Displays your public IP address, along with ISP name and approx location. Data is fetched from [IP-API.com](https://ip-api.com/). + +

+ +##### Options + +_No config options._ + +##### Example + +```yaml +- type: public-ip +``` + +--- + ## Self-Hosted Services Widgets @@ -441,7 +460,7 @@ Displays info about the server which Dashy is hosted on. Includes user + host, o ##### Options -No config options. +_No config options._ ##### Example diff --git a/src/components/Widgets/PublicIp.vue b/src/components/Widgets/PublicIp.vue new file mode 100644 index 00000000..93c3450f --- /dev/null +++ b/src/components/Widgets/PublicIp.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/components/Widgets/WidgetBase.vue b/src/components/Widgets/WidgetBase.vue index ec1e839b..f49bd345 100644 --- a/src/components/Widgets/WidgetBase.vue +++ b/src/components/Widgets/WidgetBase.vue @@ -109,6 +109,13 @@ @error="handleError" :ref="widgetRef" /> + { return code; }; +/* Given a 2-digit country code, return path to flag image from Flagpedia */ +export const getCountryFlag = (countryCode, dimens) => { + const protocol = 'https'; + const cdn = 'flagcdn.com'; + const dimensions = dimens || '64x48'; + const country = countryCode.toLowerCase(); + const ext = 'png'; + return `${protocol}://${cdn}/${dimensions}/${country}.${ext}`; +}; + +/* Given a Latitude & Longitude object, and optional zoom level, return link to OSM */ +export const getMapUrl = (location, zoom) => { + return `https://www.openstreetmap.org/#map=${zoom || 10}/${location.lat}/${location.lon}`; +}; + /* Given a large number, will add commas to make more readable */ export const putCommasInBigNum = (bigNum) => { const strNum = Number.isNaN(bigNum) ? bigNum : String(bigNum); diff --git a/src/utils/defaults.js b/src/utils/defaults.js index d5bcdd06..e19738c8 100644 --- a/src/utils/defaults.js +++ b/src/utils/defaults.js @@ -219,6 +219,7 @@ module.exports = { rssToJson: 'https://api.rss2json.com/v1/api.json', codeStats: 'https://codestats.net/', holidays: 'https://kayaposoft.com/enrico/json/v2.0/?action=getHolidaysForDateRange', + publicIp: 'http://ip-api.com/json', }, /* URLs for web search engines */ searchEngineUrls: {