Compare commits

..

99 Commits

Author SHA1 Message Date
60e051433c
chore: group return parameter
Some checks failed
continuous-integration/drone/pr Build is failing
2023-04-25 18:33:48 +02:00
1ab50f4d7c
chore: make fuzzy matching a paramater 2023-04-25 18:33:48 +02:00
e3191c85fa
fix: make type singular 2023-04-25 18:33:47 +02:00
a12d2081ef
chore(i18n): clarify translation string 2023-04-25 18:33:47 +02:00
d3933e5591
chore: use startsWith for prefix matching 2023-04-25 18:33:47 +02:00
fd1e838e40
fix: clarify user search setting 2023-04-25 18:33:47 +02:00
1a3621cf64
chore: remove user margin from the component 2023-04-25 18:33:45 +02:00
9a47111686
chore: remove user margin from the component 2023-04-25 18:33:23 +02:00
1cb39e133b
feat(quick add magic): allow fuzzy matching of assignees when the api results are unambigous 2023-04-25 18:33:23 +02:00
c52cc79c66
fix: ensure all matched quick add magic parts are correctly removed from the task 2023-04-25 18:33:23 +02:00
c15dcd7529
fix: lint 2023-04-25 18:33:23 +02:00
ffaccd0e9b
feat(assignees): show user avatar in search results 2023-04-25 18:33:22 +02:00
ee62d40f3d
feat: show initial list of users when opening the assignees view 2023-04-25 18:33:22 +02:00
bc825e41a9
chore: clarify users when can still be found even if they disabled it 2023-04-25 18:33:22 +02:00
1db0da815c
fix(quick add magic): cleanup all assignee properties 2023-04-25 18:33:22 +02:00
46b35f3885
fix(quick add magic): use the project user service to find assignees for quick add magic 2023-04-25 18:33:22 +02:00
681626da2c
fix(quick add magic): don't replace the prefix in every occurrence when it is present in the matched part 2023-04-25 18:33:22 +02:00
b80f070431
feat: show avatar and full name in team overview
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-25 18:32:36 +02:00
03936c0403 chore(deps): update dependency vite to v4.3.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-25 16:04:40 +00:00
62825d2e64
fix: add spacing between checkbox and title of related task
All checks were successful
continuous-integration/drone/push Build is passing
Related to https://github.com/go-vikunja/frontend/issues/111
2023-04-25 17:33:47 +02:00
5cd5caef45 chore(deps): update dependency @vue/eslint-config-typescript to v11.0.3
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-25 15:17:58 +00:00
798e8b529d chore(deps): update dependency @vitejs/plugin-legacy to v4.0.3
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-25 15:04:36 +00:00
0e3766c5a5 chore(deps): update typescript-eslint monorepo to v5.59.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-25 13:05:07 +00:00
90207a4427 chore(deps): update dependency @vitejs/plugin-vue to v4.2.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-25 10:05:12 +00:00
60993a886a chore(deps): update dependency caniuse-lite to v1.0.30001481
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-24 06:16:59 +00:00
a6b42f9181 chore(deps): update dependency happy-dom to v9.9.2
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-24 06:16:43 +00:00
98fbd7c53c chore(deps): update dependency netlify-cli to v14
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-24 01:05:19 +00:00
8d533f50e8 chore(deps): update dependency rollup to v3.21.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-23 20:04:46 +00:00
707459ec77 chore(deps): update dependency @types/node to v18.16.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-23 06:04:51 +00:00
faf7db649e chore(deps): update dependency esbuild to v0.17.18
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-22 21:04:36 +00:00
202e71be48 chore(deps): update dependency vue-tsc to v1.4.4
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-22 20:04:41 +00:00
d6e8b418d3 chore(deps): update dependency vue-tsc to v1.4.3
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-22 16:04:50 +00:00
a9f41f6114 chore(deps): update dependency eslint to v8.39.0
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-22 15:45:11 +00:00
f6f0d52518 fix(deps): update dependency @vueuse/core to v10.1.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-22 10:04:50 +00:00
ccb9be42c2 chore(deps): update dependency vue-tsc to v1.4.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-21 11:04:30 +00:00
179009bfe3 chore(deps): update dependency @types/node to v18.15.13
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-21 07:04:39 +00:00
8c2bd94a9f chore(deps): update dependency vue-tsc to v1.4.1
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-21 06:13:48 +00:00
7757166d75 chore(deps): update dependency rollup to v3.20.7
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-21 05:04:36 +00:00
7f03002972 chore(deps): update dependency vite to v4.3.1
Some checks failed
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is failing
2023-04-20 20:04:26 +00:00
8555006d9e chore(deps): update dependency vue-tsc to v1.4.0
Some checks failed
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is failing
2023-04-20 18:04:40 +00:00
713ad64658 fix(deps): update sentry-javascript monorepo to v7.49.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-20 16:04:46 +00:00
0713d481e3 fix(deps): update dependency pinia to v2.0.35
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-20 11:04:28 +00:00
ace0cf3588 chore(deps): update dependency vite to v4.3.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-20 09:04:31 +00:00
bba3bbfe89 chore(deps): update dependency @types/dompurify to v3.0.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-20 08:04:42 +00:00
754afc5496 chore(deps): update dependency @types/node to v18.15.12
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-20 00:05:04 +00:00
f1e8892ab5 chore(deps): update dependency postcss to v8.4.23
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-19 20:32:32 +00:00
c11e192c4e fix(deps): update dependency axios to v1.3.6
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-19 20:05:18 +00:00
e9c704075d chore(deps): update pnpm to v8.3.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-19 13:04:16 +00:00
35edcb5672 chore(deps): update dependency rollup to v3.20.6
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-18 12:05:05 +00:00
4695798176 chore(deps): update dependency vite to v4.2.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-18 10:05:15 +00:00
7a323fd170 chore(deps): update dependency rollup to v3.20.5
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-18 06:04:54 +00:00
1d6e4b6e32 chore(deps): update pnpm to v8.3.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-18 01:04:56 +00:00
5524aa7998 chore(deps): update dependency cypress to v12.10.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-17 19:04:51 +00:00
15ff2008e3 chore(deps): update typescript-eslint monorepo to v5.59.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-17 18:05:11 +00:00
9bc2e6e165 chore(deps): update dependency postcss-preset-env to v8.3.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-17 07:04:46 +00:00
344001856c chore(deps): update dependency rollup to v3.20.4
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-17 06:04:41 +00:00
ad261fcc2f chore(deps): update dependency esbuild to v0.17.17
Some checks failed
continuous-integration/drone/push Build is failing
2023-04-17 05:29:14 +00:00
5142a0ae72 chore(deps): update dependency caniuse-lite to v1.0.30001479
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-17 05:27:04 +00:00
6d195f96c9 chore(deps): update dependency happy-dom to v9.7.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-17 01:05:56 +00:00
Frederick [Bot]
1917b217a8 [skip ci] Updated translations via Crowdin 2023-04-17 00:25:34 +00:00
1f6b01bc73 chore(deps): update dependency rollup to v3.20.3
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-16 17:19:59 +00:00
d47a16aa8e chore(deps): update dependency postcss to v8.4.22
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-16 14:04:37 +00:00
c57d00a74b chore(deps): update dependency eslint-plugin-vue to v9.11.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-15 01:04:45 +00:00
77ea7fa0ee fix(deps): update dependency @vueuse/core to v10.0.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-14 22:04:52 +00:00
b92d780cda chore: formatting
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-14 21:53:04 +00:00
f14e721caf fix: rename resolveRef 2023-04-14 21:53:04 +00:00
1ff6399112 fix(deps): update dependency @vueuse/core to v10 2023-04-14 21:53:04 +00:00
503fb8da76 fix(deps): update dependency dompurify to v3.0.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-14 18:04:56 +00:00
f050cb7015 chore(deps): update histoire to v0.16.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-14 11:04:40 +00:00
3670916f36 fix(deps): update sentry-javascript monorepo to v7.48.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-14 10:04:35 +00:00
Frederick [Bot]
838a063eaa [skip ci] Updated translations via Crowdin 2023-04-14 00:26:31 +00:00
e1b16b11d6 chore(deps): update node.js to v18.16.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-13 01:04:28 +00:00
314cbf471f feat: better vscode vitest integration
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-12 15:39:49 +00:00
a416d26f7c
chore: better function naming in password components
Some checks failed
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is failing
2023-04-12 16:15:40 +02:00
795b26e1dd feat: improve datemathHelp.vue
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-12 07:33:45 +00:00
14666cf9d8 chore(deps): update dependency sass to v1.62.0
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-12 05:57:33 +00:00
c938f31935 chore(deps): update pnpm to v8
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-11 23:05:49 +00:00
35a52ef01b
fix(quick add magic): date parsing with a date at the beginning
All checks were successful
continuous-integration/drone/push Build is passing
Resolves https://github.com/go-vikunja/frontend/issues/110
2023-04-11 18:12:08 +02:00
3b05ce3f10 chore(deps): update histoire to v0.16.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-11 14:04:49 +00:00
aec4fd7a2d chore(deps): update dependency vitest to v0.30.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-11 12:04:57 +00:00
2661af3a17 fix(deps): update sentry-javascript monorepo to v7.47.0
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-11 12:01:30 +00:00
56f43bae3f chore(deps): update typescript-eslint monorepo to v5.58.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-10 18:04:41 +00:00
84472d2e9c chore(deps): update dependency happy-dom to v9.1.9
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-10 13:17:25 +00:00
c5afcd63b0 chore(deps): update dependency postcss-preset-env to v8.3.1
Some checks failed
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is failing
2023-04-10 12:05:14 +00:00
9bdb257814 chore(deps): update dependency caniuse-lite to v1.0.30001477
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-10 11:14:22 +00:00
5ad9891b16 chore(deps): update pnpm to v7.32.0
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-10 11:13:57 +00:00
7c04064917 chore(deps): update dependency vitest to v0.30.0
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-10 11:13:43 +00:00
fb5383d86b chore(deps): update dependency esbuild to v0.17.16
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-10 05:04:46 +00:00
68af314ec0 chore(deps): update dependency eslint to v8.38.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-08 00:04:43 +00:00
8b1de5ce09 fix(deps): update dependency pinia to v2.0.34
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-07 20:04:46 +00:00
724b6fe091 chore(deps): update dependency typescript to v5.0.4
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-07 18:04:25 +00:00
6648cd30c3 chore(deps): update dependency sass to v1.61.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-06 22:04:45 +00:00
8b90b45739
fix: make sure the unread notifications indicator is correctly positioned
All checks were successful
continuous-integration/drone/push Build is passing
Resolves #3358
2023-04-06 16:11:12 +02:00
39be67eecf fix(deps): update dependency axios to v1.3.5
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-06 09:06:06 +00:00
Frederick [Bot]
750f0ddeab [skip ci] Updated translations via Crowdin 2023-04-05 00:06:16 +00:00
6a5ece2f24 chore(deps): update pnpm to v7.31.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-04 01:04:32 +00:00
Frederick [Bot]
4ce33abfe6 [skip ci] Updated translations via Crowdin 2023-04-04 00:06:21 +00:00
5b7e1af87d chore(deps): update dependency @types/dompurify to v3.0.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-03 20:04:51 +00:00
59c6605b14 chore(deps): update typescript-eslint monorepo to v5.57.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-04-03 18:05:29 +00:00
40 changed files with 1381 additions and 1323 deletions

2
.nvmrc
View File

@ -1 +1 @@
18.15.0 18.16.0

View File

@ -8,6 +8,7 @@
"lokalise.i18n-ally", "lokalise.i18n-ally",
"mgmcdermott.vscode-language-babel", "mgmcdermott.vscode-language-babel",
"mikestead.dotenv", "mikestead.dotenv",
"Syler.sass-indented" "Syler.sass-indented",
"zixuanchen.vitest-explorer"
] ]
} }

View File

