🔀 Merge pull request #1481 from Lissy93/FEAT/2.1.2_dependency-updates-n-fixes

[FEAT] Version 2.1.2 (+dependency updates, bug fixes)
This commit is contained in:
Alicia Sykes 2024-03-03 15:34:03 +00:00 committed by GitHub
commit d4247b4fee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
37 changed files with 2289 additions and 3323 deletions

View File

@ -1,13 +0,0 @@
# When a PR is merged, any associated issues will have a Done label applied
# The label will depend on the issue type, see: ./github/close-label.yml
name: 💡 Apply Done Label
on:
pull_request:
types: [opened, merged, closed]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: logerfo/close-label@0.0.4
with:
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,15 +0,0 @@
# Automatically assigns the author as a reviewer to opened PRs and issues
name: 💡 Auto-Assign Author to PR
on:
pull_request:
types: [opened]
issues:
types: [opened]
jobs:
assign-author:
runs-on: ubuntu-latest
steps:
- name: Assign author
uses: technote-space/assign-author@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -8,6 +8,8 @@ on:
jobs: jobs:
tag-pre-release: tag-pre-release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
contents: write
outputs: outputs:
tag: ${{ steps.autotag.outputs.tagname }} tag: ${{ steps.autotag.outputs.tagname }}
steps: steps:
@ -25,8 +27,9 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: ncipollo/release-action@v1 - uses: ncipollo/release-action@v1
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
with: with:
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
tag: ${{ needs.tag-pre-release.outputs.tag }} tag: ${{ needs.tag-pre-release.outputs.tag }}
bodyFile: ".github/LATEST_CHANGELOG.md" bodyFile: ".github/LATEST_CHANGELOG.md"
mark-issue-fixed: mark-issue-fixed:

View File

@ -1,25 +0,0 @@
# This action builds and deploys the master branch
name: 🏗️ Build App to Branch
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2.3.1
- name: Install and Build 🔧
run: |
npm install
npm run build
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@4.1.4
if: ${{ github.repository_owner == 'lissy93' }}
with:
branch: dev-demo
folder: dist

View File

@ -1,13 +0,0 @@
# Caches artifacts, including NPM dependencies, to speed up build times
name: 🏗️ Caching Artifacts
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-

View File

