Compare commits
333 Commits
v0.3.1-rc1
...
v0.4.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8e50a3e31 | ||
|
|
769053b76d | ||
|
|
1948c303f2 | ||
|
|
476b15ee9d | ||
|
|
9595e00ae1 | ||
|
|
fdc1f275c5 | ||
|
|
1276dddc37 | ||
|
|
ed62a48ddd | ||
|
|
327c379ff3 | ||
|
|
77472b978d | ||
|
|
e81c08f7f0 | ||
|
|
1e24b3d774 | ||
|
|
a4044eff30 | ||
|
|
31c690ebf8 | ||
|
|
b84f118b4d | ||
|
|
c33783ac81 | ||
|
|
725ba6ff72 | ||
|
|
bf9811bf11 | ||
|
|
e08c430422 | ||
|
|
c72000bfc0 | ||
|
|
a131e468c0 | ||
|
|
d4a16589af | ||
|
|
5e69a453a2 | ||
|
|
23d3425ca4 | ||
|
|
653a1ccd58 | ||
|
|
09105d6e3d | ||
|
|
4d8acecc57 | ||
|
|
8d54028b31 | ||
|
|
415acfce57 | ||
|
|
f25401e9fd | ||
|
|
bcf26cee53 | ||
|
|
161bfb0e91 | ||
|
|
c1e52d7837 | ||
|
|
9cb096046a | ||
|
|
3c32f0533a | ||
|
|
3bf197bb32 | ||
|
|
4dc5c7da18 | ||
|
|
9ad070f40a | ||
|
|
a806714f56 | ||
|
|
bd630e31bc | ||
|
|
6313f24dc9 | ||
|
|
5a5cd23eb2 | ||
|
|
7fda7c1a4a | ||
|
|
ab637c7c13 | ||
|
|
7f497d59bc | ||
|
|
d794d61337 | ||
|
|
9f03854b3c | ||
|
|
17996822d3 | ||
|
|
ee438ad7b2 | ||
|
|
6bf4efbfe6 | ||
|
|
3163563fce | ||
|
|
04cb5f656d | ||
|
|
3863c7497b | ||
|
|
8d4dbd4d82 | ||
|
|
8f4fe1b05b | ||
|
|
7794fa065c | ||
|
|
af92da9a7c | ||
|
|
ba378ea00b | ||
|
|
be8a3479ac | ||
|
|
2002841c61 | ||
|
|
fde5096856 | ||
|
|
08f9874745 | ||
|
|
712ab9e0bc | ||
|
|
e07fc0a2c7 | ||
|
|
61fb68f4cf | ||
|
|
f3296dd443 | ||
|
|
8a8cffc542 | ||
|
|
820ad7c523 | ||
|
|
9f66ce618e | ||
|
|
2318425160 | ||
|
|
a36dfcc144 | ||
|
|
213e3083a1 | ||
|
|
683354da9d | ||
|
|
e208fd8222 | ||
|
|
4fc65c8302 | ||
|
|
bcb54faeaf | ||
|
|
f5753f3fde | ||
|
|
5ff8618c10 | ||
|
|
bee918e810 | ||
|
|
37301ae92b | ||
|
|
bd304d5f27 | ||
|
|
827c69bd7b | ||
|
|
812a225334 | ||
|
|
90c4e7818a | ||
|
|
1299df539e | ||
|
|
20b25e0108 | ||
|
|
e959afb2de | ||
|
|
cb25643741 | ||
|
|
bbfb9e713a | ||
|
|
e71a38fe96 | ||
|
|
120e4e13a6 | ||
|
|
04aa9df45b | ||
|
|
8d60a4379d | ||
|
|
4e96dec474 | ||
|
|
9727356d3b | ||
|
|
c0c0cb8545 | ||
|
|
af646c1999 | ||
|
|
38bb4c7a3a | ||
|
|
573fa2c457 | ||
|
|
d7e7fd58b0 | ||
|
|
f5a234fd26 | ||
|
|
f75c9e0d4a | ||
|
|
5eca92a0ea | ||
|
|
384b7a41a9 | ||
|
|
47e27a7a89 | ||
|
|
ac19621d5b | ||
|
|
cf2e84873c | ||
|
|
c523474980 | ||
|
|
754486673a | ||
|
|
a7110082e7 | ||
|
|
db619e4cda | ||
|
|
34d05f2ac0 | ||
|
|
fdb1dbf397 | ||
|
|
5c2925aeed | ||
|
|
dc5fbbf7eb | ||
|
|
e46844988e | ||
|
|
9d98107f3a | ||
|
|
681176c684 | ||
|
|
5d4757ddf1 | ||
|
|
9731e6811a | ||
|
|
23c86a4fcc | ||
|
|
43ea0136c8 | ||
|
|
2cc8eb1313 | ||
|
|
bfe71900d3 | ||
|
|
c6a6b41193 | ||
|
|
b0f7bef279 | ||
|
|
014f76b2fb | ||
|
|
546928fb79 | ||
|
|
b4ead5a2eb | ||
|
|
124918b744 | ||
|
|
9308ad125a | ||
|
|
7dc43829ab | ||
|
|
63ac985f15 | ||
|
|
93725e481d | ||
|
|
8e976cb2a6 | ||
|
|
58a89374e2 | ||
|
|
313bbca462 | ||
|
|
f0c22370e0 | ||
|
|
00554c218b | ||
|
|
b0222a2d11 | ||
|
|
03ba692f69 | ||
|
|
7147368ce1 | ||
|
|
c938fdd806 | ||
|
|
49d7f8c522 | ||
|
|
6357080f89 | ||
|
|
147c317a46 | ||
|
|
dd1a03f243 | ||
|
|
dfa409bd68 | ||
|
|
c2c0bae3d6 | ||
|
|
56412498f1 | ||
|
|
c720f964bb | ||
|
|
6ac3066dc8 | ||
|
|
63ad39dd2d | ||
|
|
7955a19149 | ||
|
|
a83b50bb97 | ||
|
|
0f50f8d1d9 | ||
|
|
5b95beb153 | ||
|
|
7ad8080f82 | ||
|
|
1972edc38d | ||
|
|
06ea03689b | ||
|
|
22190b90cf | ||
|
|
5bc65a6eb3 | ||
|
|
0b5ded2860 | ||
|
|
48c622d19e | ||
|
|
581fa011e3 | ||
|
|
c816b15bfa | ||
|
|
2bcd5d35c0 | ||
|
|
8229fbacea | ||
|
|
7b230d567e | ||
|
|
344ed6d928 | ||
|
|
94397dedb1 | ||
|
|
04b0807a12 | ||
|
|
757b041f73 | ||
|
|
0137b882c5 | ||
|
|
ee5a54a575 | ||
|
|
0c711b2b0b | ||
|
|
b08d416c51 | ||
|
|
bfda3e7623 | ||
|
|
f152f32952 | ||
|
|
45c7241daf | ||
|
|
cfc32c0b74 | ||
|
|
e4863b6d8d | ||
|
|
8f5d0c3f76 | ||
|
|
38feba1740 | ||
|
|
9973eef488 | ||
|
|
77b906e884 | ||
|
|
962724f0dc | ||
|
|
55440c47cf | ||
|
|
002ffc4b99 | ||
|
|
97952d775c | ||
|
|
a5130d8032 | ||
|
|
5b3f1f847d | ||
|
|
5be62756ed | ||
|
|
be2d0010f7 | ||
|
|
ab5d2c79ec | ||
|
|
1de3dc2f6c | ||
|
|
3413e7694a | ||
|
|
57f58e5e68 | ||
|
|
1a4b2e5f01 | ||
|
|
20490dbd39 | ||
|
|
f3088b5b48 | ||
|
|
40536a0097 | ||
|
|
6c93e99b9b | ||
|
|
00ae0e6963 | ||
|
|
25edef4fb9 | ||
|
|
9f58b1ea07 | ||
|
|
4a9ef92e5d | ||
|
|
2cc961dcdf | ||
|
|
fe383a3485 | ||
|
|
264ae7bac6 | ||
|
|
f6de432bcc | ||
|
|
1ed28ff563 | ||
|
|
23492745f7 | ||
|
|
a56c82928c | ||
|
|
78f5d24a5d | ||
|
|
aeac40e37e | ||
|
|
6b1015e99f | ||
|
|
6d8b856728 | ||
|
|
8c77f1bc8a | ||
|
|
7714b1e83b | ||
|
|
8ad1496eff | ||
|
|
a5683add3a | ||
|
|
3a155a3004 | ||
|
|
67a482cc6f | ||
|
|
fd154fafb3 | ||
|
|
51949fa179 | ||
|
|
614ddf1023 | ||
|
|
401a7db3e9 | ||
|
|
d52c727b92 | ||
|
|
7ff5fb64c3 | ||
|
|
d28a408994 | ||
|
|
541b8cc9e7 | ||
|
|
11f78403dd | ||
|
|
3db63d1761 | ||
|
|
24b00f0a85 | ||
|
|
f711a0214b | ||
|
|
7facc2593e | ||
|
|
bd32f51451 | ||
|
|
3b6c04dad9 | ||
|
|
99f845d746 | ||
|
|
22f39d28e4 | ||
|
|
aa0d8b6026 | ||
|
|
dd008f0895 | ||
|
|
c4dfb75b3a | ||
|
|
b633d82c5e | ||
|
|
08d9d51bea | ||
|
|
e21c12f23d | ||
|
|
101f20095d | ||
|
|
701b5c5a5b | ||
|
|
e92c99fe22 | ||
|
|
893734dff9 | ||
|
|
43babf82b0 | ||
|
|
bd5ce84c65 | ||
|
|
37851bad6f | ||
|
|
13c7be9dc2 | ||
|
|
2433703fa5 | ||
|
|
e320b52b48 | ||
|
|
73b91246e9 | ||
|
|
822cc1aaa5 | ||
|
|
83e62a9bc9 | ||
|
|
4057be32e8 | ||
|
|
764a28a1dd | ||
|
|
5565589ebf | ||
|
|
cd5d23bacc | ||
|
|
b7bc38376f | ||
|
|
3e0de1bfba | ||
|
|
8ddc21e403 | ||
|
|
9cf8ab1efb | ||
|
|
6f254510c1 | ||
|
|
2cd5606d40 | ||
|
|
4f0c05f536 | ||
|
|
24f4f84eb6 | ||
|
|
e94986744d | ||
|
|
7b15c04976 | ||
|
|
b9ff4ef305 | ||
|
|
5d0173f755 | ||
|
|
405f23f660 | ||
|
|
6cefa20ec7 | ||
|
|
20a2f53745 | ||
|
|
bd7fdf7934 | ||
|
|
8042d50d4c | ||
|
|
2999d96a22 | ||
|
|
9920546ec8 | ||
|
|
eeceda539f | ||
|
|
ee262291ce | ||
|
|
858952a56f | ||
|
|
ad9ce6cd26 | ||
|
|
d362e0ad0e | ||
|
|
31965bf40c | ||
|
|
691bbda056 | ||
|
|
9b82779513 | ||
|
|
8cb92934b1 | ||
|
|
1b471b0fe8 | ||
|
|
537e9b35da | ||
|
|
ad5967859e | ||
|
|
afa2d247aa | ||
|
|
76e3cc5061 | ||
|
|
8f5ded6a28 | ||
|
|
0e092d3495 | ||
|
|
f32721d1e6 | ||
|
|
19a3466b18 | ||
|
|
5d3f952d92 | ||
|
|
d1b8e3cc5f | ||
|
|
efb7da6ca5 | ||
|
|
cc737cf250 | ||
|
|
da373bafe0 | ||
|
|
9e4d48ae36 | ||
|
|
4d84d77d27 | ||
|
|
0a82689284 | ||
|
|
a3e14ec732 | ||
|
|
4a56995326 | ||
|
|
eb262a13e4 | ||
|
|
21d84343ec | ||
|
|
431dfe3b15 | ||
|
|
9bb474638d | ||
|
|
220adf708f | ||
|
|
f616f38e67 | ||
|
|
8e51fdbb88 | ||
|
|
d5bec8d19e | ||
|
|
742c02cbbb | ||
|
|
27aa2adf0f | ||
|
|
79550fc843 | ||
|
|
ac982a72a4 | ||
|
|
de0aeaa084 | ||
|
|
e6f4929cea | ||
|
|
f8fbcee618 | ||
|
|
7ffe11e8cd | ||
|
|
99fffe750d | ||
|
|
ae4857b75e | ||
|
|
27bab0ec4d | ||
|
|
8ca3e5d32e | ||
|
|
6227583917 | ||
|
|
5d10f834c5 |
50
.drone.yml
50
.drone.yml
@@ -5,7 +5,7 @@ clone:
|
||||
|
||||
pipeline:
|
||||
check-app-compatbility:
|
||||
image: nextcloudci/php5.6:php5.6-3
|
||||
image: nextcloudci/php7.0:php7.0-17
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=master
|
||||
@@ -22,17 +22,34 @@ pipeline:
|
||||
when:
|
||||
matrix:
|
||||
TESTS: check-app-compatbility
|
||||
check-app-compatbility-13:
|
||||
image: nextcloudci/php7.0:php7.0-17
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=stable13
|
||||
- DB=sqlite
|
||||
commands:
|
||||
# Pre-setup steps
|
||||
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
|
||||
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
|
||||
- cd ../server
|
||||
# Code checker
|
||||
- ./occ app:check-code $APP_NAME -c strong-comparison
|
||||
- ./occ app:check-code $APP_NAME -c deprecation
|
||||
- cd apps/$APP_NAME/
|
||||
when:
|
||||
matrix:
|
||||
TESTS: check-app-compatbility-13
|
||||
signed-off-check:
|
||||
image: nextcloudci/php7.0:php7.0-2
|
||||
image: nextcloudci/php7.0:php7.0-17
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=master
|
||||
- DB=sqlite
|
||||
commands:
|
||||
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
|
||||
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
|
||||
- cd ../server
|
||||
- php ./build/signed-off-checker.php
|
||||
- wget https://raw.githubusercontent.com/nextcloud/server/master/build/signed-off-checker.php
|
||||
- php ./signed-off-checker.php
|
||||
secrets: [ github_token ]
|
||||
when:
|
||||
matrix:
|
||||
TESTS: signed-off-check
|
||||
@@ -40,7 +57,7 @@ pipeline:
|
||||
image: nextcloudci/php5.6:php5.6-8
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=master
|
||||
- CORE_BRANCH=stable13
|
||||
- DB=sqlite
|
||||
commands:
|
||||
- composer install
|
||||
@@ -88,7 +105,7 @@ pipeline:
|
||||
image: nextcloudci/php5.6:php5.6-8
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=master
|
||||
- CORE_BRANCH=stable13
|
||||
- DB=sqlite
|
||||
commands:
|
||||
- apt update && apt-get -y install php5-xdebug
|
||||
@@ -99,14 +116,8 @@ pipeline:
|
||||
- cd ../server/
|
||||
- ./occ app:enable $APP_NAME
|
||||
- cd apps/$APP_NAME
|
||||
|
||||
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
|
||||
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
|
||||
|
||||
# Create coverage report
|
||||
- wget https://codecov.io/bash -O codecov.sh
|
||||
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t f6375299-4832-487e-b831-091772ab0384; fi"
|
||||
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t f6375299-4832-487e-b831-091772ab0384; fi"
|
||||
when:
|
||||
matrix:
|
||||
TESTS: php5.6
|
||||
@@ -166,7 +177,7 @@ pipeline:
|
||||
matrix:
|
||||
TESTS: php7.2
|
||||
integration:
|
||||
image: nextcloudci/integration-php7.0:integration-php7.0-3
|
||||
image: nextcloudci/integration-php7.0:integration-php7.0-6
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=master
|
||||
@@ -193,16 +204,15 @@ pipeline:
|
||||
jsbuild:
|
||||
image: mhart/alpine-node:6.8.0
|
||||
commands:
|
||||
- apk add --no-cache git
|
||||
- cd js
|
||||
- npm install --deps
|
||||
- ./node_modules/.bin/bower --allow-root install
|
||||
- apk add --no-cache make
|
||||
- make build-js
|
||||
when:
|
||||
matrix:
|
||||
TESTS: jsbuild
|
||||
matrix:
|
||||
include:
|
||||
- TESTS: check-app-compatbility
|
||||
- TESTS: check-app-compatbility-13
|
||||
- TESTS: signed-off-check
|
||||
- TESTS: syntax-php5.6
|
||||
- TESTS: syntax-php7.0
|
||||
@@ -214,7 +224,7 @@ matrix:
|
||||
- TESTS: php7.2
|
||||
- TESTS: eslint
|
||||
- TESTS: jsbuild
|
||||
- TESTS: integration
|
||||
#- TESTS: integration
|
||||
|
||||
branches: [ master, stable* ]
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/js/tests/*
|
||||
/js/vendor/*
|
||||
/js/legacy/*
|
||||
/js/node_modules/*
|
||||
/js/public/*
|
||||
/karma.conf.js
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
root: true
|
||||
|
||||
|
||||
extends:
|
||||
- eslint:recommended
|
||||
|
||||
@@ -9,6 +8,7 @@ env:
|
||||
amd: true
|
||||
|
||||
globals:
|
||||
global: false
|
||||
app: false
|
||||
angular: false
|
||||
$: false
|
||||
@@ -21,6 +21,10 @@ globals:
|
||||
Clipboard: false
|
||||
oc_defaults: false
|
||||
|
||||
parserOptions:
|
||||
ecmaVersion: 6
|
||||
sourceType: "module"
|
||||
|
||||
rules:
|
||||
curly: error
|
||||
eqeqeq: ["error", "smart"]
|
||||
@@ -29,6 +33,7 @@ rules:
|
||||
no-fallthrough: error
|
||||
no-mixed-spaces-and-tabs: error
|
||||
no-unused-vars: warn
|
||||
no-useless-escape: warn
|
||||
no-use-before-define: error
|
||||
semi: ["error", "always"]
|
||||
indent:
|
||||
|
||||
@@ -1,79 +1,97 @@
|
||||
### Steps to reproduce
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### Expected behaviour
|
||||
Tell us what should happen
|
||||
|
||||
### Actual behaviour
|
||||
Tell us what happens instead
|
||||
|
||||
### Server configuration
|
||||
<!--
|
||||
You can use the Issue Template application to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
|
||||
-->
|
||||
|
||||
**Operating system**:
|
||||
|
||||
**Web server:**
|
||||
|
||||
**Database:**
|
||||
|
||||
**PHP version:**
|
||||
|
||||
**Nextcloud version:** (see Nextcloud admin page)
|
||||
|
||||
**Where did you install Nextcloud from:**
|
||||
|
||||
**Signing status:**
|
||||
|
||||
```
|
||||
Login as admin user into your Nextcloud and access
|
||||
http://example.com/index.php/settings/integrity/failed
|
||||
paste the results here.
|
||||
```
|
||||
|
||||
**List of activated apps:**
|
||||
|
||||
```
|
||||
If you have access to your command line run e.g.:
|
||||
sudo -u www-data php occ app:list
|
||||
from within your Nextcloud installation folder
|
||||
```
|
||||
|
||||
**Nextcloud configuration:**
|
||||
|
||||
```
|
||||
If you have access to your command line run e.g.:
|
||||
sudo -u www-data php occ config:list system
|
||||
from within your Nextcloud installation folder
|
||||
|
||||
or
|
||||
|
||||
Insert your config.php content here
|
||||
Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …)
|
||||
```
|
||||
|
||||
**Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/...
|
||||
|
||||
### Client configuration
|
||||
**Browser:**
|
||||
|
||||
**Operating system:**
|
||||
|
||||
### Logs
|
||||
|
||||
#### Nextcloud log (data/nextcloud.log)
|
||||
```
|
||||
Insert your Nextcloud log here
|
||||
```
|
||||
|
||||
#### Browser log
|
||||
```
|
||||
Insert your browser log here, this could for example include:
|
||||
|
||||
a) The javascript console log
|
||||
b) The network log
|
||||
c) ...
|
||||
```
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Client details:**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
- Device: [e.g. iPhone6, desktop]
|
||||
|
||||
<details>
|
||||
<summary>Server details</summary>
|
||||
<!--
|
||||
You can use the Issue Template application to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
|
||||
-->
|
||||
|
||||
**Operating system**:
|
||||
|
||||
**Web server:**
|
||||
|
||||
**Database:**
|
||||
|
||||
**PHP version:**
|
||||
|
||||
**Nextcloud version:** (see Nextcloud admin page)
|
||||
|
||||
**Where did you install Nextcloud from:**
|
||||
|
||||
**Signing status:**
|
||||
|
||||
```
|
||||
Login as admin user into your Nextcloud and access
|
||||
http://example.com/index.php/settings/integrity/failed
|
||||
paste the results here.
|
||||
```
|
||||
|
||||
**List of activated apps:**
|
||||
|
||||
```
|
||||
If you have access to your command line run e.g.:
|
||||
sudo -u www-data php occ app:list
|
||||
from within your Nextcloud installation folder
|
||||
```
|
||||
|
||||
**Nextcloud configuration:**
|
||||
|
||||
```
|
||||
If you have access to your command line run e.g.:
|
||||
sudo -u www-data php occ config:list system
|
||||
from within your Nextcloud installation folder
|
||||
|
||||
or
|
||||
|
||||
Insert your config.php content here
|
||||
Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …)
|
||||
```
|
||||
|
||||
**Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/...
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Logs</summary>
|
||||
|
||||
#### Nextcloud log (data/nextcloud.log)
|
||||
```
|
||||
Insert your Nextcloud log here
|
||||
```
|
||||
|
||||
#### Browser log
|
||||
```
|
||||
Insert your browser log here, this could for example include:
|
||||
|
||||
a) The javascript console log
|
||||
b) The network log
|
||||
c) ...
|
||||
```
|
||||
|
||||
</details>
|
||||
17
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
17
.github/pull_request_template.md
vendored
Normal file
17
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
* Fixes issue: #
|
||||
* Target version: master
|
||||
|
||||
### Summary
|
||||
|
||||
|
||||
### TODO
|
||||
|
||||
- [ ] ...
|
||||
|
||||
### Checklist
|
||||
|
||||
- [ ] Code is properly formatted
|
||||
- [ ] Sign-off message is added to all commits
|
||||
- [ ] Tests (unit, integration, api and/or acceptance) are included
|
||||
- [ ] Documentation (manuals or wiki) has been updated or is not required
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,9 +1,10 @@
|
||||
js/node_modules/*
|
||||
js/vendor/
|
||||
js/public/
|
||||
js/package-lock.json
|
||||
js/build/
|
||||
build/
|
||||
css/style.css
|
||||
css/vendor.css
|
||||
tests/integration/vendor/
|
||||
tests/integration/composer.lock
|
||||
vendor/
|
||||
|
||||
16
.travis.yml
16
.travis.yml
@@ -1,35 +1,24 @@
|
||||
language: php
|
||||
dist: trusty
|
||||
sudo: required
|
||||
services:
|
||||
- mysql
|
||||
php:
|
||||
- 5.6
|
||||
- 7.0
|
||||
- 7.1
|
||||
- 7.2
|
||||
env:
|
||||
- CORE_BRANCH=master DB=mysql
|
||||
- CORE_BRANCH=stable13 DB=mysql
|
||||
- CORE_BRANCH=stable12 DB=mysql
|
||||
|
||||
matrix:
|
||||
exclude:
|
||||
- php: 7.2
|
||||
env: CORE_BRANCH=stable12 DB=mysql
|
||||
|
||||
before_install:
|
||||
- wget https://phar.phpunit.de/phpunit-5.7.phar
|
||||
- chmod +x phpunit-5.7.phar
|
||||
- mkdir bin
|
||||
- sudo mv phpunit-5.7.phar bin/phpunit
|
||||
- mv phpunit-5.7.phar bin/phpunit
|
||||
- export PATH="$PWD/bin:$PATH"
|
||||
- phpunit --version
|
||||
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
|
||||
- bash ./before_install.sh deck $CORE_BRANCH $DB
|
||||
- cd ../server
|
||||
- ./occ app:enable deck
|
||||
- php -S localhost:8080 &
|
||||
|
||||
before_script:
|
||||
- cd apps/deck
|
||||
@@ -37,6 +26,9 @@ before_script:
|
||||
script:
|
||||
- make test-unit
|
||||
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
after_failure:
|
||||
- cat ../../data/nextcloud.log
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ host = https://www.transifex.com
|
||||
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
|
||||
|
||||
[nextcloud.deck]
|
||||
file_filter = <lang>/deck.po
|
||||
source_file = templates/deck.pot
|
||||
file_filter = translationfiles/<lang>/deck.po
|
||||
source_file = translationfiles/templates/deck.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,6 +1,21 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 0.4.0 - 2018-07-11
|
||||
|
||||
### Added
|
||||
|
||||
- Attach files to cards
|
||||
- Embed attachments into the card description
|
||||
- Color picker to use any color value for board and labels
|
||||
- Support for checkboxes inside the description
|
||||
- occ command to export user data as JSON
|
||||
|
||||
### Fixed
|
||||
|
||||
- Improve frontend data management
|
||||
- Fix bug the user list being empty on some occasions
|
||||
|
||||
## 0.3.0 - 2018-01-12
|
||||
|
||||
### Added
|
||||
|
||||
15
Makefile
15
Makefile
@@ -12,26 +12,27 @@ sign_dir=$(build_dir)/sign
|
||||
cert_dir=$(HOME)/.nextcloud/certificates
|
||||
|
||||
|
||||
default: build
|
||||
default: package
|
||||
|
||||
clean-build:
|
||||
rm -rf $(build_dir)
|
||||
|
||||
clean-dist:
|
||||
rm -rf js/node_modules
|
||||
rm -rf js/vendor
|
||||
|
||||
install-deps:
|
||||
cd js && npm install --deps
|
||||
cd js && ./node_modules/.bin/bower install
|
||||
cd js && npm install
|
||||
|
||||
build: build-js
|
||||
|
||||
build-js: install-deps
|
||||
cd js && ./node_modules/.bin/grunt build
|
||||
cd js && npm run build
|
||||
|
||||
build-js-dev: install-deps
|
||||
cd js && npm run dev
|
||||
|
||||
watch:
|
||||
cd js && ./node_modules/.bin/grunt watch
|
||||
cd js && npm run watch
|
||||
|
||||
# appstore: clean install-deps
|
||||
appstore: clean-build build
|
||||
@@ -94,3 +95,5 @@ test-integration:
|
||||
test-js: install-deps
|
||||
cd js && run test
|
||||
|
||||
package:
|
||||
krankerl package
|
||||
|
||||
15
README.md
15
README.md
@@ -1,6 +1,6 @@
|
||||
# Deck
|
||||
|
||||
[](https://travis-ci.org/nextcloud/deck) [](https://codecov.io/github/nextcloud/deck) [](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [](https://www.versioneye.com/user/projects/58ad558f4ca76f004ed475b3) [](https://webchat.freenode.net/?channels=nextcloud-deck)
|
||||
[](https://travis-ci.org/nextcloud/deck) [](https://codecov.io/github/nextcloud/deck) [](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&utm_medium=referral&utm_content=nextcloud/deck&utm_campaign=Badge_Grade) [](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [](https://www.versioneye.com/user/projects/5af6c4090fb24f0e3a423c40) [](https://webchat.freenode.net/?channels=nextcloud-deck)
|
||||
|
||||
|
||||
Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.
|
||||
@@ -14,17 +14,9 @@ Deck is a kanban style organization tool aimed at personal planning and project
|
||||
|
||||

|
||||
|
||||
### Planned features
|
||||
|
||||
- :file_folder: Attach files directly from your Nextcloud
|
||||
- :earth_africa: Share boards with the public
|
||||
- :calendar: Integration with Nextcloud calendar and other apps
|
||||
- :speech_balloon: Comments integration
|
||||
- :exclamation: Checkout the project milestones for more ...
|
||||
|
||||
## Installation/Update
|
||||
|
||||
This app is supposed to work on Nextcloud version 11 or later.
|
||||
This app is supposed to work on Nextcloud version 12 or later.
|
||||
|
||||
### Install latest release
|
||||
|
||||
@@ -55,8 +47,7 @@ Nothing to prepare, just dig into the code.
|
||||
|
||||
### JavaScript
|
||||
|
||||
When `'debug'=>true` is set in your config.php files will get loaded automatically. Otherwise you need to ensure that `public/app.js` is generated by running `make` or `make watch` to regenerate it on every change.
|
||||
Make sure you have installed the dependencies with ```make install-deps```.
|
||||
Deck requires running a `make build-js` to install npm dependencies and build the JavaScript code using webpack. While developing you can also use `make watch` to rebuild everytime the code changes.
|
||||
|
||||
### Running tests
|
||||
You can use the provided Makefile to run all tests by using:
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
theme: jekyll-theme-cayman
|
||||
site: https://deck-app.com
|
||||
@@ -198,12 +198,6 @@
|
||||
<autoincrement>1</autoincrement>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>title</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>100</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>card_id</name>
|
||||
<type>integer</type>
|
||||
@@ -218,12 +212,12 @@
|
||||
</field>
|
||||
<field>
|
||||
<name>data</name>
|
||||
<type>clob</type>
|
||||
<type>text</type>
|
||||
</field>
|
||||
<field>
|
||||
<name>last_modified</name>
|
||||
<type>integer</type>
|
||||
<default></default>
|
||||
<default/>
|
||||
<length>8</length>
|
||||
<notnull>false</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
@@ -231,7 +225,21 @@
|
||||
<field>
|
||||
<name>created_at</name>
|
||||
<type>integer</type>
|
||||
<default></default>
|
||||
<default/>
|
||||
<length>8</length>
|
||||
<notnull>false</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
</field>
|
||||
<field>
|
||||
<name>created_by</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>64</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>deleted_at</name>
|
||||
<type>integer</type>
|
||||
<default>0</default>
|
||||
<length>8</length>
|
||||
<notnull>false</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
|
||||
@@ -14,18 +14,19 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>0.4.0-alpha1</version>
|
||||
<version>0.5.0-dev1</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<namespace>Deck</namespace>
|
||||
<category>organization</category>
|
||||
<category>office</category>
|
||||
<website>https://github.com/nextcloud/deck</website>
|
||||
<bugs>https://github.com/nextcloud/deck/issues</bugs>
|
||||
<repository type="git">https://github.com/nextcloud/deck.git</repository>
|
||||
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.png</screenshot>
|
||||
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Details.png</screenshot>
|
||||
<dependencies>
|
||||
<nextcloud min-version="12" max-version="14" />
|
||||
<nextcloud min-version="13" max-version="14" />
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\Deck\Cron\DeleteCron</job>
|
||||
@@ -36,4 +37,7 @@
|
||||
<step>OCA\Deck\Migration\UnknownUsers</step>
|
||||
</post-migration>
|
||||
</repair-steps>
|
||||
<commands>
|
||||
<command>OCA\Deck\Command\UserExport</command>
|
||||
</commands>
|
||||
</info>
|
||||
|
||||
@@ -59,6 +59,16 @@ return [
|
||||
['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'],
|
||||
['name' => 'card#unassignUser', 'url' => '/cards/{cardId}/assign/{userId}', 'verb' => 'DELETE'],
|
||||
|
||||
['name' => 'attachment#getAll', 'url' => '/cards/{cardId}/attachments', 'verb' => 'GET'],
|
||||
['name' => 'attachment#create', 'url' => '/cards/{cardId}/attachment', 'verb' => 'POST'],
|
||||
['name' => 'attachment#display', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'GET'],
|
||||
['name' => 'attachment#update', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'PUT'],
|
||||
// also allow to use POST for updates so we can properly access files when using application/x-www-form-urlencoded
|
||||
['name' => 'attachment#update', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'POST'],
|
||||
['name' => 'attachment#delete', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'DELETE'],
|
||||
['name' => 'attachment#restore', 'url' => '/cards/{cardId}/attachment/{attachmentId}/restore', 'verb' => 'GET'],
|
||||
|
||||
|
||||
// labels
|
||||
['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'],
|
||||
['name' => 'label#update', 'url' => '/labels/{labelId}', 'verb' => 'PUT'],
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
],
|
||||
"require": {},
|
||||
"require-dev": {
|
||||
"christophwurst/nextcloud": "^12.0",
|
||||
"jakub-onderka/php-parallel-lint": "^0.9.2"
|
||||
"christophwurst/nextcloud": "^13.0",
|
||||
"jakub-onderka/php-parallel-lint": "^1.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
38
css/comp-13.scss
Normal file
38
css/comp-13.scss
Normal file
@@ -0,0 +1,38 @@
|
||||
#content-wrapper #content {
|
||||
height: 100%;
|
||||
}
|
||||
#app-content {
|
||||
flex-grow: 1;
|
||||
height: 100%;
|
||||
|
||||
&.details-visible {
|
||||
margin-right: 500px;
|
||||
}
|
||||
}
|
||||
|
||||
#app-sidebar {
|
||||
right: -500px;
|
||||
max-width: 100%;
|
||||
width: 500px;
|
||||
display:flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.details-visible {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#content[class*='app-'] * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body:not(.snapjs-left) {
|
||||
.app-navigation-hide {
|
||||
#app-content {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
#app-navigation {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
290
css/style.scss
290
css/style.scss
@@ -4,6 +4,7 @@
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
* @author Artem Anufrij <artem.anufrij@live.de>
|
||||
* @author Marin Treselj <marin@pixelipo.com>
|
||||
* @author Oskar Kurz <oskar.kurz@gmail.com>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
@@ -69,6 +70,26 @@ input.input-inline {
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic app layout
|
||||
*/
|
||||
|
||||
#content {
|
||||
height: 100%;
|
||||
min-height: initial;
|
||||
}
|
||||
|
||||
.app.app-deck {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#app-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigation sidebar
|
||||
*/
|
||||
@@ -101,8 +122,11 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
.app-navigation-entry-edit {
|
||||
.colorselect div{
|
||||
height: 32px;
|
||||
.colorselect {
|
||||
div, label {
|
||||
height: 32px;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
form {
|
||||
display: flex;
|
||||
@@ -139,15 +163,18 @@ input.input-inline {
|
||||
|
||||
.card {
|
||||
opacity: 1;
|
||||
|
||||
&.file-drop {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
&.card-selected {
|
||||
|
||||
.card {
|
||||
opacity: 0.7;
|
||||
box-shadow: 0px 0px 7px 0px $color-grey;
|
||||
|
||||
&.current {
|
||||
opacity: 1.0;
|
||||
box-shadow: 0px 0px 7px 0px $color-darkgrey;
|
||||
}
|
||||
}
|
||||
@@ -231,7 +258,7 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
|
||||
#app-navigation-toggle {
|
||||
#app-navigation-toggle-custom {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
cursor: pointer;
|
||||
@@ -257,10 +284,6 @@ input.input-inline {
|
||||
margin-right: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
> button {
|
||||
padding: 16px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.filter-select {
|
||||
@@ -457,6 +480,21 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
|
||||
.card-tasks, .card-files {
|
||||
border-radius: 3px;
|
||||
margin: 4px 4px 4px 0px;
|
||||
padding: 0 2px;
|
||||
font-size: 90%;
|
||||
opacity: 0.5;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.icon {
|
||||
background-size: contain;
|
||||
margin-right: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 22px;
|
||||
margin: 0;
|
||||
@@ -599,17 +637,6 @@ input.input-inline {
|
||||
/**
|
||||
* App sidebar
|
||||
*/
|
||||
#app-sidebar {
|
||||
right: -500px;
|
||||
max-width: 100%;
|
||||
width: 500px;
|
||||
display:flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.details-visible {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#sidebar-header {
|
||||
h3 {
|
||||
@@ -635,6 +662,32 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
|
||||
.drop-indicator {
|
||||
display: none;
|
||||
}
|
||||
.card .nv-file-over,
|
||||
.drop-indicator.nv-file-over {
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
z-index: 100;
|
||||
opacity: 0.9;
|
||||
text-align: center;
|
||||
|
||||
p {
|
||||
width: calc(100% - 20px);
|
||||
height: calc(100% - 20px);
|
||||
position: absolute;
|
||||
padding: 20px;
|
||||
border: 1px dashed #AAA;
|
||||
margin: 10px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#card-meta { // TODO: use .card-block instead?
|
||||
height: 100%;
|
||||
display: flex;
|
||||
@@ -678,10 +731,23 @@ input.input-inline {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
.section-header-tabbed {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 5px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
.tabHeaders {
|
||||
margin: 0;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.tabDetails {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.save-indicator {
|
||||
border-radius: 3px;
|
||||
float: right;
|
||||
margin: 5px;
|
||||
padding: 0 10px;
|
||||
font-size: 8pt;
|
||||
display: none;
|
||||
@@ -727,6 +793,101 @@ input.input-inline {
|
||||
}
|
||||
.tooltip {
|
||||
z-index: 998;
|
||||
position: fixed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.icon-upload.icon-loading-small {
|
||||
background-image: none;
|
||||
}
|
||||
.attachment-list-wrapper {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba($color-darkgrey, 0.5);
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.attachment-list {
|
||||
&.selector {
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
width: 30%;
|
||||
max-width: 500px;
|
||||
min-width: 200px;
|
||||
max-height: 50%;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
background-color: $color-main-background;
|
||||
z-index: 2;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 0 3px $color-darkgrey;
|
||||
overflow: scroll;
|
||||
}
|
||||
h3.attachment-selector {
|
||||
margin: 0 0 10px;
|
||||
padding: 0;
|
||||
.icon-close {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
li.attachment {
|
||||
display: flex;
|
||||
padding: 3px;
|
||||
|
||||
&.deleted {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.fileicon {
|
||||
display: inline-block;
|
||||
min-width: 32px;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background-size: contain;
|
||||
}
|
||||
.details {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
min-width: 0;
|
||||
flex-basis: 50%;
|
||||
line-height: 110%;
|
||||
padding: 2px;
|
||||
}
|
||||
.filename {
|
||||
width: 70%;
|
||||
display: flex;
|
||||
.basename {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
.extension {
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
.filesize, .filedate {
|
||||
font-size: 90%;
|
||||
color: $color-darkgrey;
|
||||
}
|
||||
.app-popover-menu-utils {
|
||||
position: relative;
|
||||
right: -10px;
|
||||
button {
|
||||
height: 32px;
|
||||
width: 42px;
|
||||
}
|
||||
}
|
||||
button.icon-history {
|
||||
width: 44px;
|
||||
}
|
||||
progress {
|
||||
margin-top: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -762,24 +923,11 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
|
||||
#card-attachments {
|
||||
ul {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.details {
|
||||
font-size: 8pt;
|
||||
padding-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
#app-content {
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.details-visible {
|
||||
margin-right: 500px;
|
||||
.card-attachments {
|
||||
.error {
|
||||
padding-left: 38px;
|
||||
margin-bottom: 5px;
|
||||
background-position: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -813,6 +961,10 @@ input.input-inline {
|
||||
border: none;
|
||||
}
|
||||
|
||||
label.color {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.selected {
|
||||
background-image: url('../../../core/img/actions/checkmark.svg');
|
||||
background-position: center center;
|
||||
@@ -822,6 +974,22 @@ input.input-inline {
|
||||
background-image: url('../../../core/img/actions/checkmark-white.svg');
|
||||
}
|
||||
}
|
||||
|
||||
.colorselect-label, .colorselect-label-white {
|
||||
background-image: url('../img/color_picker-dark.svg');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
opacity: 1;
|
||||
input {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
height: 32px;
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
.colorselect-label-white {
|
||||
background-image: url('../img/color_picker.svg');
|
||||
}
|
||||
}
|
||||
|
||||
.labels {
|
||||
@@ -887,7 +1055,8 @@ input.input-inline {
|
||||
.colorselect {
|
||||
flex-grow: 1;
|
||||
|
||||
div {
|
||||
div,
|
||||
label {
|
||||
min-width: 32px;
|
||||
}
|
||||
}
|
||||
@@ -1100,7 +1269,11 @@ input.input-inline {
|
||||
border: 0 !important;
|
||||
overflow: hidden;
|
||||
}
|
||||
.select2-search-field {
|
||||
margin-right: -10px;
|
||||
}
|
||||
}
|
||||
|
||||
.select2-choice {
|
||||
height: auto;
|
||||
}
|
||||
@@ -1196,6 +1369,24 @@ input.input-inline {
|
||||
white-space: pre;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
max-height: 50vh;
|
||||
margin: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
margin: 0px 10px 0px 0px;
|
||||
line-height: 10px;
|
||||
font-size: 10px;
|
||||
display: inline-block;
|
||||
min-height: 12px;
|
||||
}
|
||||
li input[type=checkbox] {
|
||||
margin: 0px 10px 0px -20px;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1242,3 +1433,22 @@ input.input-inline {
|
||||
.ui-select-dropdown.select2-drop-active {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom app sidebar handling
|
||||
*/
|
||||
body:not(.snapjs-left) {
|
||||
.app-navigation-hide {
|
||||
#app-content {
|
||||
margin-left: 0 !important; /* overwrite margin since we want the translateX to handle it*/
|
||||
}
|
||||
#app-navigation {
|
||||
transform: translateX(-300px);
|
||||
}
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width: 768px) {
|
||||
#app-navigation-toggle-custom {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
1
img/color_picker-dark.svg
Normal file
1
img/color_picker-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 100 100"><path d="M91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727a5.015 5.015 0 1 0-7.093 7.093l3.727 3.727-41.51 41.508a11.411 11.411 0 0 0-3.329 7.324c-.073 1.087-.347 3.105-.675 5.292a1.748 1.748 0 0 1-.487.983l-3.105 3.106a2.546 2.546 0 0 0 0 3.6l3.493 3.493a2.546 2.546 0 0 0 3.6 0l3.106-3.105c.277-.275.622-.433.981-.486 2.187-.329 4.205-.602 5.293-.675a11.412 11.412 0 0 0 7.325-3.33l41.508-41.508 3.727 3.727a5.015 5.015 0 1 0 7.093-7.093L69.507 29.419l9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726.001-16.2zM65.051 42.749l-20.53 20.53a2.546 2.546 0 0 1-3.6 0l-3.27-3.27a2.545 2.545 0 0 0-3.599.001l-.616.616-.002-.002-14.728 14.727c-.337.337-.819.401-1.076.143s-.194-.74.143-1.076l23.841-23.841.004.004 15.633-15.633a2.546 2.546 0 0 1 3.6 0l4.2 4.201a2.546 2.546 0 0 1 0 3.6z"/></svg>
|
||||
|
After Width: | Height: | Size: 897 B |
1
img/color_picker.svg
Normal file
1
img/color_picker.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="15" height="15" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path d="M91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727a5.015 5.015 0 1 0-7.093 7.093l3.727 3.727-41.51 41.508a11.411 11.411 0 0 0-3.329 7.324c-.073 1.087-.347 3.105-.675 5.292a1.748 1.748 0 0 1-.487.983l-3.105 3.106a2.546 2.546 0 0 0 0 3.6l3.493 3.493a2.546 2.546 0 0 0 3.6 0l3.106-3.105c.277-.275.622-.433.981-.486 2.187-.329 4.205-.602 5.293-.675a11.412 11.412 0 0 0 7.325-3.33l41.508-41.508 3.727 3.727a5.015 5.015 0 1 0 7.093-7.093L69.507 29.419l9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726.001-16.2zM65.051 42.749l-20.53 20.53a2.546 2.546 0 0 1-3.6 0l-3.27-3.27a2.545 2.545 0 0 0-3.599.001l-.616.616-.002-.002-14.728 14.727c-.337.337-.819.401-1.076.143s-.194-.74.143-1.076l23.841-23.841.004.004 15.633-15.633a2.546 2.546 0 0 1 3.6 0l4.2 4.201a2.546 2.546 0 0 1 0 3.6z" fill="#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 910 B |
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"directory": "vendor"
|
||||
}
|
||||
124
js/Gruntfile.js
124
js/Gruntfile.js
@@ -1,124 +0,0 @@
|
||||
/*
|
||||
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* global module */
|
||||
|
||||
module.exports = function(grunt) {
|
||||
'use strict';
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-wrap');
|
||||
grunt.loadNpmTasks('grunt-karma');
|
||||
grunt.loadNpmTasks('grunt-phpunit');
|
||||
|
||||
grunt.initConfig({
|
||||
|
||||
meta: {
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
version: '<%= meta.pkg.version %>',
|
||||
configJS: 'config/',
|
||||
buildJS: [
|
||||
'app/**/*.js',
|
||||
'controller/**/*.js',
|
||||
'filters/**/*.js',
|
||||
'directive/**/*.js',
|
||||
'service/**/*.js'
|
||||
],
|
||||
productionJS: 'public/',
|
||||
testsJS: '../tests/js/'
|
||||
},
|
||||
|
||||
concat: {
|
||||
options: {
|
||||
stripBanners: true
|
||||
},
|
||||
dist: {
|
||||
src: ['<%= meta.buildJS %>'],
|
||||
dest: '<%= meta.productionJS %>app.js'
|
||||
}
|
||||
},
|
||||
|
||||
wrap: {
|
||||
app: {
|
||||
src: ['<%= meta.productionJS %>app.js'],
|
||||
dest: '<%= meta.productionJS %>app.js',
|
||||
option: {
|
||||
wrapper: [
|
||||
'(function(angular, $, oc_requesttoken, undefined){\n\n\'use strict\';\n\n',
|
||||
'\n})(angular, jQuery, oc_requesttoken);'
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
jshint: {
|
||||
files: [
|
||||
'Gruntfile.js',
|
||||
'<%= meta.buildJS %>**/*.js',
|
||||
'<%= meta.testsJS %>**/*.js'
|
||||
],
|
||||
options: {
|
||||
jshintrc: '.jshintrc',
|
||||
reporter: require('jshint-stylish')
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
concat: {
|
||||
files: ['<%=meta.buildJS%>'],
|
||||
options: {
|
||||
livereload: true
|
||||
},
|
||||
tasks: ['build']
|
||||
}
|
||||
},
|
||||
|
||||
phpunit: {
|
||||
classes: {
|
||||
dir: '../tests/unit'
|
||||
},
|
||||
options: {
|
||||
bootstrap: '../tests/bootstrap.php',
|
||||
colors: true
|
||||
}
|
||||
},
|
||||
|
||||
karma: {
|
||||
unit: {
|
||||
configFile: '<%= meta.testsJS %>config/karma.js'
|
||||
},
|
||||
continuous: {
|
||||
configFile: '<%= meta.testsJS %>config/karma.js',
|
||||
browsers: ['Firefox'],
|
||||
singleRun: true,
|
||||
reporters: ['progress']
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// make tasks available under simpler commands
|
||||
grunt.registerTask('build', ['jshint', 'concat', 'wrap']);
|
||||
grunt.registerTask('js-unit', ['karma:continuous']);
|
||||
|
||||
};
|
||||
@@ -41,13 +41,20 @@ angular.module('markdown', [])
|
||||
};
|
||||
}]);
|
||||
|
||||
import uirouter from '@uirouter/angularjs';
|
||||
import ngsanitize from 'angular-sanitize';
|
||||
import angularuiselect from 'ui-select';
|
||||
import ngsortable from 'ng-sortable';
|
||||
import md from 'angular-markdown-it';
|
||||
import nganimate from 'angular-animate';
|
||||
import 'angular-file-upload';
|
||||
|
||||
var app = angular.module('Deck', [
|
||||
'ngRoute',
|
||||
'ngSanitize',
|
||||
'ui.router',
|
||||
'ui.select',
|
||||
'as.sortable',
|
||||
'mdMarkdownIt',
|
||||
'ngAnimate'
|
||||
ngsanitize,
|
||||
uirouter,
|
||||
angularuiselect,
|
||||
ngsortable, md, nganimate,
|
||||
'angularFileUpload'
|
||||
]);
|
||||
|
||||
export default app;
|
||||
|
||||
@@ -22,18 +22,27 @@
|
||||
|
||||
/* global app oc_requesttoken markdownitLinkTarget */
|
||||
|
||||
app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) {
|
||||
import app from './App.js';
|
||||
import md from 'angular-markdown-it';
|
||||
import markdownitLinkTarget from 'markdown-it-link-target';
|
||||
import markdownitCheckbox from 'legacy/markdown-it-checkbox.js';
|
||||
|
||||
app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) {
|
||||
'use strict';
|
||||
$httpProvider.defaults.headers.common.requesttoken = oc_requesttoken;
|
||||
|
||||
|
||||
$compileProvider.debugInfoEnabled(true);
|
||||
// This should fix adding "unsafe:" prefix to ui-select href links containing javascript
|
||||
// inline JS is blocked by CSP anyway and filtered out by our markdown renderer as well
|
||||
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/);
|
||||
|
||||
markdownItConverterProvider.config({
|
||||
breaks: true,
|
||||
linkify: true,
|
||||
xhtmlOut: true
|
||||
});
|
||||
markdownItConverterProvider.use(markdownitLinkTarget);
|
||||
markdownItConverterProvider.use(markdownitLinkTarget).use(markdownitCheckbox);
|
||||
|
||||
$urlRouterProvider.otherwise('/');
|
||||
|
||||
@@ -62,19 +71,47 @@ app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvid
|
||||
tab: {value: 0, dynamic: true},
|
||||
},
|
||||
views: {
|
||||
'sidebarView': {
|
||||
templateUrl: '/board.sidebarView.html'
|
||||
'sidebarView@': {
|
||||
templateUrl: '/board.sidebarView.html',
|
||||
controller: 'BoardController'
|
||||
}
|
||||
}
|
||||
})
|
||||
.state('board.card', {
|
||||
url: '/card/:cardId',
|
||||
params: {
|
||||
tab: {value: 0, dynamic: true},
|
||||
},
|
||||
views: {
|
||||
'sidebarView': {
|
||||
'sidebarView@': {
|
||||
templateUrl: '/card.sidebarView.html',
|
||||
controller: 'CardController'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
$provide.decorator('nvFileOverDirective', function ($delegate) {
|
||||
var directive = $delegate[0],
|
||||
link = directive.link;
|
||||
|
||||
directive.compile = function () {
|
||||
return function (scope, element, attrs) {
|
||||
var overClass = attrs.overClass || 'nv-file-over';
|
||||
link.apply(this, arguments);
|
||||
let counter = 0;
|
||||
element.on('dragenter', function (event) {
|
||||
counter++;
|
||||
});
|
||||
element.on('dragleave', function (event) {
|
||||
counter--;
|
||||
if (counter <= 0) {
|
||||
$('.' + overClass).removeClass(overClass);
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
return $delegate;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -19,10 +19,12 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from './App.js';
|
||||
|
||||
/* global Snap */
|
||||
app.run(function ($document, $rootScope, $transitions, BoardService) {
|
||||
'use strict';
|
||||
|
||||
$document.click(function (event) {
|
||||
$rootScope.$broadcast('documentClicked', event);
|
||||
});
|
||||
@@ -54,26 +56,6 @@ app.run(function ($document, $rootScope, $transitions, BoardService) {
|
||||
OC.filePath('deck', 'img', 'app-512.png')
|
||||
);
|
||||
|
||||
$('#app-navigation-toggle').off('click');
|
||||
// App sidebar on mobile
|
||||
var snapper = new Snap({
|
||||
element: document.getElementById('app-content'),
|
||||
disable: 'right',
|
||||
maxPosition: 250,
|
||||
touchToDrag: false
|
||||
});
|
||||
|
||||
$('#app-navigation-toggle').click(function () {
|
||||
if ($(window).width() > 768) {
|
||||
$('#app-navigation').toggle('hidden');
|
||||
} else {
|
||||
if (snapper.state().state === 'left') {
|
||||
snapper.close();
|
||||
} else {
|
||||
snapper.open('left');
|
||||
}
|
||||
}
|
||||
});
|
||||
// Select all elements with data-toggle="tooltips" in the document
|
||||
$('body').tooltip({
|
||||
selector: '[data-toggle="tooltip"]'
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"name": "deck",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"angular": "~1.6.1",
|
||||
"angular-route": "~1.6.1",
|
||||
"angular-mocks": "~1.6.1",
|
||||
"angular-sanitize": "~1.6.1",
|
||||
"angular-animate": "~1.6.1",
|
||||
"ng-sortable": "1.3.8",
|
||||
"jquery": "3.2.x",
|
||||
"es6-shim": "~0.*",
|
||||
"js-url": "~2.*",
|
||||
"angular-ui-select": "~0.19.6",
|
||||
"angular-markdown-it": "~0.6.1",
|
||||
"angular-ui-router": "~1.0.0",
|
||||
"markdown-it-link-target": "~1.0.1",
|
||||
"jquery-timepicker": "883bb2cd94"
|
||||
},
|
||||
"license": "AGPL-3.0",
|
||||
"private": true,
|
||||
"ignore": [
|
||||
"'**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
]
|
||||
}
|
||||
@@ -20,11 +20,23 @@
|
||||
*
|
||||
*/
|
||||
|
||||
import app from '../app/App.js';
|
||||
|
||||
/** global: OC */
|
||||
app.controller('AppController', function ($scope, $location, $http, $route, $log, $rootScope) {
|
||||
app.controller('AppController', function ($scope, $location, $http, $log, $rootScope, $attrs) {
|
||||
$rootScope.sidebar = {
|
||||
show: false
|
||||
};
|
||||
$scope.sidebar = $rootScope.sidebar;
|
||||
$scope.user = oc_current_user;
|
||||
});
|
||||
$rootScope.config = JSON.parse($attrs.config);
|
||||
|
||||
$scope.appNavigationHide = false;
|
||||
|
||||
$scope.toggleSidebar = function() {
|
||||
if ($(window).width() > 768) {
|
||||
$scope.appNavigationHide = !$scope.appNavigationHide;
|
||||
console.log($scope.appNavigationHide);
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
78
js/controller/AttachmentController.js
Normal file
78
js/controller/AttachmentController.js
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* global OC */
|
||||
|
||||
class AttachmentListController {
|
||||
constructor ($scope, CardService, FileService) {
|
||||
'ngInject';
|
||||
this.cardservice = CardService;
|
||||
this.fileservice = FileService;
|
||||
this.attachments = CardService.getCurrent().attachments;
|
||||
}
|
||||
|
||||
mimetypeForAttachment(attachment) {
|
||||
let url = OC.MimeType.getIconUrl(attachment.extendedData.mimetype);
|
||||
let styles = {
|
||||
'background-image': `url("${url}")`,
|
||||
};
|
||||
return styles;
|
||||
}
|
||||
|
||||
attachmentUrl(attachment) {
|
||||
let cardId = this.cardservice.getCurrent().id;
|
||||
let attachmentId = attachment.id;
|
||||
return OC.generateUrl(`/apps/deck/cards/${cardId}/attachment/${attachmentId}`);
|
||||
}
|
||||
|
||||
getAttachmentMarkdown(attachment) {
|
||||
const inlineMimetypes = ['image/png', 'image/jpg', 'image/jpeg'];
|
||||
let url = this.attachmentUrl(attachment);
|
||||
let filename = attachment.data;
|
||||
let insertText = `[📎 ${filename}](${url})`;
|
||||
if (inlineMimetypes.indexOf(attachment.extendedData.mimetype) > -1) {
|
||||
insertText = ``;
|
||||
}
|
||||
return insertText;
|
||||
}
|
||||
|
||||
select(attachment) {
|
||||
this.onSelect({attachment: this.getAttachmentMarkdown(attachment)});
|
||||
}
|
||||
|
||||
abort() {
|
||||
this.onAbort();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let attachmentListComponent = {
|
||||
templateUrl: '/card.attachments.html',
|
||||
controller: AttachmentListController,
|
||||
bindings: {
|
||||
isFileSelector: '<',
|
||||
attachments: '=',
|
||||
onSelect: '&',
|
||||
onAbort: '&'
|
||||
}
|
||||
};
|
||||
export default attachmentListComponent;
|
||||
@@ -20,8 +20,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
import app from '../app/App.js';
|
||||
/* global oc_defaults OC */
|
||||
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter) {
|
||||
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter, FileService) {
|
||||
|
||||
$scope.sidebar = $rootScope.sidebar;
|
||||
|
||||
@@ -39,6 +40,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
$scope.labelservice = LabelService;
|
||||
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
|
||||
$scope.board = BoardService.getCurrent();
|
||||
$scope.uploader = FileService.uploader;
|
||||
|
||||
// workaround for $stateParams changes not being propagated
|
||||
$scope.$watch(function() {
|
||||
@@ -46,8 +48,24 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
}, function (params) {
|
||||
$scope.params = params;
|
||||
}, true);
|
||||
$scope.params = $state;
|
||||
$scope.params = $state.params;
|
||||
|
||||
/**
|
||||
* Check for markdown checkboxes in description to render the counter
|
||||
*
|
||||
* This should probably be moved to the backend at some point
|
||||
*
|
||||
* @param text
|
||||
* @returns array of [finished, total] checkboxes
|
||||
*/
|
||||
$scope.getCheckboxes = function(text) {
|
||||
const regTotal = /\[(X|\s|\_|\-)\]\s(.*)/ig;
|
||||
const regFinished = /\[(X|\_|\-)\]\s(.*)/ig;
|
||||
return [
|
||||
((text || '').match(regFinished) || []).length,
|
||||
((text || '').match(regTotal) || []).length
|
||||
];
|
||||
};
|
||||
|
||||
$scope.search = function (searchText) {
|
||||
$scope.searchText = searchText;
|
||||
@@ -152,7 +170,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
// Create a new Stack
|
||||
$scope.createStack = function () {
|
||||
StackService.create($scope.newStack).then(function (data) {
|
||||
$scope.newStack.title = "";
|
||||
$scope.newStack.title = '';
|
||||
});
|
||||
};
|
||||
|
||||
@@ -164,18 +182,47 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
};
|
||||
CardService.create(newCard).then(function (data) {
|
||||
$scope.stackservice.addCard(data);
|
||||
$scope.newCard.title = "";
|
||||
$scope.newCard.title = '';
|
||||
});
|
||||
};
|
||||
|
||||
$scope.cardDelete = function (card) {
|
||||
CardService.delete(card.id);
|
||||
StackService.removeCard(card);
|
||||
OC.dialogs.confirm(t('deck', 'Are you sure you want to delete this card with all of its data?'), t('deck', 'Delete'), function(state) {
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
CardService.delete(card.id).then(function () {
|
||||
StackService.removeCard(card);
|
||||
});
|
||||
});
|
||||
};
|
||||
$scope.cardArchive = function (card) {
|
||||
CardService.archive(card);
|
||||
StackService.removeCard(card);
|
||||
};
|
||||
$scope.isCurrentUserAssigned = function (card) {
|
||||
if (! CardService.get(card.id).assignedUsers) {
|
||||
return false;
|
||||
}
|
||||
var userList = CardService.get(card.id).assignedUsers.filter(function (obj) {
|
||||
return obj.participant.uid === OC.getCurrentUser().uid;
|
||||
});
|
||||
return userList.length === 1;
|
||||
};
|
||||
$scope.cardAssignToMe = function (card) {
|
||||
CardService.assignUser(card, OC.getCurrentUser().uid)
|
||||
.then(
|
||||
function() {StackService.updateCard(card);}
|
||||
);
|
||||
// TODO: remove this jquery call. Fix and use appPopoverMenuUtils instead
|
||||
$('.popovermenu').addClass('hidden');
|
||||
};
|
||||
$scope.cardUnassignFromMe = function (card) {
|
||||
CardService.unassignUser(card, OC.getCurrentUser().uid);
|
||||
StackService.updateCard(card);
|
||||
// TODO: remove this jquery call.Fix and use appPopoverMenuUtils instead
|
||||
$('.popovermenu').addClass('hidden');
|
||||
};
|
||||
$scope.cardUnarchive = function (card) {
|
||||
CardService.unarchive(card);
|
||||
StackService.removeCard(card);
|
||||
@@ -191,7 +238,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
$scope.labelCreate = function (label) {
|
||||
label.boardId = $scope.id;
|
||||
LabelService.create(label).then(function (data) {
|
||||
$scope.newStack.title = "";
|
||||
$scope.newStack.title = '';
|
||||
BoardService.getCurrent().labels.push(data);
|
||||
$scope.status.createLabel = false;
|
||||
$scope.newLabel = {};
|
||||
@@ -208,7 +255,10 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
$scope.status.addSharee = null;
|
||||
};
|
||||
$scope.aclDelete = function (acl) {
|
||||
BoardService.deleteAcl(acl);
|
||||
BoardService.deleteAcl(acl).then(function(data) {
|
||||
$scope.loadDefault();
|
||||
$scope.refreshData();
|
||||
});
|
||||
};
|
||||
$scope.aclUpdate = function (acl) {
|
||||
BoardService.updateAcl(acl);
|
||||
@@ -264,7 +314,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
// auto scroll on drag
|
||||
dragMove: function (itemPosition, containment, eventObj) {
|
||||
if (eventObj) {
|
||||
var container = $("#board");
|
||||
var container = $('#board');
|
||||
var offset = container.offset();
|
||||
var targetX = eventObj.pageX - (offset.left || container.scrollLeft());
|
||||
var targetY = eventObj.pageY - (offset.top || container.scrollTop());
|
||||
@@ -299,7 +349,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
containment: '#innerBoard',
|
||||
dragMove: function (itemPosition, containment, eventObj) {
|
||||
if (eventObj) {
|
||||
var container = $("#board");
|
||||
var container = $('#board');
|
||||
var offset = container.offset();
|
||||
var targetX = eventObj.pageX - (offset.left || container.scrollLeft());
|
||||
var targetY = eventObj.pageY - (offset.top || container.scrollTop());
|
||||
@@ -327,4 +377,11 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
||||
};
|
||||
};
|
||||
|
||||
$scope.attachmentCount = function(card) {
|
||||
if (Array.isArray(card.attachments)) {
|
||||
return card.attachments.filter((obj) => obj.deletedAt === 0).length;
|
||||
}
|
||||
return card.attachmentCount;
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
@@ -20,9 +20,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/* global app moment */
|
||||
/* global app moment angular OC */
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.controller('CardController', function ($scope, $rootScope, $routeParams, $location, $stateParams, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService) {
|
||||
app.controller('CardController', function ($scope, $rootScope, $sce, $location, $stateParams, $state, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService, markdownItConverter, FileService) {
|
||||
$scope.sidebar = $rootScope.sidebar;
|
||||
$scope.status = {
|
||||
lastEdit: 0,
|
||||
@@ -30,16 +31,60 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
|
||||
};
|
||||
|
||||
$scope.cardservice = CardService;
|
||||
$scope.fileservice = FileService;
|
||||
$scope.cardId = $stateParams.cardId;
|
||||
|
||||
$scope.statusservice = StatusService.getInstance();
|
||||
$scope.boardservice = BoardService;
|
||||
|
||||
$scope.isArray = angular.isArray;
|
||||
// workaround for $stateParams changes not being propagated
|
||||
$scope.$watch(function() {
|
||||
return $state.params;
|
||||
}, function (params) {
|
||||
$scope.params = params;
|
||||
$scope.fileservice.reset();
|
||||
}, true);
|
||||
$scope.params = $state.params;
|
||||
|
||||
$scope.addAttachmentToDescription = function(insertText) {
|
||||
let el = document.querySelectorAll('textarea')[0];
|
||||
let start = el.selectionStart;
|
||||
let end = el.selectionEnd;
|
||||
let text = $scope.status.edit.description || '';
|
||||
let before = text.substring(0, start);
|
||||
let after = text.substring(end, text.length);
|
||||
let newText = before + '\n' + insertText + '\n' + after;
|
||||
$scope.status.edit.description = newText;
|
||||
el.selectionStart = el.selectionEnd = start + newText.length;
|
||||
el.focus();
|
||||
$scope.status.continueEdit = false;
|
||||
$scope.cardEditDescriptionChanged();
|
||||
$scope.status.selectAttachment = false;
|
||||
};
|
||||
|
||||
$scope.abortAttachmentSelection = function() {
|
||||
$scope.status.continueEdit = false;
|
||||
$scope.status.selectAttachment = false;
|
||||
let el = document.querySelectorAll('textarea')[0];
|
||||
el.focus();
|
||||
};
|
||||
|
||||
$scope.statusservice.retainWaiting();
|
||||
|
||||
$scope.description = function() {
|
||||
return $scope.rendered;
|
||||
};
|
||||
|
||||
$scope.updateMarkdown = function(content) {
|
||||
// only trust the html from markdown-it-checkbox
|
||||
$scope.rendered = $sce.trustAsHtml(markdownItConverter.render(content || ''));
|
||||
};
|
||||
|
||||
CardService.fetchOne($scope.cardId).then(function (data) {
|
||||
$scope.statusservice.releaseWaiting();
|
||||
$scope.archived = CardService.getCurrent().archived;
|
||||
$scope.updateMarkdown(CardService.getCurrent().description);
|
||||
}, function (error) {
|
||||
});
|
||||
|
||||
@@ -50,7 +95,43 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
|
||||
$scope.status.cardRename = true;
|
||||
}
|
||||
};
|
||||
$scope.cardEditDescriptionShow = function ($event) {
|
||||
|
||||
$scope.toggleCheckbox = function (id) {
|
||||
$('#markdown input[type=checkbox]').attr('disabled', true);
|
||||
$scope.status.edit = angular.copy(CardService.getCurrent());
|
||||
var reg = /\[(X|\s|\_|\-)\]\s(.*)/ig;
|
||||
var nth = 0;
|
||||
$scope.status.edit.description = $scope.status.edit.description.replace(reg, function (match, i, original) {
|
||||
var result = match;
|
||||
if (nth++ === id) {
|
||||
if (match.match(/^\[\s\]/i)) {
|
||||
result = match.replace(/\[\s\]/i, '[x]');
|
||||
}
|
||||
if (match.match(/^\[x\]/i)) {
|
||||
result = match.replace(/\[x\]/i, '[ ]');
|
||||
}
|
||||
return result;
|
||||
}
|
||||
return match;
|
||||
});
|
||||
CardService.update($scope.status.edit).then(function (data) {
|
||||
var header = $('.section-header-tabbed .tabDetails');
|
||||
header.find('.save-indicator.unsaved').hide();
|
||||
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
|
||||
});
|
||||
$('#markdown input[type=checkbox]').removeAttr('disabled');
|
||||
|
||||
};
|
||||
$scope.clickCardDescription = function ($event) {
|
||||
var checkboxId = $($event.target).data('id');
|
||||
if ($event.target.tagName === 'LABEL') {
|
||||
$scope.toggleCheckbox(checkboxId);
|
||||
return;
|
||||
}
|
||||
if ($event.target.tagName === 'INPUT') {
|
||||
$scope.toggleCheckbox(checkboxId);
|
||||
return;
|
||||
}
|
||||
if (BoardService.isArchived() || CardService.getCurrent().archived) {
|
||||
return false;
|
||||
}
|
||||
@@ -63,51 +144,50 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
|
||||
};
|
||||
$scope.cardEditDescriptionChanged = function ($event) {
|
||||
$scope.status.lastEdit = Date.now();
|
||||
var header = $('.section-header.card-description');
|
||||
var header = $('.section-header-tabbed .tabDetails');
|
||||
header.find('.save-indicator.unsaved').show();
|
||||
header.find('.save-indicator.saved').hide();
|
||||
};
|
||||
$interval(function() {
|
||||
var currentTime = Date.now();
|
||||
var timeSinceEdit = currentTime-$scope.status.lastEdit;
|
||||
if (timeSinceEdit > 1000 && $scope.status.lastEdit > $scope.status.lastSave) {
|
||||
if (timeSinceEdit > 1000 && $scope.status.lastEdit > $scope.status.lastSave && !$scope.status.saving) {
|
||||
$scope.status.lastSave = currentTime;
|
||||
var header = $('.section-header.card-description');
|
||||
$scope.status.saving = true;
|
||||
var header = $('.section-header-tabbed .tabDetails');
|
||||
header.find('.save-indicator.unsaved').fadeIn(500);
|
||||
CardService.update($scope.status.edit).then(function (data) {
|
||||
var header = $('.section-header.card-description');
|
||||
var header = $('.section-header-tabbed .tabDetails');
|
||||
header.find('.save-indicator.unsaved').hide();
|
||||
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
|
||||
$scope.status.saving = false;
|
||||
});
|
||||
}
|
||||
}, 500);
|
||||
}, 500, 0, false);
|
||||
|
||||
// handle rename to update information on the board as well
|
||||
$scope.cardRename = function (card) {
|
||||
CardService.rename(card).then(function (data) {
|
||||
StackService.updateCard(card);
|
||||
$scope.status.renameCard = false;
|
||||
});
|
||||
};
|
||||
$scope.cardUpdate = function (card) {
|
||||
CardService.update(card).then(function (data) {
|
||||
$scope.status.cardEditDescription = false;
|
||||
var header = $('.section-content.card-description');
|
||||
$scope.updateMarkdown($scope.status.edit.description);
|
||||
var header = $('.section-header-tabbed .tabDetails');
|
||||
header.find('.save-indicator.unsaved').hide();
|
||||
header.find('.save-indicator.saved').fadeIn(500).fadeOut(1000);
|
||||
StackService.updateCard(card);
|
||||
});
|
||||
};
|
||||
|
||||
$scope.labelAssign = function (element, model) {
|
||||
CardService.assignLabel($scope.cardId, element.id).then(function (data) {
|
||||
StackService.updateCard(CardService.getCurrent());
|
||||
});
|
||||
};
|
||||
|
||||
$scope.labelRemove = function (element, model) {
|
||||
CardService.removeLabel($scope.cardId, element.id).then(function (data) {
|
||||
StackService.updateCard(CardService.getCurrent());
|
||||
});
|
||||
};
|
||||
|
||||
@@ -122,7 +202,6 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
|
||||
newDate.year(duedate.year());
|
||||
element.duedate = newDate.toISOString();
|
||||
CardService.update(element);
|
||||
StackService.updateCard(element);
|
||||
};
|
||||
$scope.setDuedateTime = function (time) {
|
||||
var element = CardService.getCurrent();
|
||||
@@ -134,45 +213,41 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
|
||||
newDate.minute(time.minute());
|
||||
element.duedate = newDate.toISOString();
|
||||
CardService.update(element);
|
||||
StackService.updateCard(element);
|
||||
};
|
||||
|
||||
$scope.resetDuedate = function () {
|
||||
var element = CardService.getCurrent();
|
||||
element.duedate = null;
|
||||
CardService.update(element);
|
||||
StackService.updateCard(element);
|
||||
};
|
||||
|
||||
/**
|
||||
* Show ui-select field when clicking the add button
|
||||
*/
|
||||
$scope.showAssignUser = function() {
|
||||
$scope.status.showAssignUser = true;
|
||||
$timeout(function() {
|
||||
$('#assignUserSelect').find('a').click();
|
||||
});
|
||||
$scope.toggleAssignUser = function() {
|
||||
$scope.status.showAssignUser = !$scope.status.showAssignUser;
|
||||
if ($scope.status.showAssignUser === true) {
|
||||
$timeout(function () {
|
||||
$('#assignUserSelect').find('a').click();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Hide ui-select when select list is closed
|
||||
*/
|
||||
$scope.assingUserOpenClose = function(isOpen) {
|
||||
if (!isOpen) {
|
||||
$scope.status.showAssignUser = false;
|
||||
}
|
||||
$scope.status.showAssignUser = isOpen;
|
||||
};
|
||||
|
||||
$scope.addAssignedUser = function(item) {
|
||||
CardService.assignUser(CardService.getCurrent(), item.uid).then(function (data) {
|
||||
StackService.updateCard(CardService.getCurrent());
|
||||
});
|
||||
$scope.status.showAssignUser = false;
|
||||
};
|
||||
|
||||
$scope.removeAssignedUser = function(uid) {
|
||||
CardService.unassignUser(CardService.getCurrent(), uid).then(function (data) {
|
||||
StackService.updateCard(CardService.getCurrent());
|
||||
});
|
||||
};
|
||||
|
||||
@@ -183,4 +258,4 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
|
||||
};
|
||||
};
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
44
js/controller/ColorPickerController.js
Normal file
44
js/controller/ColorPickerController.js
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* @copyright Copyright (c) 2018 Oskar Kurz <oskar.kurz@gmail.com>
|
||||
*
|
||||
* @author Oskar Kurz <oskar.kurz@gmail.com>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
import app from '../app/App.js';
|
||||
|
||||
/* global oc_defaults OC */
|
||||
app.controller('ColorPickerController', ['$scope', function ($scope) {
|
||||
$scope.hashedColor = '';
|
||||
|
||||
$scope.setColor = function (object, color) {
|
||||
object.color = color;
|
||||
object.hashedColor = '#' + color;
|
||||
|
||||
return object;
|
||||
};
|
||||
|
||||
$scope.setHashedColor = function (object) {
|
||||
object.color = object.hashedColor.substr(1);
|
||||
return object;
|
||||
};
|
||||
|
||||
$scope.getCustomBackground = function (color) {
|
||||
return {'background-color': color};
|
||||
};
|
||||
}]);
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/* global app angular */
|
||||
|
||||
app.controller('ListController', function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService) {
|
||||
var ListController = function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService) {
|
||||
|
||||
function calculateNewColor() {
|
||||
var boards = BoardService.getAll();
|
||||
@@ -193,5 +193,6 @@ app.controller('ListController', function ($scope, $location, $filter, BoardServ
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
export default ListController;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.directive('appPopoverMenuUtils', function () {
|
||||
'use strict';
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
import app from '../app/App.js';
|
||||
// OwnCloud Click Handling
|
||||
// https://doc.owncloud.org/server/8.0/developer_manual/app/css.html
|
||||
app.directive('appNavigationEntryUtils', function () {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.directive('autofocusOnInsert', function () {
|
||||
'use strict';
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.directive('avatar', function() {
|
||||
'use strict';
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.directive('contactsmenudelete', function() {
|
||||
'use strict';
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
/* global app */
|
||||
/* gloabl t */
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
// original idea from blockloop: http://stackoverflow.com/a/24090733
|
||||
app.directive('elastic', [
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.directive('search', function ($document, $location) {
|
||||
'use strict';
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
import '../legacy/jquery.ui.timepicker.js';
|
||||
import 'legacy/jquery.ui.timepicker.css';
|
||||
|
||||
/* global app */
|
||||
/* global t */
|
||||
@@ -29,7 +32,7 @@ app.directive('timepicker', function() {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function(scope, elm, attr) {
|
||||
return elm.timepicker({
|
||||
return $(elm).timepicker({
|
||||
onSelect: function(date, inst) {
|
||||
scope.setDuedateTime(moment('2000-01-01 ' + date));
|
||||
scope.$apply();
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.filter('boardFilterAcl', function() {
|
||||
return function(boards) {
|
||||
|
||||
37
js/filters/bytesFilter.js
Normal file
37
js/filters/bytesFilter.js
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.filter('bytes', function () {
|
||||
return function (bytes, precision) {
|
||||
if (isNaN(parseFloat(bytes, 10)) || !isFinite(bytes)) {
|
||||
return '-';
|
||||
}
|
||||
if (typeof precision === 'undefined') {
|
||||
precision = 2;
|
||||
}
|
||||
var units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'],
|
||||
number = Math.floor(Math.log(bytes) / Math.log(1024));
|
||||
return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number];
|
||||
};
|
||||
});
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
// usage | cardFilter({ member: 'admin'})
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.filter('cardSearchFilter', function() {
|
||||
return function(cards, searchString) {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
/* global app */
|
||||
/* global OC */
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.filter('iconWhiteFilter', function () {
|
||||
return function (hex) {
|
||||
@@ -31,7 +32,7 @@ app.filter('iconWhiteFilter', function () {
|
||||
b: parseInt(result[3], 16)
|
||||
} : null;
|
||||
if (result === null) {
|
||||
return "";
|
||||
return '';
|
||||
}
|
||||
var r = color.r / 255;
|
||||
var g = color.g / 255;
|
||||
@@ -58,9 +59,9 @@ app.filter('iconWhiteFilter', function () {
|
||||
h /= 6;
|
||||
}
|
||||
if (l < 0.5) {
|
||||
return "-white";
|
||||
return '-white';
|
||||
} else {
|
||||
return "";
|
||||
return '';
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.filter('lightenColorFilter', function() {
|
||||
return function (hex) {
|
||||
@@ -29,9 +30,9 @@ app.filter('lightenColorFilter', function() {
|
||||
b: parseInt(result[3], 16)
|
||||
} : null;
|
||||
if (result !== null) {
|
||||
return "rgba(" + color.r + "," + color.g + "," + color.b + ",0.7)";
|
||||
return 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',0.7)';
|
||||
} else {
|
||||
return "#" + hex;
|
||||
return '#' + hex;
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.filter('orderObjectBy', function(){
|
||||
return function(input, attribute) {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.filter('textColorFilter', function () {
|
||||
return function (hex) {
|
||||
@@ -56,12 +57,12 @@ app.filter('textColorFilter', function () {
|
||||
h /= 6;
|
||||
}
|
||||
if (l < 0.5) {
|
||||
return "#ffffff";
|
||||
return '#ffffff';
|
||||
} else {
|
||||
return "#000000";
|
||||
return '#000000';
|
||||
}
|
||||
} else {
|
||||
return "#000000";
|
||||
return '#000000';
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
/* global app */
|
||||
/* global angular */
|
||||
|
||||
28
js/init.js
Normal file
28
js/init.js
Normal file
@@ -0,0 +1,28 @@
|
||||
'use strict';
|
||||
|
||||
// used for building a vendor stylesheet
|
||||
import 'ng-sortable/dist/ng-sortable.css';
|
||||
|
||||
import angular from 'angular';
|
||||
import markdownit from 'markdown-it';
|
||||
global.markdownit = markdownit;
|
||||
|
||||
import app from './app/App.js';
|
||||
import './app/Config.js';
|
||||
import './app/Run.js';
|
||||
|
||||
|
||||
import ListController from 'controller/ListController.js';
|
||||
import attachmentListComponent from './controller/AttachmentController.js';
|
||||
|
||||
app.controller('ListController', ListController);
|
||||
app.component('attachmentListComponent', attachmentListComponent);
|
||||
|
||||
|
||||
// require all the js files from subdirectories
|
||||
var context = require.context('.', true, /(controller|service|filters|directive)\/(.*)\.js$/);
|
||||
|
||||
context.keys().forEach(function (key) {
|
||||
context(key);
|
||||
});
|
||||
|
||||
57
js/legacy/jquery.ui.timepicker.css
vendored
Normal file
57
js/legacy/jquery.ui.timepicker.css
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Timepicker stylesheet
|
||||
* Highly inspired from datepicker
|
||||
* FG - Nov 2010 - Web3R
|
||||
*
|
||||
* version 0.0.3 : Fixed some settings, more dynamic
|
||||
* version 0.0.4 : Removed width:100% on tables
|
||||
* version 0.1.1 : set width 0 on tables to fix an ie6 bug
|
||||
*/
|
||||
|
||||
.ui-timepicker-inline { display: inline; }
|
||||
|
||||
#ui-timepicker-div { padding: 0.2em; }
|
||||
.ui-timepicker-table { display: inline-table; width: 0; }
|
||||
.ui-timepicker-table table { margin:0.15em 0 0 0; border-collapse: collapse; }
|
||||
|
||||
.ui-timepicker-hours, .ui-timepicker-minutes { padding: 0.2em; }
|
||||
|
||||
.ui-timepicker-table .ui-timepicker-title { line-height: 1.8em; text-align: center; }
|
||||
.ui-timepicker-table td { padding: 0.1em; width: 2.2em; }
|
||||
.ui-timepicker-table th.periods { padding: 0.1em; width: 2.2em; }
|
||||
|
||||
/* span for disabled cells */
|
||||
.ui-timepicker-table td span {
|
||||
display:block;
|
||||
padding:0.2em 0.3em 0.2em 0.5em;
|
||||
width: 1.2em;
|
||||
|
||||
text-align:right;
|
||||
text-decoration:none;
|
||||
}
|
||||
/* anchors for clickable cells */
|
||||
.ui-timepicker-table td a {
|
||||
display:block;
|
||||
padding:0.2em 0.3em 0.2em 0.5em;
|
||||
width: 1.2em;
|
||||
cursor: pointer;
|
||||
text-align:right;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
|
||||
/* buttons and button pane styling */
|
||||
.ui-timepicker .ui-timepicker-buttonpane {
|
||||
background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0;
|
||||
}
|
||||
.ui-timepicker .ui-timepicker-buttonpane button { margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||
/* The close button */
|
||||
.ui-timepicker .ui-timepicker-close { float: right }
|
||||
|
||||
/* the now button */
|
||||
.ui-timepicker .ui-timepicker-now { float: left; }
|
||||
|
||||
/* the deselect button */
|
||||
.ui-timepicker .ui-timepicker-deselect { float: left; }
|
||||
|
||||
|
||||
1496
js/legacy/jquery.ui.timepicker.js
vendored
Normal file
1496
js/legacy/jquery.ui.timepicker.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
114
js/legacy/markdown-it-checkbox.js
Normal file
114
js/legacy/markdown-it-checkbox.js
Normal file
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* Original source code from https://github.com/mcecot/markdown-it-checkbox
|
||||
* © 2015 Markus Cecot
|
||||
* licenced under MIT
|
||||
* https://github.com/mcecot/markdown-it-checkbox/blob/master/LICENSE
|
||||
*/
|
||||
var checkboxReplace;
|
||||
|
||||
checkboxReplace = function(md, options, Token) {
|
||||
"use strict";
|
||||
var arrayReplaceAt, createTokens, defaults, lastId, pattern, splitTextToken;
|
||||
arrayReplaceAt = md.utils.arrayReplaceAt;
|
||||
lastId = 0;
|
||||
defaults = {
|
||||
divWrap: false,
|
||||
divClass: 'checkbox',
|
||||
idPrefix: 'checkbox'
|
||||
};
|
||||
options = Object.assign(defaults, options);
|
||||
pattern = /\[(X|\s|\_|\-)\]\s(.*)/i;
|
||||
createTokens = function(checked, label, Token) {
|
||||
var id, idNumeric, nodes, token;
|
||||
nodes = [];
|
||||
|
||||
/**
|
||||
* <div class="checkbox">
|
||||
*/
|
||||
if (options.divWrap) {
|
||||
token = new Token("checkbox_open", "div", 1);
|
||||
token.attrs = [["class", options.divClass]];
|
||||
nodes.push(token);
|
||||
}
|
||||
|
||||
/**
|
||||
* <input type="checkbox" id="checkbox{n}" checked="true">
|
||||
*/
|
||||
id = options.idPrefix + lastId;
|
||||
idNumeric = lastId;
|
||||
lastId += 1;
|
||||
token = new Token("checkbox_input", "input", 0);
|
||||
token.attrs = [["type", "checkbox"], ["id", id], ["data-id", idNumeric]];
|
||||
if (checked === true) {
|
||||
token.attrs.push(["checked", "true"]);
|
||||
}
|
||||
nodes.push(token);
|
||||
|
||||
/**
|
||||
* <label for="checkbox{n}">
|
||||
*/
|
||||
token = new Token("label_open", "label", 1);
|
||||
token.attrs = [["for", id], ["data-id", idNumeric]];
|
||||
nodes.push(token);
|
||||
|
||||
/**
|
||||
* content of label tag
|
||||
*/
|
||||
token = new Token("text", "", 0);
|
||||
token.content = label;
|
||||
nodes.push(token);
|
||||
|
||||
/**
|
||||
* closing tags
|
||||
*/
|
||||
nodes.push(new Token("label_close", "label", -1));
|
||||
if (options.divWrap) {
|
||||
nodes.push(new Token("checkbox_close", "div", -1));
|
||||
}
|
||||
return nodes;
|
||||
};
|
||||
splitTextToken = function(original, Token) {
|
||||
var checked, label, matches, text, value;
|
||||
text = original.content;
|
||||
matches = text.match(pattern);
|
||||
if (matches === null) {
|
||||
return original;
|
||||
}
|
||||
checked = false;
|
||||
value = matches[1];
|
||||
label = matches[2];
|
||||
if (value === "X" || value === "x") {
|
||||
checked = true;
|
||||
}
|
||||
return createTokens(checked, label, Token);
|
||||
};
|
||||
return function(state) {
|
||||
lastId = 0;
|
||||
var blockTokens, i, j, l, token, tokens;
|
||||
blockTokens = state.tokens;
|
||||
j = 0;
|
||||
l = blockTokens.length;
|
||||
while (j < l) {
|
||||
if (blockTokens[j].type !== "inline") {
|
||||
j++;
|
||||
continue;
|
||||
}
|
||||
tokens = blockTokens[j].children;
|
||||
i = tokens.length - 1;
|
||||
while (i >= 0) {
|
||||
token = tokens[i];
|
||||
blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, splitTextToken(token, state.Token));
|
||||
i--;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/*global module */
|
||||
|
||||
module.exports = function(md, options) {
|
||||
"use strict";
|
||||
md.core.ruler.push("checkbox", checkboxReplace(md, options));
|
||||
};
|
||||
8969
js/package-lock.json
generated
Normal file
8969
js/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,29 +1,44 @@
|
||||
{
|
||||
"name": "deck",
|
||||
"description": "Frontend for the Nextcloud Deck app",
|
||||
"repository": "https://github.com/nextcloud/deck",
|
||||
"version": "1.0.0",
|
||||
"main": "Gruntfile.js",
|
||||
"directories": {
|
||||
"test": "tests"
|
||||
},
|
||||
"dependencies": {},
|
||||
"dependencies": {
|
||||
"@uirouter/angularjs": "^1.0.19",
|
||||
"angular": "^1.7.2",
|
||||
"angular-animate": "^1.7.2",
|
||||
"angular-file-upload": "^2.5.0",
|
||||
"angular-markdown-it": "^0.6.1",
|
||||
"angular-sanitize": "^1.7.2",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"markdown-it": "^8.4.2",
|
||||
"markdown-it-link-target": "^1.0.2",
|
||||
"ng-sortable": "^1.3.8",
|
||||
"ui-select": "^0.19.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bower": "^1.8.0",
|
||||
"grunt": "^1.0.1",
|
||||
"grunt-contrib-concat": "^1.0.1",
|
||||
"grunt-contrib-jshint": "^1.1.0",
|
||||
"grunt-contrib-watch": "^1.0.0",
|
||||
"grunt-karma": "^2.0.0",
|
||||
"grunt-phpunit": "^0.3.6",
|
||||
"grunt-wrap": "^0.3.0",
|
||||
"jshint-stylish": "^2.2.1",
|
||||
"karma": "^1.4.1",
|
||||
"node-sass": "^4.5.3"
|
||||
"babel-core": "^6.26.0",
|
||||
"babel-loader": "^7.1.5",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"css-loader": "^1.0.0",
|
||||
"karma": "^2.0.4",
|
||||
"mini-css-extract-plugin": "^0.4.1",
|
||||
"node-sass": "^4.9.2",
|
||||
"webpack": "^4.16.1",
|
||||
"webpack-cli": "^3.1.0",
|
||||
"webpack-merge": "^4.1.3"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "./node_modules/webpack-cli/bin/cli.js --mode production --config webpack.prod.config.js",
|
||||
"dev": "./node_modules/webpack-cli/bin/cli.js --mode development --config webpack.dev.config.js",
|
||||
"watch": "./node_modules/webpack-cli/bin/cli.js --mode development --config webpack.dev.config.js --watch",
|
||||
"test": "echo \"Warning: no test specified\" && exit 0"
|
||||
},
|
||||
"author": "",
|
||||
"license": "AGPL-3.0",
|
||||
"keywords": [],
|
||||
"description": ""
|
||||
"keywords": []
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
/** global: oc_defaults */
|
||||
app.factory('ApiService', function ($http, $q) {
|
||||
@@ -124,7 +125,9 @@ app.factory('ApiService', function ($http, $q) {
|
||||
this.data[entity.id] = entity;
|
||||
} else {
|
||||
Object.keys(entity).forEach(function (key) {
|
||||
element[key] = entity[key];
|
||||
if (entity[key] !== null && element[key] !== entity[key]) {
|
||||
element[key] = entity[key];
|
||||
}
|
||||
});
|
||||
element.status = {};
|
||||
}
|
||||
@@ -160,10 +163,14 @@ app.factory('ApiService', function ($http, $q) {
|
||||
return this.data;
|
||||
};
|
||||
|
||||
ApiService.prototype.get = function (id) {
|
||||
return this.data[id];
|
||||
};
|
||||
|
||||
ApiService.prototype.getName = function () {
|
||||
var funcNameRegex = /function (.{1,})\(/;
|
||||
var results = (funcNameRegex).exec((this).constructor.toString());
|
||||
return (results && results.length > 1) ? results[1] : "";
|
||||
return (results && results.length > 1) ? results[1] : '';
|
||||
};
|
||||
|
||||
return ApiService;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
import app from '../app/App.js';
|
||||
/* global app OC */
|
||||
app.factory('BoardService', function (ApiService, $http, $q) {
|
||||
var BoardService = function ($http, ep, $q) {
|
||||
@@ -77,8 +77,8 @@ app.factory('BoardService', function (ApiService, $http, $q) {
|
||||
}
|
||||
self.sharees = [];
|
||||
|
||||
var users = response.ocs.data.exact.users.concat(response.ocs.data.users);
|
||||
var groups = response.ocs.data.exact.groups.concat(response.ocs.data.groups);
|
||||
var users = response.ocs.data.exact.users.concat(response.ocs.data.users.slice(0, 4));
|
||||
var groups = response.ocs.data.exact.groups.concat(response.ocs.data.groups.slice(0, 4));
|
||||
|
||||
// filter out everyone who is already in the share list
|
||||
angular.forEach(users, function (item) {
|
||||
@@ -141,6 +141,11 @@ app.factory('BoardService', function (ApiService, $http, $q) {
|
||||
board.acl = {};
|
||||
}
|
||||
board.acl[response.data.id] = response.data;
|
||||
if (response.data.type === OC.Share.SHARE_TYPE_USER) {
|
||||
self._updateUsers();
|
||||
} else {
|
||||
self.fetchOne(response.data.boardId);
|
||||
}
|
||||
deferred.resolve(response.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error creating ACL ' + _acl);
|
||||
@@ -155,6 +160,11 @@ app.factory('BoardService', function (ApiService, $http, $q) {
|
||||
var self = this;
|
||||
$http.delete(this.baseUrl + '/' + acl.boardId + '/acl/' + acl.id).then(function (response) {
|
||||
delete board.acl[response.data.id];
|
||||
if (response.data.type === OC.Share.SHARE_TYPE_USER) {
|
||||
self._updateUsers();
|
||||
} else {
|
||||
self.fetchOne(response.data.boardId);
|
||||
}
|
||||
deferred.resolve(response.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error deleting ACL ' + acl.id);
|
||||
@@ -170,6 +180,11 @@ app.factory('BoardService', function (ApiService, $http, $q) {
|
||||
var _acl = acl;
|
||||
$http.put(this.baseUrl + '/' + acl.boardId + '/acl', _acl).then(function (response) {
|
||||
board.acl[_acl.id] = response.data;
|
||||
if (response.data.type === OC.Share.SHARE_TYPE_USER) {
|
||||
self._updateUsers();
|
||||
} else {
|
||||
self.fetchOne(response.data.boardId);
|
||||
}
|
||||
deferred.resolve(response.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error updating ACL ' + _acl);
|
||||
@@ -178,6 +193,27 @@ app.factory('BoardService', function (ApiService, $http, $q) {
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
BoardService.prototype._updateUsers = function () {
|
||||
if (!this.getCurrent() || !this.getCurrent().acl) {
|
||||
return [];
|
||||
}
|
||||
|
||||
this.getCurrent().users = [this.getCurrent().owner];
|
||||
let self = this;
|
||||
angular.forEach(this.getCurrent().acl, function(value, key) {
|
||||
if (value.type === OC.Share.SHARE_TYPE_USER) {
|
||||
self.getCurrent().users.push(value.participant);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
BoardService.prototype.getUsers = function () {
|
||||
if (this.getCurrent() && !this.getCurrent().users) {
|
||||
this._updateUsers();
|
||||
}
|
||||
return this.getCurrent().users;
|
||||
};
|
||||
|
||||
BoardService.prototype.canRead = function () {
|
||||
if (!this.getCurrent() || !this.getCurrent().permissions) {
|
||||
return false;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.factory('CardService', function (ApiService, $http, $q) {
|
||||
var CardService = function ($http, ep, $q) {
|
||||
@@ -105,11 +106,11 @@ app.factory('CardService', function (ApiService, $http, $q) {
|
||||
CardService.prototype.assignUser = function (card, user) {
|
||||
var deferred = $q.defer();
|
||||
var self = this;
|
||||
if (self.getCurrent().assignedUsers === null) {
|
||||
self.getCurrent().assignedUsers = [];
|
||||
if (self.get(card.id).assignedUsers === null) {
|
||||
self.get(card.id).assignedUsers = [];
|
||||
}
|
||||
$http.post(this.baseUrl + '/' + card.id + '/assign', {'userId': user}).then(function (response) {
|
||||
self.getCurrent().assignedUsers.push(response.data);
|
||||
self.get(card.id).assignedUsers.push(response.data);
|
||||
deferred.resolve(response.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error while update ' + self.endpoint);
|
||||
@@ -122,7 +123,7 @@ app.factory('CardService', function (ApiService, $http, $q) {
|
||||
var deferred = $q.defer();
|
||||
var self = this;
|
||||
$http.delete(this.baseUrl + '/' + card.id + '/assign/' + user, {}).then(function (response) {
|
||||
self.getCurrent().assignedUsers = self.getCurrent().assignedUsers.filter(function (obj) {
|
||||
self.get(card.id).assignedUsers = self.get(card.id).assignedUsers.filter(function (obj) {
|
||||
return obj.participant.uid !== user;
|
||||
});
|
||||
deferred.resolve(response.data);
|
||||
@@ -132,6 +133,45 @@ app.factory('CardService', function (ApiService, $http, $q) {
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
CardService.prototype.attachmentRemove = function (attachment) {
|
||||
var deferred = $q.defer();
|
||||
var self = this;
|
||||
$http.delete(this.baseUrl + '/' + this.getCurrent().id + '/attachment/' + attachment.id, {}).then(function (response) {
|
||||
if (response.data.deletedAt > 0) {
|
||||
let currentAttachment = self.getCurrent().attachments.find(function (obj) {
|
||||
if (obj.id === attachment.id) {
|
||||
obj.deletedAt = response.data.deletedAt;
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
self.getCurrent().attachments = self.getCurrent().attachments.filter(function (obj) {
|
||||
return obj.id !== attachment.id;
|
||||
});
|
||||
}
|
||||
deferred.resolve(response.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error when removing the attachment');
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
CardService.prototype.attachmentRemoveUndo = function (attachment) {
|
||||
var deferred = $q.defer();
|
||||
var self = this;
|
||||
$http.get(this.baseUrl + '/' + this.getCurrent().id + '/attachment/' + attachment.id + '/restore', {}).then(function (response) {
|
||||
let currentAttachment = self.getCurrent().attachments.find(function (obj) {
|
||||
if (obj.id === attachment.id) {
|
||||
obj.deletedAt = response.data.deletedAt;
|
||||
}
|
||||
});
|
||||
deferred.resolve(response.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error when restoring the attachment');
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
var service = new CardService($http, 'cards', $q);
|
||||
return service;
|
||||
});
|
||||
});
|
||||
|
||||
137
js/service/FileService.js
Normal file
137
js/service/FileService.js
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
import app from '../app/App.js';
|
||||
|
||||
/* global OC oc_requesttoken */
|
||||
export default class FileService {
|
||||
|
||||
constructor (FileUploader, CardService, $rootScope, $filter) {
|
||||
this.$filter = $filter;
|
||||
this.uploader = new FileUploader();
|
||||
this.cardservice = CardService;
|
||||
this.uploader.onAfterAddingFile = this.onAfterAddingFile.bind(this);
|
||||
this.uploader.onSuccessItem = this.onSuccessItem.bind(this);
|
||||
this.uploader.onErrorItem = this.onErrorItem.bind(this);
|
||||
this.uploader.onCancelItem = this.onCancelItem.bind(this);
|
||||
|
||||
this.maxUploadSize = $rootScope.config.maxUploadSize;
|
||||
this.progress = [];
|
||||
this.status = null;
|
||||
}
|
||||
|
||||
reset () {
|
||||
this.status = null;
|
||||
}
|
||||
|
||||
runUpload (fileItem, attachmentId) {
|
||||
this.status = null;
|
||||
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment?type=deck_file');
|
||||
if (typeof attachmentId !== 'undefined') {
|
||||
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment/' + attachmentId + '?type=deck_file');
|
||||
} else {
|
||||
fileItem.formData = [
|
||||
{
|
||||
requesttoken: oc_requesttoken,
|
||||
type: 'deck_file',
|
||||
}
|
||||
];
|
||||
}
|
||||
fileItem.headers = {requesttoken: oc_requesttoken};
|
||||
|
||||
this.uploader.uploadItem(fileItem);
|
||||
}
|
||||
|
||||
onAfterAddingFile (fileItem) {
|
||||
if (this.maxUploadSize > 0 && fileItem.file.size > this.maxUploadSize) {
|
||||
this.status = {
|
||||
error: t('deck', `Failed to upload {name}`, {name: fileItem.file.name}),
|
||||
message: t('deck', 'Maximum file size of {size} exceeded', {size: this.$filter('bytes')(this.maxUploadSize)})
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
// Fetch card details before trying to upload so we can detect filename collisions properly
|
||||
let self = this;
|
||||
this.progress.push(fileItem);
|
||||
this.cardservice.fetchOne(fileItem.cardId).then(function (data) {
|
||||
let attachments = self.cardservice.get(fileItem.cardId).attachments;
|
||||
let existingFile = attachments.find((attachment) => {
|
||||
return attachment.data === fileItem.file.name;
|
||||
});
|
||||
if (typeof existingFile !== 'undefined') {
|
||||
OC.dialogs.confirm(
|
||||
`A file with the name ${fileItem.file.name} already exists. Do you want to overwrite it?`,
|
||||
'File already exists',
|
||||
function (result) {
|
||||
if (result) {
|
||||
self.runUpload(fileItem, existingFile.id);
|
||||
} else {
|
||||
let fileName = existingFile.extendedData.info.filename;
|
||||
let foundFilesMatching = attachments.filter((attachment) => {
|
||||
return attachment.extendedData.info.extension === existingFile.extendedData.info.extension
|
||||
&& attachment.extendedData.info.filename.startsWith(fileName);
|
||||
});
|
||||
let nextIndex = foundFilesMatching.length + 1;
|
||||
fileItem.file.name = fileName + ' (' + nextIndex + ').' + existingFile.extendedData.info.extension;
|
||||
self.runUpload(fileItem);
|
||||
}
|
||||
}
|
||||
);
|
||||
} else {
|
||||
self.runUpload(fileItem);
|
||||
}
|
||||
}, function (error) {
|
||||
this.progress = this.progress.filter((item) => (fileItem.file.name !== item.file.name));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
onSuccessItem (item, response) {
|
||||
let attachments = this.cardservice.get(item.cardId).attachments;
|
||||
let index = attachments.indexOf(attachments.find((attachment) => attachment.id === response.id));
|
||||
if (~index) {
|
||||
attachments = attachments.splice(index, 1);
|
||||
}
|
||||
this.cardservice.get(item.cardId).attachments.push(response);
|
||||
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
|
||||
}
|
||||
|
||||
onErrorItem (item, response) {
|
||||
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
|
||||
this.status = {
|
||||
error: t('deck', `Failed to upload:`) + ' ' + item.file.name,
|
||||
message: response.message
|
||||
};
|
||||
}
|
||||
|
||||
onCancelItem (item) {
|
||||
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
|
||||
}
|
||||
|
||||
getProgressItemsForCard (cardId) {
|
||||
return this.progress.filter((fileItem) => (fileItem.cardId === cardId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
app.service('FileService', FileService);
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.factory('LabelService', function (ApiService, $http, $q) {
|
||||
var LabelService = function ($http, ep, $q) {
|
||||
|
||||
@@ -19,8 +19,10 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.factory('StackService', function (ApiService, $http, $q) {
|
||||
/* global app angular */
|
||||
app.factory('StackService', function (ApiService, CardService, $http, $q) {
|
||||
var StackService = function ($http, ep, $q) {
|
||||
ApiService.call(this, $http, ep, $q);
|
||||
};
|
||||
@@ -31,6 +33,12 @@ app.factory('StackService', function (ApiService, $http, $q) {
|
||||
$http.get(this.baseUrl + '/' + boardId).then(function (response) {
|
||||
self.clear();
|
||||
self.addAll(response.data);
|
||||
// When loading a stack add cards to the CardService so we can fetch
|
||||
// information from there. That way we don't need to refresh the whole
|
||||
// stack data during digest if some value changes
|
||||
angular.forEach(response.data, function (entity) {
|
||||
CardService.addAll(entity.cards);
|
||||
});
|
||||
deferred.resolve(self.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error while loading stacks');
|
||||
@@ -44,6 +52,9 @@ app.factory('StackService', function (ApiService, $http, $q) {
|
||||
$http.get(this.baseUrl + '/' + boardId + '/archived').then(function (response) {
|
||||
self.clear();
|
||||
self.addAll(response.data);
|
||||
angular.forEach(response.data, function (entity) {
|
||||
CardService.addAll(entity.cards);
|
||||
});
|
||||
deferred.resolve(self.data);
|
||||
}, function (error) {
|
||||
deferred.reject('Error while loading stacks');
|
||||
@@ -118,6 +129,26 @@ app.factory('StackService', function (ApiService, $http, $q) {
|
||||
}
|
||||
};
|
||||
|
||||
// FIXME: Should not show popup but proper undo mechanism
|
||||
StackService.prototype.delete = function (id) {
|
||||
var deferred = $q.defer();
|
||||
var self = this;
|
||||
|
||||
OC.dialogs.confirm(t('deck', 'Are you sure you want to delete the stack with all of its data?'), t('deck', 'Delete'), function(state) {
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
$http.delete(self.baseUrl + '/' + id).then(function (response) {
|
||||
self.remove(id);
|
||||
deferred.resolve(response.data);
|
||||
|
||||
}, function (error) {
|
||||
deferred.reject('Deleting ' + self.endpoint + ' failed');
|
||||
});
|
||||
});
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
var service = new StackService($http, 'stacks', $q);
|
||||
return service;
|
||||
});
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
import app from '../app/App.js';
|
||||
|
||||
app.factory('StatusService', function () {
|
||||
// Status Helper
|
||||
|
||||
68
js/webpack.config.js
Normal file
68
js/webpack.config.js
Normal file
@@ -0,0 +1,68 @@
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
|
||||
require('babel-polyfill');
|
||||
|
||||
module.exports = {
|
||||
node: {
|
||||
fs: 'empty',
|
||||
},
|
||||
entry: {
|
||||
deck: ['babel-polyfill', './init.js'],
|
||||
},
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
path: __dirname + '/build'
|
||||
},
|
||||
resolve: {
|
||||
modules: [path.resolve(__dirname), 'node_modules'],
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /node_modules/,
|
||||
loader: 'babel-loader',
|
||||
query: {
|
||||
presets: ['env'],
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: [
|
||||
MiniCssExtractPlugin.loader,
|
||||
'css-loader'
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
optimization: {
|
||||
splitChunks: {
|
||||
cacheGroups: {
|
||||
/* separate vendor chunk for node_modules and legacy scripts */
|
||||
commons: {
|
||||
test: /[\\/]node_modules[\\/]/,
|
||||
name: 'vendor',
|
||||
chunks: 'all'
|
||||
},
|
||||
legacy: {
|
||||
test: /[\\/]legacy[\\/]/,
|
||||
name: 'vendor',
|
||||
chunks: 'all'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
/* use external jQuery from server */
|
||||
externals: {
|
||||
'jquery': 'jQuery'
|
||||
},
|
||||
plugins: [
|
||||
new MiniCssExtractPlugin('[name].css'),
|
||||
new webpack.ProvidePlugin({
|
||||
$: 'jquery',
|
||||
jQuery: 'jquery'
|
||||
})
|
||||
]
|
||||
};
|
||||
6
js/webpack.dev.config.js
Normal file
6
js/webpack.dev.config.js
Normal file
@@ -0,0 +1,6 @@
|
||||
const merge = require('webpack-merge');
|
||||
const baseConfig = require('./webpack.config.js');
|
||||
|
||||
module.exports = merge(baseConfig, {
|
||||
mode: 'development'
|
||||
});
|
||||
15
js/webpack.prod.config.js
Normal file
15
js/webpack.prod.config.js
Normal file
@@ -0,0 +1,15 @@
|
||||
const webpack = require('webpack');
|
||||
const merge = require('webpack-merge');
|
||||
const baseConfig = require('./webpack.config.js');
|
||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
|
||||
|
||||
|
||||
module.exports = merge(baseConfig, {
|
||||
mode: 'production',
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new UglifyJsPlugin({
|
||||
test: /(vendor\.js)+/i
|
||||
})
|
||||
]
|
||||
}});
|
||||
@@ -4,13 +4,17 @@ exclude = [
|
||||
".git",
|
||||
"js/node_modules",
|
||||
"js/tests",
|
||||
"js/legacy",
|
||||
"js/controller",
|
||||
"js/directive",
|
||||
"js/filters",
|
||||
"js/service",
|
||||
"js/bower.json",
|
||||
"js/.bowerrc",
|
||||
"js/.jshintrc",
|
||||
"js/Gruntfile.js",
|
||||
"js/package.json",
|
||||
"js/package-lock.json",
|
||||
"js/vendor/jquery",
|
||||
"tests",
|
||||
".codecov.yml",
|
||||
"composer.json",
|
||||
|
||||
0
l10n/.gitkeep
Normal file
0
l10n/.gitkeep
Normal file
27
l10n/ast.js
27
l10n/ast.js
@@ -1,27 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Hours" : "Hores",
|
||||
"Minutes" : "Minutos",
|
||||
"Finished" : "Finó",
|
||||
"Action needed" : "Precísase aición",
|
||||
"Later" : "Más sero",
|
||||
"Deck" : "Deck",
|
||||
"Show archived cards" : "Amosar tarxetes archivaes",
|
||||
"Delete" : "Desaniciar",
|
||||
"Tags" : "Etiquetes",
|
||||
"Select users or groups to share with" : "Esbilla usuarios o grupos colos que compartir",
|
||||
"No matching user or group found." : "Nun s'alcontró dengún usuariu o grupu que concasara.",
|
||||
"Share" : "Compartir",
|
||||
"Edit" : "Editar",
|
||||
"Manage" : "Xestionar",
|
||||
"Discard share" : "Escartar compartición",
|
||||
"Title" : "Títulu",
|
||||
"Members" : "Miembros",
|
||||
"More actions" : "Más aiciones",
|
||||
"by" : "por",
|
||||
"Click to set" : "Primi p'afitar",
|
||||
"Description" : "Descripción",
|
||||
"Saved" : "Guardóse"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
@@ -1,25 +0,0 @@
|
||||
{ "translations": {
|
||||
"Hours" : "Hores",
|
||||
"Minutes" : "Minutos",
|
||||
"Finished" : "Finó",
|
||||
"Action needed" : "Precísase aición",
|
||||
"Later" : "Más sero",
|
||||
"Deck" : "Deck",
|
||||
"Show archived cards" : "Amosar tarxetes archivaes",
|
||||
"Delete" : "Desaniciar",
|
||||
"Tags" : "Etiquetes",
|
||||
"Select users or groups to share with" : "Esbilla usuarios o grupos colos que compartir",
|
||||
"No matching user or group found." : "Nun s'alcontró dengún usuariu o grupu que concasara.",
|
||||
"Share" : "Compartir",
|
||||
"Edit" : "Editar",
|
||||
"Manage" : "Xestionar",
|
||||
"Discard share" : "Escartar compartición",
|
||||
"Title" : "Títulu",
|
||||
"Members" : "Miembros",
|
||||
"More actions" : "Más aiciones",
|
||||
"by" : "por",
|
||||
"Click to set" : "Primi p'afitar",
|
||||
"Description" : "Descripción",
|
||||
"Saved" : "Guardóse"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
24
l10n/bg.js
24
l10n/bg.js
@@ -1,24 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Finished" : "Завършен",
|
||||
"To review" : "За преглед",
|
||||
"Action needed" : "Необходимо е действие",
|
||||
"Later" : "По-късно",
|
||||
"Archive" : "Архивиране",
|
||||
"Unarchive" : "Разархивиране",
|
||||
"Delete" : "Изтриване",
|
||||
"Sharing" : "Споделяне",
|
||||
"Select users or groups to share with" : "Избор на потребители и групи за споделяне",
|
||||
"No matching user or group found." : "Не са намерени съвпадащи потребители или групи",
|
||||
"Share" : "Сподели",
|
||||
"Edit" : "Редакция",
|
||||
"Manage" : "Управление",
|
||||
"Discard share" : "Отхвърляне на споделяне",
|
||||
"Members" : "Членове",
|
||||
"Modified:" : "Променен на:",
|
||||
"Created:" : "Създаден на:",
|
||||
"by" : "от",
|
||||
"Saved" : "Запазено"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
22
l10n/bg.json
22
l10n/bg.json
@@ -1,22 +0,0 @@
|
||||
{ "translations": {
|
||||
"Finished" : "Завършен",
|
||||
"To review" : "За преглед",
|
||||
"Action needed" : "Необходимо е действие",
|
||||
"Later" : "По-късно",
|
||||
"Archive" : "Архивиране",
|
||||
"Unarchive" : "Разархивиране",
|
||||
"Delete" : "Изтриване",
|
||||
"Sharing" : "Споделяне",
|
||||
"Select users or groups to share with" : "Избор на потребители и групи за споделяне",
|
||||
"No matching user or group found." : "Не са намерени съвпадащи потребители или групи",
|
||||
"Share" : "Сподели",
|
||||
"Edit" : "Редакция",
|
||||
"Manage" : "Управление",
|
||||
"Discard share" : "Отхвърляне на споделяне",
|
||||
"Members" : "Членове",
|
||||
"Modified:" : "Променен на:",
|
||||
"Created:" : "Създаден на:",
|
||||
"by" : "от",
|
||||
"Saved" : "Запазено"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Delete" : "Esborra",
|
||||
"Remove user from card" : "Esborra usuari de la targeta",
|
||||
"Hours" : "Hores",
|
||||
"Minutes" : "Minuts",
|
||||
"Finished" : "Acabat",
|
||||
@@ -16,7 +18,6 @@ OC.L10N.register(
|
||||
"Archived boards" : "Taulers arxivats",
|
||||
"Archive" : "Arxiu",
|
||||
"Unarchive" : "Desbloquejar",
|
||||
"Delete" : "Esborra",
|
||||
"Enter a card title" : "Introduïu un títol de la targeta",
|
||||
"Sharing" : "Compartir",
|
||||
"Tags" : "Etiquetes",
|
||||
@@ -36,15 +37,15 @@ OC.L10N.register(
|
||||
"Delete board" : "Eliminat",
|
||||
"Create new board" : "Crear nova",
|
||||
"New board title" : "Nou títol",
|
||||
"by" : "per",
|
||||
"Modified:" : "Modificat:",
|
||||
"Created:" : "Creat:",
|
||||
"by" : "per",
|
||||
"Due date" : "Per la data",
|
||||
"Click to set" : "Feu clic per configurar",
|
||||
"Remove due date" : "Elimina la data de venciment",
|
||||
"Description" : "Descripció",
|
||||
"Formatting help" : "Format d'ajuda",
|
||||
"Saved" : "Desat",
|
||||
"Formatting help" : "Format d'ajuda",
|
||||
"Add a card description…" : "Afegeix una descripció de la targeta ...",
|
||||
"Shared boards" : "Taulers compartits",
|
||||
"Move board to archive" : "Mou la placa a l'arxiu",
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
{ "translations": {
|
||||
"Delete" : "Esborra",
|
||||
"Remove user from card" : "Esborra usuari de la targeta",
|
||||
"Hours" : "Hores",
|
||||
"Minutes" : "Minuts",
|
||||
"Finished" : "Acabat",
|
||||
@@ -14,7 +16,6 @@
|
||||
"Archived boards" : "Taulers arxivats",
|
||||
"Archive" : "Arxiu",
|
||||
"Unarchive" : "Desbloquejar",
|
||||
"Delete" : "Esborra",
|
||||
"Enter a card title" : "Introduïu un títol de la targeta",
|
||||
"Sharing" : "Compartir",
|
||||
"Tags" : "Etiquetes",
|
||||
@@ -34,15 +35,15 @@
|
||||
"Delete board" : "Eliminat",
|
||||
"Create new board" : "Crear nova",
|
||||
"New board title" : "Nou títol",
|
||||
"by" : "per",
|
||||
"Modified:" : "Modificat:",
|
||||
"Created:" : "Creat:",
|
||||
"by" : "per",
|
||||
"Due date" : "Per la data",
|
||||
"Click to set" : "Feu clic per configurar",
|
||||
"Remove due date" : "Elimina la data de venciment",
|
||||
"Description" : "Descripció",
|
||||
"Formatting help" : "Format d'ajuda",
|
||||
"Saved" : "Desat",
|
||||
"Formatting help" : "Format d'ajuda",
|
||||
"Add a card description…" : "Afegeix una descripció de la targeta ...",
|
||||
"Shared boards" : "Taulers compartits",
|
||||
"Move board to archive" : "Mou la placa a l'arxiu",
|
||||
|
||||
47
l10n/cs.js
47
l10n/cs.js
@@ -1,16 +1,40 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "Opravdu chcete smazat tuto kartu a všechna její data?",
|
||||
"Delete" : "Smazat",
|
||||
"Remove user from card" : "Odebrat uživatele z karty",
|
||||
"Hours" : "Hodiny",
|
||||
"Minutes" : "Minuty",
|
||||
"Maximum file size of {size} exceeded" : "U souboru {size} překročena nejvyšší umožněná velikost",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Opravdu chcete smazat stack a všechna data v něm?",
|
||||
"Personal" : "Osobní",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "U karty \"%s\" z tabule \"%s\" nastalo plánované datum dokončení.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Tabule \"%s\" s vámi byla nasdílena uživatelem %s.",
|
||||
"{user} has shared the board %s with you." : "{user} s vámi nasdílel tabuli %s.",
|
||||
"No data was provided to create an attachment." : "Žádná data k vytvoření přílohy.",
|
||||
"Finished" : "Dokončeno",
|
||||
"To review" : "K revizi",
|
||||
"Action needed" : "Nutná akce",
|
||||
"Later" : "Později",
|
||||
"To do" : "Udělat",
|
||||
"Doing" : "Provádím",
|
||||
"Done" : "Hotovo",
|
||||
"Example Task 3" : "Třetí úkol pro ukázku",
|
||||
"Example Task 2" : "Druhý úkol pro ukázku",
|
||||
"Example Task 1" : "První úkol pro ukázku",
|
||||
"The file was uploaded" : "Soubor byl nahrán",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Nahrávaný soubor přesahuje nastavení upload_max_filesize v php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný ve formuláři HTML",
|
||||
"The file was only partially uploaded" : "Soubor byl nahrán pouze z části",
|
||||
"No file was uploaded" : "Nebyl nahrán žádný soubor",
|
||||
"Missing a temporary folder" : "Chybí adresář pro dočasné soubory",
|
||||
"Could not write file to disk" : "Nedaří se zapsat soubor do úložiště",
|
||||
"A PHP extension stopped the file upload" : "Rozšíření PHP zastavilo nahrávání souboru.",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Soubor nebyl nahrán nebo jeho velikost přesáhla %s",
|
||||
"Deck" : "Balík",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Nástroj pro projektový a osobní management ve stylu Kanban.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Karty jsou nástroj zacílený na osobní nebo projektové plánování týmů v Kanban stylu, jenž je zaintegrovaný do Nextcloudu.\n\n\n- 📥 Vložte a uspořádejte své úkoly do karet\n- 📄 Zapište si dodatečné poznámky \n- 🔖 Přilepte štítek pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přátely nebo rodinou\n- 🚀 Dostaťe svůj projekt pod kontrolu",
|
||||
"Add a new stack" : "Přidat nový zásobník",
|
||||
"Submit" : "Odeslat",
|
||||
"Show archived cards" : "Zobrazit archivované karty",
|
||||
@@ -18,9 +42,11 @@ OC.L10N.register(
|
||||
"Board details" : "Detaily desky",
|
||||
"All Boards" : "Všechny desky",
|
||||
"Archived boards" : "Archivované desky",
|
||||
"Drop your files here to upload it to the card" : "Přetáhněte soubor sem, pokud jej chcete připojit ke kartě.",
|
||||
"Assign to me" : "Přiřadit mě",
|
||||
"Unassign from me" : "Zrušit přiřazení mě",
|
||||
"Archive" : "Archiv",
|
||||
"Unarchive" : "Zrušit archivování",
|
||||
"Delete" : "Smazat",
|
||||
"Enter a card title" : "Zadejte nadpis karty",
|
||||
"Add card" : "Přidat kartu",
|
||||
"Close" : "Zavřít",
|
||||
@@ -36,7 +62,7 @@ OC.L10N.register(
|
||||
"Discard share" : "Zrušit sdílení",
|
||||
"Update" : "Aktualizovat",
|
||||
"Create" : "Vytvořit",
|
||||
"Create a new tag" : "Vytvořit novou značku",
|
||||
"Create a new tag" : "Vytvořit nový štítek",
|
||||
"Status" : "Stav",
|
||||
"Title" : "Název",
|
||||
"Members" : "Členové",
|
||||
@@ -47,27 +73,36 @@ OC.L10N.register(
|
||||
"Delete board" : "Smazat desku",
|
||||
"Reset" : "Obnovit",
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule - Tabule bude jinak trvale odstraněna během příštího běhu cronjobu.",
|
||||
"Create new board" : "VYtvořit ovou desku",
|
||||
"Create new board" : "Vytvořit novou desku",
|
||||
"New board title" : "Nadpis nové desky",
|
||||
"Select an attachment" : "Vybrat přílohu",
|
||||
"Cancel upload" : "Zrušit nahrávání",
|
||||
"by" : "od",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Vrátit smazání souboru - v opačném případě bude soubor trvale smazán při dalším běhu cronjobu.",
|
||||
"Undo file deletion" : "Vzít zpět smazání souboru",
|
||||
"Insert the file into the description" : "Vložte soubor do popisku.",
|
||||
"Modified:" : "Upraveno:",
|
||||
"Created:" : "Vytvořeno:",
|
||||
"by" : "od",
|
||||
"Choose a tag" : "Vyberte štítek",
|
||||
"Add a tag" : "Přidat štítek",
|
||||
"Select tags" : "Výběr štítků",
|
||||
"Assign users" : "Přiřadit uživatele",
|
||||
"Choose a user to assign" : "Zvolte uživatele kterého přiřadit",
|
||||
"Assign this card to a user" : "Přiřadit kartu uživateli",
|
||||
"Due date" : "Termín",
|
||||
"Click to set" : "Klikněte pro výběr",
|
||||
"Remove due date" : "Odstranit termín",
|
||||
"Description" : "Popis",
|
||||
"Formatting help" : "Nápověda k formátování",
|
||||
"Attachments" : "Přílohy",
|
||||
"Saved" : "Uloženo",
|
||||
"Unsaved changes" : "Neuložené změny",
|
||||
"Formatting help" : "Nápověda k formátování",
|
||||
"Upload attachment" : "Nahrát přílohu",
|
||||
"Insert attachment" : "Vložit přílohu",
|
||||
"Add a card description…" : "Přidat popis karty...",
|
||||
"Shared boards" : "Sdílené desky",
|
||||
"View more" : "Ukázat více",
|
||||
"Move board to archive" : "Přesunout desku do archivu",
|
||||
"Create a new board" : "Vytvořit novou desku"
|
||||
},
|
||||
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
|
||||
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
|
||||
|
||||
47
l10n/cs.json
47
l10n/cs.json
@@ -1,14 +1,38 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "Opravdu chcete smazat tuto kartu a všechna její data?",
|
||||
"Delete" : "Smazat",
|
||||
"Remove user from card" : "Odebrat uživatele z karty",
|
||||
"Hours" : "Hodiny",
|
||||
"Minutes" : "Minuty",
|
||||
"Maximum file size of {size} exceeded" : "U souboru {size} překročena nejvyšší umožněná velikost",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Opravdu chcete smazat stack a všechna data v něm?",
|
||||
"Personal" : "Osobní",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "U karty \"%s\" z tabule \"%s\" nastalo plánované datum dokončení.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Tabule \"%s\" s vámi byla nasdílena uživatelem %s.",
|
||||
"{user} has shared the board %s with you." : "{user} s vámi nasdílel tabuli %s.",
|
||||
"No data was provided to create an attachment." : "Žádná data k vytvoření přílohy.",
|
||||
"Finished" : "Dokončeno",
|
||||
"To review" : "K revizi",
|
||||
"Action needed" : "Nutná akce",
|
||||
"Later" : "Později",
|
||||
"To do" : "Udělat",
|
||||
"Doing" : "Provádím",
|
||||
"Done" : "Hotovo",
|
||||
"Example Task 3" : "Třetí úkol pro ukázku",
|
||||
"Example Task 2" : "Druhý úkol pro ukázku",
|
||||
"Example Task 1" : "První úkol pro ukázku",
|
||||
"The file was uploaded" : "Soubor byl nahrán",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Nahrávaný soubor přesahuje nastavení upload_max_filesize v php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný ve formuláři HTML",
|
||||
"The file was only partially uploaded" : "Soubor byl nahrán pouze z části",
|
||||
"No file was uploaded" : "Nebyl nahrán žádný soubor",
|
||||
"Missing a temporary folder" : "Chybí adresář pro dočasné soubory",
|
||||
"Could not write file to disk" : "Nedaří se zapsat soubor do úložiště",
|
||||
"A PHP extension stopped the file upload" : "Rozšíření PHP zastavilo nahrávání souboru.",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Soubor nebyl nahrán nebo jeho velikost přesáhla %s",
|
||||
"Deck" : "Balík",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Nástroj pro projektový a osobní management ve stylu Kanban.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Karty jsou nástroj zacílený na osobní nebo projektové plánování týmů v Kanban stylu, jenž je zaintegrovaný do Nextcloudu.\n\n\n- 📥 Vložte a uspořádejte své úkoly do karet\n- 📄 Zapište si dodatečné poznámky \n- 🔖 Přilepte štítek pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přátely nebo rodinou\n- 🚀 Dostaťe svůj projekt pod kontrolu",
|
||||
"Add a new stack" : "Přidat nový zásobník",
|
||||
"Submit" : "Odeslat",
|
||||
"Show archived cards" : "Zobrazit archivované karty",
|
||||
@@ -16,9 +40,11 @@
|
||||
"Board details" : "Detaily desky",
|
||||
"All Boards" : "Všechny desky",
|
||||
"Archived boards" : "Archivované desky",
|
||||
"Drop your files here to upload it to the card" : "Přetáhněte soubor sem, pokud jej chcete připojit ke kartě.",
|
||||
"Assign to me" : "Přiřadit mě",
|
||||
"Unassign from me" : "Zrušit přiřazení mě",
|
||||
"Archive" : "Archiv",
|
||||
"Unarchive" : "Zrušit archivování",
|
||||
"Delete" : "Smazat",
|
||||
"Enter a card title" : "Zadejte nadpis karty",
|
||||
"Add card" : "Přidat kartu",
|
||||
"Close" : "Zavřít",
|
||||
@@ -34,7 +60,7 @@
|
||||
"Discard share" : "Zrušit sdílení",
|
||||
"Update" : "Aktualizovat",
|
||||
"Create" : "Vytvořit",
|
||||
"Create a new tag" : "Vytvořit novou značku",
|
||||
"Create a new tag" : "Vytvořit nový štítek",
|
||||
"Status" : "Stav",
|
||||
"Title" : "Název",
|
||||
"Members" : "Členové",
|
||||
@@ -45,27 +71,36 @@
|
||||
"Delete board" : "Smazat desku",
|
||||
"Reset" : "Obnovit",
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule - Tabule bude jinak trvale odstraněna během příštího běhu cronjobu.",
|
||||
"Create new board" : "VYtvořit ovou desku",
|
||||
"Create new board" : "Vytvořit novou desku",
|
||||
"New board title" : "Nadpis nové desky",
|
||||
"Select an attachment" : "Vybrat přílohu",
|
||||
"Cancel upload" : "Zrušit nahrávání",
|
||||
"by" : "od",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Vrátit smazání souboru - v opačném případě bude soubor trvale smazán při dalším běhu cronjobu.",
|
||||
"Undo file deletion" : "Vzít zpět smazání souboru",
|
||||
"Insert the file into the description" : "Vložte soubor do popisku.",
|
||||
"Modified:" : "Upraveno:",
|
||||
"Created:" : "Vytvořeno:",
|
||||
"by" : "od",
|
||||
"Choose a tag" : "Vyberte štítek",
|
||||
"Add a tag" : "Přidat štítek",
|
||||
"Select tags" : "Výběr štítků",
|
||||
"Assign users" : "Přiřadit uživatele",
|
||||
"Choose a user to assign" : "Zvolte uživatele kterého přiřadit",
|
||||
"Assign this card to a user" : "Přiřadit kartu uživateli",
|
||||
"Due date" : "Termín",
|
||||
"Click to set" : "Klikněte pro výběr",
|
||||
"Remove due date" : "Odstranit termín",
|
||||
"Description" : "Popis",
|
||||
"Formatting help" : "Nápověda k formátování",
|
||||
"Attachments" : "Přílohy",
|
||||
"Saved" : "Uloženo",
|
||||
"Unsaved changes" : "Neuložené změny",
|
||||
"Formatting help" : "Nápověda k formátování",
|
||||
"Upload attachment" : "Nahrát přílohu",
|
||||
"Insert attachment" : "Vložit přílohu",
|
||||
"Add a card description…" : "Přidat popis karty...",
|
||||
"Shared boards" : "Sdílené desky",
|
||||
"View more" : "Ukázat více",
|
||||
"Move board to archive" : "Přesunout desku do archivu",
|
||||
"Create a new board" : "Vytvořit novou desku"
|
||||
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
}
|
||||
16
l10n/da.js
16
l10n/da.js
@@ -1,16 +1,22 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "Er du sikker på, at du vil slette dette kort med alle dets data?",
|
||||
"Delete" : "Slet",
|
||||
"Remove user from card" : "Fjern bruger fra kort",
|
||||
"Hours" : "Timer",
|
||||
"Minutes" : "Minutter",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Er du sikker på, at du ønsker at slette denne stak med alle data?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin udløbsdato.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Brættet \"%s\" er blevet delt med dig af %s.",
|
||||
"{user} has shared the board %s with you." : "{user} har delt brættet %s med dig.",
|
||||
"Finished" : "Færdiggjort",
|
||||
"To review" : "Efterse",
|
||||
"To review" : "Gennemse",
|
||||
"Action needed" : "Handling påkrævet",
|
||||
"Later" : "Senere",
|
||||
"Deck" : "Tavle",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Et Kanban-inspireret projekt- og styringsværktøj til Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck er et Kanban-inspireret organisationsværktøj beregnet til personlig planlægning og projektstyring for teams - integreret med Nextcloud.\n\n\n- 📥 Tilføj dine opgaver til kort og organiser dem\n- 📄 Skriv yderligere noter i Markdown\n- 🔖 Marker opgaver med tags for bedre organisering\n- 👥 Del med team, venner eller familie\n- 🚀 Organiser dit projekt",
|
||||
"Add a new stack" : "Tilføj en ny stak",
|
||||
"Submit" : "Tilføj",
|
||||
"Show archived cards" : "Vis arkiverede kort",
|
||||
@@ -20,7 +26,6 @@ OC.L10N.register(
|
||||
"Archived boards" : "Arkiverede lister",
|
||||
"Archive" : "Arkivér",
|
||||
"Unarchive" : "Annuller arkivering",
|
||||
"Delete" : "Slet",
|
||||
"Enter a card title" : "Angiv titel på kort",
|
||||
"Add card" : "Tilføj kort",
|
||||
"Close" : "Luk",
|
||||
@@ -49,21 +54,22 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Fortryd sletning af board - Ellers vil boardet blive slettet ved næste cronjob kørsel.",
|
||||
"Create new board" : "Opret ny liste",
|
||||
"New board title" : "Ny titel på liste",
|
||||
"by" : "af",
|
||||
"Modified:" : "Ændret:",
|
||||
"Created:" : "Oprettet:",
|
||||
"by" : "af",
|
||||
"Choose a tag" : "Vælg et tag",
|
||||
"Add a tag" : "Tilføj et tag",
|
||||
"Select tags" : "Vælg tags",
|
||||
"Assign users" : "Tildel brugere",
|
||||
"Choose a user to assign" : "Vælg en bruger at tildele til",
|
||||
"Assign this card to a user" : "Tildel dette kort til en bruger",
|
||||
"Due date" : "Forfaldsdato",
|
||||
"Click to set" : "Klik for at sætte",
|
||||
"Remove due date" : "Fjern forfaldsdato",
|
||||
"Description" : "Beskrivelse",
|
||||
"Formatting help" : "Hjælp til formatering",
|
||||
"Saved" : "Gemt",
|
||||
"Unsaved changes" : "Ikke gemte ændringer",
|
||||
"Formatting help" : "Hjælp til formatering",
|
||||
"Add a card description…" : "Tilføj en beskrivelse...",
|
||||
"Shared boards" : "Delte lister",
|
||||
"View more" : "Vis mere",
|
||||
|
||||
16
l10n/da.json
16
l10n/da.json
@@ -1,14 +1,20 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "Er du sikker på, at du vil slette dette kort med alle dets data?",
|
||||
"Delete" : "Slet",
|
||||
"Remove user from card" : "Fjern bruger fra kort",
|
||||
"Hours" : "Timer",
|
||||
"Minutes" : "Minutter",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Er du sikker på, at du ønsker at slette denne stak med alle data?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin udløbsdato.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Brættet \"%s\" er blevet delt med dig af %s.",
|
||||
"{user} has shared the board %s with you." : "{user} har delt brættet %s med dig.",
|
||||
"Finished" : "Færdiggjort",
|
||||
"To review" : "Efterse",
|
||||
"To review" : "Gennemse",
|
||||
"Action needed" : "Handling påkrævet",
|
||||
"Later" : "Senere",
|
||||
"Deck" : "Tavle",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Et Kanban-inspireret projekt- og styringsværktøj til Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck er et Kanban-inspireret organisationsværktøj beregnet til personlig planlægning og projektstyring for teams - integreret med Nextcloud.\n\n\n- 📥 Tilføj dine opgaver til kort og organiser dem\n- 📄 Skriv yderligere noter i Markdown\n- 🔖 Marker opgaver med tags for bedre organisering\n- 👥 Del med team, venner eller familie\n- 🚀 Organiser dit projekt",
|
||||
"Add a new stack" : "Tilføj en ny stak",
|
||||
"Submit" : "Tilføj",
|
||||
"Show archived cards" : "Vis arkiverede kort",
|
||||
@@ -18,7 +24,6 @@
|
||||
"Archived boards" : "Arkiverede lister",
|
||||
"Archive" : "Arkivér",
|
||||
"Unarchive" : "Annuller arkivering",
|
||||
"Delete" : "Slet",
|
||||
"Enter a card title" : "Angiv titel på kort",
|
||||
"Add card" : "Tilføj kort",
|
||||
"Close" : "Luk",
|
||||
@@ -47,21 +52,22 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Fortryd sletning af board - Ellers vil boardet blive slettet ved næste cronjob kørsel.",
|
||||
"Create new board" : "Opret ny liste",
|
||||
"New board title" : "Ny titel på liste",
|
||||
"by" : "af",
|
||||
"Modified:" : "Ændret:",
|
||||
"Created:" : "Oprettet:",
|
||||
"by" : "af",
|
||||
"Choose a tag" : "Vælg et tag",
|
||||
"Add a tag" : "Tilføj et tag",
|
||||
"Select tags" : "Vælg tags",
|
||||
"Assign users" : "Tildel brugere",
|
||||
"Choose a user to assign" : "Vælg en bruger at tildele til",
|
||||
"Assign this card to a user" : "Tildel dette kort til en bruger",
|
||||
"Due date" : "Forfaldsdato",
|
||||
"Click to set" : "Klik for at sætte",
|
||||
"Remove due date" : "Fjern forfaldsdato",
|
||||
"Description" : "Beskrivelse",
|
||||
"Formatting help" : "Hjælp til formatering",
|
||||
"Saved" : "Gemt",
|
||||
"Unsaved changes" : "Ikke gemte ændringer",
|
||||
"Formatting help" : "Hjælp til formatering",
|
||||
"Add a card description…" : "Tilføj en beskrivelse...",
|
||||
"Shared boards" : "Delte lister",
|
||||
"View more" : "Vis mere",
|
||||
|
||||
46
l10n/de.js
46
l10n/de.js
@@ -1,17 +1,40 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "Möchtest Du wirklich diese Karte mit all ihren Daten löschen?",
|
||||
"Delete" : "Löschen",
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchtest du diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"Personal" : "Persönlich",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Dir geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Dir geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"To do" : "Offen",
|
||||
"Doing" : "In Arbeit",
|
||||
"Done" : "Erledigt",
|
||||
"Example Task 3" : "Beispielaufgabe 3",
|
||||
"Example Task 2" : "Beispielaufgabe 2",
|
||||
"Example Task 1" : "Beispielaufgabe 1",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 🚀 Organisiere Dein Projekt",
|
||||
"Add a new stack" : "Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -19,14 +42,16 @@ OC.L10N.register(
|
||||
"Board details" : "Board-Details",
|
||||
"All Boards" : "Alle Boards",
|
||||
"Archived boards" : "Archivierte Boards",
|
||||
"Drop your files here to upload it to the card" : "Lege Deine Dateien hier ab, um sie auf die Karte hochzuladen",
|
||||
"Assign to me" : "Mir zuweisen",
|
||||
"Unassign from me" : "Nicht mir zuweisen",
|
||||
"Archive" : "Archivieren",
|
||||
"Unarchive" : "Dearchivieren",
|
||||
"Delete" : "Löschen",
|
||||
"Enter a card title" : "Kartentitel eingeben",
|
||||
"Add card" : "Karte hinzufügen",
|
||||
"Close" : "Schließen",
|
||||
"Sharing" : "Teilen",
|
||||
"Tags" : "Etiketten",
|
||||
"Tags" : "Schlagworte",
|
||||
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
|
||||
"Access for" : "Zugriff für",
|
||||
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
|
||||
@@ -50,21 +75,30 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Anhang auswählen",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"by" : "von",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagwörter auswählen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Nutzer zuweisen",
|
||||
"Assign this card to a user" : "Diese Karte einem Nutzer zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
|
||||
"Due date" : "Fälligkeitsdatum",
|
||||
"Click to set" : "Klicken zum Übernehmen",
|
||||
"Remove due date" : "Ablaufdatum löschen",
|
||||
"Description" : "Beschreibung",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Attachments" : "Anhänge",
|
||||
"Saved" : "Gespeichert",
|
||||
"Unsaved changes" : "Ungesicherte Änderungen",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Upload attachment" : "Anhang hochladen",
|
||||
"Insert attachment" : "Anhang einfügen",
|
||||
"Add a card description…" : "Eine Kartenbeschreibung hinzufügen…",
|
||||
"Shared boards" : "Geteilte Boards",
|
||||
"View more" : "Mehr anzeigen",
|
||||
|
||||
46
l10n/de.json
46
l10n/de.json
@@ -1,15 +1,38 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "Möchtest Du wirklich diese Karte mit all ihren Daten löschen?",
|
||||
"Delete" : "Löschen",
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchtest du diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"Personal" : "Persönlich",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Dir geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Dir geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"To do" : "Offen",
|
||||
"Doing" : "In Arbeit",
|
||||
"Done" : "Erledigt",
|
||||
"Example Task 3" : "Beispielaufgabe 3",
|
||||
"Example Task 2" : "Beispielaufgabe 2",
|
||||
"Example Task 1" : "Beispielaufgabe 1",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 🚀 Organisiere Dein Projekt",
|
||||
"Add a new stack" : "Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -17,14 +40,16 @@
|
||||
"Board details" : "Board-Details",
|
||||
"All Boards" : "Alle Boards",
|
||||
"Archived boards" : "Archivierte Boards",
|
||||
"Drop your files here to upload it to the card" : "Lege Deine Dateien hier ab, um sie auf die Karte hochzuladen",
|
||||
"Assign to me" : "Mir zuweisen",
|
||||
"Unassign from me" : "Nicht mir zuweisen",
|
||||
"Archive" : "Archivieren",
|
||||
"Unarchive" : "Dearchivieren",
|
||||
"Delete" : "Löschen",
|
||||
"Enter a card title" : "Kartentitel eingeben",
|
||||
"Add card" : "Karte hinzufügen",
|
||||
"Close" : "Schließen",
|
||||
"Sharing" : "Teilen",
|
||||
"Tags" : "Etiketten",
|
||||
"Tags" : "Schlagworte",
|
||||
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
|
||||
"Access for" : "Zugriff für",
|
||||
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
|
||||
@@ -48,21 +73,30 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Anhang auswählen",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"by" : "von",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagwörter auswählen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Nutzer zuweisen",
|
||||
"Assign this card to a user" : "Diese Karte einem Nutzer zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
|
||||
"Due date" : "Fälligkeitsdatum",
|
||||
"Click to set" : "Klicken zum Übernehmen",
|
||||
"Remove due date" : "Ablaufdatum löschen",
|
||||
"Description" : "Beschreibung",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Attachments" : "Anhänge",
|
||||
"Saved" : "Gespeichert",
|
||||
"Unsaved changes" : "Ungesicherte Änderungen",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Upload attachment" : "Anhang hochladen",
|
||||
"Insert attachment" : "Anhang einfügen",
|
||||
"Add a card description…" : "Eine Kartenbeschreibung hinzufügen…",
|
||||
"Shared boards" : "Geteilte Boards",
|
||||
"View more" : "Mehr anzeigen",
|
||||
|
||||
@@ -1,17 +1,40 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "Möchten Sie wirklich diese Karte mit all ihren Daten löschen?",
|
||||
"Delete" : "Löschen",
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchten Sie diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"Personal" : "Persönlich",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Ihnen geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Ihnen geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"To do" : "Offen",
|
||||
"Doing" : "In Arbeit",
|
||||
"Done" : "Erledigt",
|
||||
"Example Task 3" : "Beispielaufgabe 3",
|
||||
"Example Task 2" : "Beispielaufgabe 2",
|
||||
"Example Task 1" : "Beispielaufgabe 1",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisung von Labels für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 🚀 Organisieren Sie Ihr Projekt",
|
||||
"Add a new stack" : "Neuen Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -19,14 +42,16 @@ OC.L10N.register(
|
||||
"Board details" : "Board-Details",
|
||||
"All Boards" : "Alle Boards",
|
||||
"Archived boards" : "Archivierte Boards",
|
||||
"Drop your files here to upload it to the card" : "Legen Sie Ihre Dateien hier ab, um sie auf die Karte hochzuladen",
|
||||
"Assign to me" : "Mir zuweisen",
|
||||
"Unassign from me" : "Nicht mir zuweisen",
|
||||
"Archive" : "Archivieren",
|
||||
"Unarchive" : "Dearchivieren",
|
||||
"Delete" : "Löschen",
|
||||
"Enter a card title" : "Kartentitel eingeben",
|
||||
"Add card" : "Karte hinzufügen",
|
||||
"Close" : "Schließen",
|
||||
"Sharing" : "Teilen",
|
||||
"Tags" : "Tags",
|
||||
"Tags" : "Schlagworte",
|
||||
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
|
||||
"Access for" : "Zugriff für",
|
||||
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
|
||||
@@ -37,7 +62,7 @@ OC.L10N.register(
|
||||
"Discard share" : "Teilen beenden",
|
||||
"Update" : "Aktualisieren",
|
||||
"Create" : "Erstellen",
|
||||
"Create a new tag" : "Tag erstellen",
|
||||
"Create a new tag" : "Schlagwort erstellen",
|
||||
"Status" : "Status",
|
||||
"Title" : "Titel",
|
||||
"Members" : "Mitglieder",
|
||||
@@ -50,21 +75,30 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Wählen Sie einen Anhang",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"by" : "von",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagwörter auswählen",
|
||||
"Assign users" : "Benutzer zuordnen",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Benutzer zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
|
||||
"Due date" : "Zieltermin",
|
||||
"Click to set" : "Setzen",
|
||||
"Remove due date" : "Zieltermin entfernen",
|
||||
"Description" : "Beschreibung",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Attachments" : "Anhänge",
|
||||
"Saved" : "Gespeichert",
|
||||
"Unsaved changes" : "Ungesicherte Änderungen",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Upload attachment" : "Anhang hochladen",
|
||||
"Insert attachment" : "Anhang einfügen",
|
||||
"Add a card description…" : "Beschreibung hinzufügen…",
|
||||
"Shared boards" : "Geteilte Boards",
|
||||
"View more" : "Mehr anzeigen",
|
||||
|
||||
@@ -1,15 +1,38 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "Möchten Sie wirklich diese Karte mit all ihren Daten löschen?",
|
||||
"Delete" : "Löschen",
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchten Sie diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"Personal" : "Persönlich",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Ihnen geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Ihnen geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"To do" : "Offen",
|
||||
"Doing" : "In Arbeit",
|
||||
"Done" : "Erledigt",
|
||||
"Example Task 3" : "Beispielaufgabe 3",
|
||||
"Example Task 2" : "Beispielaufgabe 2",
|
||||
"Example Task 1" : "Beispielaufgabe 1",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisung von Labels für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 🚀 Organisieren Sie Ihr Projekt",
|
||||
"Add a new stack" : "Neuen Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -17,14 +40,16 @@
|
||||
"Board details" : "Board-Details",
|
||||
"All Boards" : "Alle Boards",
|
||||
"Archived boards" : "Archivierte Boards",
|
||||
"Drop your files here to upload it to the card" : "Legen Sie Ihre Dateien hier ab, um sie auf die Karte hochzuladen",
|
||||
"Assign to me" : "Mir zuweisen",
|
||||
"Unassign from me" : "Nicht mir zuweisen",
|
||||
"Archive" : "Archivieren",
|
||||
"Unarchive" : "Dearchivieren",
|
||||
"Delete" : "Löschen",
|
||||
"Enter a card title" : "Kartentitel eingeben",
|
||||
"Add card" : "Karte hinzufügen",
|
||||
"Close" : "Schließen",
|
||||
"Sharing" : "Teilen",
|
||||
"Tags" : "Tags",
|
||||
"Tags" : "Schlagworte",
|
||||
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
|
||||
"Access for" : "Zugriff für",
|
||||
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
|
||||
@@ -35,7 +60,7 @@
|
||||
"Discard share" : "Teilen beenden",
|
||||
"Update" : "Aktualisieren",
|
||||
"Create" : "Erstellen",
|
||||
"Create a new tag" : "Tag erstellen",
|
||||
"Create a new tag" : "Schlagwort erstellen",
|
||||
"Status" : "Status",
|
||||
"Title" : "Titel",
|
||||
"Members" : "Mitglieder",
|
||||
@@ -48,21 +73,30 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Wählen Sie einen Anhang",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"by" : "von",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagwörter auswählen",
|
||||
"Assign users" : "Benutzer zuordnen",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Benutzer zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
|
||||
"Due date" : "Zieltermin",
|
||||
"Click to set" : "Setzen",
|
||||
"Remove due date" : "Zieltermin entfernen",
|
||||
"Description" : "Beschreibung",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Attachments" : "Anhänge",
|
||||
"Saved" : "Gespeichert",
|
||||
"Unsaved changes" : "Ungesicherte Änderungen",
|
||||
"Formatting help" : "Formatierungshilfe",
|
||||
"Upload attachment" : "Anhang hochladen",
|
||||
"Insert attachment" : "Anhang einfügen",
|
||||
"Add a card description…" : "Beschreibung hinzufügen…",
|
||||
"Shared boards" : "Geteilte Boards",
|
||||
"View more" : "Mehr anzeigen",
|
||||
|
||||
13
l10n/el.js
13
l10n/el.js
@@ -1,6 +1,9 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την κάρτα με όλα τα δεδομένα της;",
|
||||
"Delete" : "Διαγραφή",
|
||||
"Remove user from card" : "Αφαίρεση χρήστη από την κάρτα",
|
||||
"Hours" : "Ώρες",
|
||||
"Minutes" : "Λεπτά",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Η κάρτα \"1%s\" στο \"1%s\" έχει λήξει.",
|
||||
@@ -18,17 +21,20 @@ OC.L10N.register(
|
||||
"Archived boards" : "Αρχειοθέτηση πινάκων ",
|
||||
"Archive" : "Αρχειοθέτηση",
|
||||
"Unarchive" : "Αναίρεση αρχειοθέτησης",
|
||||
"Delete" : "Διαγραφή",
|
||||
"Enter a card title" : "Καταχωρίστε έναν τίτλο κάρτας",
|
||||
"Add card" : "Προσθήκη κάρτας",
|
||||
"Close" : "Κλείσιμο",
|
||||
"Sharing" : "Διαμοιρασμός",
|
||||
"Tags" : "Ετικέτες",
|
||||
"Select users or groups to share with" : "Επιλέξτε χρήστες ή ομάδες με τις οποίες θα μοιραστείτε",
|
||||
"No matching user or group found." : "Δεν βρέθηκε χρήστης ή ομάδα να ταιριάζει.",
|
||||
"Loading" : "Γίνεται φόρτωση",
|
||||
"Share" : "Διαμοιρασμός",
|
||||
"Edit" : "Επεξεργασία",
|
||||
"Manage" : "Διαχείριση",
|
||||
"Discard share" : "Απόρριψη διαμοιρασμού",
|
||||
"Update" : "Ενημέρωση",
|
||||
"Create" : "Δημιουργία",
|
||||
"Create a new tag" : "Δημιούργησε νέα ετικέτα",
|
||||
"Title" : "Τίτλος",
|
||||
"Members" : "Μέλη",
|
||||
@@ -39,17 +45,18 @@ OC.L10N.register(
|
||||
"Delete board" : "Διαγραφή πίνακα",
|
||||
"Create new board" : "Δημιουργία νέου πίνακα",
|
||||
"New board title" : "Νέος τίτλος πίνακα",
|
||||
"by" : "από",
|
||||
"Modified:" : "Τροποποιήθηκε:",
|
||||
"Created:" : "Δημιουργήθηκε:",
|
||||
"by" : "από",
|
||||
"Due date" : "Ημερομηνία λήξης",
|
||||
"Click to set" : "Κλικ για να ορίσετε",
|
||||
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
|
||||
"Description" : "Περιγραφή",
|
||||
"Formatting help" : "Βοήθεια μορφοποίησης",
|
||||
"Saved" : "Αποθηκεύτηκε",
|
||||
"Formatting help" : "Βοήθεια μορφοποίησης",
|
||||
"Add a card description…" : "Προσθήκη περιγραφής κάρτας...",
|
||||
"Shared boards" : "Διαμοιρασμένοι πίνακες",
|
||||
"View more" : "Προβολή περισσοτέρων",
|
||||
"Move board to archive" : "Μετακίνηση πίνακα στην αρχειοθήκη",
|
||||
"Create a new board" : "Δημιουργία νέου πίνακα"
|
||||
},
|
||||
|
||||
13
l10n/el.json
13
l10n/el.json
@@ -1,4 +1,7 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την κάρτα με όλα τα δεδομένα της;",
|
||||
"Delete" : "Διαγραφή",
|
||||
"Remove user from card" : "Αφαίρεση χρήστη από την κάρτα",
|
||||
"Hours" : "Ώρες",
|
||||
"Minutes" : "Λεπτά",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Η κάρτα \"1%s\" στο \"1%s\" έχει λήξει.",
|
||||
@@ -16,17 +19,20 @@
|
||||
"Archived boards" : "Αρχειοθέτηση πινάκων ",
|
||||
"Archive" : "Αρχειοθέτηση",
|
||||
"Unarchive" : "Αναίρεση αρχειοθέτησης",
|
||||
"Delete" : "Διαγραφή",
|
||||
"Enter a card title" : "Καταχωρίστε έναν τίτλο κάρτας",
|
||||
"Add card" : "Προσθήκη κάρτας",
|
||||
"Close" : "Κλείσιμο",
|
||||
"Sharing" : "Διαμοιρασμός",
|
||||
"Tags" : "Ετικέτες",
|
||||
"Select users or groups to share with" : "Επιλέξτε χρήστες ή ομάδες με τις οποίες θα μοιραστείτε",
|
||||
"No matching user or group found." : "Δεν βρέθηκε χρήστης ή ομάδα να ταιριάζει.",
|
||||
"Loading" : "Γίνεται φόρτωση",
|
||||
"Share" : "Διαμοιρασμός",
|
||||
"Edit" : "Επεξεργασία",
|
||||
"Manage" : "Διαχείριση",
|
||||
"Discard share" : "Απόρριψη διαμοιρασμού",
|
||||
"Update" : "Ενημέρωση",
|
||||
"Create" : "Δημιουργία",
|
||||
"Create a new tag" : "Δημιούργησε νέα ετικέτα",
|
||||
"Title" : "Τίτλος",
|
||||
"Members" : "Μέλη",
|
||||
@@ -37,17 +43,18 @@
|
||||
"Delete board" : "Διαγραφή πίνακα",
|
||||
"Create new board" : "Δημιουργία νέου πίνακα",
|
||||
"New board title" : "Νέος τίτλος πίνακα",
|
||||
"by" : "από",
|
||||
"Modified:" : "Τροποποιήθηκε:",
|
||||
"Created:" : "Δημιουργήθηκε:",
|
||||
"by" : "από",
|
||||
"Due date" : "Ημερομηνία λήξης",
|
||||
"Click to set" : "Κλικ για να ορίσετε",
|
||||
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
|
||||
"Description" : "Περιγραφή",
|
||||
"Formatting help" : "Βοήθεια μορφοποίησης",
|
||||
"Saved" : "Αποθηκεύτηκε",
|
||||
"Formatting help" : "Βοήθεια μορφοποίησης",
|
||||
"Add a card description…" : "Προσθήκη περιγραφής κάρτας...",
|
||||
"Shared boards" : "Διαμοιρασμένοι πίνακες",
|
||||
"View more" : "Προβολή περισσοτέρων",
|
||||
"Move board to archive" : "Μετακίνηση πίνακα στην αρχειοθήκη",
|
||||
"Create a new board" : "Δημιουργία νέου πίνακα"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "Are you sure you want to delete this card with all of its data?",
|
||||
"Delete" : "Delete",
|
||||
"Remove user from card" : "Remove user from card",
|
||||
"Hours" : "Hours",
|
||||
"Minutes" : "Minutes",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Are you sure you want to delete the stack with all of its data?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
|
||||
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
|
||||
"{user} has shared the board %s with you." : "{user} has shared the board %s with you.",
|
||||
@@ -12,6 +15,8 @@ OC.L10N.register(
|
||||
"Action needed" : "Action needed",
|
||||
"Later" : "Later",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "A kanban style project and personal management tool for Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck is a kanban style organization tool aimed at personal planning and project organisation for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organised",
|
||||
"Add a new stack" : "Add a new stack",
|
||||
"Submit" : "Submit",
|
||||
"Show archived cards" : "Show archived cards",
|
||||
@@ -21,7 +26,6 @@ OC.L10N.register(
|
||||
"Archived boards" : "Archived boards",
|
||||
"Archive" : "Archive",
|
||||
"Unarchive" : "Unarchive",
|
||||
"Delete" : "Delete",
|
||||
"Enter a card title" : "Enter a card title",
|
||||
"Add card" : "Add card",
|
||||
"Close" : "Close",
|
||||
@@ -50,21 +54,22 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Undo board deletion - Otherwise the board will be deleted during the next cronjob run.",
|
||||
"Create new board" : "Create new board",
|
||||
"New board title" : "New board title",
|
||||
"by" : "by",
|
||||
"Modified:" : "Modified:",
|
||||
"Created:" : "Created:",
|
||||
"by" : "by",
|
||||
"Choose a tag" : "Choose a tag",
|
||||
"Add a tag" : "Add a tag",
|
||||
"Select tags" : "Select tags",
|
||||
"Assign users" : "Assign users",
|
||||
"Choose a user to assign" : "Choose a user to assign",
|
||||
"Assign this card to a user" : "Assign this card to a user",
|
||||
"Due date" : "Due date",
|
||||
"Click to set" : "Click to set",
|
||||
"Remove due date" : "Remove due date",
|
||||
"Description" : "Description",
|
||||
"Formatting help" : "Formatting help",
|
||||
"Saved" : "Saved",
|
||||
"Unsaved changes" : "Unsaved changes",
|
||||
"Formatting help" : "Formatting help",
|
||||
"Add a card description…" : "Add a card description…",
|
||||
"Shared boards" : "Shared boards",
|
||||
"View more" : "View more",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "Are you sure you want to delete this card with all of its data?",
|
||||
"Delete" : "Delete",
|
||||
"Remove user from card" : "Remove user from card",
|
||||
"Hours" : "Hours",
|
||||
"Minutes" : "Minutes",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Are you sure you want to delete the stack with all of its data?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
|
||||
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
|
||||
"{user} has shared the board %s with you." : "{user} has shared the board %s with you.",
|
||||
@@ -10,6 +13,8 @@
|
||||
"Action needed" : "Action needed",
|
||||
"Later" : "Later",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "A kanban style project and personal management tool for Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck is a kanban style organization tool aimed at personal planning and project organisation for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organised",
|
||||
"Add a new stack" : "Add a new stack",
|
||||
"Submit" : "Submit",
|
||||
"Show archived cards" : "Show archived cards",
|
||||
@@ -19,7 +24,6 @@
|
||||
"Archived boards" : "Archived boards",
|
||||
"Archive" : "Archive",
|
||||
"Unarchive" : "Unarchive",
|
||||
"Delete" : "Delete",
|
||||
"Enter a card title" : "Enter a card title",
|
||||
"Add card" : "Add card",
|
||||
"Close" : "Close",
|
||||
@@ -48,21 +52,22 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Undo board deletion - Otherwise the board will be deleted during the next cronjob run.",
|
||||
"Create new board" : "Create new board",
|
||||
"New board title" : "New board title",
|
||||
"by" : "by",
|
||||
"Modified:" : "Modified:",
|
||||
"Created:" : "Created:",
|
||||
"by" : "by",
|
||||
"Choose a tag" : "Choose a tag",
|
||||
"Add a tag" : "Add a tag",
|
||||
"Select tags" : "Select tags",
|
||||
"Assign users" : "Assign users",
|
||||
"Choose a user to assign" : "Choose a user to assign",
|
||||
"Assign this card to a user" : "Assign this card to a user",
|
||||
"Due date" : "Due date",
|
||||
"Click to set" : "Click to set",
|
||||
"Remove due date" : "Remove due date",
|
||||
"Description" : "Description",
|
||||
"Formatting help" : "Formatting help",
|
||||
"Saved" : "Saved",
|
||||
"Unsaved changes" : "Unsaved changes",
|
||||
"Formatting help" : "Formatting help",
|
||||
"Add a card description…" : "Add a card description…",
|
||||
"Shared boards" : "Shared boards",
|
||||
"View more" : "View more",
|
||||
|
||||
38
l10n/es.js
38
l10n/es.js
@@ -1,17 +1,40 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro de que quieres eliminar esta tarjeta con todos sus datos?",
|
||||
"Delete" : "Eliminar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Maximum file size of {size} exceeded" : "Tamaño máximo de archivo de {size} excedido",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro de que quieres eliminar el mazo con todos sus datos?",
|
||||
"Personal" : "Personal",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo.",
|
||||
"No data was provided to create an attachment." : "No se proporcionaron datos para crear un adjunto",
|
||||
"Finished" : "Finalizado",
|
||||
"To review" : "Para revisar",
|
||||
"Action needed" : "Acción necesaria",
|
||||
"Later" : "Después",
|
||||
"To do" : "Por hacer",
|
||||
"Doing" : "Haciendo",
|
||||
"Done" : "Hecho",
|
||||
"Example Task 3" : "Tarea de ejemplo 3",
|
||||
"Example Task 2" : "Tarea de ejemplo 2",
|
||||
"Example Task 1" : "Tarea de ejemplo 1",
|
||||
"The file was uploaded" : "Se ha subido el archivo",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo subido excede la directiva upload_max_filesize en php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido excede la directiva MAX_FILE-SIZE directive que se especificó en el formulario web",
|
||||
"The file was only partially uploaded" : "El archivo se ha subido solo parcialmente",
|
||||
"No file was uploaded" : "No se ha subido ningún archivo",
|
||||
"Missing a temporary folder" : "Falta una carpeta temporal",
|
||||
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No se ha subido ningún archivo, o el tamaño del archivo excede el máximo de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Una herramienta de manejo de proyectos y personal al estilo kanban para Nextcloud.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deckes una herramienta de organización al estilo kanban enfocada en la planificación personal y en la organización de proyectos para equipos, integrada en Nextcloud.\n\n\n- 📥 Añade tus tareas a tarjetas y ordénalas\n- 📄 Escribe notas adicionales en markdown\n- 🔖 Asigna etiquetas para una organización aún mejor\n- 👥 Comparte con tu equipo, amigos o familia\n- 🚀 Organiza tu proyecto",
|
||||
"Add a new stack" : "Añadir nuevo montón",
|
||||
"Submit" : "Enviar",
|
||||
"Show archived cards" : "Mostrar tarjetas archivadas",
|
||||
@@ -19,9 +42,9 @@ OC.L10N.register(
|
||||
"Board details" : "Detalles del tablero",
|
||||
"All Boards" : "Todos los tableros",
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Drop your files here to upload it to the card" : "Arrastra tus archivos aquí para subirlos a la tarjeta",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Eliminar",
|
||||
"Enter a card title" : "Introducir título de tarjeta",
|
||||
"Add card" : "Añadir tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -50,21 +73,30 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado del tablero. Si no, el tablero será eliminado durante la próxima ejecución del cronjob.",
|
||||
"Create new board" : "Crear nuevo tablero",
|
||||
"New board title" : "Nuevo título de tablero",
|
||||
"Select an attachment" : "Selecciona un adjunto",
|
||||
"Cancel upload" : "Cancelar la subida",
|
||||
"by" : "por",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Deshacer eliminación del archivo. De otra forma el archivo se borrará durante la próxima ejecución del trabajo cron.",
|
||||
"Undo file deletion" : "Deshacer eliminación del archivo",
|
||||
"Insert the file into the description" : "Introduce el archivo en la descripción",
|
||||
"Modified:" : "Modificado: ",
|
||||
"Created:" : "Creado: ",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Escoge una etiqueta",
|
||||
"Add a tag" : "Añade una etiqueta",
|
||||
"Select tags" : "Selecciona etiquetas",
|
||||
"Assign users" : "Asignar usuarios",
|
||||
"Choose a user to assign" : "Escoge un usuario al que asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta a un usuario",
|
||||
"Due date" : "Fecha límite",
|
||||
"Click to set" : "Pinchar para establecer",
|
||||
"Remove due date" : "Eliminar fecha límite",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Attachments" : "Adjuntos",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Upload attachment" : "Subir adjunto",
|
||||
"Insert attachment" : "Insertar adjunto",
|
||||
"Add a card description…" : "Añadir una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
38
l10n/es.json
38
l10n/es.json
@@ -1,15 +1,38 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro de que quieres eliminar esta tarjeta con todos sus datos?",
|
||||
"Delete" : "Eliminar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Maximum file size of {size} exceeded" : "Tamaño máximo de archivo de {size} excedido",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro de que quieres eliminar el mazo con todos sus datos?",
|
||||
"Personal" : "Personal",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo.",
|
||||
"No data was provided to create an attachment." : "No se proporcionaron datos para crear un adjunto",
|
||||
"Finished" : "Finalizado",
|
||||
"To review" : "Para revisar",
|
||||
"Action needed" : "Acción necesaria",
|
||||
"Later" : "Después",
|
||||
"To do" : "Por hacer",
|
||||
"Doing" : "Haciendo",
|
||||
"Done" : "Hecho",
|
||||
"Example Task 3" : "Tarea de ejemplo 3",
|
||||
"Example Task 2" : "Tarea de ejemplo 2",
|
||||
"Example Task 1" : "Tarea de ejemplo 1",
|
||||
"The file was uploaded" : "Se ha subido el archivo",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo subido excede la directiva upload_max_filesize en php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido excede la directiva MAX_FILE-SIZE directive que se especificó en el formulario web",
|
||||
"The file was only partially uploaded" : "El archivo se ha subido solo parcialmente",
|
||||
"No file was uploaded" : "No se ha subido ningún archivo",
|
||||
"Missing a temporary folder" : "Falta una carpeta temporal",
|
||||
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No se ha subido ningún archivo, o el tamaño del archivo excede el máximo de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Una herramienta de manejo de proyectos y personal al estilo kanban para Nextcloud.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deckes una herramienta de organización al estilo kanban enfocada en la planificación personal y en la organización de proyectos para equipos, integrada en Nextcloud.\n\n\n- 📥 Añade tus tareas a tarjetas y ordénalas\n- 📄 Escribe notas adicionales en markdown\n- 🔖 Asigna etiquetas para una organización aún mejor\n- 👥 Comparte con tu equipo, amigos o familia\n- 🚀 Organiza tu proyecto",
|
||||
"Add a new stack" : "Añadir nuevo montón",
|
||||
"Submit" : "Enviar",
|
||||
"Show archived cards" : "Mostrar tarjetas archivadas",
|
||||
@@ -17,9 +40,9 @@
|
||||
"Board details" : "Detalles del tablero",
|
||||
"All Boards" : "Todos los tableros",
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Drop your files here to upload it to the card" : "Arrastra tus archivos aquí para subirlos a la tarjeta",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Eliminar",
|
||||
"Enter a card title" : "Introducir título de tarjeta",
|
||||
"Add card" : "Añadir tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -48,21 +71,30 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado del tablero. Si no, el tablero será eliminado durante la próxima ejecución del cronjob.",
|
||||
"Create new board" : "Crear nuevo tablero",
|
||||
"New board title" : "Nuevo título de tablero",
|
||||
"Select an attachment" : "Selecciona un adjunto",
|
||||
"Cancel upload" : "Cancelar la subida",
|
||||
"by" : "por",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Deshacer eliminación del archivo. De otra forma el archivo se borrará durante la próxima ejecución del trabajo cron.",
|
||||
"Undo file deletion" : "Deshacer eliminación del archivo",
|
||||
"Insert the file into the description" : "Introduce el archivo en la descripción",
|
||||
"Modified:" : "Modificado: ",
|
||||
"Created:" : "Creado: ",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Escoge una etiqueta",
|
||||
"Add a tag" : "Añade una etiqueta",
|
||||
"Select tags" : "Selecciona etiquetas",
|
||||
"Assign users" : "Asignar usuarios",
|
||||
"Choose a user to assign" : "Escoge un usuario al que asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta a un usuario",
|
||||
"Due date" : "Fecha límite",
|
||||
"Click to set" : "Pinchar para establecer",
|
||||
"Remove due date" : "Eliminar fecha límite",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Attachments" : "Adjuntos",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Upload attachment" : "Subir adjunto",
|
||||
"Insert attachment" : "Insertar adjunto",
|
||||
"Add a card description…" : "Añadir una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Delete" : "Borrar",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
@@ -20,7 +21,6 @@ OC.L10N.register(
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -49,9 +49,9 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
@@ -61,9 +61,9 @@ OC.L10N.register(
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{ "translations": {
|
||||
"Delete" : "Borrar",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
@@ -18,7 +19,6 @@
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -47,9 +47,9 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
@@ -59,9 +59,9 @@
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Delete" : "Borrar",
|
||||
"Finished" : "Terminado",
|
||||
"To review" : "Para revisar",
|
||||
"Action needed" : "Acción requerida",
|
||||
@@ -12,7 +13,6 @@ OC.L10N.register(
|
||||
"All Boards" : "Todos los Tablero",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingrese el títilo de la tarjeta",
|
||||
"Sharing" : "Compartiendo",
|
||||
"Select users or groups to share with" : "Seleccione los usuarios o grupos con los cuales compartir",
|
||||
@@ -24,12 +24,12 @@ OC.L10N.register(
|
||||
"Members" : "Miembros",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título de tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Create a new board" : "Crear nuevo tablero"
|
||||
},
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{ "translations": {
|
||||
"Delete" : "Borrar",
|
||||
"Finished" : "Terminado",
|
||||
"To review" : "Para revisar",
|
||||
"Action needed" : "Acción requerida",
|
||||
@@ -10,7 +11,6 @@
|
||||
"All Boards" : "Todos los Tablero",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingrese el títilo de la tarjeta",
|
||||
"Sharing" : "Compartiendo",
|
||||
"Select users or groups to share with" : "Seleccione los usuarios o grupos con los cuales compartir",
|
||||
@@ -22,12 +22,12 @@
|
||||
"Members" : "Miembros",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título de tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Create a new board" : "Crear nuevo tablero"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro que deseas borrar esta tarjeta con todos sus datos? ",
|
||||
"Delete" : "Borrar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro que deseas borrar la pila con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
|
||||
@@ -20,7 +24,6 @@ OC.L10N.register(
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -49,21 +52,22 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
"Assign users" : "Asingar usuarios",
|
||||
"Choose a user to assign" : "Elige un usuario a asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro que deseas borrar esta tarjeta con todos sus datos? ",
|
||||
"Delete" : "Borrar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro que deseas borrar la pila con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
|
||||
@@ -18,7 +22,6 @@
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -47,21 +50,22 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
"Assign users" : "Asingar usuarios",
|
||||
"Choose a user to assign" : "Elige un usuario a asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro que deseas borrar esta tarjeta con todos sus datos? ",
|
||||
"Delete" : "Borrar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro que deseas borrar la pila con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
|
||||
@@ -20,7 +24,6 @@ OC.L10N.register(
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -49,21 +52,22 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
"Assign users" : "Asingar usuarios",
|
||||
"Choose a user to assign" : "Elige un usuario a asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro que deseas borrar esta tarjeta con todos sus datos? ",
|
||||
"Delete" : "Borrar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro que deseas borrar la pila con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
|
||||
@@ -18,7 +22,6 @@
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -47,21 +50,22 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
"Assign users" : "Asingar usuarios",
|
||||
"Choose a user to assign" : "Elige un usuario a asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro que deseas borrar esta tarjeta con todos sus datos? ",
|
||||
"Delete" : "Borrar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro que deseas borrar la pila con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
|
||||
@@ -20,7 +24,6 @@ OC.L10N.register(
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -49,21 +52,22 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
"Assign users" : "Asingar usuarios",
|
||||
"Choose a user to assign" : "Elige un usuario a asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{ "translations": {
|
||||
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro que deseas borrar esta tarjeta con todos sus datos? ",
|
||||
"Delete" : "Borrar",
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro que deseas borrar la pila con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
|
||||
@@ -18,7 +22,6 @@
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Delete" : "Borrar",
|
||||
"Enter a card title" : "Ingresa el título de la tarjeta",
|
||||
"Add card" : "Agregar tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -47,21 +50,22 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
|
||||
"Create new board" : "Crear un nuevo tablero",
|
||||
"New board title" : "Nuevo título del tablero",
|
||||
"by" : "por",
|
||||
"Modified:" : "Modificado:",
|
||||
"Created:" : "Creado:",
|
||||
"by" : "por",
|
||||
"Choose a tag" : "Elije una etiqueta",
|
||||
"Add a tag" : "Agrega una etiqueta",
|
||||
"Select tags" : "Selecciona las etiquetas",
|
||||
"Assign users" : "Asingar usuarios",
|
||||
"Choose a user to assign" : "Elige un usuario a asignar",
|
||||
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Click to set" : "Da click aquí para establecer",
|
||||
"Remove due date" : "Eliminar fecha de expiración",
|
||||
"Description" : "Descripción",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Add a card description…" : "Agregar una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user