🔄 Rebased from master

This commit is contained in:
Alicia Sykes 2021-10-23 19:43:09 +01:00
commit e78bd07ced
27 changed files with 537 additions and 91 deletions

20
.github/AUTHORS.txt vendored
View File

@ -1,27 +1,29 @@
Alicia <liss-bot@d0h.co> - 1 commits
Begin <support@begin.com> - 1 commits
David <skaarj1989@gmail.com> - 1 commits
DeepSource <o> - 1 commits
Devin <uh> - 1 commits
FormatToday <616099456@qq.com> - 1 commits
Rune <jørnerå> - 1 commits
Ryan <urne> - 1 commits
deepsource-io[bot] <deepsource-io[bot]@users.noreply.github.com> - 1 commits
liss-bot <87835202+liss-bot@users.noreply.github.com> - 1 commits
Dan <ilber> - 2 commits
ᗪєνιη <υн> - 2 commits
Alicia <o> - 3 commits
UrekD <urek.denis@gmail.com> - 3 commits
Niklas <abe> - 4 commits
Erik <roo> - 6 commits
liss-bot <liss-bot@users.noreply.github.com> - 6 commits
repo-visualizer <repo-visualizer@users.noreply.github.com> - 6 commits
snyk-bot <snyk-bot@snyk.io> - 8 commits
Alicia <o> - 8 commits
repo-visualizer <repo-visualizer@users.noreply.github.com> - 8 commits
snyk-bot <snyk-bot@snyk.io> - 9 commits
Alicia <yke> - 10 commits
snyk-bot <snyk-bot@users.noreply.github.com> - 13 commits
EVOTk <45015615+EVOTk@users.noreply.github.com> - 14 commits
snyk-bot <snyk-bot@users.noreply.github.com> - 14 commits
github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> - 16 commits
liss-bot <liss-bot@d0h.co> - 17 commits
liss-bot <liss-bot@d0h.co> - 21 commits
Alicia <yke> - 25 commits
Lissy93 <gh@d0h.co> - 67 commits
Lissy93 <Lissy93@users.noreply.github.com> - 172 commits
Alicia <yke> - 242 commits
Alicia <yke> - 954 commits
Lissy93 <gh@d0h.co> - 70 commits
Lissy93 <Lissy93@users.noreply.github.com> - 186 commits
Alicia <yke> - 255 commits
Alicia <yke> - 1004 commits

View File

@ -1,5 +1,11 @@
# Changelog
## ✨ 1.8.8 - Improved Item Targets [PR #292](https://github.com/Lissy93/dashy/pull/292)
- Adds support for `_top` and `_parent` anchor targets on items, Re: #289
- Adds `appConfig.defaultOpeningMethod` option to specify default target
- Adds new icons to show items opening method on hover
- Refactors target checking, updates item target docs and schema
## ⚡️ 1.8.7 - Bug Fixes and Improvements [PR #273](https://github.com/Lissy93/dashy/pull/273)
- Clean URLs without the hash, now using history-mode routing
- New initial main example conf.yml

View File

@ -10,6 +10,7 @@ jobs:
${{
! contains( github.event.issue.labels.*.name, '📌 Keep Open') &&
! contains( github.event.issue.labels.*.name, '🌈 Feedback') &&
! contains( github.event.issue.labels.*.name, '💯 Showcase') &&
github.event.comment.author_association != 'CONTRIBUTOR'
}}
runs-on: ubuntu-latest
@ -21,7 +22,7 @@ jobs:
token: ${{ secrets.BOT_GITHUB_TOKEN }}
message: |
Welcome to Dashy 👋
It's great to have you here, but unfortunately your ticket has been closed to prevent spam and low quality issues. Please ensure the following criteria are met, before reopening this issue.
It's great to have you here, but unfortunately your ticket has been closed to prevent spam. Before reopening this issue, please ensure the following criteria are met.
Issues are sometimes closed when users:
- Have only recently joined GitHub
@ -33,4 +34,4 @@ jobs:
- You have checked the documentation for an existing solution
- You have completed the relevant sections in the Issue template
Once you have verified the above standards are met, you may reopen this issue.
Once you have verified the above standards are met, you may reopen this issue. Sorry for any inconvenience caused, I'm just a bot, and sometimes make mistakes 🤖

View File