@ -1,22 +0,0 @@
# Attempts to auto-detect weather an issue is a duplicate, and adds a comment
name: 🎯 Issue Duplicate Check
on:
issues:
types: [opened, edited]
jobs:
check-duplicate:
runs-on: ubuntu-latest
steps:
- uses: wow-actions/potential-duplicates@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
filter: ''
exclude: '[BUG] [QUESTION] [FEEDBACK] [SHOWCASE]'
label: '🕸️ Potential Duplicate'
state: all
threshold: 0.75
reactions: 'eyes'
comment: >
Potential duplicates: {{#issues}}
- [#{{ number }}] {{ title }} ({{ accuracy }}%)
{{/issues}}

View File

@ -1,20 +0,0 @@
# Lints code merged into master branch
name: 🌈 Lint Code Base
on:
pull_request:
branches: [master]
jobs:
build:
name: Lint Code Base
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Lint Code Base
uses: github/super-linter@v4
env:
VALIDATE_ALL_CODEBASE: false
DEFAULT_BRANCH: master
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,30 +0,0 @@
# Finds typos in the English language within the app, submits a PR with fixes
name: 🌈 Spelling Auto-Fix
on:
push:
branches: [ master ]
pull_request:
types: [opened]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
if: startsWith(github.head_ref, 'AUTO/') == false
uses: actions/checkout@v2
- name: Spell Check
if: startsWith(github.head_ref, 'AUTO/') == false
uses: sobolevn/misspell-fixer-action@master
- name: Create PR
uses: peter-evans/create-pull-request@v3.10.1
if: startsWith(github.head_ref, 'AUTO/') == false
with:
token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
base: master
commit-message: ':pencil2: Auto-fix typos in text'
title: '[AUTO] Fix spelling and language'
branch: 'AUTO/spelling-corrections'
committer: 'Liss-Bot <alicia-gh-bot@mail.as93.net>'
assignees: Lissy93
reviewers: Lissy93

View File

@ -1,33 +0,0 @@
# Checks for any broken links in the docs, and raises an issue if found
name: 🌈 Broken Link Checker
on:
repository_dispatch:
workflow_dispatch:
schedule:
- cron: '0 1 1 * *' # Run monthly
jobs:
link-checker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Load Excludes
run: |
LYCHEE_EXCLUDE=$(sed -e :a -e 'N;s/\n/ /;ta' .github/.lycheeexclude)
echo "LYCHEE_EXCLUDE=$LYCHEE_EXCLUDE" >> $GITHUB_ENV
- name: Check for Broken Links
uses: lycheeverse/lychee-action@v1.0.8
with:
args: --verbose -a 200,302,304,429 --exclude ${{ env.LYCHEE_EXCLUDE }} --exclude-mail --no-progress **/*.md
env:
GITHUB_TOKEN: ${{secrets.BOT_GITHUB_TOKEN}}
LYCHEE_OUT: .github/broken-link-report.md
- name: Raise an Issue with Results
uses: peter-evans/create-issue-from-file@v3
with:
token: ${{secrets.BOT_GITHUB_TOKEN}}
title: '[DOCS] Broken Links found in Documentation'
content-filepath: .github/broken-link-report.md
labels: '📕 Docs, 👩‍💻 Good First Issue, 💤 Low Priority, 🤖 Auto'

View File

@ -1,18 +0,0 @@
# Will translate any issues opened in foraign language, and add the English translation as a comment
name: 🎯 Issue Translator
on:
issue_comment:
types: [created]
issues:
types: [opened]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: tomsun28/issues-translate-action@v2.5
with:
BOT_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
BOT_LOGIN_NAME: liss-bot
IS_MODIFY_TITLE: true
CUSTOM_BOT_NOTE: It looks like this issue isn't in English - not a problem, here's the translation! 🇬🇧

View File

@ -1,16 +0,0 @@
# Adds a label to any issues raised by a sponsor of Lissy93/Dashy
# In order to allow their request can be prioritized
name: 🎯 Label sponsors
on:
issues:
types: [opened]
jobs:
build:
name: is-sponsor-label
runs-on: ubuntu-latest
steps:
- uses: JasonEtco/is-sponsor-label-action@v1
with:
label: Priority Request - Sponsor 💖
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,18 +0,0 @@
# Applies the 'Top Issue' label to tickets with most user reactions
name: 🎯 Label Top Issues
on:
workflow_dispatch:
schedule:
- cron: '0 1 * * *' # Run at 01:00 each day
jobs:
labelTopIssues:
name: Label Top Issues
runs-on: ubuntu-latest
steps:
- name: Label Issues
uses: adamzolyak/top-issues-action@master
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
TOP_NUMBER_OF_ISSUES: 10
TOP_LABEL_NAME: "👍 Top 10 Issue!"
TOP_LABEL_COLOR: FBCA04

View File

@ -1,20 +0,0 @@
# Detects offensive language in comments and takes reaction
name: 🎯 Mind your language
on:
issues:
types: [opened]
issue_comment:
types: [created]
pull_request:
types: [opened]
jobs:
echo_issue_comment:
runs-on: ubuntu-latest
name: profanity check
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Profanity check step
uses: tailaiw/mind-your-language-action@v1.0.3
env:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,13 +0,0 @@
# Adds comments to PR, based on which files are modified
name: 💡 PR Commenter
on: [ pull_request_target ]
jobs:
pr-comment:
runs-on: ubuntu-latest
steps:
- uses: exercism/pr-commenter-action@v1.3.0
with:
github-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
config-file: .github/pr-auto-comments.yml
template-variables: |
{ "prAuthor": "${{ github.event.pull_request.user.login }}" }

View File

@ -1,12 +0,0 @@
# Labels pull requests based on their branch name
name: 💡 PR Branch Labeler
on: pull_request
jobs:
label-pr:
runs-on: ubuntu-latest
steps:
- name: Label PR
if: github.event.action == 'opened'
uses: ffittschen/pr-branch-labeler@v1
with:
repo-token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,13 +0,0 @@
# Finds any TO-DO notes within the code, and opens up an issue for it to be fixed
name: 🌈 Open issue for Todos
on: ["push"]
jobs:
build:
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@master"
- name: "TODO to Issue"
uses: "alstr/todo-to-issue-action@v4.2"
id: "todo"
with:
TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,92 +0,0 @@
# Generates series of diagrams and visualizations
name: 📊 Generate Repo Stats
on:
workflow_dispatch: # Manual dispatch
schedule:
- cron: '0 1 * * 0' # At 01:00 on Sunday.
jobs:
# File structure chart
file-structure:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Generate File Structure Diagram
uses: githubocto/repo-visualizer@0.7.1
with:
root_path: 'src/'
output_file: docs/assets/repo-visualization.svg
excluded_paths: dist,node_modules
commit_message: ':yellow_heart: Updates repo diagram'
branch: master
# Hercules git branching stats
git-stats:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
with:
fetch-depth: 0
- name: Hercules
uses: src-d/hercules@master
- uses: actions/upload-artifact@master
with:
name: hercules_charts
path: hercules_charts.tar
# Lowlighter metrics community metrics
community-stats:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Generate Repo Metrics
uses: lowlighter/metrics@latest
with:
token: ${{ secrets.LISSY93_PAT }}
committer_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
committer_branch: master
committer_message: ':purple_heart: Adds repo metrics'
filename: docs/assets/repo-metrics.*
template: classic
user: Lissy93
repo: dashy
delay: 5
- name: Generate License Metrics
uses: lowlighter/metrics@latest
with:
token: ${{ secrets.LISSY93_PAT }}
committer_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
committer_branch: master
committer_message: ':purple_heart: Adds license metrics'
filename: docs/assets/license-metrics.*
template: repository
user: Lissy93
repo: dashy
delay: 5
plugin_licenses: yes
plugin_licenses_setup: yarn build
plugin_licenses_ratio: yes
plugin_licenses_legal: yes
- name: Generate Contributor Metrics
uses: lowlighter/metrics@latest
with:
token: ${{ secrets.LISSY93_PAT }}
committer_token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
committer_branch: master
committer_message: ':purple_heart: Adds contributor metrics'
filename: docs/assets/controbutor-metrics.*
user: Lissy93
repo: dashy
delay: 5
plugin_contributors: yes
plugin_contributors_base: ""
plugin_contributors_head: master
plugin_contributors_ignored: bot
plugin_contributors_contributions: yes
plugin_contributors_sections: contributors

View File

@ -1,15 +0,0 @@
name: 📊 Save Repo Analytics
on:
workflow_dispatch:
schedule:
- cron: '0 1 * * 0' # At 01:00 on Sunday.
jobs:
gen-stats:
runs-on: ubuntu-latest
steps:
- name: Repo Analytics
uses: jgehrcke/github-repo-stats@HEAD
with:
repository: lissy93/dashy
databranch: DATA/repo-stats
ghtoken: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}

View File

@ -1,19 +0,0 @@
# Uses Snyk to check for potential vulnerabilities, then sends results to GH security tab
name: 💡 Vulnerability Scanning
on: push
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
continue-on-error: true
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --sarif-file-output=snyk.sarif
- name: Upload result to GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: snyk.sarif

View File

@ -1,17 +0,0 @@
# Expands any raw pasted link in comments. Useful so people know what they're clicking
name: 🎯 Unfurl Links
on:
issues:
types: [opened]
issue_comment:
types: [created]
pull_request:
types: [opened]
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: wow-actions/unfurl-links@v1
with:
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
raw: true

View File

@ -1,4 +1,4 @@
FROM node:16.13.2-alpine AS BUILD_IMAGE FROM node:20.11.1-alpine AS BUILD_IMAGE
# Set the platform to build image for # Set the platform to build image for
ARG TARGETPLATFORM ARG TARGETPLATFORM
@ -16,16 +16,16 @@ WORKDIR /app
# Install app dependencies # Install app dependencies
COPY package.json yarn.lock ./ COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile --network-timeout 1000000 RUN yarn install --ignore-engines --frozen-lockfile --network-timeout 1000000
# Copy over all project files and folders to the working directory # Copy over all project files and folders to the working directory
COPY . ./ COPY . ./
# Build initial app for production # Build initial app for production
RUN yarn build --mode production RUN NODE_OPTIONS=--openssl-legacy-provider yarn build --mode production
# Production stage # Production stage
FROM node:16.13.2-alpine FROM node:20.11.1-alpine
# Define some ENV Vars # Define some ENV Vars
ENV PORT=80 \ ENV PORT=80 \
@ -44,7 +44,7 @@ COPY --from=BUILD_IMAGE /app ./
RUN rm dist/conf.yml RUN rm dist/conf.yml
# Finally, run start command to serve up the built application # Finally, run start command to serve up the built application
CMD [ "yarn", "start" ] CMD [ "yarn", "build-and-start" ]
# Expose the port # Expose the port
EXPOSE ${PORT} EXPOSE ${PORT}

View File

@ -228,6 +228,7 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
**`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` **`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 **`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 **`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
**`rel`** | `string` | _Optional_ | The value of the `rel` attribute for the link. Useful for specifying the relationship between the target link/document and Dashy. Defaults to `noopener noreferrer`
**`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 **`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 **`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
**`displayData`** | `object` | _Optional_ | Meta-data to optionally override display settings for a given item. See [`displayData`](#itemdisplaydata-optional) **`displayData`** | `object` | _Optional_ | Meta-data to optionally override display settings for a given item. See [`displayData`](#itemdisplaydata-optional)

View File

@ -198,7 +198,6 @@ Some hosting providers required a bit of extra configuration, which was why I've
> [!NOTE] > [!NOTE]
> If you use a static hosting provider, then status checks, writing new config changes to disk from the UI, and triggering a rebuild through the UI will not be available. This is because these features need endpoints provided by Dashy's local Node server. Everything else should work just the same though. > If you use a static hosting provider, then status checks, writing new config changes to disk from the UI, and triggering a rebuild through the UI will not be available. This is because these features need endpoints provided by Dashy's local Node server. Everything else should work just the same though.
### Netlify ### Netlify
[![Deploy to Netlify](https://i.ibb.co/GtKMysT/deploy-netlify-button.png)](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy) [![Deploy to Netlify](https://i.ibb.co/GtKMysT/deploy-netlify-button.png)](https://app.netlify.com/start/deploy?repository=https://github.com/lissy93/dashy)

View File

@ -19,6 +19,7 @@
- [App Not Starting After Update to 2.0.4](#app-not-starting-after-update-to-204) - [App Not Starting After Update to 2.0.4](#app-not-starting-after-update-to-204)
- [Keycloak Redirect Error](#keycloak-redirect-error) - [Keycloak Redirect Error](#keycloak-redirect-error)
- [Docker Directory Error](#docker-directory) - [Docker Directory Error](#docker-directory)
- [Config not Saving on Vercel / Netlify / CDN](#user-content-config-not-saving-on-vercel--netlify--cdn)
- [Config Not Updating](#config-not-updating) - [Config Not Updating](#config-not-updating)
- [Config Still not Updating](#config-still-not-updating) - [Config Still not Updating](#config-still-not-updating)
- [Styles and Assets not Updating](#styles-and-assets-not-updating) - [Styles and Assets not Updating](#styles-and-assets-not-updating)
@ -281,6 +282,17 @@ If you get an error similar to the one above, you are mounting a directory to th
--- ---
## Config not Saving on Vercel / Netlify / CDN
If you're running Dashy using a static hosting provider (like Vercel), then there is no Node server, and so the save config action will not work via the UI.
You'll instead need to copy the YAML after making your changes, and paste that into your `conf.yml` directly. If you've connected Vercel to git, then these changes will take effect automatically, once you commit your changes.
If you're running on Netlify, there are some cloud functions which take care of all the server endpoints (like status checking), so these will work as expected.
See also [#1465](https://github.com/Lissy93/dashy/issues/1465)
---
## Config Not Updating ## Config Not Updating
Dashy has the option to save settings and config locally, in browser storage. Anything here will take precedence over whatever is in your config file, sometimes with unintended consequences. If you've updated the config file manually, and are not seeing changes reflected in the UI, then try visiting the site in Incognito mode. If that works, then the solution is just to clear local storage. This can be done from the config menu, under "Clear Local Settings". Dashy has the option to save settings and config locally, in browser storage. Anything here will take precedence over whatever is in your config file, sometimes with unintended consequences. If you've updated the config file manually, and are not seeing changes reflected in the UI, then try visiting the site in Incognito mode. If that works, then the solution is just to clear local storage. This can be done from the config menu, under "Clear Local Settings".
@ -557,8 +569,7 @@ For example:
export NODE_OPTIONS=--openssl-legacy-provider export NODE_OPTIONS=--openssl-legacy-provider
``` ```
For more info, see [webpack/webpack#14532](https://github.com/webpack/webpack/issues/14532) and [nodejs/node#40455](https://github.com/nodejs/node/issues/40455). This will be fixed once [webpack/webpack#17659](https://github.com/webpack/webpack/pull/17659) is merged.
This occurs because [Node 17+](https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382) no longer supports MD4 as hash function, we're in the process of upgrading Dashy dependencies to all use SHA1 for hashing bundle IDs.
--- ---

View File

@ -1,11 +1,11 @@
{ {
"name": "Dashy", "name": "Dashy",
"version": "2.1.1", "version": "2.1.2",
"license": "MIT", "license": "MIT",
"main": "server", "main": "server",
"author": "Alicia Sykes <alicia@omg.lol> (https://aliciasykes.com)", "author": "Alicia Sykes <alicia@omg.lol> (https://aliciasykes.com)",
"scripts": { "scripts": {
"start": "node server", "start": "npm-run-all --parallel build-watch start",
"dev": "vue-cli-service serve", "dev": "vue-cli-service serve",
"build": "vue-cli-service build", "build": "vue-cli-service build",
"lint": "vue-cli-service lint", "lint": "vue-cli-service lint",
@ -14,12 +14,14 @@
"build-and-start": "npm-run-all --parallel build-watch start", "build-and-start": "npm-run-all --parallel build-watch start",
"validate-config": "node services/config-validator", "validate-config": "node services/config-validator",
"health-check": "node services/healthcheck", "health-check": "node services/healthcheck",
"dependency-audit": "npx improved-yarn-audit --ignore-dev-deps" "dependency-audit": "npx improved-yarn-audit --ignore-dev-deps",
"static-start": "node server"
}, },
"dependencies": { "dependencies": {
"@babel/core": "^7.0.0",
"@formschema/native": "^2.0.0-beta.6", "@formschema/native": "^2.0.0-beta.6",
"@sentry/tracing": "^6.17.5", "@sentry/tracing": "^7.102.1",
"@sentry/vue": "^6.17.4", "@sentry/vue": "^7.102.1",
"ajv": "^8.10.0", "ajv": "^8.10.0",
"axios": "^1.6.0", "axios": "^1.6.0",
"connect-history-api-fallback": "^1.6.0", "connect-history-api-fallback": "^1.6.0",
@ -30,6 +32,7 @@
"keycloak-js": "^20.0.3", "keycloak-js": "^20.0.3",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",
"remedial": "^1.0.8", "remedial": "^1.0.8",
"rss-parser": "3.13.0",
"rsup-progress": "^3.2.0", "rsup-progress": "^3.2.0",
"simple-icons": "^7.19.0", "simple-icons": "^7.19.0",
"v-jsoneditor": "^1.4.5", "v-jsoneditor": "^1.4.5",
@ -43,11 +46,9 @@
"vue-select": "^3.20.2", "vue-select": "^3.20.2",
"vue-swatches": "^2.1.1", "vue-swatches": "^2.1.1",
"vue-toasted": "^1.1.28", "vue-toasted": "^1.1.28",
"vuex": "^3.6.2", "vuex": "^3.6.2"
"rss-parser": "3.13.0"
}, },
"devDependencies": { "devDependencies": {
"@architect/sandbox": "^4.5.2",
"@babel/preset-env": "^7.17.10", "@babel/preset-env": "^7.17.10",
"@vue/cli-plugin-babel": "^4.5.15", "@vue/cli-plugin-babel": "^4.5.15",
"@vue/cli-plugin-eslint": "^4.5.15", "@vue/cli-plugin-eslint": "^4.5.15",
@ -55,11 +56,10 @@
"@vue/cli-service": "^4.5.15", "@vue/cli-service": "^4.5.15",
"@vue/eslint-config-standard": "^4.0.0", "@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.0.1", "babel-eslint": "^10.0.1",
"eslint": "^7.24.0", "eslint": "^6.8.0",
"eslint-config-airbnb": "^18.0.1", "eslint-config-airbnb": "^18.0.1",
"eslint-plugin-vue": "^7.9.0", "eslint-plugin-vue": "^7.9.0",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"progress-bar-webpack-plugin": "^2.1.0",
"sass": "^1.38.0", "sass": "^1.38.0",
"sass-loader": "^7.1.0", "sass-loader": "^7.1.0",
"vue-cli-plugin-yaml": "^1.0.2", "vue-cli-plugin-yaml": "^1.0.2",
@ -67,7 +67,7 @@
"vue-template-compiler": "^2.7.0" "vue-template-compiler": "^2.7.0"
}, },
"engines": { "engines": {
"node": ">=16.0.0 <18.0.0" "node": ">=16.0.0 <21.6.2"
}, },
"eslintConfig": { "eslintConfig": {
"root": true, "root": true,

View File

@ -122,8 +122,10 @@ const app = express()
res.end(JSON.stringify({ success: false, message: e })); res.end(JSON.stringify({ success: false, message: e }));
} }
}) })
// GET fallback endpoint // If no other route is matched, serve up the index.html with a 404 status
.get('*', (req, res) => res.sendFile(path.join(__dirname, 'dist', 'index.html'))); .use((req, res) => {
res.status(404).sendFile(path.join(__dirname, 'dist', 'index.html'));
});
/* Create HTTP server from app on port, and print welcome message */ /* Create HTTP server from app on port, and print welcome message */
http.createServer(app) http.createServer(app)

View File

@ -115,7 +115,9 @@ export default {
}, },
}, },
mounted() { mounted() {
this.jsonData = this.config; const jsonData = { ...this.config };
jsonData.sections = jsonData.sections.map(({ filteredItems, ...section }) => section);
this.jsonData = jsonData;
if (!this.allowWriteToDisk) this.saveMode = 'local'; if (!this.allowWriteToDisk) this.saveMode = 'local';
}, },
methods: { methods: {

View File

@ -94,6 +94,7 @@ export default {
const raw = rawAppConfig; const raw = rawAppConfig;
const isEmptyObject = (obj) => (typeof obj === 'object' && Object.keys(obj).length === 0); const isEmptyObject = (obj) => (typeof obj === 'object' && Object.keys(obj).length === 0);
const isEmpty = (value) => (value === undefined || isEmptyObject(value)); const isEmpty = (value) => (value === undefined || isEmptyObject(value));
// Delete empty values // Delete empty values
Object.keys(raw).forEach(key => { Object.keys(raw).forEach(key => {
if (isEmpty(raw[key])) delete raw[key]; if (isEmpty(raw[key])) delete raw[key];

View File

@ -9,7 +9,8 @@
:target="anchorTarget" :target="anchorTarget"
:class="`item ${makeClassList}`" :class="`item ${makeClassList}`"
v-tooltip="getTooltipOptions()" v-tooltip="getTooltipOptions()"
rel="noopener noreferrer" tabindex="0" :rel="`${item.rel || 'noopener noreferrer'}`"
tabindex="0"
:id="`link-${item.id}`" :id="`link-${item.id}`"
:style="customStyle" :style="customStyle"
> >
@ -258,6 +259,9 @@ export default {
overflow: hidden; overflow: hidden;
span.text { span.text {
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
display: block;
} }
} }

View File

@ -24,6 +24,8 @@ export default {
const isSubPag = !!this.$store.state.currentConfigInfo; const isSubPag = !!this.$store.state.currentConfigInfo;
const jsonConfig = config; const jsonConfig = config;
if (isSubPag) delete jsonConfig.appConfig; if (isSubPag) delete jsonConfig.appConfig;
jsonConfig.sections = jsonConfig.sections.map(({ filteredItems, ...section }) => section);
// 2. Convert JSON into YAML // 2. Convert JSON into YAML
const yamlOptions = {}; const yamlOptions = {};
const strjsonConfig = JSON.stringify(jsonConfig); const strjsonConfig = JSON.stringify(jsonConfig);

View File

@ -292,11 +292,15 @@ const store = new Vuex.Store({
InfoHandler('Color palette updated', InfoKeys.VISUAL); InfoHandler('Color palette updated', InfoKeys.VISUAL);
}, },
[SET_ITEM_LAYOUT](state, layout) { [SET_ITEM_LAYOUT](state, layout) {
state.config.appConfig.layout = layout; const newConfig = { ...state.config };
newConfig.appConfig.layout = layout;
state.config = newConfig;
InfoHandler('Layout updated', InfoKeys.VISUAL); InfoHandler('Layout updated', InfoKeys.VISUAL);
}, },
[SET_ITEM_SIZE](state, iconSize) { [SET_ITEM_SIZE](state, iconSize) {
state.config.appConfig.iconSize = iconSize; const newConfig = { ...state.config };
newConfig.appConfig.iconSize = iconSize;
state.config = newConfig;
InfoHandler('Item size updated', InfoKeys.VISUAL); InfoHandler('Item size updated', InfoKeys.VISUAL);
}, },
[UPDATE_CUSTOM_CSS](state, customCss) { [UPDATE_CUSTOM_CSS](state, customCss) {

View File

@ -93,8 +93,9 @@ export const getCustomColors = () => {
* So that when the hotkey is pressed, the app/ service can be launched * So that when the hotkey is pressed, the app/ service can be launched
*/ */
export const getCustomKeyShortcuts = () => { export const getCustomKeyShortcuts = () => {
const Accumulator = new ConfigAccumulator();
const results = []; const results = [];
const sections = config.sections || []; const sections = filterUserSections(Accumulator.sections()) || [];
sections.forEach((section) => { sections.forEach((section) => {
const itemsWithHotKeys = section.items.filter(item => item.hotkey); const itemsWithHotKeys = section.items.filter(item => item.hotkey);
results.push(itemsWithHotKeys.map(item => ({ hotkey: item.hotkey, url: item.url }))); results.push(itemsWithHotKeys.map(item => ({ hotkey: item.hotkey, url: item.url })));

View File

@ -982,6 +982,11 @@
"type": "number", "type": "number",
"description": "A numeric shortcut key, between 0 and 9. Useful for quickly launching frequently used applications" "description": "A numeric shortcut key, between 0 and 9. Useful for quickly launching frequently used applications"
}, },
"rel": {
"title": "rel",
"type": "string",
"description": "The rel attribute for the link. For specifying the relationship between the current document and the linked document"
},
"tags": { "tags": {
"title": "Tags", "title": "Tags",
"type": "array", "type": "array",
@ -1086,6 +1091,11 @@
} }
} }
} }
},
"filteredItems": {
"title": "Filtered Items - temp",
"type": "array",
"description": "This attribute will be deprecated in the next release - do not use!"
} }
} }
} }

View File

@ -9,7 +9,7 @@ export const welcomeMsg = () => {
/* Prints warning message, usually when there is a configuration error */ /* Prints warning message, usually when there is a configuration error */
export const warningMsg = (message, stack) => { export const warningMsg = (message, stack) => {
console.info( console.info(
`\n%c⚠ Warning ⚠️%c \n${message} \n\n%cThis is likely not an issue with Dashy, but rather your configuration. If you think it is a bug, please open a ticket on GitHub: https://git.io/JukXk`, `\n%c⚠ Warning ⚠️%c \n${message} \n\n%cThis is likely not an issue with Dashy, but rather your configuration.\nIf you think it is a bug, please open a ticket on GitHub: https://git.io/JukXk`,
"color:#ceb73f; background: #ceb73f33; font-size:1.5rem; padding:0.15rem; margin: 1rem auto; font-family: Rockwell, Tahoma, 'Trebuchet MS', Helvetica; border: 2px solid #ceb73f; border-radius: 4px; font-weight: bold; text-shadow: 1px 1px 1px #000000bf;", "color:#ceb73f; background: #ceb73f33; font-size:1.5rem; padding:0.15rem; margin: 1rem auto; font-family: Rockwell, Tahoma, 'Trebuchet MS', Helvetica; border: 2px solid #ceb73f; border-radius: 4px; font-weight: bold; text-shadow: 1px 1px 1px #000000bf;",
'font-weight: bold; font-size: 1rem;color: #ceb73f;', 'font-weight: bold; font-size: 1rem;color: #ceb73f;',
"color: #ceb73f; font-size: 0.75rem; font-family: Tahoma, 'Trebuchet MS', Helvetica;", "color: #ceb73f; font-size: 0.75rem; font-family: Tahoma, 'Trebuchet MS', Helvetica;",

View File

@ -89,6 +89,9 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
.work-space { .work-space {
min-height: calc(100vh - var(--footer-height)); min-height: fit-content;
}
:global(footer) {
display: none;
} }
</style> </style>

View File

@ -2,7 +2,6 @@
* Global config for the main Vue app. ES7 not supported here. * Global config for the main Vue app. ES7 not supported here.
* See docs for all config options: https://cli.vuejs.org/config * See docs for all config options: https://cli.vuejs.org/config
*/ */
const ProgressBarPlugin = require('progress-bar-webpack-plugin');
// Get app mode: production, development or test // Get app mode: production, development or test
const mode = process.env.NODE_ENV || 'production'; const mode = process.env.NODE_ENV || 'production';
@ -19,10 +18,6 @@ const publicPath = process.env.BASE_URL || '/';
// Should enable Subresource Integrity (SRI) on link and script tags // Should enable Subresource Integrity (SRI) on link and script tags
const integrity = process.env.INTEGRITY === 'true'; const integrity = process.env.INTEGRITY === 'true';
// Format for progress bar, shown while app building
const progressFormat = '\x1b[1m\x1b[36mBuilding Dashy\x1b[0m '
+ '[\x1b[1m\x1b[32m:bar\x1b[0m] :percent (:elapsed seconds)';
// Webpack Config // Webpack Config
const configureWebpack = { const configureWebpack = {
mode, mode,
@ -31,9 +26,6 @@ const configureWebpack = {
{ test: /.svg$/, loader: 'vue-svg-loader' }, { test: /.svg$/, loader: 'vue-svg-loader' },
], ],
}, },
plugins: [
new ProgressBarPlugin({ format: progressFormat }),
],
}; };
// Application pages // Application pages

5079
yarn.lock

File diff suppressed because it is too large Load Diff