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 6f52482c0c..1c725eb46a 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 71356c3d14..4e052c4a73 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 dab1e4542e..312fafc8fd 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 c242d1df66..882f5dc95e 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 f7d8ac1408..2145a24875 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 d561f3ca28..5dd244b559 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 0000000000..b0a726d8da --- /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 b16b27e384..79def8ad56 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 57cabb6dac..818f4ce809 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 6ab294e339..dbfc5a147f 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 79def8ad56..3b21dd8355 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 47d623297b..3fcb7f5f76 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 09261b5292..62bfc3ebd8 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 4e052c4a73..2e4f681c13 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 312fafc8fd..0168b4dd26 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 0cfa487236..65b1bafa65 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 2145a24875..a4e2fd9626 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 dbfc5a147f..aa4e151bb9 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 882f5dc95e..ca59e9699c 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 54fbee1bbf..eb579826c4 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 b9eeb86855..be6602d85d 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 2c89bf57ae..d8c0be0a70 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 e28eba3627..f5d63a8a42 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 7a2367cb92..46ef15a422 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 ee320b4019..5113d9b210 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 592b5d1a86..c27069576a 100644 --- a/src/components/LinkItems/IframeModal.vue +++ b/src/components/LinkItems/IframeModal.vue @@ -3,7 +3,7 @@ classes="dashy-modal">
Close
x -