@ -64,6 +64,9 @@
</p>
</details>
| 👉 PSA: Want Free Swag? [Dashy is participating in Hacktoberfest 2021!](https://github.com/Lissy93/dashy/discussions/281) |
|-|
## Features 🌈
- 🔎 Instant search by name, domain and tags + customizable hotkeys & keyboard shortcuts
@ -301,6 +304,9 @@ One of the primary purposes of Dashy is to make launching commonly used apps and
- `newtab` - The app will be launched in a new tab
- `modal` - Launch app in a resizable/ movable popup modal on the current page
- `workspace` - Changes to Workspace view, and launches app
- `top` - Opens in the top-most browsing context, useful if your accessing Dashy through an iframe
You can also set the default opening method, which will be applied to all items that don't have a specified target, using `appConfig.defaultOpeningMethod`, to one of the above values.
Even if the target is not set (or is set to `sametab`), you can still launch any given app in an alternative method: Alt + Click will open the modal, and Ctrl + Click will open in a new tab. You can also right-click on any item to see all options (as seen in the screenshot below). This custom context menu can be disabled by setting `appConfig.disableContextMenu: true`.
@ -442,6 +448,7 @@ Dashy supports multiple languages and locales. When available, you're language s
- 🇳🇱 **Dutch**: `nl` - Contributed by **[@evroon](https://github.com/evroon)**
- 🇲🇫 **French**: `fr` - Contributed by **[@EVOTk](https://github.com/EVOTk)**
- 🇩🇪 **German**: `de` - Contributed by **[@Niklashere](https://github.com/Niklashere)**
- 🇳🇴 **Norwegian Bokmål**: `nb` - Contributed by **[@rubjo](https://github.com/rubjo)**
- 🇪🇸 **Spanish**: `es` - Contributed by **[@lu4t](https://github.com/lu4t)**
- 🇸🇮 **Slovenian**: `sl` - Contributed by **[@UrekD](https://github.com/UrekD)**
- 🇮🇹 **Italian**: `it` - Machine Translated *(awaiting human review)*
@ -450,9 +457,10 @@ Dashy supports multiple languages and locales. When available, you're language s
- 🇦🇪 **Arabic**: `ar` - Contributed by Anon
- 🇮🇳 **Hindi**: `hi` - Contributed by Anon
- 🇯🇵 **Japanese**: `ja` - Contributed by Anon
- 🇵🇱 **Polish**: `pl` - Contributed by **[@skaarj1989](https://github.com/skaarj1989)**
#### Add your Language
I would love for Dashy to be available to everyone, without language being a barrier to entry for non-native English speakers. If you have a few minutes to sapir, you're help with translating it would be very much appreciated.
I would love for Dashy to be available to everyone, without language being a barrier to entry for non-native English speakers. If you have a few minutes to spare, you're help with translating it would be very much appreciated.
It's quite a quick task, all text is in [a single JSON file](https://github.com/Lissy93/dashy/tree/master/src/assets/locales), and you don't have to translate it all. For more info, see the [Adding a New Language Docs](./docs/multi-language-support.md#adding-a-new-language), and feel free to reach out if you need any support.
**[⬆️ Back to Top](#dashy)**
@ -646,7 +654,7 @@ For a full breakdown of each change, you can view the [Changelog](https://github
- 💻 [Management](/docs/management.md) - Managing your app, updating, security, web server configuration, etc
- 🚒 [Troubleshooting](/docs/troubleshooting.md) - Common errors and problems, and how to fix them
#### Development and Contributing
#### Development and Contributing
- 🧱 [Developing](/docs/developing.md) - Running Dashy development server locally, and general workflow
- 🛎️ [Development Guides](/docs/development-guides.md) - Common development tasks, to help new contributors
- 💖 [Contributing](/docs/contributing.md) - How to contribute to Dashy

View File

@ -37,9 +37,12 @@ Dashy supports several different ways to launch your apps. The default opening m
- `sametab` - The app will be launched in the current tab
- `newtab` - The app will be launched in a new tab
- `top` - Opens in the top-most browsing context, useful if your accessing Dashy through an iframe
- `modal` - Launch app in a resizable/ movable popup modal on the current page
- `workspace` - Changes to Workspace view, and launches app
You can also set the default opening method, which will be applied to all items that don't have a specified target, using `appConfig.defaultOpeningMethod`, to one of the above values.
Even if the target is not set (or is set to `sametab`), you can still launch any given app in an alternative method: Alt + Click will open the modal, and Ctrl + Click will open in a new tab. You can also right-click on any item to see all options (as seen in the screenshot below). This custom context menu can be disabled by setting `appConfig.disableContextMenu: true`.
<p align="center">

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 69 KiB

View File

@ -74,6 +74,7 @@ Tips:
--- | --- | --- | ---
**`language`** | `string` | _Optional_ | The 2 (or 4-digit) [ISO 639-1 code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language, e.g. `en` or `en-GB`. This must be a language that the app has already been [translated](https://github.com/Lissy93/dashy/tree/master/src/assets/locales) into. If your language is unavailable, Dashy will fallback to English. By default Dashy will attempt to auto-detect your language, although this may not work on some privacy browsers.
**`startingView`** | `enum` | _Optional_ | Which page to load by default, and on the base page or domain root. You can still switch to different views from within the UI. Can be either `default`, `minimal` or `workspace`. Defaults to `default`
**`defaultOpeningMethod`** | `enum` | _Optional_ | The default opening method for items, if no `target` is specified for a given item. Can be either `newtab`, `sametab`, `top`, `parent`, `modal` or `workspace`. Defaults to `newtab`
**`statusCheck`** | `boolean` | _Optional_ | When set to `true`, Dashy will ping each of your services and display their status as a dot next to each item. This can be overridden by setting `statusCheck` under each item. Defaults to `false`
**`statusCheckInterval`** | `boolean` | _Optional_ | The number of seconds between checks. If set to `0` then service will only be checked on initial page load, which is usually the desired functionality. If value is less than `10` you may experience a hit in performance. Defaults to `0`
**`webSearch`** | `object` | _Optional_ | Configuration options for the web search feature, set your default search engine, opening method or disable web search. See [`webSearch`](#appconfigwebsearch-optional)
@ -181,7 +182,7 @@ For more info, see the **[Authentication Docs](/docs/authentication.md)**
**`description`** | `string` | _Optional_ | Additional info about an item, which is shown in the tooltip on hover, or visible on large tiles
**`url`** | `string` | Required | The URL / location of web address for when the item is clicked
**`icon`** | `string` | _Optional_ | The icon for a given item. Can be a font-awesome icon, favicon, remote URL or local URL. See [`item.icon`](#sectionicon-and-sectionitemicon)
**`target`** | `string` | _Optional_ | The opening method for when the item is clicked, either `newtab`, `sametab`, `modal` or `workspace`. Where `newtab` will open the link in a new tab, `sametab` will open it in the current tab, and `modal` will open a pop-up modal with the content displayed within that iframe. Note that for the iframe to load, you must have set the CORS headers to either allow `*` ot allow the domain that you are hosting Dashy on, for some websites and self-hosted services, this is already set.
**`target`** | `string` | _Optional_ | The opening method for when the item is clicked, either `newtab`, `sametab`, `top`, `parent`, `modal` or `workspace`. Where `newtab` will open the link in a new tab, `sametab` will open it in the current tab, and `modal` will open a pop-up modal and `workspace` will open in the Workspace view. Defaults to `newtab`
**`hotkey`** | `number` | _Optional_ | Give frequently opened applications a numeric hotkey, between `0 - 9`. You can then just press that key to launch that application.
**`tags`** | `string[]` | _Optional_ | A list of tags, which can be used for improved search
**`statusCheck`** | `boolean` | _Optional_ | When set to `true`, Dashy will ping the URL associated with the current service, and display its status as a dot next to the item. The value here will override `appConfig.statusCheck` so you can turn off or on checks for a given service. Defaults to `appConfig.statusCheck`, falls back to `false`

View File

@ -32,6 +32,13 @@
<sub><b>EVOTk</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/liss-bot">
<img src="https://avatars.githubusercontent.com/u/87835202?v=4" width="80;" alt="liss-bot"/>
<br />
<sub><b>Alicia Bot</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/evroon">
<img src="https://avatars.githubusercontent.com/u/11857441?v=4" width="80;" alt="evroon"/>
@ -46,13 +53,6 @@
<sub><b>Snyk Bot</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/liss-bot">
<img src="https://avatars.githubusercontent.com/u/87835202?v=4" width="80;" alt="liss-bot"/>
<br />
<sub><b>Alicia Bot</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/UrekD">
<img src="https://avatars.githubusercontent.com/u/38784343?v=4" width="80;" alt="UrekD"/>
@ -96,6 +96,14 @@
<sub><b>FormatToday</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/rubjo">
<img src="https://avatars.githubusercontent.com/u/42270947?v=4" width="80;" alt="rubjo"/>
<br />
<sub><b>Rubjo</b></sub>
</a>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/turnrye">
<img src="https://avatars.githubusercontent.com/u/701035?v=4" width="80;" alt="turnrye"/>

View File

@ -7,7 +7,7 @@ One of the primary purposes of Dashy is to allow you to quickly find and launch
You can navigate through your items or search results using the keyboard. You can use <kbd>Tab</kbd> to cycle through results, and <kbd>Shift</kbd> + <kbd>Tab</kbd> to go backwards. Or use the arrow keys, <kbd></kbd>, <kbd></kbd>, <kbd></kbd> and <kbd></kbd>.
## Launching Apps
You can launch a elected app by hitting <kbd>Enter</kbd>. This will open the app using your default opening method, specified in `target` (either `newtab`, `sametab`, `modal` or `workspace`). You can also use <kbd>Alt</kbd> + <kbd>Enter</kbd> to open the app in a pop-up modal, or <kbd>Ctrl</kbd> + <kbd>Enter</kbd> to open it in a new tab. For all available opening methods, just right-click on an item, to bring up the context menu.
You can launch a elected app by hitting <kbd>Enter</kbd>. This will open the app using your default opening method, specified in `target` (either `newtab`, `sametab`, `modal`, `top` or `workspace`). You can also use <kbd>Alt</kbd> + <kbd>Enter</kbd> to open the app in a pop-up modal, or <kbd>Ctrl</kbd> + <kbd>Enter</kbd> to open it in a new tab. For all available opening methods, just right-click on an item, to bring up the context menu.
## Tags
By default, items are filtered by the `title` attribute, as well as the hostname (extracted from `url`), the `provider` and `description`. If you need to find results based on text which isn't included in these attributes, then you can add `tags` to a given item.

View File

@ -23,6 +23,16 @@
---
### HomeLAb 3.0
> By [@skoogee](https://github.com/skoogee) (http://zhrn.cc)
> Dashy, is the most complete dashboard I ever tried, has all the features, and it sets itself apart from the rest. It is my default homepage now. I am thankful to the developer @Lissy93 for sharing such a wonderful creation.
[![screenshot-12-skoogee-homelab-3](https://i.ibb.co/Sv7cxcg/12-skoogee-homelab-3.png)](https://ibb.co/album/ynSwzm)
---
### NAS Home Dashboard
> By [@cerealconyogurt](https://github.com/cerealconyogurt)

View File

@ -1,6 +1,6 @@
{
"name": "Dashy",
"version": "1.8.7",
"version": "1.8.8",
"license": "MIT",
"main": "server",
"scripts": {
@ -20,7 +20,7 @@
"@sentry/tracing": "^6.13.1",
"@sentry/vue": "^6.13.1",
"ajv": "^8.6.3",
"axios": "^0.21.4",
"axios": "^0.22.0",
"body-parser": "^1.19.0",
"connect": "^3.7.0",
"connect-history-api-fallback": "^1.6.0",

View File

@ -0,0 +1 @@
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="level-up" class="svg-inline--fa fa-level-up fa-w-11" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M345.04 144l-136-136.901c-9.388-9.465-24.691-9.465-34.079 0L38.96 144c-9.307 9.384-9.277 24.526.069 33.872l22.056 22.056c9.619 9.619 25.301 9.329 34.557-.639L152 138.84V432H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V138.84l56.357 60.448c9.256 9.968 24.938 10.258 34.557.639l22.056-22.056c9.346-9.345 9.377-24.487.07-33.871z"></path></svg>

After

Width:  |  Height:  |  Size: 627 B

View File

@ -0,0 +1 @@
<svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="box-open" class="svg-inline--fa fa-box-open fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M638.3 143.8L586.8 41c-4-8-12.1-9.5-16.7-8.9L320 64 69.8 32.1c-4.6-.6-12.6.9-16.6 8.9L1.7 143.8c-4.6 9.2.3 20.2 10.1 23L64 181.7V393c0 14.7 10 27.5 24.2 31l216.2 54.1c6 1.5 17.4 3.4 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V181.7l52.1-14.9c9.9-2.8 14.7-13.8 10.2-23zM86 82.6l154.8 19.7-41.2 68.3-138-39.4L86 82.6zm26 112.8l97.8 27.9c8 2.3 15.2-1.8 18.5-7.3L296 103.8v322.7l-184-46V195.4zm416 185.1l-184 46V103.8l67.7 112.3c3.3 5.5 10.6 9.6 18.5 7.3l97.8-27.9v185zm-87.7-209.9l-41.2-68.3L554 82.6l24.3 48.6-138 39.4z"></path></svg>

After

Width:  |  Height:  |  Size: 751 B

View File

@ -1,20 +1 @@
<svg
aria-hidden="true"
focusable="false"
data-prefix="far"
data-icon="browser"
class="svg-inline--fa fa-browser fa-w-16"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
transform = "rotate(-90 250 250)"
fill="currentColor"
d="M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5
48-48V80c0-26.5-21.5-48-48-48zM48 92c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12
12v24c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V92zm416 334c0 3.3-2.7 6-6
6H54c-3.3 0-6-2.7-6-6V168h416v258zm0-310c0 6.6-5.4 12-12 12H172c-6.6
0-12-5.4-12-12V92c0-6.6 5.4-12 12-12h280c6.6 0 12 5.4 12 12v24z">
</path>
</svg>
<svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="briefcase" class="svg-inline--fa fa-briefcase fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M464 128h-80V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zM176 80h160v48H176V80zM54 176h404c3.31 0 6 2.69 6 6v74H48v-74c0-3.31 2.69-6 6-6zm404 256H54c-3.31 0-6-2.69-6-6V304h144v24c0 13.25 10.75 24 24 24h80c13.25 0 24-10.75 24-24v-24h144v122c0 3.31-2.69 6-6 6z"></path></svg>

Before

Width:  |  Height:  |  Size: 697 B

After

Width:  |  Height:  |  Size: 617 B

View File

@ -0,0 +1 @@
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="question" class="svg-inline--fa fa-question fa-w-12" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"></path></svg>

After

Width:  |  Height:  |  Size: 816 B

172
src/assets/locales/nb.json Normal file
View File

@ -0,0 +1,172 @@
{
"home": {
"no-results": "Ingen søkeresultater",
"no-data": "Ingen data konfigurert"
},
"search": {
"search-label": "Søk",
"search-placeholder": "Begynn å skrive for å filtrere",
"clear-search-tooltip": "Fjern søk",
"enter-to-search-web": "Trykk enter for å søke på nettet"
},
"login": {
"title": "Dashy",
"username-label": "Brukernavn",
"password-label": "Passord",
"login-button": "Logg inn",
"remember-me-label": "Husk meg",
"remember-me-never": "Aldri",
"remember-me-hour": "4 timer",
"remember-me-day": "1 dag",
"remember-me-week": "1 uke",
"error-missing-username": "Mangler brukernavn",
"error-missing-password": "Manglende passord",
"error-incorrect-username": "Bruker ikke funnet",
"error-incorrect-password": "Feil passord",
"success-message": "Logger på...",
"logout-message": "Logget ut",
"already-logged-in-title": "Allerede logget inn",
"already-logged-in-text": "Du er logget inn som",
"continue-to-dashboard": "Fortsett til dashbordet",
"log-out-button": "Logg ut",
"continue-guest-button": "Fortsett som gjest"
},
"config": {
"main-tab": "Hovedmeny",
"view-config-tab": "Vis konfigurering",
"edit-config-tab": "Rediger konfigurering",
"custom-css-tab": "Egendefinerte stiler",
"heading": "Konfigurasjonsalternativer",
"download-config-button": "Last ned konfigurasjon",
"edit-config-button": "Rediger konfigurering",
"edit-css-button": "Rediger tilpasset CSS",
"cloud-sync-button": "Aktiver skysynkronisering",
"edit-cloud-sync-button": "Rediger skysynkronisering",
"rebuild-app-button": "Bygg program",
"change-language-button": "Endre appspråk",
"reset-settings-button": "Tilbakestill lokale innstillinger",
"app-info-button": "Appinfo",
"backup-note": "Det anbefales å ta en sikkerhetskopi av konfigurasjonen din før du gjør endringer.",
"reset-config-msg-l1": "Dette fjerner alle brukerinnstillinger fra lokal lagring, men påvirker ikke din 'conf.yml' -fil.",
"reset-config-msg-l2": "Du bør først ta sikkerhetskopi av eventuelle endringer du har gjort lokalt, hvis du vil bruke dem i fremtiden.",
"reset-config-msg-l3": "Er du sikker på at du vil fortsette?",
"data-cleared-msg": "Data slettet vellykket",
"actions-label": "Handlinger",
"copy-config-label": "Kopier konfigurasjon",
"data-copied-msg": "Konfig er kopiert til utklippstavlen",
"reset-config-label": "Tilbakestill konfigurasjon",
"css-save-btn": "Lagre endringer",
"css-note-label": "Merk",
"css-note-l1": "Du må oppdatere siden for at endringene dine skal tre i kraft.",
"css-note-l2": "Overstyring av stiler lagres bare lokalt, så det anbefales å lage en kopi av CSS.",
"css-note-l3": "For å fjerne alle egendefinerte stiler, slett innholdet og trykk Lagre endringer"
},
"alternate-views": {
"alternate-view-heading": "Bytt visning",
"default": "Standard",
"workspace": "Workspace",
"minimal": "Minimal"
},
"settings": {
"theme-label": "Tema",
"layout-label": "Layout",
"layout-auto": "Auto",
"layout-horizontal": "Horisontal",
"layout-vertical": "Vertikal",
"item-size-label": "Enhetsstørrelse",
"item-size-small": "Small",
"item-size-medium": "Medium",
"item-size-large": "Large",
"config-launcher-label": "Konfig",
"config-launcher-tooltip": "Oppdater konfigurasjon",
"sign-out-tooltip": "Logg av",
"sign-in-tooltip": "Logg inn",
"sign-in-welcome": "Hei {brukernavn}!"
},
"updates": {
"app-version-note": "Dashy-versjon",
"up-to-date": "Oppdatert",
"out-of-date": "Oppdatering tilgjengelig",
"unsupported-version-l1": "Du bruker en ikke-støttet versjon av Dashy",
"unsupported-version-l2": "For den beste opplevelsen og de siste sikkerhetsoppdateringene, vennligst oppdater til"
},
"language-switcher": {
"title": "Endre applikasjonsspråk",
"dropdown-label": "Velg et språk",
"save-button": "Lagre",
"success-msg": "Språk oppdatert til"
},
"theme-maker": {
"title": "Temakonfigurator",
"export-button": "Eksporter tilpassede variabler",
"reset-button": "Tilbakestill stiler for",
"show-all-button": "Vis alle variabler",
"save-button": "Lagre",
"cancel-button": "Avbryt",
"saved-toast": "{theme} Oppdatert vellykket",
"copied-toast": "Temadata for {theme} kopiert til utklippstavlen",
"reset-toast": "Egendefinerte farger for {theme} fjernet"
},
"config-editor": {
"save-location-label": "Lagre beliggenhet",
"location-local-label": "Søk lokalt",
"location-disk-label": "Skriv endringer i konfigurasjonsfil",
"save-button": "Lagre endringer",
"valid-label": "Konfigurasjon er gyldig",
"status-success-msg": "Oppgaven fullført",
"status-fail-msg": "Oppgaven mislyktes",
"success-msg-disk": "Konfigurasjonsfil skrevet til disk med hell",
"success-msg-local": "Lokale endringer er lagret",
"success-note-l1": "Appen bør bygge om automatisk.",
"success-note-l2": "Dette kan ta opptil et minutt.",
"success-note-l3": "Du må oppdatere siden for at endringene skal tre i kraft.",
"error-msg-save-mode": "Velg en lagringsmodus: lokal eller fil",
"error-msg-cannot-save": "Det oppsto en feil under konfigurering",
"error-msg-bad-json": "Feil i JSON, muligens feilformet",
"warning-msg-validation": "Valideringsadvarsel",
"not-admin-note": "Du kan ikke skrive endret til disk, fordi du ikke er logget inn som admin"
},
"app-rebuild": {
"title": "Ombygg applikasjon",
"rebuild-note-l1": "En ombygging er nødvendig for at endringer skrevet i conf.yml-filen skal tre i kraft.",
"rebuild-note-l2": "Dette bør skje automatisk, men hvis det ikke har blitt gjort, kan du manuelt utløse det her.",
"rebuild-note-l3": "Dette er ikke nødvendig for endringer som er lagret lokalt.",
"rebuild-button": "Start Build",
"rebuilding-status-1": "Building ...",
"rebuilding-status-2": "Dette kan ta noen minutter",
"error-permission": "Du har ikke tillatelse til å utløse denne handlingen",
"success-msg": "Byggingen er fullført",
"fail-msg": "Byggoperasjonen mislyktes",
"reload-note": "En sideinnlasting er nå nødvendig for at endringer skal tre i kraft",
"reload-button": "Last siden på nytt"
},
"cloud-sync": {
"title": "Sikkerhetskopiering & gjenoppretting",
"intro-l1": "Sikkerhetskopiering og gjenoppretting er en valgfri funksjon, som lar deg laste opp konfigurasjonen din til internett og deretter gjenopprette den på en hvilken som helst annen enhet eller forekomst av Dashy.",
"intro-l2": "Alle data er helt ende-til-ende-kryptert med AES, og bruker passordet ditt som nøkkelen.",
"intro-l3": "For mer informasjon, se",
"backup-title-setup": "Lag en sikkerhetskopi",
"backup-title-update": "Oppdater sikkerhetskopi",
"password-label-setup": "Velg et passord",
"password-label-update": "Skriv inn passordet ditt",
"backup-button-setup": "Sikkerhetskopiering",
"backup-button-update": "Oppdater sikkerhetskopi",
"backup-id-label": "Din sikkerhetskopi-ID",
"backup-id-note": "Dette brukes til å gjenopprette fra sikkerhetskopier senere. Så behold det, sammen med passordet ditt et trygt sted.",
"restore-title": "Gjenopprett en sikkerhetskopi",
"restore-id-label": "Gjenopprett ID",
"restore-password-label": "Passord",
"restore-button": "Gjenopprett",
"backup-missing-password": "Manglende passord",
"backup-error-unknown": "Kan ikke behandle forespørselen",
"backup-error-password": "Feil passord. Skriv inn ditt nåværende passord.",
"backup-success-msg": "Fullført vellykket",
"restore-success-msg": "Konfigurasjon gjenopprettet vellykket"
},
"menu": {
"sametab": "Åpne i nåværende fane",
"newtab": "Åpne i ny fane",
"modal": "Åpne i popup-modus",
"workspace": "Åpne i Workspace-visning"
}
}

172
src/assets/locales/pl.json Normal file
View File

@ -0,0 +1,172 @@
{
"home": {
"no-results": "Brak wyników",
"no-data": "Brak danych"
},
"search": {
"search-label": "Wyszukaj",
"search-placeholder": "Zacznij pisać aby przefiltrować",
"clear-search-tooltip": "Wyczyść",
"enter-to-search-web": "Naciśnij ENTER aby przeszukać internet"
},
"login": {
"title": "Dashy",
"username-label": "Użytkownik",
"password-label": "Hasło",
"login-button": "Zaloguj",
"remember-me-label": "Zapamiętaj mnie",
"remember-me-never": "Nigdy",
"remember-me-hour": "4 godziny",
"remember-me-day": "Dzień",
"remember-me-week": "Tydzień",
"error-missing-username": "Nie podano nazwy użytkownika",
"error-missing-password": "Nie podano hasła",
"error-incorrect-username": "Nie znaleziono użytkownika",
"error-incorrect-password": "Niepoprawne hasło",
"success-message": "Zalogowano...",
"logout-message": "Wylogowano",
"already-logged-in-title": "Jesteś już zalogowany",
"already-logged-in-text": "Zalogowano jako",
"proceed-to-dashboard": "Przejdź do panelu",
"log-out-button": "Wyloguj",
"proceed-guest-button": "Kontynuuj jako gość"
},
"config": {
"main-tab": "Menu główne",
"view-config-tab": "Wyświetl konfigurację",
"edit-config-tab": "Edytuj konfigurację",
"custom-css-tab": "Niestandardowy styl",
"heading": "Opcje konfiguracji",
"download-config-button": "Pobierz plik konfiguracji",
"edit-config-button": "Edytuj konfigurację",
"edit-css-button": "Edytuj styl CSS",
"cloud-sync-button": "Ustawienia chmury",
"edit-cloud-sync-button": "Ustawienia chmury",
"rebuild-app-button": "Przebuduj aplikację",
"change-language-button": "Zmień język",
"reset-settings-button": "Zresetuj pamięć podręczną",
"app-info-button": "Informacje o aplikacji",
"backup-note": "Przed dokonaniem zmian zaleca się zapisanie kopii zapasowej konfiguracji.",
"reset-config-msg-l1": "Zostaną usunięte wszystkie ustawienia zapisane w pamięci podręcznej (Nie dotyczy pliku 'conf.yml'). ",
"reset-config-msg-l2": "Zrób kopię zapasową jeśli obecne ustawienia są ważne.",
"reset-config-msg-l3": "Czy na pewno chcesz kontynuować?",
"data-cleared-msg": "Dane wyczyszczone pomyślnie",
"actions-label": "Akcje",
"copy-config-label": "Kopia konfiguracji",
"data-copied-msg": "Konfiguracja skopiowana do schowka",
"reset-config-label": "Zresetuj konfigurację",
"css-save-btn": "Zapisz zmiany",
"css-note-label": "Informacja",
"css-note-l1": "Po dokonaniu zmian konieczne będzie odświeżenie strony.",
"css-note-l2": "Nadpisane style przechowywane są w pamięci podręcznej, zaleca się więc wykonanie kopii stylu CSS.",
"css-note-l3": "Aby usunąć niestandardowe style, wyczyść zawartość pola tekstowego i naciśnij Zapisz zmiany"
},
"alternate-views": {
"alternate-view-heading": "Zmień widok",
"default": "Domyślny",
"workspace": "Obszar roboczy",
"minimal": "Minimalny"
},
"settings": {
"theme-label": "Motyw",
"layout-label": "Układ",
"layout-auto": "Automatyczny",
"layout-horizontal": "Poziomy",
"layout-vertical": "Pionowy",
"item-size-label": "Rozmiar elementu",
"item-size-small": "Mały",
"item-size-medium": "Średni",
"item-size-large": "Duży",
"config-launcher-label": "Konfiguracja",
"config-launcher-tooltip": "Przejdź do ustawień",
"sign-out-tooltip": "Wyloguj",
"sign-in-tooltip": "Zaloguj",
"sign-in-welcome": "Cześć {username}!"
},
"updates": {
"app-version-note": "wersja Dashy",
"up-to-date": "Aktualna",
"out-of-date": "Dostępna aktualizacja",
"unsupported-version-l1": "Używasz niewspieranej wersji Dashy",
"unsupported-version-l2": "Zaleca się zaktualizowanie do"
},
"language-switcher": {
"title": "Zmień język",
"dropdown-label": "Wybierz język",
"save-button": "Zapisz",
"success-msg": "Język zmieniony na"
},
"theme-maker": {
"title": "Konfigurator motywu",
"export-button": "Eksportuj zmienne",
"reset-button": " Zresetuj styl",
"show-all-button": "Pokaż wszystkie zmienne",
"save-button": "Zapisz",
"cancel-button": "Anuluj",
"saved-toast": "Pomyślnie zaktualizowano {theme}",
"copied-toast": "Dane motywu {theme} zostały skopiowane do schowka",
"reset-toast": "Niestandardowe kolory dla {theme} usunięte"
},
"config-editor": {
"save-location-label": "Lokalizacja zapisu",
"location-local-label": "Pamięć podręczna",
"location-disk-label": "Plik na dysku",
"save-button": "Zapisz",
"valid-label": "Konfiguracja poprawna",
"status-success-msg": "Zadanie ukończone",
"status-fail-msg": "Zadanie nie powiodło się",
"success-msg-disk": "Pomyślnie zapisano na dysku",
"success-msg-local": "Pomyślnie zapisano w pamięci podręcznej",
"success-note-l1": "Aplikacja powinna automatycznie się przebudować.",
"success-note-l2": "Może to zająć około minuty.",
"success-note-l3": "Będzie konieczne odświeżenie strony",
"error-msg-save-mode": "Proszę wybrać pomiędzy pamięcią podręczną lub plikiem na dysku",
"error-msg-cannot-save": "Wystąpił błąd podczas zapisywania",
"error-msg-bad-json": "Błąd w JSON",
"warning-msg-validation": "Ostrzeżenie",
"not-admin-note": "Nie możesz zapisywać na dysku, wymagane uprawnienia administratora"
},
"app-rebuild": {
"title": "Przebuduj aplikację",
"rebuild-note-l1": "Przebudowanie jest koniecznne po dokonaniu zmian w pliku: conf.yml.",
"rebuild-note-l2": "Powinno to nastąpić automatycznie, jeśli jednak tak się nie stanie możesz je wymusić tutaj.",
"rebuild-note-l3": "Zmiany w pamięci podręcznej nie wymagają przebudowania aplikacji.",
"rebuild-button": "Rozpocznij",
"rebuilding-status-1": "Budowanie...",
"rebuilding-status-2": "Może to zająć kilka minut",
"error-permission": "Nie masz odpowiednich uprawnień do wykonania tej akcji",
"success-msg": "Budowanie zakończone pomyślnie",
"fail-msg": "Budowanie nie powiodło się",
"reload-note": "Zmiany będą widoczne po odświeżeniu strony",
"reload-button": "Odśwież stronę"
},
"cloud-sync": {
"title": "Kopia zapasowa w chmurze",
"intro-l1": "Tworzenie i przywracanie z chmury to opcjonalna funkcja, która umożliwia zapisanie konfiguracji w sieci, by później wgrać je na innym urządzeniu z Dashy.",
"intro-l2": "Wszystkie dane są w pełni zaszyfrowane z wykorzystaniem AES, kluczem będzie podane hasło.",
"intro-l3": "Aby uzyskać więcej informacji przejdź do",
"backup-title-setup": "Tworzenie",
"backup-title-update": "Zaktualizuj",
"password-label-setup": "Wybierz hasło",
"password-label-update": "Wprowadź hasło",
"backup-button-setup": "Zapisz",
"backup-button-update": "Zaktualizuj",
"backup-id-label": "Identyfikator kopii zapasowej",
"backup-id-note": "Wymagany do przywrócenia. Zapisz wraz z hasłem w bezpiecznym miejscu",
"restore-title": "Przywracanie",
"restore-id-label": "Identyfikator",
"restore-password-label": "Hasło",
"restore-button": "Przywróć",
"backup-missing-password": "Nie podano hasła",
"backup-error-unknown": "Nie udało się wykonać operacji",
"backup-error-password": "Hasło niepoprawne. Proszę wprowadzić aktualne hasło.",
"backup-success-msg": "zakończono pomyślnie",
"restore-success-msg": "Przywrócono pomyślnie"
},
"menu": {
"sametab": "Otwórz w tej karcie",
"newtab": "Otwórz w nowej karcie",
"modal": "Otwórz w oknie modalnym",
"workspace": "Otwórz w obszarze roboczym"
}
}

View File

@ -156,7 +156,7 @@ export default {
localStorage.setItem(localStorageKeys.PAGE_INFO, JSON.stringify(data.pageInfo));
}
if (data.appConfig) {
data.appConfig.auth = this.config.appConfig.auth || [];
data.appConfig.auth = this.config.appConfig.auth || {};
localStorage.setItem(localStorageKeys.APP_CONFIG, JSON.stringify(data.appConfig));
}
if (data.appConfig.theme) {

View File

@ -3,8 +3,8 @@
<a @click="itemOpened"
@mouseup.right="openContextMenu"
@contextmenu.prevent
:href="(target !== 'modal' && target !== 'workspace') ? url : '#'"
:target="target === 'newtab' ? '_blank' : ''"
:href="hyperLinkHref"
:target="anchorTarget"
:class="`item ${!icon? 'short': ''} size-${itemSize}`"
v-tooltip="getTooltipOptions()"
rel="noopener noreferrer" tabindex="0"
@ -21,7 +21,7 @@
v-bind:style="customStyles" class="bounce" />
<!-- Small icon, showing opening method on hover -->
<ItemOpenMethodIcon class="opening-method-icon" :isSmall="!icon || itemSize === 'small'"
:openingMethod="target" position="bottom right"
:openingMethod="accumulatedTarget" position="bottom right"
:hotkey="hotkey" />
<!-- Status indicator dot (if enabled) showing weather srevice is availible -->
<StatusIndicator
@ -53,7 +53,13 @@ import StatusIndicator from '@/components/LinkItems/StatusIndicator';
import EditItem from '@/components/InteractiveEditor/EditItem';
import ContextMenu from '@/components/LinkItems/ContextMenu';
import StoreKeys from '@/utils/StoreMutations';
import { localStorageKeys, serviceEndpoints, modalNames } from '@/utils/defaults';
import { targetValidator } from '@/utils/ConfigHelpers';
import {
localStorageKeys,
serviceEndpoints,
modalNames,
openingMethod as defaultOpeningMethod,
} from '@/utils/defaults';
export default {
name: 'Item',
@ -70,8 +76,7 @@ export default {
hotkey: Number, // Shortcut for quickly launching app
target: { // Where resource will open, either 'newtab', 'sametab' or 'modal'
type: String,
default: 'newtab',
validator: (value) => ['newtab', 'sametab', 'modal', 'workspace'].indexOf(value) !== -1,
validator: targetValidator,
},
itemSize: String,
enableStatusCheck: Boolean,
@ -84,6 +89,25 @@ export default {
appConfig() {
return this.$store.getters.appConfig;
},
accumulatedTarget() {
return this.target || this.appConfig.defaultOpeningMethod || defaultOpeningMethod;
},
/* Convert config target value, into HTML anchor target attribute */
anchorTarget() {
const target = this.accumulatedTarget;
switch (target) {
case 'sametab': return '_self';
case 'newtab': return '_blank';
case 'parent': return '_parent';
case 'top': return '_top';
default: return undefined;
}
},
/* Get the href value for the anchor, if not opening in modal/ workspace */
hyperLinkHref() {
const noAnchorNeeded = ['modal', 'workspace'];
return noAnchorNeeded.includes(this.accumulatedTarget) ? '#' : this.url;
},
},
data() {
return {
@ -111,10 +135,10 @@ export default {
methods: {
/* Called when an item is clicked, manages the opening of modal & resets the search field */
itemOpened(e) {
if (e.altKey || this.target === 'modal') {
if (e.altKey || this.accumulatedTarget === 'modal') {
e.preventDefault();
this.$emit('triggerModal', this.url);
} else if (this.target === 'workspace') {
} else if (this.accumulatedTarget === 'workspace') {
router.push({ name: 'workspace', query: { url: this.url } });
} else {
this.$emit('itemClicked');
@ -157,12 +181,15 @@ export default {
classes: `item-description-tooltip tooltip-is-${this.itemSize}`,
};
},
/* Used by certain themes, which display an icon with animated CSS */
/* Used by certain themes (material), to show animated CSS icon */
getUnicodeOpeningIcon() {
switch (this.target) {
switch (this.accumulatedTarget) {
case 'newtab': return '"\\f360"';
case 'sametab': return '"\\f24d"';
case 'parent': return '"\\f3bf"';
case 'top': return '"\\f102"';
case 'modal': return '"\\f2d0"';
case 'workspace': return '"\\f0b1"';
default: return '"\\f054"';
}
},
@ -304,7 +331,6 @@ export default {
/* Text in tile */
.tile-title {
white-space: nowrap;
// overflow: hidden;
text-overflow: ellipsis;
min-width: 120px;
height: 30px;

View File

@ -5,6 +5,9 @@
<SameTabOpenIcon v-else-if="openingMethod === 'sametab'" />
<IframeOpenIcon v-else-if="openingMethod === 'modal'" />
<WorkspaceOpenIcon v-else-if="openingMethod === 'workspace'" />
<ParentOpenIcon v-else-if="openingMethod === 'parent'" />
<TopOpenIcon v-else-if="openingMethod === 'top'" />
<UnknownIcon v-else />
</div>
<div v-if="hotkey" :class="`hotkey-denominator ${makeClass(position, isSmall, isTransparent)}`">
{{ hotkey }}
@ -20,11 +23,14 @@ import NewTabOpenIcon from '@/assets/interface-icons/open-new-tab.svg';
import SameTabOpenIcon from '@/assets/interface-icons/open-current-tab.svg';
import IframeOpenIcon from '@/assets/interface-icons/open-iframe.svg';
import WorkspaceOpenIcon from '@/assets/interface-icons/open-workspace.svg';
import ParentOpenIcon from '@/assets/interface-icons/open-parent.svg';
import TopOpenIcon from '@/assets/interface-icons/open-top.svg';
import UnknownIcon from '@/assets/interface-icons/unknown-icon.svg';
export default {
name: 'ItemOpenMethodIcon',
props: {
openingMethod: String, // newtab | sametab | modal | workspace
openingMethod: String, // newtab | sametab | parent | top | modal | workspace
isSmall: Boolean, // If true, will apply small class
position: String, // Position classes: top, bottom, left, right
isTransparent: Boolean, // If true, will apply opacity
@ -44,6 +50,9 @@ export default {
SameTabOpenIcon,
IframeOpenIcon,
WorkspaceOpenIcon,
ParentOpenIcon,
TopOpenIcon,
UnknownIcon,
},
};
</script>

View File

@ -412,20 +412,11 @@ html[data-theme='material'], html[data-theme='material-dark'] {
min-height: 2rem;
}
}
&.size-large {
width: 18rem;
min-width: 18rem;
max-height: 5rem;
margin: 0.4rem;
img {
padding: 0.2rem 0.5rem;
}
}
}
.tooltip.item-description-tooltip:not(.tooltip-is-small) {
display: none !important;
}
.orientation-horizontal {
.orientation-horizontal:not(.single-section-view) {
display: flex;
flex-direction: column;
.there-are-items {
@ -438,6 +429,11 @@ html[data-theme='material'], html[data-theme='material-dark'] {
@include big-screen { grid-template-columns: repeat(5, 1fr); }
@include big-screen-up { grid-template-columns: repeat(6, 1fr); }
}
.there-are-items .item-wrapper .item {
width: auto;
min-width: auto;
max-height: auto;
}
}
a.item {
position: relative;
@ -486,15 +482,9 @@ html[data-theme='material'], html[data-theme='material-dark'] {
padding-left: 0.5rem;
min-width: 11rem;
}
&.size-large {
&:before {
width: 1.5rem;
}
&:hover {
div:nth-child(2) {
text-indent: 1.5rem;
}
}
&.short:not(.size-large) {
min-height: 2rem;
height: auto;
}
}
}

View File

@ -7,6 +7,8 @@ import {
theme as defaultTheme,
language as defaultLanguage,
} from '@/utils/defaults';
import ErrorHandler from '@/utils/ErrorHandler';
import ConfigSchema from '@/utils/ConfigSchema.json';
/**
* Initiates the Accumulator class and generates a complete config object
@ -97,3 +99,17 @@ export const getUsersLanguage = () => {
const langObj = languages.find(lang => lang.code === langCode);
return langObj;
};
/**
* validator for item target attribute
* Uses enum values from config schema, and shows warning if invalid
* @param {String} target
* @returns {Boolean} isValid
*/
export const targetValidator = (target) => {
const acceptedTargets = ConfigSchema.properties.sections.items
.properties.items.items.properties.target.enum;
const isTargetValid = acceptedTargets.indexOf(target) !== -1;
if (!isTargetValid) ErrorHandler(`Unknown target value: ${target}`);
return isTargetValid;
};

View File

@ -75,6 +75,20 @@
"default": "default",
"description": "Which page to load by default, and on the base page or domain root. You can still switch to different views from within the UI"
},
"defaultOpeningMethod": {
"title": "Default Opening Method",
"type": "string",
"enum": [
"newtab",
"sametab",
"parent",
"top",
"modal",
"workspace"
],
"default": "newtab",
"description": "The default opening method for items. Only used if no item.target is specified"
},
"statusCheck": {
"title": "Enable Status Checks",
"type": "boolean",
@ -616,6 +630,8 @@
"enum": [
"newtab",
"sametab",
"parent",
"top",
"modal",
"workspace"
],

View File

@ -142,6 +142,8 @@ module.exports = {
metaTagData: [
{ name: 'description', content: 'A simple static homepage for you\'re server' },
],
/* If no 'target' specified, this is the default opening method */
openingMethod: 'newtab',
/* Default option for Toast messages */
toastedOptions: {
position: 'bottom-center',

View File

@ -2,6 +2,7 @@
import en from '@/assets/locales/en.json';
import de from '@/assets/locales/de.json';
import nl from '@/assets/locales/nl.json';
import pl from '@/assets/locales/pl.json';
import fr from '@/assets/locales/fr.json';
import sl from '@/assets/locales/sl.json';
import es from '@/assets/locales/es.json';
@ -12,6 +13,7 @@ import hi from '@/assets/locales/hi.json';
import ja from '@/assets/locales/ja.json';
import pt from '@/assets/locales/pt.json';
import ru from '@/assets/locales/ru.json';
import nb from '@/assets/locales/nb.json';
import pirate from '@/assets/locales/zz-pirate.json';
// Language data - Next register your language by adding it to this list
@ -34,6 +36,12 @@ export const languages = [
locale: nl,
flag: '🇳🇱',
},
{
name: 'polski',
code: 'pl',
locale: pl,
flag: '🇵🇱',
},
{
name: 'Français',
code: 'fr',
@ -94,6 +102,12 @@ export const languages = [
locale: ru,
flag: '🇷🇺',
},
{ // Norwegian
name: 'Norsk',
code: 'nb',
locale: nb,
flag: '🇳🇴',
},
{ // Joke Language - Pirate
name: 'Pirate',
code: 'pirate',

View File

@ -2198,12 +2198,12 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
axios@^0.21.4:
version "0.21.4"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
axios@^0.22.0:
version "0.22.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.22.0.tgz#bf702c41fb50fbca4539589d839a077117b79b25"
integrity sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w==
dependencies:
follow-redirects "^1.14.0"
follow-redirects "^1.14.4"
babel-eslint@^10.0.1:
version "10.1.0"
@ -4657,7 +4657,7 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
follow-redirects@^1.0.0, follow-redirects@^1.14.0:
follow-redirects@^1.0.0, follow-redirects@^1.14.4:
version "1.14.4"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379"
integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==