@ -13,7 +13,7 @@
}, },
"homepage": "https://vikunja.io/", "homepage": "https://vikunja.io/",
"funding": "https://opencollective.com/vikunja", "funding": "https://opencollective.com/vikunja",
"packageManager": "pnpm@7.30.5", "packageManager": "pnpm@8.3.1",
"keywords": [ "keywords": [
"todo", "todo",
"productivity", "productivity",
@ -53,17 +53,17 @@
"@infectoone/vue-ganttastic": "2.1.4", "@infectoone/vue-ganttastic": "2.1.4",
"@intlify/unplugin-vue-i18n": "0.10.0", "@intlify/unplugin-vue-i18n": "0.10.0",
"@kyvg/vue3-notification": "2.9.0", "@kyvg/vue3-notification": "2.9.0",
"@sentry/tracing": "7.46.0", "@sentry/tracing": "7.49.0",
"@sentry/vue": "7.46.0", "@sentry/vue": "7.49.0",
"@vueuse/core": "9.13.0", "@vueuse/core": "10.1.0",
"axios": "1.3.4", "axios": "1.3.6",
"blurhash": "2.0.5", "blurhash": "2.0.5",
"bulma-css-variables": "0.9.33", "bulma-css-variables": "0.9.33",
"camel-case": "4.1.2", "camel-case": "4.1.2",
"codemirror": "5.65.12", "codemirror": "5.65.12",
"date-fns": "2.29.3", "date-fns": "2.29.3",
"dayjs": "1.11.7", "dayjs": "1.11.7",
"dompurify": "3.0.1", "dompurify": "3.0.2",
"easymde": "2.18.0", "easymde": "2.18.0",
"fast-deep-equal": "3.1.3", "fast-deep-equal": "3.1.3",
"flatpickr": "4.6.13", "flatpickr": "4.6.13",
@ -74,7 +74,7 @@
"klona": "2.0.6", "klona": "2.0.6",
"lodash.debounce": "4.0.8", "lodash.debounce": "4.0.8",
"marked": "4.3.0", "marked": "4.3.0",
"pinia": "2.0.33", "pinia": "2.0.35",
"register-service-worker": "1.7.2", "register-service-worker": "1.7.2",
"snake-case": "3.0.4", "snake-case": "3.0.4",
"sortablejs": "1.15.0", "sortablejs": "1.15.0",
@ -92,53 +92,53 @@
"@cypress/vite-dev-server": "5.0.5", "@cypress/vite-dev-server": "5.0.5",
"@cypress/vue": "5.0.5", "@cypress/vue": "5.0.5",
"@faker-js/faker": "7.6.0", "@faker-js/faker": "7.6.0",
"@histoire/plugin-screenshot": "0.15.9", "@histoire/plugin-screenshot": "0.16.1",
"@histoire/plugin-vue": "0.15.8", "@histoire/plugin-vue": "0.16.1",
"@rushstack/eslint-patch": "1.2.0", "@rushstack/eslint-patch": "1.2.0",
"@types/codemirror": "5.60.7", "@types/codemirror": "5.60.7",
"@types/dompurify": "3.0.0", "@types/dompurify": "3.0.2",
"@types/flexsearch": "0.7.3", "@types/flexsearch": "0.7.3",
"@types/is-touch-device": "1.0.0", "@types/is-touch-device": "1.0.0",
"@types/lodash.debounce": "4.0.7", "@types/lodash.debounce": "4.0.7",
"@types/marked": "4.0.8", "@types/marked": "4.0.8",
"@types/node": "18.15.11", "@types/node": "18.16.0",
"@types/postcss-preset-env": "7.7.0", "@types/postcss-preset-env": "7.7.0",
"@types/sortablejs": "1.15.1", "@types/sortablejs": "1.15.1",
"@typescript-eslint/eslint-plugin": "5.57.0", "@typescript-eslint/eslint-plugin": "5.59.1",
"@typescript-eslint/parser": "5.57.0", "@typescript-eslint/parser": "5.59.1",
"@vitejs/plugin-legacy": "4.0.2", "@vitejs/plugin-legacy": "4.0.3",
"@vitejs/plugin-vue": "4.1.0", "@vitejs/plugin-vue": "4.2.0",
"@vue/eslint-config-typescript": "11.0.2", "@vue/eslint-config-typescript": "11.0.3",
"@vue/test-utils": "2.3.2", "@vue/test-utils": "2.3.2",
"@vue/tsconfig": "0.1.3", "@vue/tsconfig": "0.1.3",
"autoprefixer": "10.4.14", "autoprefixer": "10.4.14",
"browserslist": "4.21.5", "browserslist": "4.21.5",
"caniuse-lite": "1.0.30001473", "caniuse-lite": "1.0.30001481",
"css-has-pseudo": "5.0.2", "css-has-pseudo": "5.0.2",
"csstype": "3.1.2", "csstype": "3.1.2",
"cypress": "12.9.0", "cypress": "12.10.0",
"esbuild": "0.17.15", "esbuild": "0.17.18",
"eslint": "8.37.0", "eslint": "8.39.0",
"eslint-plugin-vue": "9.10.0", "eslint-plugin-vue": "9.11.0",
"happy-dom": "9.1.0", "happy-dom": "9.9.2",
"histoire": "0.15.9", "histoire": "0.16.1",
"netlify-cli": "13.2.2", "netlify-cli": "14.2.1",
"postcss": "8.4.21", "postcss": "8.4.23",
"postcss-easing-gradients": "3.0.1", "postcss-easing-gradients": "3.0.1",
"postcss-easings": "3.0.1", "postcss-easings": "3.0.1",
"postcss-focus-within": "7.0.2", "postcss-focus-within": "7.0.2",
"postcss-preset-env": "8.3.0", "postcss-preset-env": "8.3.2",
"rollup": "3.20.2", "rollup": "3.21.0",
"rollup-plugin-visualizer": "5.9.0", "rollup-plugin-visualizer": "5.9.0",
"sass": "1.60.0", "sass": "1.62.0",
"start-server-and-test": "2.0.0", "start-server-and-test": "2.0.0",
"typescript": "5.0.3", "typescript": "5.0.4",
"vite": "4.2.1", "vite": "4.3.2",
"vite-plugin-inject-preload": "1.3.1", "vite-plugin-inject-preload": "1.3.1",
"vite-plugin-pwa": "0.14.7", "vite-plugin-pwa": "0.14.7",
"vite-svg-loader": "4.0.0", "vite-svg-loader": "4.0.0",
"vitest": "0.29.8", "vitest": "0.30.1",
"vue-tsc": "1.2.0", "vue-tsc": "1.4.4",
"wait-on": "7.0.1", "wait-on": "7.0.1",
"workbox-cli": "6.5.4" "workbox-cli": "6.5.4"
}, },

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
<script setup lang="ts">
import datemathHelp from './datemathHelp.vue'
</script>
<template>
<Story>
<Variant title="Default">
<datemathHelp />
</Variant>
</Story>
</template>

View File

@ -1,7 +1,8 @@
<template> <template>
<card <card
class="has-no-shadow how-it-works-modal" class="has-no-shadow how-it-works-modal"
:title="$t('input.datemathHelp.title')"> :title="$t('input.datemathHelp.title')"
>
<p> <p>
{{ $t('input.datemathHelp.intro') }} {{ $t('input.datemathHelp.intro') }}
</p> </p>
@ -27,11 +28,11 @@
</p> </p>
<p>{{ $t('misc.forExample') }}</p> <p>{{ $t('misc.forExample') }}</p>
<ul> <ul>
<li><code>+1d</code>{{ $t('input.datemathHelp.add1Day') }}</li> <li><code>+1d</code> {{ $t('input.datemathHelp.add1Day') }}</li>
<li><code>-1d</code>{{ $t('input.datemathHelp.minus1Day') }}</li> <li><code>-1d</code> {{ $t('input.datemathHelp.minus1Day') }}</li>
<li><code>/d</code>{{ $t('input.datemathHelp.roundDay') }}</li> <li><code>/d</code> {{ $t('input.datemathHelp.roundDay') }}</li>
</ul> </ul>
<p>{{ $t('input.datemathHelp.supportedUnits') }}</p> <h3>{{ $t('input.datemathHelp.supportedUnits') }}</h3>
<table class="table"> <table class="table">
<tbody> <tbody>
<tr> <tr>
@ -69,7 +70,7 @@
</tbody> </tbody>
</table> </table>
<p>{{ $t('input.datemathHelp.someExamples') }}</p> <h3>{{ $t('input.datemathHelp.someExamples') }}</h3>
<table class="table"> <table class="table">
<tbody> <tbody>
<tr> <tr>
@ -100,7 +101,7 @@
<td><code>{{ exampleDate }}||+1M/d</code></td> <td><code>{{ exampleDate }}||+1M/d</code></td>
<td> <td>
<i18n-t keypath="input.datemathHelp.examples.datePlusMonth" scope="global"> <i18n-t keypath="input.datemathHelp.examples.datePlusMonth" scope="global">
<code>{{ exampleDate }}</code> <strong>{{ exampleDate }}</strong>
</i18n-t> </i18n-t>
</td> </td>
</tr> </tr>
@ -110,13 +111,15 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {formatDate} from '@/helpers/time/formatDate' import {formatDateShort} from '@/helpers/time/formatDate'
import BaseButton from '@/components/base/BaseButton.vue' import BaseButton from '@/components/base/BaseButton.vue'
const exampleDate = formatDate(new Date(), 'yyyy-MM-dd') const exampleDate = formatDateShort(new Date())
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
// FIXME: Remove style overwrites
.how-it-works-modal { .how-it-works-modal {
font-size: 1rem; font-size: 1rem;
} }

View File

