From 4779434924ad713be0e3a9acef671f81c1315322 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 13 Mar 2022 21:58:40 +0000 Subject: [PATCH 01/26] =?UTF-8?q?=E2=9C=A8=20Adds=20backend=20support=20fo?= =?UTF-8?q?r=20status=20check=20redirects=20(Re:=20#494)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/status-check.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/services/status-check.js b/services/status-check.js index 6f52482c..1c725eb4 100644 --- a/services/status-check.js +++ b/services/status-check.js @@ -28,15 +28,23 @@ const makeErrorMessage2 = (data) => '❌ Service Error - ' + `${data.status} - ${data.statusText}`; /* Kicks of a HTTP request, then formats and renders results */ -const makeRequest = (url, headers, insecure, acceptCodes, render) => { +const makeRequest = (url, options, render) => { + console.log(options); + const { + headers, enableInsecure, acceptCodes, maxRedirects, + } = options; const validCodes = acceptCodes && acceptCodes !== 'null' ? acceptCodes : null; const startTime = new Date(); const requestMaker = axios.create({ httpsAgent: new https.Agent({ - rejectUnauthorized: !insecure, + rejectUnauthorized: !enableInsecure, }), }); - requestMaker.get(url, { headers }) + requestMaker.request({ + url, + headers, + maxRedirects, + }) .then((response) => { const statusCode = response.status; const { statusText } = response; @@ -100,9 +108,13 @@ module.exports = (paramStr, render) => { const params = new URLSearchParams(paramStr); const url = decodeURIComponent(params.get('url')); const acceptCodes = decodeURIComponent(params.get('acceptCodes')); + const maxRedirects = decodeURIComponent(params.get('maxRedirects')) || 0; const headers = decodeHeaders(params.get('headers')); const enableInsecure = !!params.get('enableInsecure'); if (!url || url === 'undefined') immediateError(render); - makeRequest(url, headers, enableInsecure, acceptCodes, render); + const options = { + headers, enableInsecure, acceptCodes, maxRedirects, + }; + makeRequest(url, options, render); } }; From 5ff099ea1feae2a9308532bee54a621d54ed5cfe Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 13 Mar 2022 22:00:36 +0000 Subject: [PATCH 02/26] =?UTF-8?q?=F0=9F=97=83=20Updates=20schema=20and=20a?= =?UTF-8?q?dds=20maxRedirects=20to=20docs=20(Re:=20#494)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/configuring.md | 1 + src/utils/ConfigSchema.json | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/configuring.md b/docs/configuring.md index 71356c3d..4e052c4a 100644 --- a/docs/configuring.md +++ b/docs/configuring.md @@ -206,6 +206,7 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)** **`statusCheckHeaders`** | `object` | _Optional_ | If you're endpoint requires any specific headers for the status checking, then define them here **`statusCheckAllowInsecure`** | `boolean` | _Optional_ | By default, any request to insecure content will be blocked. Setting this option to `true` will disable the `rejectUnauthorized` option, enabling you to ping non-HTTPS services for the current item. Defaults to `false` **`statusCheckAcceptCodes`** | `string` | _Optional_ | If your service's response code is anything other than 2xx, then you can opt to specify an alternative success code. E.g. if you expect your server to return 403, but still want the status indicator to be green, set this value to `403` +**`statusCheckMaxRedirects`** | `number` | _Optional_ | If your service redirects to another page, and you would like status checks to follow redirects, then specify the maximum number of redirects here. Defaults to `0` / will not follow redirects **`color`** | `string` | _Optional_ | An optional color for the text and font-awesome icon to be displayed in. Note that this will override the current theme and so may not display well **`backgroundColor`** | `string` | _Optional_ | An optional background fill color for the that given item. Again, this will override the current theme and so might not display well against the background **`provider`** | `string` | _Optional_ | The name of the provider for a given service, useful for when including hosted apps. In some themes, this is visible under the item name diff --git a/src/utils/ConfigSchema.json b/src/utils/ConfigSchema.json index dab1e454..312fafc8 100644 --- a/src/utils/ConfigSchema.json +++ b/src/utils/ConfigSchema.json @@ -789,11 +789,16 @@ "description": "Allows for running status checks on insecure content/ non-HTTPS apps. Prevents checks failing for non-SSL sites" }, "statusCheckAcceptCodes": { - "title": "Accepted HTTP Status Codes", + "title": "Status Check - Accepted HTTP Codes", "type": "string", - "default": "", "description": "If your service's response code is anything other than 2xx, then you can opt to specify an alternative success code" }, + "statusCheckMaxRedirects": { + "title": "Status Check - Max Redirects", + "type": "number", + "default": "0", + "description": "If your service redirects to another page, and you would like status checks to follow redirects, then specify the maximum number of redirects here" + }, "color": { "title": "Custom Color", "type": "string", From 9e383e06388f457b1cceb40a2cfe65cbff3fb0b8 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 13 Mar 2022 22:01:33 +0000 Subject: [PATCH 03/26] =?UTF-8?q?=E2=9C=A8=20Adds=20frontend=20functionali?= =?UTF-8?q?ty=20for=20status=20checks=20max=20redirects=20(Re@=20#494)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/LinkItems/Item.vue | 11 +++++++++-- src/components/LinkItems/Section.vue | 1 + src/components/MinimalView/MinimalSection.vue | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/LinkItems/Item.vue b/src/components/LinkItems/Item.vue index c242d1df..882f5dc9 100644 --- a/src/components/LinkItems/Item.vue +++ b/src/components/LinkItems/Item.vue @@ -96,6 +96,7 @@ export default { statusCheckInterval: Number, // Num seconds beteween repeating checks statusCheckAllowInsecure: Boolean, // Status check ignore SSL certs statusCheckAcceptCodes: String, // Allow status checks to pass with a code other than 200 + statusCheckMaxRedirects: Number, // Specify max number of redirects parentSectionTitle: String, // Title of parent section (for add new) isAddNew: Boolean, // Only set if 'fake' item used as Add New button }, @@ -237,7 +238,12 @@ export default { /* Pulls together all user options, returns URL + Get params for ping endpoint */ makeApiUrl() { const { - url, statusCheckUrl, statusCheckHeaders, statusCheckAllowInsecure, statusCheckAcceptCodes, + url, + statusCheckUrl, + statusCheckHeaders, + statusCheckAllowInsecure, + statusCheckAcceptCodes, + statusCheckMaxRedirects, } = this; const encode = (str) => encodeURIComponent(str); this.statusResponse = undefined; @@ -251,9 +257,10 @@ export default { // Deterimine if user disabled security const enableInsecure = statusCheckAllowInsecure ? '&enableInsecure=true' : ''; const acceptCodes = statusCheckAcceptCodes ? `&acceptCodes=${statusCheckAcceptCodes}` : ''; + const maxRedirects = statusCheckMaxRedirects ? `&maxRedirects=${statusCheckMaxRedirects}` : ''; // Construct the full API endpoint's URL with GET params return `${baseUrl}${serviceEndpoints.statusCheck}/${urlToCheck}` - + `${headers}${enableInsecure}${acceptCodes}`; + + `${headers}${enableInsecure}${acceptCodes}${maxRedirects}`; }, /* Checks if a given service is currently online */ checkWebsiteStatus() { diff --git a/src/components/LinkItems/Section.vue b/src/components/LinkItems/Section.vue index f7d8ac14..2145a248 100644 --- a/src/components/LinkItems/Section.vue +++ b/src/components/LinkItems/Section.vue @@ -42,6 +42,7 @@ :statusCheckInterval="statusCheckInterval" :statusCheckAllowInsecure="item.statusCheckAllowInsecure" :statusCheckAcceptCodes="item.statusCheckAcceptCodes" + :statusCheckMaxRedirects="item.statusCheckMaxRedirects" @itemClicked="$emit('itemClicked')" @triggerModal="triggerModal" :isAddNew="false" diff --git a/src/components/MinimalView/MinimalSection.vue b/src/components/MinimalView/MinimalSection.vue index d561f3ca..5dd244b5 100644 --- a/src/components/MinimalView/MinimalSection.vue +++ b/src/components/MinimalView/MinimalSection.vue @@ -19,6 +19,7 @@ :enableStatusCheck="shouldEnableStatusCheck(item.statusCheck)" :statusCheckAllowInsecure="item.statusCheckAllowInsecure" :statusCheckAcceptCodes="item.statusCheckAcceptCodes" + :statusCheckMaxRedirects="item.statusCheckMaxRedirects" :statusCheckInterval="getStatusCheckInterval()" @itemClicked="$emit('itemClicked')" @triggerModal="triggerModal" From 0e101b63307cb2efee4cc4ab0bc4062627bda907 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 13 Mar 2022 22:37:35 +0000 Subject: [PATCH 04/26] =?UTF-8?q?=F0=9F=94=A7=20Adds=20config=20file=20for?= =?UTF-8?q?=20GitPod=20env=20(#497)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitpod.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .gitpod.yml diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 00000000..b0a726d8 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,29 @@ +# Config for running Dashy in GitPod's cloud dev environment +# Docs: https://www.gitpod.io/docs/references/gitpod-yml + +# Commands to start on workspace startup +tasks: + - init: yarn install + command: yarn dev +# Ports to expose on workspace startup +ports: + - port: 8080 # Default dev server + visibility: private + onOpen: open-preview + - port: 4000 # Default prod server + visibility: public + onOpen: open-preview +prebuilds: + # Adds 'Open in GitPod' to PRs + addBadge: true + addComment: false +vscode: + # Adds Vue.js and formatting extensions + extensions: + - octref.vetur + - dbaeumer.vscode-eslint + - streetsidesoftware.code-spell-checker + - PKief.material-icon-theme + - wix.vscode-import-cost + - oderwat.indent-rainbow + - eamodio.gitlens From f286487b75fb9687432abfd9da83ab48ad127a78 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Mon, 14 Mar 2022 22:16:33 +0000 Subject: [PATCH 05/26] =?UTF-8?q?=F0=9F=90=9B=20Adds=20text/css=20type=20a?= =?UTF-8?q?ttr=20for=20custom=20stylesheets=20(#560)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/ThemeHelper.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/ThemeHelper.js b/src/utils/ThemeHelper.js index b16b27e3..79def8ad 100644 --- a/src/utils/ThemeHelper.js +++ b/src/utils/ThemeHelper.js @@ -32,6 +32,7 @@ export const LoadExternalTheme = function th() { const preloadTheme = (href) => { const link = document.createElement('link'); link.rel = 'stylesheet'; + link.type = 'text/css' link.href = href; document.head.appendChild(link); return new Promise((resolve, reject) => { From f250890f3b88340a3d36de45037a5a0cefe8d48b Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Mon, 21 Mar 2022 18:31:16 +0000 Subject: [PATCH 06/26] =?UTF-8?q?=F0=9F=90=9B=20Fixes=20link=20to=20@walkx?= =?UTF-8?q?hub=20homelab=20icons=20(#568)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/defaults.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/defaults.js b/src/utils/defaults.js index 57cabb6d..818f4ce8 100644 --- a/src/utils/defaults.js +++ b/src/utils/defaults.js @@ -201,7 +201,7 @@ module.exports = { generativeFallback: 'https://evatar.io/{icon}', localPath: './item-icons', faviconName: 'favicon.ico', - homeLabIcons: 'https://raw.githubusercontent.com/WalkxCode/dashboard-icons/master/png/{icon}.png', + homeLabIcons: 'https://raw.githubusercontent.com/walkxhub/dashboard-icons/master/png/{icon}.png', homeLabIconsFallback: 'https://raw.githubusercontent.com/NX211/homer-icons/master/png/{icon}.png', }, /* API endpoints for widgets that need to fetch external data */ From 6702b9335f3a7cb9d690a31653e14e08b4bde823 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 19:32:41 +0000 Subject: [PATCH 07/26] :rotating_light: Fixes bad object comparison --- src/utils/ConfigAccumalator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/ConfigAccumalator.js b/src/utils/ConfigAccumalator.js index 6ab294e3..dbfc5a14 100644 --- a/src/utils/ConfigAccumalator.js +++ b/src/utils/ConfigAccumalator.js @@ -30,7 +30,7 @@ export default class ConfigAccumulator { let usersAppConfig = defaultAppConfig; if (localStorage[localStorageKeys.APP_CONFIG]) { usersAppConfig = JSON.parse(localStorage[localStorageKeys.APP_CONFIG]); - } else if (appConfigFile !== {}) { + } else if (Object.keys(appConfigFile).length > 0) { usersAppConfig = appConfigFile; } // Some settings have their own local storage keys, apply them here From 1f3ed135deb9d3b2247d95e16c02a73dfc1f7a11 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 19:34:37 +0000 Subject: [PATCH 08/26] :rotating_light: Adds missing semmi --- src/utils/ThemeHelper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/ThemeHelper.js b/src/utils/ThemeHelper.js index 79def8ad..3b21dd83 100644 --- a/src/utils/ThemeHelper.js +++ b/src/utils/ThemeHelper.js @@ -32,7 +32,7 @@ export const LoadExternalTheme = function th() { const preloadTheme = (href) => { const link = document.createElement('link'); link.rel = 'stylesheet'; - link.type = 'text/css' + link.type = 'text/css'; link.href = href; document.head.appendChild(link); return new Promise((resolve, reject) => { From fd2b3d831c7731ae24c614d167e0f250886e88bb Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 19:36:48 +0000 Subject: [PATCH 09/26] :passport_control: Removes `/auth` from KC path (#564) --- src/utils/KeycloakAuth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/KeycloakAuth.js b/src/utils/KeycloakAuth.js index 47d62329..3fcb7f5f 100644 --- a/src/utils/KeycloakAuth.js +++ b/src/utils/KeycloakAuth.js @@ -14,7 +14,7 @@ class KeycloakAuth { const { auth } = getAppConfig(); const { serverUrl, realm, clientId } = auth.keycloak; const initOptions = { - url: `${serverUrl}/auth`, realm, clientId, onLoad: 'login-required', + url: `${serverUrl}`, realm, clientId, onLoad: 'login-required', }; this.keycloakClient = Keycloak(initOptions); From b7c84bb1dd26e8eb2a9e90bf16605c87f5733388 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 20:03:54 +0000 Subject: [PATCH 10/26] :sparkles: Adds target attribute to nav links (#552) --- src/components/PageStrcture/Nav.vue | 36 +++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/components/PageStrcture/Nav.vue b/src/components/PageStrcture/Nav.vue index 09261b52..62bfc3eb 100644 --- a/src/components/PageStrcture/Nav.vue +++ b/src/components/PageStrcture/Nav.vue @@ -5,15 +5,23 @@ @click="navVisible = !navVisible" /> @@ -43,6 +51,16 @@ export default { return screenWidth && screenWidth < 600; }, isUrl: (str) => new RegExp(/(http|https):\/\/(\S+)(:[0-9]+)?/).test(str), + determineTarget(link) { + if (!link.target) return '_blank'; + switch (link.target) { + case 'sametab': return '_self'; + case 'newtab': return '_blank'; + case 'parent': return '_parent'; + case 'top': return '_top'; + default: return undefined; + } + }, }, }; From a9ae53ef7ce0a551ce9971e489365d1d789bd5ae Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 20:04:51 +0000 Subject: [PATCH 11/26] :card_file_box: Adds nav link target attribute to docs and schema (#552) --- docs/configuring.md | 1 + src/utils/ConfigSchema.json | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/docs/configuring.md b/docs/configuring.md index 4e052c4a..2e4f681c 100644 --- a/docs/configuring.md +++ b/docs/configuring.md @@ -77,6 +77,7 @@ The following file provides a reference of all supported configuration options. --- | --- | --- | --- **`title`** | `string` | Required | The text to display on the link button **`path`** | `string` | Required | The URL to navigate to when clicked. Can be relative (e.g. `/about`) or absolute (e.g. `https://example.com` or `http://192.168.1.1`) +**`target`** | `string` | _Optional_ | The opening method (external links only). Can be either `newtab`, `sametab`, `top` or `parent`. Defaults to `newtab` **[⬆️ Back to Top](#configuring)** diff --git a/src/utils/ConfigSchema.json b/src/utils/ConfigSchema.json index 312fafc8..0168b4dd 100644 --- a/src/utils/ConfigSchema.json +++ b/src/utils/ConfigSchema.json @@ -36,6 +36,18 @@ }, "path": { "type": "string" + }, + "target": { + "title": "Opening Method", + "type": "string", + "enum": [ + "newtab", + "sametab", + "parent", + "top" + ], + "default": "newtab", + "description": "Where / how the item is opened when it's clicked" } } } From 1c85d454b9b82b4849948d2a2c4eeb72e235a0bc Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 20:11:39 +0000 Subject: [PATCH 12/26] :bug: Fixes local image path on sub-page (#570) --- src/components/LinkItems/ItemIcon.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/LinkItems/ItemIcon.vue b/src/components/LinkItems/ItemIcon.vue index 0cfa4872..65b1bafa 100644 --- a/src/components/LinkItems/ItemIcon.vue +++ b/src/components/LinkItems/ItemIcon.vue @@ -45,11 +45,11 @@ export default { return this.$store.getters.appConfig; }, /* Determines the type of icon */ - iconType: function iconType() { + iconType() { return this.determineImageType(this.icon); }, /* Gets the icon path, dependent on icon type */ - iconPath: function iconPath() { + iconPath() { if (this.broken) return this.getFallbackIcon(); return this.getIconPath(this.icon, this.url); }, @@ -176,7 +176,7 @@ export default { }, /* Fetches the path of local images, from Docker container */ getLocalImagePath(img) { - return `${iconCdns.localPath}/${img}`; + return `/${iconCdns.localPath}/${img}`; }, /* Formats the URL for fetching the generative icons */ getGenerativeIcon(url, cdn) { From cd50ceb0a0bd52a5e507135111ead04c74bd6c7e Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 20:40:17 +0000 Subject: [PATCH 13/26] :bug: Fixes item size not honored (#576) --- src/components/LinkItems/Section.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/LinkItems/Section.vue b/src/components/LinkItems/Section.vue index 2145a248..a4e2fd96 100644 --- a/src/components/LinkItems/Section.vue +++ b/src/components/LinkItems/Section.vue @@ -152,7 +152,7 @@ export default { return this.$store.state.editMode; }, itemSize() { - return this.$store.getters.iconSize; + return this.displayData.itemSize || this.$store.getters.iconSize; }, sortOrder() { return this.displayData.sortBy || defaultSortOrder; From 16aa14fcbb8f418fe1cdbe0587beb37b181a47c2 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 20:40:59 +0000 Subject: [PATCH 14/26] :necktie: Changes order item size is applied (#576) --- src/utils/ConfigAccumalator.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/utils/ConfigAccumalator.js b/src/utils/ConfigAccumalator.js index dbfc5a14..aa4e151b 100644 --- a/src/utils/ConfigAccumalator.js +++ b/src/utils/ConfigAccumalator.js @@ -34,10 +34,12 @@ export default class ConfigAccumulator { usersAppConfig = appConfigFile; } // Some settings have their own local storage keys, apply them here - usersAppConfig.layout = localStorage[localStorageKeys.LAYOUT_ORIENTATION] - || appConfigFile.layout || defaultLayout; - usersAppConfig.iconSize = localStorage[localStorageKeys.ICON_SIZE] - || appConfigFile.iconSize || defaultIconSize; + usersAppConfig.layout = appConfigFile.layout + || localStorage[localStorageKeys.LAYOUT_ORIENTATION] + || defaultLayout; + usersAppConfig.iconSize = appConfigFile.iconSize + || localStorage[localStorageKeys.ICON_SIZE] + || defaultIconSize; // Don't let users modify users locally if (appConfigFile.auth) usersAppConfig.auth = appConfigFile.auth; // All done, return final appConfig object From 879b3b8f32b954a98b4fc398bf389511469c1b61 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sat, 26 Mar 2022 20:59:33 +0000 Subject: [PATCH 15/26] :necktie: Improved opening method logic (#492) --- src/components/LinkItems/Item.vue | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/LinkItems/Item.vue b/src/components/LinkItems/Item.vue index 882f5dc9..ca59e969 100644 --- a/src/components/LinkItems/Item.vue +++ b/src/components/LinkItems/Item.vue @@ -3,7 +3,7 @@ Date: Sun, 27 Mar 2022 16:18:51 +0100 Subject: [PATCH 16/26] :art: Removes fixed max-width on wide-screens (#554) --- src/views/Home.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/Home.vue b/src/views/Home.vue index 54fbee1b..eb579826 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -213,7 +213,7 @@ export default { overflow: auto; @extend .scroll-bar; @include monitor-up { - max-width: 1400px; + max-width: 85%; } /* Options for alternate layouts, triggered by buttons */ From f4443d00771e8d040b2ac7e646315421e71fdbe9 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 27 Mar 2022 16:20:05 +0100 Subject: [PATCH 17/26] :star2: Adss new screenshots to showcase (#505) --- docs/showcase.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/showcase.md b/docs/showcase.md index b9eeb868..be6602d8 100644 --- a/docs/showcase.md +++ b/docs/showcase.md @@ -16,6 +16,13 @@ --- +### Hugalafutro Dashy +> By [@hugalafutro](https://github.com/hugalafutro) [#505](https://github.com/Lissy93/dashy/discussions/505) + +[![hugalafutro-dashy-screenshot](https://i.ibb.co/PDpLDKS/hugalafutro-dashy.gif)](https://i.ibb.co/PDpLDKS/hugalafutro-dashy.gif) + +--- + ### Networking Services > By [@Lissy93](https://github.com/lissy93) @@ -126,6 +133,13 @@ --- +### Croco_Grievous +> By [u/Croco_Grievous](https://www.reddit.com/user/Croco_Grievous/) via [reddit](https://www.reddit.com/r/selfhosted/comments/t4xk3z/everything_started_with_pihole_on_a_raspberry_pi/) + +![screenshot-croco-grievous-dashy](https://i.ibb.co/59XR8KL/dashy-Croco-Grievous.png) + +--- + ### Crypto Dash > Example usage of widgets to monitor cryptocurrencies news, prices and data. Config is [available here](https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10#file-example-8-dashy-crypto-widgets-conf-yml) @@ -134,6 +148,13 @@ --- +### Stefantigro +> By [u/stefantigro](https://www.reddit.com/user/stefantigro/) via [reddit](https://www.reddit.com/r/selfhosted/comments/t5oril/been_selfhosting_close_to_half_a_year_now_all/) + +![screenshot-stefantigro-dashy](https://i.ibb.co/1Kb43Yy/dashy-stefantigro.png) + +--- + ### Yet Another Homelab ![screenshot-yet-another-homelab](https://raw.githubusercontent.com/Lissy93/dashy/master/docs/showcase/9-home-lab-oblivion.png) From 68b77587ff150684e14692b1ac8fdc01275710be Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 27 Mar 2022 17:09:06 +0100 Subject: [PATCH 18/26] :bug: Fixes str.split on tags array (#575) --- src/components/InteractiveEditor/EditItem.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/InteractiveEditor/EditItem.vue b/src/components/InteractiveEditor/EditItem.vue index 2c89bf57..d8c0be0a 100644 --- a/src/components/InteractiveEditor/EditItem.vue +++ b/src/components/InteractiveEditor/EditItem.vue @@ -231,8 +231,8 @@ export default { const newItem = item; newItem.id = this.itemId; if (newItem.hotkey) newItem.hotkey = parseInt(newItem.hotkey, 10); - const strToTags = (str) => { - const tagArr = str.split(','); + const strToTags = (tags) => { + const tagArr = (typeof tags === 'string') ? tags.split(',') : tags; return tagArr.map((tag) => tag.trim().toLowerCase().replace(/[^a-z0-9]+/, '')); }; const strToBool = (str) => { From c3c04723fdb6f5852f900552484c47d1fef83955 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 27 Mar 2022 19:58:39 +0100 Subject: [PATCH 19/26] :bookmark: Bumps to 2.0.6 and updates changelog --- .github/CHANGELOG.md | 15 ++++++++++++++- .github/LATEST_CHANGELOG.md | 14 ++++++++++++-- package.json | 2 +- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index e28eba36..f5d63a8a 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -1,6 +1,19 @@ # Changelog -## :sparkles: 2.0.4 - Dynamic Config Loading [PR #528](https://github.com/Lissy93/dashy/pull/528) +## 🐛 2.0.6 Fixes user requested issues [PR #557](https://github.com/Lissy93/dashy/pull/557) +- Allows middle click open new tab, Re: #492 +- Implements Max redirects for status checks, Re: #494 +- Adds Gitpod config for cloud-ready IDE, Re: #497 +- Adss new screenshots to showcase. Re: #505 +- Adds target attribute to nav links, Re: #552 +- Removes fixed max-width on wide-screens, Re: #554 +- Updates path to Keycloak API, Re: #564 +- Fixes link to @walkxhub homelab icons, Re #568 +- Fixes local image path on sub-page, Re: #570 +- Adds typecheck on edit item tags, Re: #575 +- Fixes item size in config not honored, Re: #576 + +## ✨ 2.0.4 - Dynamic Config Loading [PR #528](https://github.com/Lissy93/dashy/pull/528) - `conf.yml` is now loaded dynamically and the app now only needs a browser refresh on config change, not a full rebuild! ## 🐛 2.0.3 - Bug Fixes [PR #488](https://github.com/Lissy93/dashy/pull/488) diff --git a/.github/LATEST_CHANGELOG.md b/.github/LATEST_CHANGELOG.md index 7a2367cb..46ef15a4 100644 --- a/.github/LATEST_CHANGELOG.md +++ b/.github/LATEST_CHANGELOG.md @@ -1,2 +1,12 @@ -## :sparkles: Dynamic Config Loading [PR #528](https://github.com/Lissy93/dashy/pull/528) -- `conf.yml` is now loaded dynamically and the app now only needs a browser refresh on config change, not a full rebuild! \ No newline at end of file +## 🐛 Fixes user requested issues [PR #557](https://github.com/Lissy93/dashy/pull/557) +- Allows middle click open new tab, Re: #492 +- Implements Max redirects for status checks, Re: #494 +- Adds Gitpod config for cloud-ready IDE, Re: #497 +- Adss new screenshots to showcase. Re: #505 +- Adds target attribute to nav links, Re: #552 +- Removes fixed max-width on wide-screens, Re: #554 +- Updates path to Keycloak API, Re: #564 +- Fixes link to @walkxhub homelab icons, Re #568 +- Fixes local image path on sub-page, Re: #570 +- Adds typecheck on edit item tags, Re: #575 +- Fixes item size in config not honored, Re: #576 diff --git a/package.json b/package.json index ee320b40..5113d9b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Dashy", - "version": "2.0.4", + "version": "2.0.6", "license": "MIT", "main": "server", "author": "Alicia Sykes (https://aliciasykes.com)", From e616d9043f2e0a521d72329e4ee312c354bda661 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Sun, 27 Mar 2022 20:10:17 +0100 Subject: [PATCH 20/26] :zap: Allows full-screen for iframes (#524) --- src/components/LinkItems/IframeModal.vue | 2 +- src/components/Workspace/WebContent.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/LinkItems/IframeModal.vue b/src/components/LinkItems/IframeModal.vue index 592b5d1a..c2706957 100644 --- a/src/components/LinkItems/IframeModal.vue +++ b/src/components/LinkItems/IframeModal.vue @@ -3,7 +3,7 @@ classes="dashy-modal">
Close
x -