@ -47,8 +47,13 @@ const displayName = computed(() => getDisplayName(props.user))
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.user.is-inline { .user {
display: inline; display: flex;
justify-items: center;
&.is-inline {
display: inline-flex;
}
} }
.avatar { .avatar {

View File

@ -146,12 +146,13 @@ function to(n, index) {
.trigger-button { .trigger-button {
width: 100%; width: 100%;
position: relative;
} }
.unread-indicator { .unread-indicator {
position: absolute; position: absolute;
top: .75rem; top: 1rem;
right: 1.15rem; right: .5rem;
width: .75rem; width: .75rem;
height: .75rem; height: .75rem;

View File

@ -442,5 +442,6 @@ async function toggleTaskDone(task: ITask) {
.task-done-checkbox { .task-done-checkbox {
padding: 0; padding: 0;
height: 18px; // The exact height of the checkbox in the container height: 18px; // The exact height of the checkbox in the container
margin-right: .75rem;
} }
</style> </style>

View File

@ -1,7 +1,7 @@
import { computed } from 'vue' import {computed} from 'vue'
import type { Ref } from 'vue' import type {Ref} from 'vue'
import {useTitle as useTitleVueUse, resolveRef} from '@vueuse/core' import {useTitle as useTitleVueUse, toRef} from '@vueuse/core'
type UseTitleParameters = Parameters<typeof useTitleVueUse> type UseTitleParameters = Parameters<typeof useTitleVueUse>
@ -9,12 +9,12 @@ export function useTitle(...args: UseTitleParameters) {
const [newTitle, ...restArgs] = args const [newTitle, ...restArgs] = args
const pageTitle = resolveRef(newTitle) as Ref<string> const pageTitle = toRef(newTitle) as Ref<string>
const completeTitle = computed(() => const completeTitle = computed(() =>
(typeof pageTitle.value === 'undefined' || pageTitle.value === '') (typeof pageTitle.value === 'undefined' || pageTitle.value === '')
? 'Vikunja' ? 'Vikunja'
: `${pageTitle.value} | Vikunja`, : `${pageTitle.value} | Vikunja`,
) )
return useTitleVueUse(completeTitle, ...restArgs) return useTitleVueUse(completeTitle, ...restArgs)

View File

@ -129,7 +129,7 @@ const addTimeToDate = (text: string, date: Date, previousMatch: string | null):
} }
export const getDateFromText = (text: string, now: Date = new Date()) => { export const getDateFromText = (text: string, now: Date = new Date()) => {
const fullDateRegex = / ([0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9]([0-9][0-9])?|[0-9][0-9][0-9][0-9]\/[0-9][0-9]?\/[0-9][0-9]?|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?)/ig const fullDateRegex = /(^| )([0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9]([0-9][0-9])?|[0-9][0-9][0-9][0-9]\/[0-9][0-9]?\/[0-9][0-9]?|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?)/ig
// 1. Try parsing the text as a "usual" date, like 2021-06-24 or 06/24/2021 // 1. Try parsing the text as a "usual" date, like 2021-06-24 or 06/24/2021
let results: string[] | null = fullDateRegex.exec(text) let results: string[] | null = fullDateRegex.exec(text)
@ -138,7 +138,7 @@ export const getDateFromText = (text: string, now: Date = new Date()) => {
let containsYear = true let containsYear = true
if (result === null) { if (result === null) {
// 2. Try parsing the date as something like "jan 21" or "21 jan" // 2. Try parsing the date as something like "jan 21" or "21 jan"
const monthRegex = new RegExp(` (${monthsRegexGroup} [0-9][0-9]?|[0-9][0-9]? ${monthsRegexGroup})`, 'ig') const monthRegex = new RegExp(`(^| )(${monthsRegexGroup} [0-9][0-9]?|[0-9][0-9]? ${monthsRegexGroup})`, 'ig')
results = monthRegex.exec(text) results = monthRegex.exec(text)
result = results === null ? null : `${results[0]} ${now.getFullYear()}`.trim() result = results === null ? null : `${results[0]} ${now.getFullYear()}`.trim()
foundText = results === null ? '' : results[0].trim() foundText = results === null ? '' : results[0].trim()
@ -146,7 +146,7 @@ export const getDateFromText = (text: string, now: Date = new Date()) => {
if (result === null) { if (result === null) {
// 3. Try parsing the date as "27/01" or "01/27" // 3. Try parsing the date as "27/01" or "01/27"
const monthNumericRegex = / ([0-9][0-9]?\/[0-9][0-9]?)/ig const monthNumericRegex = /(^| )([0-9][0-9]?\/[0-9][0-9]?)/ig
results = monthNumericRegex.exec(text) results = monthNumericRegex.exec(text)
// Put the year before or after the date, depending on what works // Put the year before or after the date, depending on what works
@ -299,7 +299,7 @@ const getDateFromWeekday = (text: string): dateFoundResult => {
} }
const getDayFromText = (text: string) => { const getDayFromText = (text: string) => {
const matcher = /($| )(([1-2][0-9])|(3[01])|(0?[1-9]))(st|nd|rd|th|\.)($| )/ig const matcher = /(^| )(([1-2][0-9])|(3[01])|(0?[1-9]))(st|nd|rd|th|\.)($| )/ig
const results = matcher.exec(text) const results = matcher.exec(text)
if (results === null) { if (results === null) {
return { return {

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Kód", "code": "Kód",
"quote": "Citace", "quote": "Citace",
"unorderedList": "Seznam s odrážkami", "unorderedList": "Seznam s odrážkami",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Čistý blok", "cleanBlock": "Čistý blok",
"link": "Odkaz", "link": "Odkaz",
"image": "Obrázek", "image": "Obrázek",
@ -566,14 +566,14 @@
"canuse": "Můžete použít vzorec pro filtrování podle relativních datumů.", "canuse": "Můžete použít vzorec pro filtrování podle relativních datumů.",
"learnhow": "Podívejte se, jak to funguje", "learnhow": "Podívejte se, jak to funguje",
"title": "Datumový vzorec", "title": "Datumový vzorec",
"intro": "Datumový vzorec umožňuje určit relativní data, která jsou při použití filtru vyřešena za běhu Vikunjou.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Každý datumový matematický výraz začíná datem ukotvení, které může být buď {0}, nebo datový řetězec končící {1}. Po tomto ukotvení může volitelně následovat jeden nebo více matematických výrazů.", "expression": "Každý datumový matematický výraz začíná datem ukotvení, které může být buď {0}, nebo datový řetězec končící {1}. Po tomto ukotvení může volitelně následovat jeden nebo více matematických výrazů.",
"similar": "Tyto výrazy jsou podobné výrazům poskytnutým {0} a {1}.", "similar": "Tyto výrazy jsou podobné výrazům poskytnutým {0} a {1}.",
"add1Day": "Přidat jeden den", "add1Day": "Přidat jeden den",
"minus1Day": "Odečíst jeden den", "minus1Day": "Odečíst jeden den",
"roundDay": "Zaokrouhlit dolů na nejbližší den", "roundDay": "Zaokrouhlit dolů na nejbližší den",
"supportedUnits": "Podporované časové jednotky jsou:", "supportedUnits": "Supported time units",
"someExamples": "Některé příklady časových výrazů:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Sekundy", "seconds": "Sekundy",
"minutes": "Minuty", "minutes": "Minuty",

View File

@ -529,7 +529,7 @@
"code": "Kode", "code": "Kode",
"quote": "Citat", "quote": "Citat",
"unorderedList": "Usorteret liste", "unorderedList": "Usorteret liste",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Ryd Blok", "cleanBlock": "Ryd Blok",
"link": "Link", "link": "Link",
"image": "Billede", "image": "Billede",
@ -566,14 +566,14 @@
"canuse": "Du kan bruge datomatematik til at filtrere for relative datoer.", "canuse": "Du kan bruge datomatematik til at filtrere for relative datoer.",
"learnhow": "Se hvordan det virker", "learnhow": "Se hvordan det virker",
"title": "Datomatematik", "title": "Datomatematik",
"intro": "Dato Matematik giver dig mulighed for at angive relative datoer, som er løst løbende af Vikunja, når du anvender filteret.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Hver Datomatematik udtryk starter med en ankerdato, som enten kan være {0} eller en datostreng, der slutter med {1}. Denneanker dato kan eventuelt efterfølges af en eller flere matematik udtryk.", "expression": "Hver Datomatematik udtryk starter med en ankerdato, som enten kan være {0} eller en datostreng, der slutter med {1}. Denneanker dato kan eventuelt efterfølges af en eller flere matematik udtryk.",
"similar": "Disse udtryk ligner dem fra {0} og {1}.", "similar": "Disse udtryk ligner dem fra {0} og {1}.",
"add1Day": "Læg en dag til", "add1Day": "Læg en dag til",
"minus1Day": "Træk en dag fra", "minus1Day": "Træk en dag fra",
"roundDay": "Rund ned til nærmeste dag", "roundDay": "Rund ned til nærmeste dag",
"supportedUnits": "Understøttede tidsenheder er:", "supportedUnits": "Supported time units",
"someExamples": "Eksempler på tidsudtryk:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Sekunder", "seconds": "Sekunder",
"minutes": "Minutter", "minutes": "Minutter",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Zitat", "quote": "Zitat",
"unorderedList": "Ungeordnete Liste", "unorderedList": "Ungeordnete Liste",
"orderedList ": "Ordered List", "orderedList": "Geordnete Liste",
"cleanBlock": "Formatierung löschen", "cleanBlock": "Formatierung löschen",
"link": "Link", "link": "Link",
"image": "Bild", "image": "Bild",
@ -566,14 +566,14 @@
"canuse": "Du kannst Datumsberechnung verwenden, um nach relativen Daten zu filtern.", "canuse": "Du kannst Datumsberechnung verwenden, um nach relativen Daten zu filtern.",
"learnhow": "Sieh dir an, wie es funktioniert", "learnhow": "Sieh dir an, wie es funktioniert",
"title": "Datumsberechnung", "title": "Datumsberechnung",
"intro": "Die Datumsberechnung erlaubt es, relative Daten anzugeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.", "intro": "Du kannst relative Daten angeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.",
"expression": "Jeder Ausdruck der Datumsberechnung beginnt mit einem Datumswert, welcher entweder {0} sein kann oder mit {1} endet. Auf diesen Datumswert kann optional ein oder mehrere mathematische Ausdrücke folgen.", "expression": "Jeder Ausdruck der Datumsberechnung beginnt mit einem Datumswert, welcher entweder {0} sein kann oder mit {1} endet. Auf diesen Datumswert kann optional ein oder mehrere mathematische Ausdrücke folgen.",
"similar": "Diese Ausdrücke ähneln denen von {0} und {1}.", "similar": "Diese Ausdrücke ähneln denen von {0} und {1}.",
"add1Day": "Einen Tag hinzufügen", "add1Day": "Einen Tag hinzufügen",
"minus1Day": "Einen Tag abziehen", "minus1Day": "Einen Tag abziehen",
"roundDay": "Auf den nächsten Tag abrunden", "roundDay": "Auf den nächsten Tag abrunden",
"supportedUnits": "Unterstützte Zeiteinheiten sind:", "supportedUnits": "Unterstützte Zeiteinheiten",
"someExamples": "Einige Beispiele für Zeitausdrücke:", "someExamples": "Beispiele für Zeitausdrücke",
"units": { "units": {
"seconds": "Sekunden", "seconds": "Sekunden",
"minutes": "Minuten", "minutes": "Minuten",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Zitaat", "quote": "Zitaat",
"unorderedList": "Ungordnedi Listä", "unorderedList": "Ungordnedi Listä",
"orderedList ": "Ordered List", "orderedList": "Geordnete Liste",
"cleanBlock": "Formatierig Lösche", "cleanBlock": "Formatierig Lösche",
"link": "Link", "link": "Link",
"image": "Bild", "image": "Bild",
@ -566,14 +566,14 @@
"canuse": "Du kannst Datumsberechnung verwenden, um nach relativen Daten zu filtern.", "canuse": "Du kannst Datumsberechnung verwenden, um nach relativen Daten zu filtern.",
"learnhow": "Sieh dir an, wie es funktioniert", "learnhow": "Sieh dir an, wie es funktioniert",
"title": "Datumsberechnung", "title": "Datumsberechnung",
"intro": "Die Datumsberechnung erlaubt es, relative Daten anzugeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.", "intro": "Du kannst relative Daten angeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.",
"expression": "Jeder Ausdruck der Datumsberechnung beginnt mit einem Datumswert, welcher entweder {0} sein kann oder mit {1} endet. Auf diesen Datumswert kann optional ein oder mehrere mathematische Ausdrücke folgen.", "expression": "Jeder Ausdruck der Datumsberechnung beginnt mit einem Datumswert, welcher entweder {0} sein kann oder mit {1} endet. Auf diesen Datumswert kann optional ein oder mehrere mathematische Ausdrücke folgen.",
"similar": "Diese Ausdrücke ähneln denen von {0} und {1}.", "similar": "Diese Ausdrücke ähneln denen von {0} und {1}.",
"add1Day": "Einen Tag hinzufügen", "add1Day": "Einen Tag hinzufügen",
"minus1Day": "Einen Tag abziehen", "minus1Day": "Einen Tag abziehen",
"roundDay": "Auf den nächsten Tag abrunden", "roundDay": "Auf den nächsten Tag abrunden",
"supportedUnits": "Unterstützte Zeiteinheiten sind:", "supportedUnits": "Unterstützte Zeiteinheiten",
"someExamples": "Einige Beispiele für Zeitausdrücke:", "someExamples": "Beispiele für Zeitausdrücke",
"units": { "units": {
"seconds": "Sekunden", "seconds": "Sekunden",
"minutes": "Minuten", "minutes": "Minuten",

View File

@ -569,14 +569,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Código", "code": "Código",
"quote": "Cita", "quote": "Cita",
"unorderedList": "Lista no ordenada", "unorderedList": "Lista no ordenada",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Borrar Bloque", "cleanBlock": "Borrar Bloque",
"link": "Enlace", "link": "Enlace",
"image": "Imagen", "image": "Imagen",
@ -566,14 +566,14 @@
"canuse": "Puedes usar ecuaciones para filtrar por fechas relacionadas.", "canuse": "Puedes usar ecuaciones para filtrar por fechas relacionadas.",
"learnhow": "Mira cómo funciona", "learnhow": "Mira cómo funciona",
"title": "Ecuaciones", "title": "Ecuaciones",
"intro": "Las Ecuaciones permiten determinar qué fechas relacionadas te mostrará Vikunja al aplicar este filtro.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Cada expresión matemática empieza con una fecha ancla, que puede ser {0}, o una cadena de texto que acabe en {1}. Opcionalmente, esta fecha puede estar seguida de una o más expresiones.", "expression": "Cada expresión matemática empieza con una fecha ancla, que puede ser {0}, o una cadena de texto que acabe en {1}. Opcionalmente, esta fecha puede estar seguida de una o más expresiones.",
"similar": "Estas expresiones son similares a las definidas en {0} y {1}.", "similar": "Estas expresiones son similares a las definidas en {0} y {1}.",
"add1Day": "Añadir un día", "add1Day": "Añadir un día",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Citation", "quote": "Citation",
"unorderedList": "Liste non ordonnée", "unorderedList": "Liste non ordonnée",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Bloc propre", "cleanBlock": "Bloc propre",
"link": "Lien", "link": "Lien",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Codice", "code": "Codice",
"quote": "Citazione", "quote": "Citazione",
"unorderedList": "Elenco puntato", "unorderedList": "Elenco puntato",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Pulisci Blocco", "cleanBlock": "Pulisci Blocco",
"link": "Link", "link": "Link",
"image": "Immagine", "image": "Immagine",
@ -566,14 +566,14 @@
"canuse": "Puoi usare le date calcolate per filtrare per date relative.", "canuse": "Puoi usare le date calcolate per filtrare per date relative.",
"learnhow": "Scopri come funziona", "learnhow": "Scopri come funziona",
"title": "Date Calcolate", "title": "Date Calcolate",
"intro": "Le Date Calcolate ti permettono di specificare date relative che vengono calcolate al volo da Vikunja quando viene applicato il filtro.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Ogni Data Calcolata inizia con una data base, che può essere {0}, o una data con {1} alla fine. Questa data base può essere seguita da una o più espressioni matematiche.", "expression": "Ogni Data Calcolata inizia con una data base, che può essere {0}, o una data con {1} alla fine. Questa data base può essere seguita da una o più espressioni matematiche.",
"similar": "Queste espressioni sono simili a quelle fornite da {0} e {1}.", "similar": "Queste espressioni sono simili a quelle fornite da {0} e {1}.",
"add1Day": "Aggiungi un giorno", "add1Day": "Aggiungi un giorno",
"minus1Day": "Sottrai un giorno", "minus1Day": "Sottrai un giorno",
"roundDay": "Arrotonda per difetto al giorno più vicino", "roundDay": "Arrotonda per difetto al giorno più vicino",
"supportedUnits": "Le unità di tempo supportate sono:", "supportedUnits": "Supported time units",
"someExamples": "Alcuni esempi di espressione temporale:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Secondi", "seconds": "Secondi",
"minutes": "Minuti", "minutes": "Minuti",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Citaat", "quote": "Citaat",
"unorderedList": "Ongesorteerde lijst", "unorderedList": "Ongesorteerde lijst",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Afbeelding", "image": "Afbeelding",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -6,10 +6,10 @@
"welcomeEvening": "God Morgen {username}!", "welcomeEvening": "God Morgen {username}!",
"lastViewed": "Sist sett", "lastViewed": "Sist sett",
"project": { "project": {
"newText": "You can create a new project for your new tasks:", "newText": "Du kan opprette en ny liste for dine nye oppgaver:",
"new": "New project", "new": "Nytt prosjekt",
"importText": "Or import your projects and tasks from other services into Vikunja:", "importText": "Eller importer lister og oppgaver fra andre tjenester til Vikunja:",
"import": "Import your data into Vikunja" "import": "Importer dine data til Vikunja"
} }
}, },
"404": { "404": {
@ -85,7 +85,7 @@
"weekStartSunday": "Søndag", "weekStartSunday": "Søndag",
"weekStartMonday": "Mandag", "weekStartMonday": "Mandag",
"language": "Språk", "language": "Språk",
"defaultProject": "Default Project", "defaultProject": "Standard prosjekt",
"timezone": "Tidssone", "timezone": "Tidssone",
"overdueTasksRemindersTime": "Utløpte påminnelses-tid for oppgaver" "overdueTasksRemindersTime": "Utløpte påminnelses-tid for oppgaver"
}, },
@ -143,7 +143,7 @@
}, },
"deletion": { "deletion": {
"title": "Slett kontoen din", "title": "Slett kontoen din",
"text1": "The deletion of your account is permanent and cannot be undone. We will delete all your namespaces, projects, tasks and everything associated with it.", "text1": "Sletting av din konto er permanent og kan ikke angres. Vi vil slette alle dine navneområder og prosjekter, oppgaver og alt forbundet med den.",
"text2": "For å fortsette, skriv inn passordet ditt. Du vil motta en e-post med ytterligere instruksjoner.", "text2": "For å fortsette, skriv inn passordet ditt. Du vil motta en e-post med ytterligere instruksjoner.",
"confirm": "Slett min konto", "confirm": "Slett min konto",
"requestSuccess": "Forespørselen var vellykket. Du vil motta en e-post med ytterligere instruksjoner.", "requestSuccess": "Forespørselen var vellykket. Du vil motta en e-post med ytterligere instruksjoner.",
@ -157,7 +157,7 @@
}, },
"export": { "export": {
"title": "Eksporter dine kontodata", "title": "Eksporter dine kontodata",
"description": "You can request a copy of all your Vikunja data. This include Namespaces, Projects, Tasks and everything associated to them. You can import this data in any Vikunja instance through the migration function.", "description": "Du kan be om en kopi av alle Vikunja dataene dine. Dette inkluderer navneområder, lister, oppgaver og alt tilknyttet dem.",
"descriptionPasswordRequired": "Skriv inn passordet for å fortsette:", "descriptionPasswordRequired": "Skriv inn passordet for å fortsette:",
"request": "Be om kopi av mine Vikunja Data", "request": "Be om kopi av mine Vikunja Data",
"success": "Du har spurt om dine Vikunja data! Vi sender deg en e-post når den er klar til å laste ned.", "success": "Du har spurt om dine Vikunja data! Vi sender deg en e-post når den er klar til å laste ned.",
@ -165,193 +165,193 @@
} }
}, },
"project": { "project": {
"archived": "This project is archived. It is not possible to create new or edit tasks for it.", "archived": "Dette prosjektet er arkivert. Det er ikke mulig å opprette nye eller redigere oppgaver for det.",
"title": "Project Title", "title": "Prosjekt tittel",
"color": "Color", "color": "Farger",
"projects": "Projects", "projects": "Prosjekter",
"search": "Type to search for a project…", "search": "Tast for å søke etter et prosjekt…",
"searchSelect": "Click or press enter to select this project", "searchSelect": "Klikk eller trykk enter for å velge dette prosjektet",
"shared": "Shared Projects", "shared": "Delte prosjekter",
"noDescriptionAvailable": "No project description is available.", "noDescriptionAvailable": "Ingen prosjektbeskrivelse er tilgjengelig.",
"create": { "create": {
"header": "New project", "header": "Nytt prosjekt",
"titlePlaceholder": "The project's title goes here…", "titlePlaceholder": "Prosjektets tittel er her…",
"addTitleRequired": "Please specify a title.", "addTitleRequired": "Angi den nye tittelen.",
"createdSuccess": "The project was successfully created.", "createdSuccess": "Prosjektet ble opprettet.",
"addProjectRequired": "Please specify a project or set a default project in the settings." "addProjectRequired": "Vennligst spesifiser et prosjekt eller angi et standardprosjekt i innstillingene."
}, },
"archive": { "archive": {
"title": "Archive \"{project}\"", "title": "Arkiver{project}\"",
"archive": "Archive this project", "archive": "Arkiver dette prosjektet",
"unarchive": "Un-Archive this project", "unarchive": "Av-arkivere dette prosjektet",
"unarchiveText": "You will be able to create new tasks or edit it.", "unarchiveText": "Du vil kunne opprette nye oppgaver eller redigere den.",
"archiveText": "You won't be able to edit this project or create new tasks until you un-archive it.", "archiveText": "Du vil ikke være i stand til å redigere denne listen eller opprette nye oppgaver før du fjerner arkiveringen.",
"success": "The project was successfully archived." "success": "Prosjektet ble vellykket arkivert."
}, },
"background": { "background": {
"title": "Set project background", "title": "Angi prosjektbakgrunn",
"remove": "Remove Background", "remove": "Fjern bakgrunn",
"upload": "Choose a background from your pc", "upload": "Velg en bakgrunn fra din pc",
"searchPlaceholder": "Search for a background…", "searchPlaceholder": "Søk etter en bakgrunn…",
"poweredByUnsplash": "Powered by Unsplash", "poweredByUnsplash": "Drevet av Unsplash",
"loadMore": "Load more photos", "loadMore": "Laste inn flere bilder",
"success": "The background has been set successfully!", "success": "Bakgrunnen er satt vellykket!",
"removeSuccess": "The background has been removed successfully!" "removeSuccess": "Bakgrunnen har blitt fjernet!"
}, },
"delete": { "delete": {
"title": "Delete \"{project}\"", "title": "Slett \"{project}",
"header": "Delete this project", "header": "Slett dette prosjektet",
"text1": "Are you sure you want to delete this project and all of its contents?", "text1": "Er du sikker på at du vil slette dette prosjektet og alle relaterte data?",
"text2": "This includes all tasks and CANNOT BE UNDONE!", "text2": "Dette inkluderer alle oppgaver og KAN IKKE ANGRES!",
"success": "The project was successfully deleted.", "success": "Prosjektet ble slettet.",
"tasksToDelete": "This will irrevocably remove approx. {count} tasks.", "tasksToDelete": "Dette vil ugjenkallelig fjerne ca. {count} oppgaver.",
"noTasksToDelete": "This project does not contain any tasks, it should be safe to delete." "noTasksToDelete": "Dette prosjektet inneholder ingen oppgaver, det bør være trygt å slette."
}, },
"duplicate": { "duplicate": {
"title": "Duplicate this project", "title": "Dupliser dette prosjektet",
"label": "Duplicate", "label": "Dupliser",
"text": "Select a namespace which should hold the duplicated project:", "text": "Velg et navneområde som skal holde det dupliserte prosjektet:",
"success": "The project was successfully duplicated." "success": "Prosjektet ble duplisert."
}, },
"edit": { "edit": {
"header": "Edit This Project", "header": "Rediger prosjekt",
"title": "Edit \"{project}\"", "title": "Rediger \"{project}",
"titlePlaceholder": "The project title goes here…", "titlePlaceholder": "Prosjekttittelen går her…",
"identifierTooltip": "The project identifier can be used to uniquely identify a task across projects. You can set it to empty to disable it.", "identifierTooltip": "Prosjektidentifikatoren kan brukes til å identifisere en oppgave på tvers av prosjekter. Du kan sette den til tom for å deaktivere den.",
"identifier": "Project Identifier", "identifier": "Prosjekt identifikator",
"identifierPlaceholder": "The project identifier goes here…", "identifierPlaceholder": "Prosjektidentifikatoren kommer her…",
"description": "Description", "description": "Beskrivelse",
"descriptionPlaceholder": "The projects description goes here…", "descriptionPlaceholder": "Beskrivelsen gis her…",
"color": "Color", "color": "Farger",
"success": "The project was successfully updated." "success": "Prosjektet ble opprettet."
}, },
"share": { "share": {
"header": "Share this project", "header": "Del dette prosjektet",
"title": "Share \"{project}\"", "title": "Del \"{project}\"",
"share": "Share", "share": "Del",
"links": { "links": {
"title": "Share Links", "title": "Del link",
"what": "What is a share link?", "what": "Hva er en lenke for deling?",
"explanation": "Share Links allow you to easily share a project with other users who don't have an account on Vikunja.", "explanation": "Lenker lar deg enkelt dele et prosjekt med andre brukere som ikke har en konto på Vikunja.",
"create": "Create a new link share", "create": "Opprett en ny lenkedeling",
"name": "Name (optional)", "name": "Navn (valgfritt)",
"namePlaceholder": "e.g. Lorem Ipsum", "namePlaceholder": "e.g. Lorem Ipsum",
"nameExplanation": "All actions done by this link share will show up with the name.", "nameExplanation": "Alle handlinger utført av denne koblingsdelingen vises med navnet.",
"password": "Password (optional)", "password": "Passord (valgfritt)",
"passwordExplanation": "When authenticating, the user will be required to enter this password.", "passwordExplanation": "Når brukeren autentiseres, må vedkommende angi dette passordet.",
"noName": "No name set", "noName": "Ingen navn satt",
"remove": "Remove a link share", "remove": "Fjern en link deling",
"removeText": "Are you sure you want to remove this link share? It will no longer be possible to access this project with this link share. This cannot be undone!", "removeText": "Er du sikker på at du vil fjerne denne lenkedelen? Det vil ikke lenger være mulig å åpne dette prosjektet med denne lenkedelingen. Dette kan ikke angres!",
"createSuccess": "The link share was successfully created.", "createSuccess": "Delingen ble opprettet.",
"deleteSuccess": "The link share was successfully deleted", "deleteSuccess": "Delingen ble slettet",
"view": "View", "view": "Vis",
"sharedBy": "Shared by {0}" "sharedBy": "Delt av {0}"
}, },
"userTeam": { "userTeam": {
"typeUser": "user | users", "typeUser": "bruker | brukere",
"typeTeam": "team | teams", "typeTeam": "team | teams",
"shared": "Shared with these {type}", "shared": "Delt med disse {type}",
"you": "You", "you": "Du",
"notShared": "Not shared with any {type} yet.", "notShared": "Ikke delt med noen {type} ennå.",
"removeHeader": "Remove a {type} from the {sharable}", "removeHeader": "Fjern en {type} fra {sharable}",
"removeText": "Are you sure you want to remove this {sharable} from the {type}? This cannot be undone!", "removeText": "Er du sikker på at du vil fjerne denne {sharable} fra {type}? Dette kan ikke angres!",
"removeSuccess": "The {sharable} was successfully removed from the {type}.", "removeSuccess": "{sharable} ble fjernet fra {type}.",
"addedSuccess": "The {type} was successfully added.", "addedSuccess": "{type} ble lagt til.",
"updatedSuccess": "The {type} was successfully added." "updatedSuccess": "{type} ble lagt til."
}, },
"right": { "right": {
"title": "Permission", "title": "Rettighet",
"read": "Read only", "read": "Kun lese",
"readWrite": "Read & write", "readWrite": "Lese og skrive",
"admin": "Admin" "admin": "Administrator"
}, },
"attributes": { "attributes": {
"link": "Link", "link": "Link",
"delete": "Delete" "delete": "Slett"
} }
}, },
"list": { "list": {
"title": "List", "title": "Liste",
"add": "Add", "add": "Legg til",
"addPlaceholder": "Add a new task…", "addPlaceholder": "Legg til ny oppgave…",
"empty": "This project is currently empty.", "empty": "Dette prosjektet er for øyeblikket tomt.",
"newTaskCta": "Create a new task.", "newTaskCta": "Lage en ny oppgave.",
"editTask": "Edit Task" "editTask": "Endre oppgave"
}, },
"gantt": { "gantt": {
"title": "Gantt", "title": "Gantt",
"showTasksWithoutDates": "Show tasks which don't have dates set", "showTasksWithoutDates": "Vis oppgaver som ikke har datoer angitt",
"size": "Size", "size": "Størrelse",
"default": "Default", "default": "Standard",
"month": "Month", "month": "Måned",
"day": "Day", "day": "Dag",
"hour": "Hour", "hour": "Time",
"range": "Date Range", "range": "Datointervall",
"noDates": "This task has no dates set." "noDates": "Denne oppgaven har ingen datoer satt."
}, },
"table": { "table": {
"title": "Table", "title": "Tabell",
"columns": "Columns" "columns": "Kolonner"
}, },
"kanban": { "kanban": {
"title": "Kanban", "title": "Kanban",
"limit": "Limit: {limit}", "limit": "Grense: {limit}",
"noLimit": "Not Set", "noLimit": "Ikke Angitt",
"doneBucket": "Done bucket", "doneBucket": "Ferdig bøtte",
"doneBucketHint": "All tasks moved into this bucket will automatically marked as done.", "doneBucketHint": "Alle oppgaver som flyttet til denne bøtte vil automatisk bli markert som ferdig.",
"doneBucketHintExtended": "All tasks moved into the done bucket will be marked as done automatically. All tasks marked as done from elsewhere will be moved as well.", "doneBucketHintExtended": "Alle oppgaver som er flyttet inn i den utførte bøtten, vil bli merket som utført automatisk. Alle oppgaver merket som gjort fra andre steder vil også bli flyttet.",
"doneBucketSavedSuccess": "The done bucket has been saved successfully.", "doneBucketSavedSuccess": "Bøtten er lagret.",
"deleteLast": "You cannot remove the last bucket.", "deleteLast": "Du kan ikke fjerne den siste bøtten.",
"addTaskPlaceholder": "Enter the new task title…", "addTaskPlaceholder": "Angi den nye oppgavens tittel…",
"addTask": "Add a task", "addTask": "Legg til oppgave",
"addAnotherTask": "Add another task", "addAnotherTask": "Legg til en annen oppgave",
"addBucket": "Create a new bucket", "addBucket": "Lag en ny bøtte",
"addBucketPlaceholder": "Enter the new bucket title…", "addBucketPlaceholder": "Angi den nye bøtte tittelen…",
"deleteHeaderBucket": "Delete the bucket", "deleteHeaderBucket": "Slett bøtte",
"deleteBucketText1": "Are you sure you want to delete this bucket?", "deleteBucketText1": "Er du sikker på at du vil slette denne bøtte?",
"deleteBucketText2": "This will not delete any tasks but move them into the default bucket.", "deleteBucketText2": "Dette vil ikke slette noen oppgaver, men flytte dem til standard bøtte.",
"deleteBucketSuccess": "The bucket has been deleted successfully.", "deleteBucketSuccess": "Bøtten er slettet.",
"bucketTitleSavedSuccess": "The bucket title has been saved successfully.", "bucketTitleSavedSuccess": "Bøtten er lagret.",
"bucketLimitSavedSuccess": "The bucket limit been saved successfully.", "bucketLimitSavedSuccess": "Grensen på bøtte er lagret.",
"collapse": "Collapse this bucket" "collapse": "Skjul denne bøtten"
}, },
"pseudo": { "pseudo": {
"favorites": { "favorites": {
"title": "Favorites" "title": "Favoritter"
} }
} }
}, },
"namespace": { "namespace": {
"title": "Namespaces & Projects", "title": "Navneområder & lister",
"namespace": "Navneområde", "namespace": "Navneområde",
"showArchived": "Vis arkiverte", "showArchived": "Vis arkiverte",
"noneAvailable": "Du har ingen navneområder akkurat nå.", "noneAvailable": "Du har ingen navneområder akkurat nå.",
"unarchive": "Av-arkiver", "unarchive": "Av-arkiver",
"archived": "Arkivert", "archived": "Arkivert",
"noProjects": "This namespace does not contain any projects.", "noProjects": "Dette navneområdet inneholder ikke noen prosjekter.",
"createProject": "Create a new project in this namespace.", "createProject": "Opprett et nytt prosjekt i dette navneområdet.",
"namespaces": "Navnerom", "namespaces": "Navnerom",
"search": "Skriv for å søke etter en etikett…", "search": "Skriv for å søke etter en etikett…",
"create": { "create": {
"title": "Nytt navneområde", "title": "Nytt navneområde",
"titleRequired": "Angi den nye tittelen.", "titleRequired": "Angi den nye tittelen.",
"explanation": "A namespace is a collection of projects you can share and use to organize your projects with. In fact, every project belongs to a namespace.", "explanation": "Et navneområde er en samling av lister du kan dele og bruke til å organisere listene dine med. I realiteten hører hver liste til et navneområde.",
"tooltip": "Hva er et navneområde?", "tooltip": "Hva er et navneområde?",
"success": "Navneområdet ble opprettet." "success": "Navneområdet ble opprettet."
}, },
"archive": { "archive": {
"titleArchive": "Arkiv \"{namespace}\"", "titleArchive": "Arkiv \"{namespace}\"",
"titleUnarchive": "Av-Arkiv \"{namespace}\"", "titleUnarchive": "Av-Arkiv \"{namespace}\"",
"archiveText": "You won't be able to edit this namespace or create new projects until you un-archive it. This will also archive all projects in this namespace.", "archiveText": "Du vil ikke kunne redigere dette navneområdet eller opprette nye lister før du avlaster arkivet. Dette vil også arkivere alle lister i dette navneområdet.",
"unarchiveText": "You will be able to create new projects or edit it.", "unarchiveText": "Du vil kunne opprette nye oppgaver eller redigere den.",
"success": "Navnerommet ble arkivert.", "success": "Navnerommet ble arkivert.",
"unarchiveSuccess": "Navnerommet ble vellykket fjernet fra arkivet.", "unarchiveSuccess": "Navnerommet ble vellykket fjernet fra arkivet.",
"description": "If a namespace is archived, you cannot create new projects or edit it." "description": "Hvis navneområdet er arkivert, kan du ikke opprette nye lister eller redigere det."
}, },
"delete": { "delete": {
"title": "Slett \"{namespace}", "title": "Slett \"{namespace}",
"text1": "Er du sikker på at du vil slette dette navneområdet og alt innholdet?", "text1": "Er du sikker på at du vil slette dette navneområdet og alt innholdet?",
"text2": "This includes all projects and tasks and CANNOT BE UNDONE!", "text2": "Dette inkluderer alle oppgaver og KAN IKKE ANGRES!",
"success": "Navnområdet ble slettet." "success": "Navnområdet ble slettet."
}, },
"edit": { "edit": {
@ -372,7 +372,7 @@
}, },
"pseudo": { "pseudo": {
"sharedProjects": { "sharedProjects": {
"title": "Shared Projects" "title": "Delte prosjekter"
}, },
"favorites": { "favorites": {
"title": "Favoritter" "title": "Favoritter"
@ -403,9 +403,9 @@
}, },
"create": { "create": {
"title": "Nytt lagret filter", "title": "Nytt lagret filter",
"description": "A saved filter is a virtual project which is computed from a set of filters each time it is accessed. Once created, it will appear in a special namespace.", "description": "Et lagret filter er en virtuell liste som beregnes fra et sett med filtre hver gang det åpnes. Når du er opprettet, vil det vises i et eget navneområde.",
"action": "Opprett nytt filter", "action": "Opprett nytt filter",
"titleRequired": "Please provide a title for the filter." "titleRequired": "Skriv inn en tittel for filteret."
}, },
"delete": { "delete": {
"header": "Slett dette lagrede filteret", "header": "Slett dette lagrede filteret",
@ -435,7 +435,7 @@
"label": { "label": {
"title": "Etiketter", "title": "Etiketter",
"manage": "Behandle etiketter", "manage": "Behandle etiketter",
"description": "Click on a label to edit it. You can edit all labels you created, you can use all labels which are associated with a task to whose project you have access.", "description": "Klikk på en etikett for å redigere den. Du kan redigere alle etikettene du lagde, du kan bruke alle etikettene som er tilknyttet en oppgave som du har tilgang til.",
"newCTA": "Du har ingen etiketter for øyeblikket.", "newCTA": "Du har ingen etiketter for øyeblikket.",
"search": "Skriv for å søke etter en etikett…", "search": "Skriv for å søke etter en etikett…",
"create": { "create": {
@ -460,7 +460,7 @@
}, },
"sharing": { "sharing": {
"authenticating": "Autentiserer…", "authenticating": "Autentiserer…",
"passwordRequired": "This shared project requires a password. Please enter it below:", "passwordRequired": "Denne delte listen krever et passord. Vennligst skriv det nedenfor:",
"error": "En feil oppsto.", "error": "En feil oppsto.",
"invalidPassword": "Det oppgitte passordet er ugyldig." "invalidPassword": "Det oppgitte passordet er ugyldig."
}, },
@ -529,7 +529,7 @@
"code": "Kode", "code": "Kode",
"quote": "Sitat", "quote": "Sitat",
"unorderedList": "Uordnet liste", "unorderedList": "Uordnet liste",
"orderedList ": "Ordered List", "orderedList": "Sortert liste",
"cleanBlock": "Tøm blokk", "cleanBlock": "Tøm blokk",
"link": "Link", "link": "Link",
"image": "Bilde", "image": "Bilde",
@ -572,8 +572,8 @@
"add1Day": "Legg til en dag", "add1Day": "Legg til en dag",
"minus1Day": "Trekk fra en dag", "minus1Day": "Trekk fra en dag",
"roundDay": "Rund ned til nærmeste verdi", "roundDay": "Rund ned til nærmeste verdi",
"supportedUnits": "Støttede tidsenheter er:", "supportedUnits": "Støttede tidsenheter",
"someExamples": "Noen eksempler på tidsuttrykk:", "someExamples": "Noen eksempler på tidsuttrykk",
"units": { "units": {
"seconds": "Sekunder", "seconds": "Sekunder",
"minutes": "Minutter", "minutes": "Minutter",
@ -602,7 +602,7 @@
"addReminder": "Legg til en ny påminnelse…", "addReminder": "Legg til en ny påminnelse…",
"doneSuccess": "Oppgaven ble markert som ferdig.", "doneSuccess": "Oppgaven ble markert som ferdig.",
"undoneSuccess": "Oppgaven ble fjernet som ferdig.", "undoneSuccess": "Oppgaven ble fjernet som ferdig.",
"undo": "Undo", "undo": "Angre",
"openDetail": "Åpne detaljvisning", "openDetail": "Åpne detaljvisning",
"checklistTotal": "{checked} av {total} oppgaver", "checklistTotal": "{checked} av {total} oppgaver",
"checklistAllDone": "{total} oppgaver", "checklistAllDone": "{total} oppgaver",
@ -619,7 +619,7 @@
"chooseDueDate": "Klikk her for å angi en forfallsdato", "chooseDueDate": "Klikk her for å angi en forfallsdato",
"chooseStartDate": "Klikk her for å angi en startdato", "chooseStartDate": "Klikk her for å angi en startdato",
"chooseEndDate": "Klikk her for å angi en sluttdato", "chooseEndDate": "Klikk her for å angi en sluttdato",
"move": "Move task to a different project", "move": "Flytt oppgaven til en annen liste",
"done": "Marker som utført!", "done": "Marker som utført!",
"undone": "Merk som uferdig", "undone": "Merk som uferdig",
"created": "Opprettet {0} av {1}", "created": "Opprettet {0} av {1}",
@ -627,7 +627,7 @@
"doneAt": "Ferdig {0}", "doneAt": "Ferdig {0}",
"updateSuccess": "Oppgaven ble lagret.", "updateSuccess": "Oppgaven ble lagret.",
"deleteSuccess": "Oppgaven har blitt slettet.", "deleteSuccess": "Oppgaven har blitt slettet.",
"belongsToProject": "This task belongs to project '{project}'", "belongsToProject": "Denne oppgaven tilhører listen '{project}'",
"due": "Forfallsdato {at}", "due": "Forfallsdato {at}",
"closePopup": "Lukk popup", "closePopup": "Lukk popup",
"delete": { "delete": {
@ -647,7 +647,7 @@
"percentDone": "Angi fremdrift", "percentDone": "Angi fremdrift",
"attachments": "Legg til vedlegg", "attachments": "Legg til vedlegg",
"relatedTasks": "Legg til relasjon", "relatedTasks": "Legg til relasjon",
"moveProject": "Move", "moveProject": "Flytt",
"color": "Sett Farge", "color": "Sett Farge",
"delete": "Slett", "delete": "Slett",
"favorite": "Legg til i favoritter", "favorite": "Legg til i favoritter",
@ -674,21 +674,21 @@
"updated": "Oppdatert" "updated": "Oppdatert"
}, },
"subscription": { "subscription": {
"subscribedProjectThroughParentNamespace": "You can't unsubscribe here because you are subscribed to this project through its namespace.", "subscribedProjectThroughParentNamespace": "Du kan ikke slutte å abonnere her fordi du abonnerer på denne listen gjennom dens navneområde.",
"subscribedTaskThroughParentNamespace": "Du kan ikke slutte å abonnere her fordi du abonnerer på denne oppgaven gjennom navneområdet.", "subscribedTaskThroughParentNamespace": "Du kan ikke slutte å abonnere her fordi du abonnerer på denne oppgaven gjennom navneområdet.",
"subscribedTaskThroughParentProject": "You can't unsubscribe here because you are subscribed to this task through its project.", "subscribedTaskThroughParentProject": "Du kan ikke melde deg ut her fordi du abonnerer på denne oppgaven gjennom prosjektet.",
"subscribedNamespace": "Du abonnerer for øyeblikket på dette navneområdet og vil motta varsler for endringer.", "subscribedNamespace": "Du abonnerer for øyeblikket på dette navneområdet og vil motta varsler for endringer.",
"notSubscribedNamespace": "Du abonnerer ikke på dette navneområdet og vil ikke motta varsler for endringer.", "notSubscribedNamespace": "Du abonnerer ikke på dette navneområdet og vil ikke motta varsler for endringer.",
"subscribedProject": "You are currently subscribed to this project and will receive notifications for changes.", "subscribedProject": "Du abonnerer for øyeblikket på dette prosjektet og vil motta varsler for endringer.",
"notSubscribedProject": "You are not subscribed to this project and won't receive notifications for changes.", "notSubscribedProject": "Du abonnerer ikke på dette prosjektet og vil ikke motta varsler for endringer.",
"subscribedTask": "Du abonnerer for øyeblikket på denne oppgaven og vil motta varsler for endringer.", "subscribedTask": "Du abonnerer for øyeblikket på denne oppgaven og vil motta varsler for endringer.",
"notSubscribedTask": "Du abonnerer ikke på denne oppgaven og vil ikke motta varsler for endringer.", "notSubscribedTask": "Du abonnerer ikke på denne oppgaven og vil ikke motta varsler for endringer.",
"subscribe": "Abonnerer", "subscribe": "Abonnerer",
"unsubscribe": "Avslutt abonnement", "unsubscribe": "Avslutt abonnement",
"subscribeSuccessNamespace": "Du abonnerer nå på dette navneområdet", "subscribeSuccessNamespace": "Du abonnerer nå på dette navneområdet",
"unsubscribeSuccessNamespace": "Du blir nå avmeldt dette navneområdet", "unsubscribeSuccessNamespace": "Du blir nå avmeldt dette navneområdet",
"subscribeSuccessProject": "You are now subscribed to this project", "subscribeSuccessProject": "Du abonnerer nå på dette prosjektet",
"unsubscribeSuccessProject": "You are now unsubscribed to this project", "unsubscribeSuccessProject": "Du har nå avsluttet abonnementet for dette prosjektet",
"subscribeSuccessTask": "Du abonnerer nå på denne oppgaven", "subscribeSuccessTask": "Du abonnerer nå på denne oppgaven",
"unsubscribeSuccessTask": "Du har nå avsluttet abonnementet for denne oppgaven" "unsubscribeSuccessTask": "Du har nå avsluttet abonnementet for denne oppgaven"
}, },
@ -762,7 +762,7 @@
"new": "Ny oppgaveforbindelse", "new": "Ny oppgaveforbindelse",
"searchPlaceholder": "Skriv søk etter en ny oppgave å legge til som relatert…", "searchPlaceholder": "Skriv søk etter en ny oppgave å legge til som relatert…",
"createPlaceholder": "Legg til denne som ny relatert oppgave", "createPlaceholder": "Legg til denne som ny relatert oppgave",
"differentProject": "This task belongs to a different project.", "differentProject": "Denne oppgaven tilhører et annet prosjekt.",
"differentNamespace": "Denne oppgaven tilhører en annen navneområde.", "differentNamespace": "Denne oppgaven tilhører en annen navneområde.",
"noneYet": "Ingen arbeidsrelasjoner ennå.", "noneYet": "Ingen arbeidsrelasjoner ennå.",
"delete": "Slett relasjon", "delete": "Slett relasjon",
@ -812,10 +812,10 @@
"priority1": "For å angi en oppgaves prioritet, legg til et nummer 1-5, med en {prefix} som prefiks.", "priority1": "For å angi en oppgaves prioritet, legg til et nummer 1-5, med en {prefix} som prefiks.",
"priority2": "Jo høyere tallet er, desto høyere prioritet.", "priority2": "Jo høyere tallet er, desto høyere prioritet.",
"assignees": "For å direkte tilordne oppgaven til en bruker må du legge til brukernavnet deres med {prefix} som er prefikset på oppgaven.", "assignees": "For å direkte tilordne oppgaven til en bruker må du legge til brukernavnet deres med {prefix} som er prefikset på oppgaven.",
"project1": "To set a project for the task to appear in, enter its name prefixed with {prefix}.", "project1": "For å angi et prosjekt for oppgaven som skal vises i, angi dets navn med {prefix}.",
"project2": "This will return an error if the project does not exist.", "project2": "Dette vil returnere en feil dersom prosjektet ikke finnes.",
"project3": "To use spaces, simply add a \" or ' around the project name.", "project3": "For å bruke mellomrom, legg bare til en \" eller ' rundt navnet på prosjektet.",
"project4": "For example: {prefix}\"Project with spaces\".", "project4": "For eksempel: {prefix}\"Prosjekt med mellomrom\".",
"dateAndTime": "Dato og tid", "dateAndTime": "Dato og tid",
"date": "Hvilken som helst dato vil bli brukt som forfallsdato for den nye oppgaven. Du kan bruke datoer i hvilket som helst format:", "date": "Hvilken som helst dato vil bli brukt som forfallsdato for den nye oppgaven. Du kan bruke datoer i hvilket som helst format:",
"dateWeekday": "hver ukedag vil bruke neste dato med den datoen", "dateWeekday": "hver ukedag vil bruke neste dato med den datoen",
@ -848,19 +848,19 @@
"delete": { "delete": {
"header": "Slett gruppen", "header": "Slett gruppen",
"text1": "Er du sikker på at du vil slette denne gruppen og alle dets medlemmer?", "text1": "Er du sikker på at du vil slette denne gruppen og alle dets medlemmer?",
"text2": "All team members will lose access to projects and namespaces shared with this team. This CANNOT BE UNDONE!", "text2": "Alle teammedlemmer vil miste tilgang til prosjekter og navneområder som deles med dette teamet. KAN IKKE ANGRES!",
"success": "Gruppen ble slettet." "success": "Gruppen ble slettet."
}, },
"deleteUser": { "deleteUser": {
"header": "Fjerne en bruker fra gruppen", "header": "Fjerne en bruker fra gruppen",
"text1": "Er du sikker på at du vil fjerne bruker fra denne gruppen?", "text1": "Er du sikker på at du vil fjerne bruker fra denne gruppen?",
"text2": "They will lose access to all projects and namespaces this team has access to. This CANNOT BE UNDONE!", "text2": "De vil miste tilgang til alle prosjekter og namespaces dette teamet har tilgang til. Dette KAN IKKE ANGRES!",
"success": "Brukeren ble slettet fra gruppen." "success": "Brukeren ble slettet fra gruppen."
}, },
"leave": { "leave": {
"title": "Forlat gruppen", "title": "Forlat gruppen",
"text1": "Er du sikker på at du vil forlate denne gruppen?", "text1": "Er du sikker på at du vil forlate denne gruppen?",
"text2": "You will lose access to all projects and namespaces this team has access to. If you change your mind you'll need a team admin to add you again.", "text2": "Du vil miste tilgang til alle prosjekter og namespaces dette teamet har tilgang til. Hvis du ombestemmer deg, må du ha en lagadministrator for å legge deg til igjen.",
"success": "Du har forlatt gruppen." "success": "Du har forlatt gruppen."
} }
}, },
@ -892,22 +892,22 @@
"attachment": "Legg til et vedlegg til denne oppgaven", "attachment": "Legg til et vedlegg til denne oppgaven",
"related": "Endre relaterte oppgaver for denne oppgaven", "related": "Endre relaterte oppgaver for denne oppgaven",
"color": "Endre fargen på denne oppgaven", "color": "Endre fargen på denne oppgaven",
"move": "Move this task to another project", "move": "Flytt denne oppgaven til et annet prosjekt",
"reminder": "Behandle påminnelser om denne oppgaven", "reminder": "Behandle påminnelser om denne oppgaven",
"description": "Veksle redigering av oppgavebeskrivelsen" "description": "Veksle redigering av oppgavebeskrivelsen"
}, },
"project": { "project": {
"title": "Project Views", "title": "Prosjektvisning",
"switchToListView": "Switch to list view", "switchToListView": "Byttet til listevisning",
"switchToGanttView": "Switch to gantt view", "switchToGanttView": "Bytt til gantt-visning",
"switchToKanbanView": "Switch to kanban view", "switchToKanbanView": "Bytt til kanban visning",
"switchToTableView": "Switch to table view" "switchToTableView": "Bytt til tabellvisning"
}, },
"navigation": { "navigation": {
"title": "Navigasjon", "title": "Navigasjon",
"overview": "Naviger til oversikt", "overview": "Naviger til oversikt",
"upcoming": "Gå til kommende oppgaver", "upcoming": "Gå til kommende oppgaver",
"namespaces": "Navigate to namespaces & projects", "namespaces": "Gå til navneområder & prosjekter",
"labels": "Naviger til etiketter", "labels": "Naviger til etiketter",
"teams": "Naviger til gruppe" "teams": "Naviger til gruppe"
} }
@ -924,7 +924,7 @@
"unarchive": "Av-arkiver", "unarchive": "Av-arkiver",
"setBackground": "Bruk som bakgrunn", "setBackground": "Bruk som bakgrunn",
"share": "Del", "share": "Del",
"newProject": "New project" "newProject": "Nytt prosjekt"
}, },
"apiConfig": { "apiConfig": {
"url": "Vikunja URL", "url": "Vikunja URL",
@ -943,24 +943,24 @@
"notification": { "notification": {
"title": "Varsler", "title": "Varsler",
"none": "Du har ingen varsler på dette tidspunktet!", "none": "Du har ingen varsler på dette tidspunktet!",
"explainer": "Notifications will appear here when actions on namespaces, projects or tasks you subscribed to happen." "explainer": "Varsler vil vises her når handlinger på navneområder, prosjekter, lister eller oppgaver du abonnerer på."
}, },
"quickActions": { "quickActions": {
"commands": "Kommandoer", "commands": "Kommandoer",
"placeholder": "Skriv en kommando eller søk…", "placeholder": "Skriv en kommando eller søk…",
"hint": "You can use {project} to limit the search to a project. Combine {project} or {label} (labels) with a search query to search for a task with these labels or on that project. Use {assignee} to only search for teams.", "hint": "Du kan bruke {project} for å begrense søket til en liste. Kombiner {project} eller {label} (etiketter) med et søk for å søke etter en oppgave med disse etikettene eller på den listen. Bruk {assignee} for bare å søke etter lag.",
"tasks": "Oppgaver", "tasks": "Oppgaver",
"projects": "Projects", "projects": "Prosjekter",
"teams": "Grupper", "teams": "Grupper",
"newProject": "Enter the title of the new project…", "newProject": "Skriv tittelen på det nye prosjektet…",
"newTask": "Skriv tittelen på den nye oppgaven…", "newTask": "Skriv tittelen på den nye oppgaven…",
"newNamespace": "Skriv inn tittelen på det nye navneområdet…", "newNamespace": "Skriv inn tittelen på det nye navneområdet…",
"newTeam": "Skriv inn navnet på den nye gruppen…", "newTeam": "Skriv inn navnet på den nye gruppen…",
"createTask": "Create a task in the current project ({title})", "createTask": "Opprett en oppgave i det gjeldende prosjektet ({title})",
"createProject": "Create a project in the current namespace ({title})", "createProject": "Opprett et prosjekt i gjeldende navneområde ({title})",
"cmds": { "cmds": {
"newTask": "Ny oppgave", "newTask": "Ny oppgave",
"newProject": "New project", "newProject": "Nytt prosjekt",
"newNamespace": "Nytt navneområde", "newNamespace": "Nytt navneområde",
"newTeam": "Ny gruppe" "newTeam": "Ny gruppe"
} }
@ -992,15 +992,15 @@
"1018": "Innstillingen av brukerens avatartype er ugyldig.", "1018": "Innstillingen av brukerens avatartype er ugyldig.",
"2001": "ID kan ikke være tom eller 0.", "2001": "ID kan ikke være tom eller 0.",
"2002": "Noen av forespørselsdataene var ugyldig.", "2002": "Noen av forespørselsdataene var ugyldig.",
"3001": "The project does not exist.", "3001": "Prosjektet finnes ikke.",
"3004": "You need to have read permissions on that project to perform that action.", "3004": "Du må ha lesetilgang til prosjektet for å utføre den handlingen.",
"3005": "The project title cannot be empty.", "3005": "Tittelen kan ikke være tom.",
"3006": "The project share does not exist.", "3006": "Prosjektdeling finnes ikke.",
"3007": "A project with this identifier already exists.", "3007": "Et prosjekt med denne identifikatoren eksisterer allerede.",
"3008": "The project is archived and can therefore only be accessed read only. This is also true for all tasks associated with this project.", "3008": "Prosjektet er arkivert og kan derfor bare leses inn. Dette gjelder også for alle oppgaver som er tilknyttet dette prosjektet.",
"4001": "The project task text cannot be empty.", "4001": "Prosjektets oppgavetekst kan ikke være tom.",
"4002": "The project task does not exist.", "4002": "Prosjektoppgaven finnes ikke.",
"4003": "All bulk editing tasks must belong to the same project.", "4003": "Alle bulkredigering oppgaver må tilhøre samme prosjekt.",
"4004": "Trenger minst én oppgave når masseredigeringsoppgaver skal utføres.", "4004": "Trenger minst én oppgave når masseredigeringsoppgaver skal utføres.",
"4005": "Du har ikke rettigheter til å redigere denne siden.", "4005": "Du har ikke rettigheter til å redigere denne siden.",
"4006": "Du kan ikke sette en overordnet oppgave som oppgaven selv.", "4006": "Du kan ikke sette en overordnet oppgave som oppgaven selv.",
@ -1026,21 +1026,21 @@
"5012": "Navneområdet er arkivert og kan derfor kun leses på.", "5012": "Navneområdet er arkivert og kan derfor kun leses på.",
"6001": "Gruppe nanvet kan ikke være tomt.", "6001": "Gruppe nanvet kan ikke være tomt.",
"6002": "Gruppen finnes ikke.", "6002": "Gruppen finnes ikke.",
"6004": "The team already has access to that namespace or project.", "6004": "Teamet har allerede tilgang til det navneområdet eller prosjektet.",
"6005": "Brukeren er allerede medlem av gruppen.", "6005": "Brukeren er allerede medlem av gruppen.",
"6006": "Kan ikke slette siste gruppemedlem.", "6006": "Kan ikke slette siste gruppemedlem.",
"6007": "The team does not have access to the project to perform that action.", "6007": "Gruppen har ikke tilgang til prosjektet for å utføre den handlingen.",
"7002": "The user already has access to that project.", "7002": "Brukeren har allerede tilgang til det prosjektet.",
"7003": "You do not have access to that project.", "7003": "Du har ikke tilgang til det prosjektet.",
"8001": "Denne etiketten finnes allerede på den oppgaven.", "8001": "Denne etiketten finnes allerede på den oppgaven.",
"8002": "Etiketten finnes ikke.", "8002": "Etiketten finnes ikke.",
"8003": "Du har ikke tilgang til denne etiketten.", "8003": "Du har ikke tilgang til denne etiketten.",
"9001": "Linken er ugyldig.", "9001": "Linken er ugyldig.",
"10001": "Bøtten finnes ikke.", "10001": "Bøtten finnes ikke.",
"10002": "The bucket does not belong to that project.", "10002": "Denne bøtte tilhører ikke det prosjektet.",
"10003": "You cannot remove the last bucket on a project.", "10003": "Du kan ikke fjerne den siste bøtten på et prosjekt.",
"10004": "Du kan ikke legge til oppgaven i denne bøtte fordi den allerede overskrider grensen på oppgaver som den kan holde.", "10004": "Du kan ikke legge til oppgaven i denne bøtte fordi den allerede overskrider grensen på oppgaver som den kan holde.",
"10005": "There can be only one done bucket per project.", "10005": "Det kan bare finnes én ferdigstilt bøtte per prosjekt.",
"11001": "Det lagrede filteret finnes ikke.", "11001": "Det lagrede filteret finnes ikke.",
"11002": "Lagrede filtre er ikke tilgjengelige for lenke delinger.", "11002": "Lagrede filtre er ikke tilgjengelige for lenke delinger.",
"12001": "Abonnement enhetstypen er ugyldig.", "12001": "Abonnement enhetstypen er ugyldig.",

View File

@ -529,7 +529,7 @@
"code": "Kod", "code": "Kod",
"quote": "Cytat", "quote": "Cytat",
"unorderedList": "Lista nieuporządkowana", "unorderedList": "Lista nieuporządkowana",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Wyczyść blok", "cleanBlock": "Wyczyść blok",
"link": "Link", "link": "Link",
"image": "Obraz", "image": "Obraz",
@ -566,14 +566,14 @@
"canuse": "Możesz użyć kalkulacji dat do względnego filtrowania dat.", "canuse": "Możesz użyć kalkulacji dat do względnego filtrowania dat.",
"learnhow": "Sprawdź jak to działa", "learnhow": "Sprawdź jak to działa",
"title": "Kalkulacja daty", "title": "Kalkulacja daty",
"intro": "Kalkulacja daty pozwala względnie określić daty, które są przetwarzane przez Vikunję w locie, w czasie stosowania filtra.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Każde wyrażenie kalkulacji daty rozpoczyna się datą zakotwiczenia, którą może być {0} lub wyrażeniem daty zakończonym {1}. Po tej dacie zakotwiczenia opcjonalnie może następować jedno lub więcej wyrażeń matematycznych.", "expression": "Każde wyrażenie kalkulacji daty rozpoczyna się datą zakotwiczenia, którą może być {0} lub wyrażeniem daty zakończonym {1}. Po tej dacie zakotwiczenia opcjonalnie może następować jedno lub więcej wyrażeń matematycznych.",
"similar": "Te wyrażenia są podobne do tych dostarczonych przez {0} i {1}.", "similar": "Te wyrażenia są podobne do tych dostarczonych przez {0} i {1}.",
"add1Day": "Dodaj jeden dzień", "add1Day": "Dodaj jeden dzień",
"minus1Day": "Odejmij jeden dzień", "minus1Day": "Odejmij jeden dzień",
"roundDay": "Zaokrąglij w dół do najbliższego dnia", "roundDay": "Zaokrąglij w dół do najbliższego dnia",
"supportedUnits": "Obsługiwane jednostki czasu to:", "supportedUnits": "Supported time units",
"someExamples": "Kilka przykładów wyrażeń czasowych:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Sekundy", "seconds": "Sekundy",
"minutes": "Minuty", "minutes": "Minuty",

View File

@ -529,7 +529,7 @@
"code": "Código", "code": "Código",
"quote": "Citação", "quote": "Citação",
"unorderedList": "Lista não ordenada", "unorderedList": "Lista não ordenada",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Imagem", "image": "Imagem",
@ -566,14 +566,14 @@
"canuse": "Você pode usar matemática de data para filtrar datas relativas.", "canuse": "Você pode usar matemática de data para filtrar datas relativas.",
"learnhow": "Veja como funciona", "learnhow": "Veja como funciona",
"title": "Matemática de Data", "title": "Matemática de Data",
"intro": "A matemática de data permite que você especifique datas relativas que são resolvidas em tempo real pelo Vikunja ao aplicar o filtro.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Adicionar um dia", "add1Day": "Adicionar um dia",
"minus1Day": "Subtrair um dia", "minus1Day": "Subtrair um dia",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "As unidades de tempo suportadas são:", "supportedUnits": "Supported time units",
"someExamples": "Alguns exemplos de expressões temporais:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Segundos", "seconds": "Segundos",
"minutes": "Minutos", "minutes": "Minutos",

View File

@ -529,7 +529,7 @@
"code": "Código", "code": "Código",
"quote": "Citação", "quote": "Citação",
"unorderedList": "Lista Não Ordenada", "unorderedList": "Lista Não Ordenada",
"orderedList ": "Lista Ordenada", "orderedList": "Lista Ordenada",
"cleanBlock": "Limpar Formatação", "cleanBlock": "Limpar Formatação",
"link": "Link", "link": "Link",
"image": "Imagem", "image": "Imagem",
@ -566,14 +566,14 @@
"canuse": "Podes utilizar cálculo de data para filtrar por datas relativas.", "canuse": "Podes utilizar cálculo de data para filtrar por datas relativas.",
"learnhow": "Vê como funciona", "learnhow": "Vê como funciona",
"title": "Cálculo de Data", "title": "Cálculo de Data",
"intro": "O cálculo de data permite especificar datas relativas resolvidas em tempo real pelo Vikunja na aplicação do filtro.", "intro": "Especifica datas relativas que serão resolvidas em tempo real pela Vikunja ao aplicar o filtro.",
"expression": "Cada expressão de Cálculo de Data inicia com uma data âncora, que tanto pode ser {0}, como uma expressão de data terminada com {1}. Esta data âncora pode ser opcionalmente seguida de uma ou mais expressões matemáticas.", "expression": "Cada expressão de Cálculo de Data inicia com uma data âncora, que tanto pode ser {0}, como uma expressão de data terminada com {1}. Esta data âncora pode ser opcionalmente seguida de uma ou mais expressões matemáticas.",
"similar": "Essas expressões são semelhantes às fornecidas por {0} e {1}.", "similar": "Essas expressões são semelhantes às fornecidas por {0} e {1}.",
"add1Day": "Adicionar um dia", "add1Day": "Adicionar um dia",
"minus1Day": "Subtrair um dia", "minus1Day": "Subtrair um dia",
"roundDay": "Arredondar para baixo para o dia mais próximo", "roundDay": "Arredondar para baixo para o dia mais próximo",
"supportedUnits": "As unidades de tempo suportadas são:", "supportedUnits": "Unidades de tempo suportadas",
"someExamples": "Alguns exemplos de expressões de tempo:", "someExamples": "Exemplos de expressões de tempo",
"units": { "units": {
"seconds": "Segundos", "seconds": "Segundos",
"minutes": "Minutos", "minutes": "Minutos",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Код", "code": "Код",
"quote": "Цитата", "quote": "Цитата",
"unorderedList": "Маркированный список", "unorderedList": "Маркированный список",
"orderedList ": "Нумерованный список", "orderedList": "Нумерованный список",
"cleanBlock": "Очистить блок", "cleanBlock": "Очистить блок",
"link": "Ссылка", "link": "Ссылка",
"image": "Изображение", "image": "Изображение",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Как это работает", "learnhow": "Как это работает",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "Это похоже на выражения, которые используются в {0} и {1}.", "similar": "Это похоже на выражения, которые используются в {0} и {1}.",
"add1Day": "Добавить один день", "add1Day": "Добавить один день",
"minus1Day": "Вычесть один день", "minus1Day": "Вычесть один день",
"roundDay": "Округление вниз до начала дня", "roundDay": "Округление вниз до начала дня",
"supportedUnits": "Поддерживаемые единицы времени:", "supportedUnits": "Supported time units",
"someExamples": "Примеры выражений:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Секунды", "seconds": "Секунды",
"minutes": "Минуты", "minutes": "Минуты",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Trích dẫn", "quote": "Trích dẫn",
"unorderedList": "Gạch đầu dòng", "unorderedList": "Gạch đầu dòng",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Làm sạch Khối", "cleanBlock": "Làm sạch Khối",
"link": "Liên kết", "link": "Liên kết",
"image": "Ảnh", "image": "Ảnh",
@ -566,14 +566,14 @@
"canuse": "Bạn có thể sử dụng biểu thức tính ngày để lọc những ngày liên quan.", "canuse": "Bạn có thể sử dụng biểu thức tính ngày để lọc những ngày liên quan.",
"learnhow": "Xem cách hoạt động", "learnhow": "Xem cách hoạt động",
"title": "Tính Ngày", "title": "Tính Ngày",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Mỗi Biểu thức tính ngày bắt đầu bằng một ngày cố định, có thể là {0}, hoặc kết thúc bằng {1}. Ngày cố định này có thể được theo sau bởi một hoặc nhiều biểu thức toán học.", "expression": "Mỗi Biểu thức tính ngày bắt đầu bằng một ngày cố định, có thể là {0}, hoặc kết thúc bằng {1}. Ngày cố định này có thể được theo sau bởi một hoặc nhiều biểu thức toán học.",
"similar": "Những biểu thức này tương tự như những biểu thức được cung cấp bởi {0} và {1}.", "similar": "Những biểu thức này tương tự như những biểu thức được cung cấp bởi {0} và {1}.",
"add1Day": "Thêm một ngày", "add1Day": "Thêm một ngày",
"minus1Day": "Bớt đi một ngày", "minus1Day": "Bớt đi một ngày",
"roundDay": "Làm tròn đến ngày gần nhất", "roundDay": "Làm tròn đến ngày gần nhất",
"supportedUnits": "Các đơn vị thời gian hỗ trợ là:", "supportedUnits": "Supported time units",
"someExamples": "Một vài ví dụ về cách hiển thị thời gian:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Giây", "seconds": "Giây",
"minutes": "Phút", "minutes": "Phút",

View File

@ -529,7 +529,7 @@
"code": "代码", "code": "代码",
"quote": "引用", "quote": "引用",
"unorderedList": "无序列表", "unorderedList": "无序列表",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "清除格式", "cleanBlock": "清除格式",
"link": "链接", "link": "链接",
"image": "图片", "image": "图片",
@ -566,14 +566,14 @@
"canuse": "你可以使用 Date Math 来筛选相对日期。", "canuse": "你可以使用 Date Math 来筛选相对日期。",
"learnhow": "查看它如何工作", "learnhow": "查看它如何工作",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math 允许你在使用过滤器时由 Vikunja 动态解析相对日期。", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "每个 Date Math 表达式以锚点日期开头,可以是 {0},也可以是以 {1} 结尾的日期文本。 这个锚点日期后可以跟一个或多个数学表达式。", "expression": "每个 Date Math 表达式以锚点日期开头,可以是 {0},也可以是以 {1} 结尾的日期文本。 这个锚点日期后可以跟一个或多个数学表达式。",
"similar": "这些表达式类似于 {0} 和 {1} 提供的表达式。", "similar": "这些表达式类似于 {0} 和 {1} 提供的表达式。",
"add1Day": "加一天", "add1Day": "加一天",
"minus1Day": "减一天", "minus1Day": "减一天",
"roundDay": "往最近的那天舍入", "roundDay": "往最近的那天舍入",
"supportedUnits": "支持的时间单位是:", "supportedUnits": "Supported time units",
"someExamples": "时间表达式的一些例子:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "秒数。", "seconds": "秒数。",
"minutes": "分钟", "minutes": "分钟",

View File

@ -529,7 +529,7 @@
"code": "Code", "code": "Code",
"quote": "Quote", "quote": "Quote",
"unorderedList": "Unordered List", "unorderedList": "Unordered List",
"orderedList ": "Ordered List", "orderedList": "Ordered List",
"cleanBlock": "Clean Block", "cleanBlock": "Clean Block",
"link": "Link", "link": "Link",
"image": "Image", "image": "Image",
@ -566,14 +566,14 @@
"canuse": "You can use date math to filter for relative dates.", "canuse": "You can use date math to filter for relative dates.",
"learnhow": "Check out how it works", "learnhow": "Check out how it works",
"title": "Date Math", "title": "Date Math",
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.", "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.", "expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
"similar": "These expressions are similar to the ones provided by {0} and {1}.", "similar": "These expressions are similar to the ones provided by {0} and {1}.",
"add1Day": "Add one day", "add1Day": "Add one day",
"minus1Day": "Subtract one day", "minus1Day": "Subtract one day",
"roundDay": "Round down to the nearest day", "roundDay": "Round down to the nearest day",
"supportedUnits": "Supported time units are:", "supportedUnits": "Supported time units",
"someExamples": "Some examples of time expressions:", "someExamples": "Examples of time expressions",
"units": { "units": {
"seconds": "Seconds", "seconds": "Seconds",
"minutes": "Minutes", "minutes": "Minutes",

View File

@ -438,41 +438,50 @@ describe('Parse Task Text', () => {
now.setFullYear(2021, 5, 24) now.setFullYear(2021, 5, 24)
const cases = { const cases = {
'Lorem Ipsum 06/08/2021 ad': '2021-6-8', '06/08/2021': '2021-6-8',
'Lorem Ipsum 6/7/21 ad': '2021-6-7', '6/7/21': '2021-6-7',
'dolor sit amet 27/07/2021,': null, '27/07/2021,': null,
'dolor sit amet 2021/07/06,': '2021-7-6', '2021/07/06,': '2021-7-6',
'dolor sit amet 2021-07-06': '2021-7-6', '2021-07-06': '2021-7-6',
'dolor sit amet 27 jan': '2022-1-27', '27 jan': '2022-1-27',
'dolor sit amet 27/1': '2022-1-27', '27/1': '2022-1-27',
'dolor sit amet 27/01': '2022-1-27', '27/01': '2022-1-27',
'dolor sit amet 16/12': '2021-12-16', '16/12': '2021-12-16',
'dolor sit amet 01/27': '2022-1-27', '01/27': '2022-1-27',
'dolor sit amet 1/27': '2022-1-27', '1/27': '2022-1-27',
'dolor sit amet Jan 27': '2022-1-27', 'Jan 27': '2022-1-27',
'dolor sit amet jan 27': '2022-1-27', 'jan 27': '2022-1-27',
'dolor sit amet feb 21': '2022-2-21', 'feb 21': '2022-2-21',
'dolor sit amet mar 21': '2022-3-21', 'mar 21': '2022-3-21',
'dolor sit amet apr 21': '2022-4-21', 'apr 21': '2022-4-21',
'dolor sit amet may 21': '2022-5-21', 'may 21': '2022-5-21',
'dolor sit amet jun 21': '2022-6-21', 'jun 21': '2022-6-21',
'dolor sit amet jul 21': '2021-7-21', 'jul 21': '2021-7-21',
'dolor sit amet aug 21': '2021-8-21', 'aug 21': '2021-8-21',
'dolor sit amet sep 21': '2021-9-21', 'sep 21': '2021-9-21',
'dolor sit amet oct 21': '2021-10-21', 'oct 21': '2021-10-21',
'dolor sit amet nov 21': '2021-11-21', 'nov 21': '2021-11-21',
'dolor sit amet dec 21': '2021-12-21', 'dec 21': '2021-12-21',
} as Record<string, string | null> } as Record<string, string | null>
for (const c in cases) { for (const c in cases) {
it(`should parse '${c}' as '${cases[c]}'`, () => { it(`should parse '${c}' as '${cases[c]}' with the date at the end`, () => {
const {date} = getDateFromText(c, now) const {date} = getDateFromText(`Lorem Ipsum ${c}`, now)
if (date === null && cases[c] === null) { if (date === null && cases[c] === null) {
expect(date).toBeNull() expect(date).toBeNull()
return return
} }
expect(`${date?.getFullYear()}-${date.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c]) expect(`${date?.getFullYear()}-${date?.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c])
})
it(`should parse '${c}' as '${cases[c]}' with the date at the beginning`, () => {
const {date} = getDateFromText(`${c} Lorem Ipsum`, now)
if (date === null && cases[c] === null) {
expect(date).toBeNull()
return
}
expect(`${date?.getFullYear()}-${date?.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c])
}) })
} }
}) })

View File

@ -73,7 +73,11 @@
:search-results="foundUsers" :search-results="foundUsers"
label="username" label="username"
v-model="newMember" v-model="newMember"
/> >
<template #searchResult="{option: user}">
<User :avatar-size="24" :user="user" class="m-0"/>
</template>
</multiselect>
</div> </div>
<div class="control"> <div class="control">
<x-button @click="addUser" icon="plus"> <x-button @click="addUser" icon="plus">
@ -88,7 +92,9 @@
<table class="table has-actions is-striped is-hoverable is-fullwidth"> <table class="table has-actions is-striped is-hoverable is-fullwidth">
<tbody> <tbody>
<tr :key="m.id" v-for="m in team?.members"> <tr :key="m.id" v-for="m in team?.members">
<td>{{ getDisplayName(m) }}</td> <td>
<User :avatar-size="24" :user="m" class="m-0"/>
</td>
<td> <td>
<template v-if="m.id === userInfo.id"> <template v-if="m.id === userInfo.id">
<b class="is-success">You</b> <b class="is-success">You</b>
@ -185,6 +191,7 @@ import {useRoute, useRouter} from 'vue-router'
import Editor from '@/components/input/AsyncEditor' import Editor from '@/components/input/AsyncEditor'
import Multiselect from '@/components/input/multiselect.vue' import Multiselect from '@/components/input/multiselect.vue'
import User from '@/components/misc/user.vue'
import TeamService from '@/services/team' import TeamService from '@/services/team'
import TeamMemberService from '@/services/teamMember' import TeamMemberService from '@/services/teamMember'

View File

@ -11,17 +11,17 @@
{{ $t('user.auth.login') }} {{ $t('user.auth.login') }}
</x-button> </x-button>
</div> </div>
<form @submit.prevent="submit" id="form" v-if="!successMessage"> <form @submit.prevent="resetPassword" id="form" v-if="!successMessage">
<div class="field"> <div class="field">
<label class="label" for="password">{{ $t('user.auth.password') }}</label> <label class="label" for="password">{{ $t('user.auth.password') }}</label>
<Password @submit="submit" @update:modelValue="v => credentials.password = v"/> <Password @submit="resetPassword" @update:modelValue="v => credentials.password = v"/>
</div> </div>
<div class="field is-grouped"> <div class="field is-grouped">
<div class="control"> <div class="control">
<x-button <x-button
:loading="passwordResetService.loading" :loading="passwordResetService.loading"
@click="submit" @click="resetPassword"
> >
{{ $t('user.auth.resetPassword') }} {{ $t('user.auth.resetPassword') }}
</x-button> </x-button>
@ -47,7 +47,7 @@ const passwordResetService = reactive(new PasswordResetService())
const errorMsg = ref('') const errorMsg = ref('')
const successMessage = ref('') const successMessage = ref('')
async function submit() { async function resetPassword() {
errorMsg.value = '' errorMsg.value = ''
if(credentials.password === '') { if(credentials.password === '') {

View File

@ -11,7 +11,7 @@
{{ $t('user.auth.login') }} {{ $t('user.auth.login') }}
</x-button> </x-button>
</div> </div>
<form @submit.prevent="submit" v-if="!isSuccess"> <form @submit.prevent="requestPasswordReset" v-if="!isSuccess">
<div class="field"> <div class="field">
<label class="label" for="email">{{ $t('user.auth.email') }}</label> <label class="label" for="email">{{ $t('user.auth.email') }}</label>
<div class="control"> <div class="control">
@ -30,7 +30,7 @@
<div class="field is-grouped"> <div class="field is-grouped">
<div class="control"> <div class="control">
<x-button <x-button
@click="submit" type="submit"
:loading="passwordResetService.loading" :loading="passwordResetService.loading"
> >
{{ $t('user.auth.resetPasswordAction') }} {{ $t('user.auth.resetPasswordAction') }}
@ -45,19 +45,18 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {ref, reactive} from 'vue' import {ref, shallowReactive} from 'vue'
import PasswordResetModel from '@/models/passwordReset' import PasswordResetModel from '@/models/passwordReset'
import PasswordResetService from '@/services/passwordReset' import PasswordResetService from '@/services/passwordReset'
import Message from '@/components/misc/message.vue' import Message from '@/components/misc/message.vue'
// Not sure if this instance needs a shalloRef at all const passwordResetService = shallowReactive(new PasswordResetService())
const passwordResetService = reactive(new PasswordResetService())
const passwordReset = ref(new PasswordResetModel()) const passwordReset = ref(new PasswordResetModel())
const errorMsg = ref('') const errorMsg = ref('')
const isSuccess = ref(false) const isSuccess = ref(false)
async function submit() { async function requestPasswordReset() {
errorMsg.value = '' errorMsg.value = ''
try { try {
await passwordResetService.requestResetPassword(passwordReset.value) await passwordResetService.requestResetPassword(passwordReset.value)

View File

@ -60,6 +60,7 @@ export default defineConfig(({mode}) => {
// https://vitest.dev/config/ // https://vitest.dev/config/
test: { test: {
environment: 'happy-dom', environment: 'happy-dom',
'vitest.commandLine': 'pnpm test:unit',
}, },
css: { css: {
preprocessorOptions: { preprocessorOptions: {