Compare commits

..

50 Commits

Author SHA1 Message Date
Julius Härtl
105ffd597b Bump version to 0.3.1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-07 17:46:16 +01:00
Julius Härtl
ae9d02121b Test stable-0.3 against NC13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-07 17:36:54 +01:00
Nextcloud bot
61ff25106b [tx-robot] updated from transifex 2018-03-07 17:34:59 +01:00
Nextcloud bot
c449967382 [tx-robot] updated from transifex 2018-03-07 17:34:51 +01:00
Nextcloud bot
b6ad790006 [tx-robot] updated from transifex 2018-03-07 17:34:42 +01:00
Julius Härtl
f8ec7202c8 Fix translations of the delete confirmation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-07 17:34:32 +01:00
Julius Härtl
a0ffc3a47f Make 0.3.1-rc1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 19:33:02 +01:00
Julius Härtl
bb3b31f38f No typehinting in deck yet
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 19:31:43 +01:00
Julius Härtl
cae999ec80 Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 19:31:43 +01:00
Julius Härtl
9273d15865 Update view when removing sharees and track by correct property
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 19:31:43 +01:00
Julius Härtl
5d40ecad25 Remove deleted users from assignments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 19:31:42 +01:00
Nextcloud bot
5e4b3b9218 [tx-robot] updated from transifex 2018-03-02 18:01:21 +01:00
Nextcloud bot
9f154e6ab1 [tx-robot] updated from transifex 2018-03-02 18:01:14 +01:00
Julius Härtl
cdb3193d9c Disable integration tests for now
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:59:24 +01:00
Julius Härtl
0200179a76 Do not overwrite emtpy values
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:59:24 +01:00
Julius Härtl
b1863980d6 Track by correct property
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:59:23 +01:00
Julius Härtl
087d60776d Only return updated properties not resolvable ones
fixes #406

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:59:23 +01:00
Julius Härtl
e859c6aa56 Fix popover position of assigned users
fixes #385

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:59:23 +01:00
Julius Härtl
6a098dd981 Add confirmation dialog to delete options
this is only a temporary solution but it will probably safe some users from deleting their data by accident

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:58:09 +01:00
Julius Härtl
7b47414a54 Add changes to CHANGELOG.md
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 11:07:17 +01:00
Julius Härtl
07ec3fd7d0 Add 0.3.1 version/dependencies
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 11:02:25 +01:00
Nextcloud bot
0af3c87d91 [tx-robot] updated from transifex 2018-02-25 11:01:10 +01:00
Nextcloud bot
c789a6356a [tx-robot] updated from transifex 2018-02-25 11:01:10 +01:00
Nextcloud bot
09c3f4e46d [tx-robot] updated from transifex 2018-02-25 11:01:09 +01:00
Nextcloud bot
a72a11584d [tx-robot] updated from transifex 2018-02-25 11:01:09 +01:00
Nextcloud bot
c850e8b1c2 [tx-robot] updated from transifex 2018-02-25 11:01:08 +01:00
Nextcloud bot
6b06f4e5e8 [tx-robot] updated from transifex 2018-02-25 11:01:08 +01:00
Nextcloud bot
52db1dc37c [tx-robot] updated from transifex 2018-02-25 11:01:07 +01:00
Nextcloud bot
8837d89503 [tx-robot] updated from transifex 2018-02-25 11:01:07 +01:00
Nextcloud bot
640db050bd [tx-robot] updated from transifex 2018-02-25 11:01:06 +01:00
Nextcloud bot
0c4ae1b913 [tx-robot] updated from transifex 2018-02-25 11:01:06 +01:00
Nextcloud bot
4b5ac63d2b [tx-robot] updated from transifex 2018-02-25 11:01:05 +01:00
Nextcloud bot
1a9c5225e1 [tx-robot] updated from transifex 2018-02-25 11:01:05 +01:00
Nextcloud bot
b74916d1f2 [tx-robot] updated from transifex 2018-02-25 11:01:04 +01:00
Nextcloud bot
86bcedd3ca [tx-robot] updated from transifex 2018-02-25 11:01:04 +01:00
Nextcloud bot
e998c3d927 [tx-robot] updated from transifex 2018-02-25 11:01:04 +01:00
Nextcloud bot
43241921e5 [tx-robot] updated from transifex 2018-02-25 11:01:03 +01:00
Nextcloud bot
13cf7fe7f2 [tx-robot] updated from transifex 2018-02-25 11:01:02 +01:00
Julius Härtl
475ecc3c2a Force limit of users that do not match exactly
fixes #422

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 10:57:50 +01:00
Julius Härtl
c1425f7a4b Update user list when acl is changed
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 10:57:20 +01:00
Julius Härtl
111ff4ae7f Use actual acl list for assigning users
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 10:57:20 +01:00
Julius Härtl
b7ac7067ff Fix bug when user selection was staying hidden
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 10:57:20 +01:00
Julius Härtl
3d634ffdcb Only digest on card update not for every interval
and add various track by statements

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 10:54:56 +01:00
Julius Härtl
30eeaf8ffd Add Repo as homepage (fixes #389)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-25 10:53:45 +01:00
Julius Härtl
6594a3f5da Merge branch 'fix-app-compatibility' into stable-0.3 2018-02-25 10:53:16 +01:00
Julius Härtl
58df42ea9c Bump drone images (#391)
* Bump drone images

Signed-off-by: Julius Härtl <jus@bitgrid.net>

* Use travis for codecov

Signed-off-by: Julius Härtl <jus@bitgrid.net>

* Just test against master in travis

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-13 12:29:29 +01:00
cloud2018
169175ab55 translate attributes in templates/part.card.php
translate attributes title and placeholder in class "section-content card-details-assign-users" in templates/part.card.php
2018-01-13 12:28:47 +01:00
Julius Härtl
f2b94f0933 Just test against master in travis
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-13 11:48:21 +01:00
Julius Härtl
2fece55b0e Use travis for codecov
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-13 11:37:48 +01:00
Julius Härtl
f34fae640d Bump drone images
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-13 10:39:40 +01:00
232 changed files with 970 additions and 15599 deletions

View File

@@ -8,7 +8,7 @@ pipeline:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
# Pre-setup steps
@@ -22,52 +22,15 @@ pipeline:
when:
matrix:
TESTS: check-app-compatbility
check-app-compatbility-12:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=stable12
- 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
check-app-compatbility-12:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=stable12
- 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-12
signed-off-check:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
- 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
@@ -87,7 +50,7 @@ pipeline:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
- composer install
@@ -99,7 +62,7 @@ pipeline:
image: nextcloudci/php7.1:php7.1-15
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
- composer install
@@ -111,7 +74,7 @@ pipeline:
image: nextcloudci/php7.2:php7.2-9
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
- composer install
@@ -143,7 +106,7 @@ pipeline:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
# Pre-setup steps
@@ -162,7 +125,7 @@ pipeline:
image: nextcloudci/php7.1:php7.1-15
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
# Pre-setup steps
@@ -180,7 +143,7 @@ pipeline:
image: nextcloudci/php7.2:php7.2-9
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
# Pre-setup steps
@@ -198,7 +161,7 @@ pipeline:
image: nextcloudci/integration-php7.0:integration-php7.0-6
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- CORE_BRANCH=stable13
- DB=sqlite
commands:
# Pre-setup steps
@@ -222,16 +185,16 @@ pipeline:
jsbuild:
image: mhart/alpine-node:6.8.0
commands:
- apk add --no-cache make
- make build-js
- apk add --no-cache git
- cd js
- npm install --deps
- ./node_modules/.bin/bower --allow-root install
when:
matrix:
TESTS: jsbuild
matrix:
include:
- TESTS: check-app-compatbility
- TESTS: check-app-compatbility-12
- TESTS: check-app-compatbility-13
- TESTS: signed-off-check
- TESTS: syntax-php5.6
- TESTS: syntax-php7.0

View File

@@ -1,6 +1,5 @@
/js/tests/*
/js/vendor/*
/js/legacy/*
/js/node_modules/*
/js/public/*
/karma.conf.js

View File

@@ -1,5 +1,6 @@
root: true
extends:
- eslint:recommended
@@ -8,7 +9,6 @@ env:
amd: true
globals:
global: false
app: false
angular: false
$: false
@@ -21,10 +21,6 @@ globals:
Clipboard: false
oc_defaults: false
parserOptions:
ecmaVersion: 6
sourceType: "module"
rules:
curly: error
eqeqeq: ["error", "smart"]
@@ -33,7 +29,6 @@ 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:

View File

@@ -1,17 +0,0 @@
---
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.

3
.gitignore vendored
View File

@@ -1,10 +1,9 @@
js/node_modules/*
js/vendor/
js/public/
js/build/
js/package-lock.json
build/
css/style.css
css/vendor.css
tests/integration/vendor/
tests/integration/composer.lock
vendor/

View File

@@ -6,7 +6,7 @@ php:
- 7.1
- 7.2
env:
- CORE_BRANCH=master DB=mysql
- CORE_BRANCH=stable13 DB=mysql
before_install:
- wget https://phar.phpunit.de/phpunit-5.7.phar

View File

@@ -1,32 +1,17 @@
# Changelog
All notable changes to this project will be documented in this file.
## 0.4.1 - 2018-07-28
### Added
- Make app compatible with Nextcloud 14
## 0.3.1 - 2018-03-07
### Fixed
- Fix performance issue with large LDAP instances
- Fix assigning users to newly created boards
- Various performance improvements
- Fix some untranslated strings (@cloud2018)
- Add confirmation dialog to delete options
- Fix issues with assigned users list when saving a card
- Delete assignments if users get removed
- Fix bug with file upload on unlimited quota
- Fix issue on MySQL databases that don't support 4-byte characters
- Fix check when assigning users
## 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

View File

@@ -12,27 +12,26 @@ sign_dir=$(build_dir)/sign
cert_dir=$(HOME)/.nextcloud/certificates
default: package
default: build
clean-build:
rm -rf $(build_dir)
clean-dist:
rm -rf js/node_modules
rm -rf js/vendor
install-deps:
cd js && npm install
cd js && npm install --deps
cd js && ./node_modules/.bin/bower install
build: build-js
build-js: install-deps
cd js && npm run build
build-js-dev: install-deps
cd js && npm run dev
cd js && ./node_modules/.bin/grunt build
watch:
cd js && npm run watch
cd js && ./node_modules/.bin/grunt watch
# appstore: clean install-deps
appstore: clean-build build
@@ -95,5 +94,3 @@ test-integration:
test-js: install-deps
cd js && run test
package:
krankerl package

View File

@@ -1,6 +1,6 @@
# Deck
[![Build Status](https://travis-ci.org/nextcloud/deck.svg?branch=master)](https://travis-ci.org/nextcloud/deck) [![CodeCov](https://codecov.io/github/nextcloud/deck/coverage.svg?branch=master)](https://codecov.io/github/nextcloud/deck) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e403f723f42a4abd93b2cfe36cbd7eee)](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=nextcloud/deck&amp;utm_campaign=Badge_Grade) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nextcloud/deck/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [![Dependency Status](https://www.versioneye.com/user/projects/5af6c4090fb24f0e3a423c40/badge.svg)](https://www.versioneye.com/user/projects/5af6c4090fb24f0e3a423c40) [![#nextcloud-deck](https://img.shields.io/badge/IRC-%23nextcloud--deck%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-deck)
[![Build Status](https://travis-ci.org/nextcloud/deck.svg?branch=master)](https://travis-ci.org/nextcloud/deck) [![CodeCov](https://codecov.io/github/nextcloud/deck/coverage.svg?branch=master)](https://codecov.io/github/nextcloud/deck) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nextcloud/deck/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [![Dependency Status](https://www.versioneye.com/user/projects/58ad558f4ca76f004ed475b3/badge.svg?style=flat)](https://www.versioneye.com/user/projects/58ad558f4ca76f004ed475b3) [![#nextcloud-deck](https://img.shields.io/badge/IRC-%23nextcloud--deck%20on%20freenode-blue.svg)](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,9 +14,17 @@ Deck is a kanban style organization tool aimed at personal planning and project
![Deck - Manage cards on your board](https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.png)
### 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 12 or later.
This app is supposed to work on Nextcloud version 11 or later.
### Install latest release
@@ -47,7 +55,8 @@ Nothing to prepare, just dig into the code.
### JavaScript
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.
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```.
### Running tests
You can use the provided Makefile to run all tests by using:

2
_config.yml Normal file
View File

@@ -0,0 +1,2 @@
theme: jekyll-theme-cayman
site: https://deck-app.com

View File

@@ -198,6 +198,12 @@
<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>
@@ -212,12 +218,12 @@
</field>
<field>
<name>data</name>
<type>text</type>
<type>clob</type>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default/>
<default></default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
@@ -225,21 +231,7 @@
<field>
<name>created_at</name>
<type>integer</type>
<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>
<default></default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>

View File

@@ -14,7 +14,7 @@
- 🚀 Get your project organized
</description>
<version>0.4.1</version>
<version>0.3.1</version>
<licence>agpl</licence>
<author>Julius Härtl</author>
<namespace>Deck</namespace>
@@ -26,7 +26,7 @@
<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="12" max-version="13" />
</dependencies>
<background-jobs>
<job>OCA\Deck\Cron\DeleteCron</job>
@@ -37,7 +37,4 @@
<step>OCA\Deck\Migration\UnknownUsers</step>
</post-migration>
</repair-steps>
<commands>
<command>OCA\Deck\Command\UserExport</command>
</commands>
</info>

View File

@@ -59,16 +59,6 @@ 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'],

View File

@@ -10,7 +10,7 @@
],
"require": {},
"require-dev": {
"christophwurst/nextcloud": "^13.0",
"jakub-onderka/php-parallel-lint": "^1.0.0"
"christophwurst/nextcloud": "^12.0",
"jakub-onderka/php-parallel-lint": "^0.9.2"
}
}

View File

@@ -1,38 +0,0 @@
#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;
}
}
}

View File

@@ -4,7 +4,6 @@
* @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
*
@@ -70,26 +69,6 @@ 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
*/
@@ -122,11 +101,8 @@ input.input-inline {
}
}
.app-navigation-entry-edit {
.colorselect {
div, label {
height: 32px;
width: auto;
}
.colorselect div{
height: 32px;
}
form {
display: flex;
@@ -163,18 +139,15 @@ input.input-inline {
.card {
opacity: 1;
&.file-drop {
}
}
&.card-selected {
.card {
box-shadow: 0px 0px 7px 0px $color-grey;
opacity: 0.7;
&.current {
opacity: 1.0;
box-shadow: 0px 0px 7px 0px $color-darkgrey;
}
}
@@ -258,7 +231,7 @@ input.input-inline {
}
}
#app-navigation-toggle-custom {
#app-navigation-toggle {
width: 44px;
height: 44px;
cursor: pointer;
@@ -284,6 +257,10 @@ input.input-inline {
margin-right: 6px;
}
}
> button {
padding: 16px 20px;
}
}
.filter-select {
@@ -480,21 +457,6 @@ 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;
@@ -637,6 +599,17 @@ 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 {
@@ -662,32 +635,6 @@ 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;
@@ -731,23 +678,10 @@ 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;
margin: 5px;
float: right;
padding: 0 10px;
font-size: 8pt;
display: none;
@@ -798,100 +732,6 @@ input.input-inline {
}
}
.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;
}
}
}
.card-description {
&.section-header {
.save-indicator {
@@ -923,11 +763,24 @@ input.input-inline {
}
}
.card-attachments {
.error {
padding-left: 38px;
margin-bottom: 5px;
background-position: 10px;
#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;
}
}
@@ -961,10 +814,6 @@ input.input-inline {
border: none;
}
label.color {
flex-grow: 1;
}
.selected {
background-image: url('../../../core/img/actions/checkmark.svg');
background-position: center center;
@@ -974,22 +823,6 @@ 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 {
@@ -1055,8 +888,7 @@ input.input-inline {
.colorselect {
flex-grow: 1;
div,
label {
div {
min-width: 32px;
}
}
@@ -1269,11 +1101,7 @@ input.input-inline {
border: 0 !important;
overflow: hidden;
}
.select2-search-field {
margin-right: -10px;
}
}
.select2-choice {
height: auto;
}
@@ -1369,24 +1197,6 @@ 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;
}
}
/**
@@ -1433,22 +1243,3 @@ 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;
}
}

View File

@@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 897 B

View File

@@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 910 B

View File

@@ -1,97 +1,79 @@
---
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>
### 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) ...
```

3
js/.bowerrc Normal file
View File

@@ -0,0 +1,3 @@
{
"directory": "vendor"
}

124
js/Gruntfile.js Normal file
View File

@@ -0,0 +1,124 @@
/*
* @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']);
};

View File

@@ -41,20 +41,13 @@ 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', [
ngsanitize,
uirouter,
angularuiselect,
ngsortable, md, nganimate,
'angularFileUpload'
'ngRoute',
'ngSanitize',
'ui.router',
'ui.select',
'as.sortable',
'mdMarkdownIt',
'ngAnimate'
]);
export default app;

View File

@@ -22,27 +22,18 @@
/* global app oc_requesttoken markdownitLinkTarget */
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) {
app.config(function ($provide, $routeProvider, $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).use(markdownitCheckbox);
markdownItConverterProvider.use(markdownitLinkTarget);
$urlRouterProvider.otherwise('/');
@@ -71,47 +62,19 @@ app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterPr
tab: {value: 0, dynamic: true},
},
views: {
'sidebarView@': {
templateUrl: '/board.sidebarView.html',
controller: 'BoardController'
'sidebarView': {
templateUrl: '/board.sidebarView.html'
}
}
})
.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;
});
});
});

View File

@@ -19,12 +19,10 @@
* 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);
});
@@ -56,6 +54,26 @@ 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"]'

29
js/bower.json Normal file
View File

@@ -0,0 +1,29 @@
{
"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"
]
}

View File

@@ -20,23 +20,11 @@
*
*/
import app from '../app/App.js';
/** global: OC */
app.controller('AppController', function ($scope, $location, $http, $log, $rootScope, $attrs) {
app.controller('AppController', function ($scope, $location, $http, $route, $log, $rootScope) {
$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);
}
};
});
});

View File

@@ -1,78 +0,0 @@
/*
* @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 = `![📎 ${filename}](${url})`;
}
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;

View File

@@ -20,9 +20,8 @@
*
*/
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, FileService) {
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter) {
$scope.sidebar = $rootScope.sidebar;
@@ -40,7 +39,6 @@ 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() {
@@ -48,24 +46,8 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
}, function (params) {
$scope.params = params;
}, true);
$scope.params = $state.params;
$scope.params = $state;
/**
* 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;
@@ -170,7 +152,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 = "";
});
};
@@ -182,7 +164,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
};
CardService.create(newCard).then(function (data) {
$scope.stackservice.addCard(data);
$scope.newCard.title = '';
$scope.newCard.title = "";
});
};
@@ -215,7 +197,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 = {};
@@ -291,7 +273,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());
@@ -326,7 +308,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());
@@ -354,11 +336,4 @@ 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;
};
});

View File

@@ -20,10 +20,9 @@
*
*/
/* global app moment angular OC */
import app from '../app/App.js';
/* global app moment */
app.controller('CardController', function ($scope, $rootScope, $sce, $location, $stateParams, $state, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService, markdownItConverter, FileService) {
app.controller('CardController', function ($scope, $rootScope, $routeParams, $location, $stateParams, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService) {
$scope.sidebar = $rootScope.sidebar;
$scope.status = {
lastEdit: 0,
@@ -31,60 +30,16 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
};
$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) {
});
@@ -95,43 +50,7 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
$scope.status.cardRename = true;
}
};
$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;
}
$scope.cardEditDescriptionShow = function ($event) {
if (BoardService.isArchived() || CardService.getCurrent().archived) {
return false;
}
@@ -144,23 +63,22 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
};
$scope.cardEditDescriptionChanged = function ($event) {
$scope.status.lastEdit = Date.now();
var header = $('.section-header-tabbed .tabDetails');
var header = $('.section-header.card-description');
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 && !$scope.status.saving) {
if (timeSinceEdit > 1000 && $scope.status.lastEdit > $scope.status.lastSave) {
$scope.status.lastSave = currentTime;
$scope.status.saving = true;
var header = $('.section-header-tabbed .tabDetails');
var header = $('.section-header.card-description');
header.find('.save-indicator.unsaved').fadeIn(500);
CardService.update($scope.status.edit).then(function (data) {
var header = $('.section-header-tabbed .tabDetails');
var header = $('.section-header.card-description');
header.find('.save-indicator.unsaved').hide();
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
$scope.status.saving = false;
StackService.updateCard($scope.status.edit);
});
}
}, 500, 0, false);
@@ -168,26 +86,29 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
// 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;
$scope.updateMarkdown($scope.status.edit.description);
var header = $('.section-header-tabbed .tabDetails');
var header = $('.section-content.card-description');
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());
});
};
@@ -202,6 +123,7 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
newDate.year(duedate.year());
element.duedate = newDate.toISOString();
CardService.update(element);
StackService.updateCard(element);
};
$scope.setDuedateTime = function (time) {
var element = CardService.getCurrent();
@@ -213,12 +135,14 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
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);
};
/**
@@ -242,12 +166,14 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
$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());
});
};
@@ -258,4 +184,4 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
};
};
});
});

View File

@@ -1,44 +0,0 @@
/*
* @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};
};
}]);

View File

@@ -22,7 +22,7 @@
/* global app angular */
var ListController = function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService) {
app.controller('ListController', function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService) {
function calculateNewColor() {
var boards = BoardService.getAll();
@@ -193,6 +193,5 @@ var ListController = function ($scope, $location, $filter, BoardService, $elemen
});
};
};
});
export default ListController;

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('appPopoverMenuUtils', function () {
'use strict';

View File

@@ -20,7 +20,6 @@
*
*/
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 () {

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('autofocusOnInsert', function () {
'use strict';

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('avatar', function() {
'use strict';

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('contactsmenudelete', function() {
'use strict';

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
/* global app */
/* gloabl t */

View File

@@ -19,7 +19,6 @@
* 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', [

View File

@@ -19,7 +19,6 @@
* 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';

View File

@@ -19,9 +19,6 @@
* 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 */
@@ -32,7 +29,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();

View File

@@ -19,7 +19,6 @@
* 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) {

View File

@@ -1,37 +0,0 @@
/*
* @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];
};
});

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
// usage | cardFilter({ member: 'admin'})

View File

@@ -19,7 +19,6 @@
* 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) {

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
/* global app */
/* global OC */

View File

@@ -19,7 +19,6 @@
* 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) {
@@ -32,7 +31,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;
@@ -59,9 +58,9 @@ app.filter('iconWhiteFilter', function () {
h /= 6;
}
if (l < 0.5) {
return '-white';
return "-white";
} else {
return '';
return "";
}
};
});

View File

@@ -19,7 +19,6 @@
* 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) {
@@ -30,9 +29,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;
}
};
});
});

View File

@@ -19,7 +19,6 @@
* 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) {

View File

@@ -19,7 +19,6 @@
* 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) {
@@ -57,12 +56,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";
}
};

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
/* global app */
/* global angular */

View File

@@ -1,28 +0,0 @@
'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);
});

View File

@@ -1,57 +0,0 @@
/*
* 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; }

File diff suppressed because it is too large Load Diff

View File

@@ -1,114 +0,0 @@
/**
* 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));
};

8939
js/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,44 +1,29 @@
{
"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": {
"@uirouter/angularjs": "^1.0.18",
"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.1",
"markdown-it-link-target": "^1.0.2",
"ng-sortable": "^1.3.8",
"ui-select": "^0.19.8"
},
"dependencies": {},
"devDependencies": {
"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.15.1",
"webpack-cli": "^3.0.8",
"webpack-merge": "^4.1.3"
"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"
},
"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": []
"keywords": [],
"description": ""
}

View File

@@ -19,7 +19,6 @@
* 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) {
@@ -125,7 +124,7 @@ app.factory('ApiService', function ($http, $q) {
this.data[entity.id] = entity;
} else {
Object.keys(entity).forEach(function (key) {
if (entity[key] !== null && element[key] !== entity[key]) {
if (entity[key] !== null) {
element[key] = entity[key];
}
});
@@ -163,14 +162,10 @@ 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;

View File

@@ -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) {
@@ -198,13 +198,13 @@ app.factory('BoardService', function (ApiService, $http, $q) {
return [];
}
this.getCurrent().users = [this.getCurrent().owner];
let self = this;
var result = [this.getCurrent().owner];
angular.forEach(this.getCurrent().acl, function(value, key) {
if (value.type === OC.Share.SHARE_TYPE_USER) {
self.getCurrent().users.push(value.participant);
result.push(value.participant);
}
});
this.getCurrent().users = result;
};
BoardService.prototype.getUsers = function () {

View File

@@ -19,7 +19,6 @@
* 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) {
@@ -133,45 +132,6 @@ 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;
});

View File

@@ -1,137 +0,0 @@
/*
* @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);

View File

@@ -19,7 +19,6 @@
* 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) {

View File

@@ -19,10 +19,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
/* global app angular */
app.factory('StackService', function (ApiService, CardService, $http, $q) {
app.factory('StackService', function (ApiService, $http, $q) {
var StackService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
@@ -33,12 +31,6 @@ app.factory('StackService', function (ApiService, CardService, $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');
@@ -52,9 +44,6 @@ app.factory('StackService', function (ApiService, CardService, $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');
@@ -129,7 +118,7 @@ app.factory('StackService', function (ApiService, CardService, $http, $q) {
}
};
// FIXME: Should not show popup but proper undo mechanism
// FIXME: Should not sure popup but proper undo mechanism
StackService.prototype.delete = function (id) {
var deferred = $q.defer();
var self = this;

View File

@@ -19,7 +19,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.factory('StatusService', function () {
// Status Helper

View File

@@ -1,68 +0,0 @@
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'
})
]
};

View File

@@ -1,6 +0,0 @@
const merge = require('webpack-merge');
const baseConfig = require('./webpack.config.js');
module.exports = merge(baseConfig, {
mode: 'development'
});

View File

@@ -1,15 +0,0 @@
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
})
]
}});

View File

@@ -4,17 +4,13 @@ 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",

View File

View File

@@ -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 = translationfiles/<lang>/deck.po
source_file = translationfiles/templates/deck.pot
file_filter = <lang>/deck.po
source_file = templates/deck.pot
source_lang = en
type = PO

24
l10n/bg.js Normal file
View File

@@ -0,0 +1,24 @@
OC.L10N.register(
"deck",
{
"Delete" : "Изтриване",
"Finished" : "Завършен",
"To review" : "За преглед",
"Action needed" : "Необходимо е действие",
"Later" : "По-късно",
"Archive" : "Архивиране",
"Unarchive" : "Разархивиране",
"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 Normal file
View File

@@ -0,0 +1,22 @@
{ "translations": {
"Delete" : "Изтриване",
"Finished" : "Завършен",
"To review" : "За преглед",
"Action needed" : "Необходимо е действие",
"Later" : "По-късно",
"Archive" : "Архивиране",
"Unarchive" : "Разархивиране",
"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);"
}

View File

@@ -2,7 +2,6 @@ OC.L10N.register(
"deck",
{
"Delete" : "Esborra",
"Remove user from card" : "Esborra usuari de la targeta",
"Hours" : "Hores",
"Minutes" : "Minuts",
"Finished" : "Acabat",
@@ -37,15 +36,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ó",
"Saved" : "Desat",
"Formatting help" : "Format d'ajuda",
"Saved" : "Desat",
"Add a card description…" : "Afegeix una descripció de la targeta ...",
"Shared boards" : "Taulers compartits",
"Move board to archive" : "Mou la placa a l'arxiu",

View File

@@ -1,6 +1,5 @@
{ "translations": {
"Delete" : "Esborra",
"Remove user from card" : "Esborra usuari de la targeta",
"Hours" : "Hores",
"Minutes" : "Minuts",
"Finished" : "Acabat",
@@ -35,15 +34,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ó",
"Saved" : "Desat",
"Formatting help" : "Format d'ajuda",
"Saved" : "Desat",
"Add a card description…" : "Afegeix una descripció de la targeta ...",
"Shared boards" : "Taulers compartits",
"Move board to archive" : "Mou la placa a l'arxiu",

View File

@@ -1,40 +1,17 @@
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",
@@ -42,7 +19,6 @@ 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ě.",
"Archive" : "Archiv",
"Unarchive" : "Zrušit archivování",
"Enter a card title" : "Zadejte nadpis karty",
@@ -60,7 +36,7 @@ OC.L10N.register(
"Discard share" : "Zrušit sdílení",
"Update" : "Aktualizovat",
"Create" : "Vytvořit",
"Create a new tag" : "Vytvořit nový štítek",
"Create a new tag" : "Vytvořit novou značku",
"Status" : "Stav",
"Title" : "Název",
"Members" : "Členové",
@@ -71,36 +47,27 @@ 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 novou desku",
"Create new board" : "VYtvořit ovou 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",
"Attachments" : "Přílohy",
"Formatting help" : "Nápověda k formátování",
"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=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");

View File

@@ -1,38 +1,15 @@
{ "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",
@@ -40,7 +17,6 @@
"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ě.",
"Archive" : "Archiv",
"Unarchive" : "Zrušit archivování",
"Enter a card title" : "Zadejte nadpis karty",
@@ -58,7 +34,7 @@
"Discard share" : "Zrušit sdílení",
"Update" : "Aktualizovat",
"Create" : "Vytvořit",
"Create a new tag" : "Vytvořit nový štítek",
"Create a new tag" : "Vytvořit novou značku",
"Status" : "Stav",
"Title" : "Název",
"Members" : "Členové",
@@ -69,36 +45,27 @@
"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 novou desku",
"Create new board" : "VYtvořit ovou 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",
"Attachments" : "Přílohy",
"Formatting help" : "Nápověda k formátování",
"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=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
}

View File

@@ -1,22 +1,17 @@
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" : "Gennemse",
"To review" : "Efterse",
"Action needed" : "Handling påkrævet",
"Later" : "Senere",
"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",
"Deck" : "Tavle",
"Add a new stack" : "Tilføj en ny stak",
"Submit" : "Tilføj",
"Show archived cards" : "Vis arkiverede kort",
@@ -54,22 +49,21 @@ 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",

View File

@@ -1,20 +1,15 @@
{ "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" : "Gennemse",
"To review" : "Efterse",
"Action needed" : "Handling påkrævet",
"Later" : "Senere",
"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",
"Deck" : "Tavle",
"Add a new stack" : "Tilføj en ny stak",
"Submit" : "Tilføj",
"Show archived cards" : "Vis arkiverede kort",
@@ -52,22 +47,21 @@
"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",

View File

@@ -6,28 +6,15 @@ OC.L10N.register(
"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?",
"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",
"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",
@@ -35,14 +22,13 @@ 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",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Tags" : "Schlagworte",
"Tags" : "Etiketten",
"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.",
@@ -66,30 +52,22 @@ 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" : "Schlagworte auswählen",
"Select tags" : "Schlagwörter auswählen",
"Assign users" : "Nutzer zuweisen",
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
"Choose a user to assign" : "Wähle einen Benutzer zum Zuweisen",
"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",
"Attachments" : "Anhänge",
"Formatting help" : "Formatierungshilfe",
"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",

View File

@@ -4,28 +4,15 @@
"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?",
"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",
"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",
@@ -33,14 +20,13 @@
"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",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Tags" : "Schlagworte",
"Tags" : "Etiketten",
"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.",
@@ -64,30 +50,22 @@
"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" : "Schlagworte auswählen",
"Select tags" : "Schlagwörter auswählen",
"Assign users" : "Nutzer zuweisen",
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
"Choose a user to assign" : "Wähle einen Benutzer zum Zuweisen",
"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",
"Attachments" : "Anhänge",
"Formatting help" : "Formatierungshilfe",
"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",

View File

@@ -6,28 +6,15 @@ OC.L10N.register(
"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?",
"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",
"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- 🔖 Vergabe 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",
@@ -35,14 +22,13 @@ 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",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Tags" : "Schlagworte",
"Tags" : "Tags",
"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.",
@@ -66,30 +52,22 @@ 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" : "Schlagworte auswählen",
"Select tags" : "Schlagwörter auswählen",
"Assign users" : "Benutzer zuordnen",
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
"Choose a user to assign" : "Wählen Sie einen Benutzer zum Zuweisen",
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
"Due date" : "Zieltermin",
"Click to set" : "Setzen",
"Remove due date" : "Zieltermin entfernen",
"Description" : "Beschreibung",
"Attachments" : "Anhänge",
"Formatting help" : "Formatierungshilfe",
"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",

View File

@@ -4,28 +4,15 @@
"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?",
"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",
"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- 🔖 Vergabe 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",
@@ -33,14 +20,13 @@
"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",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Tags" : "Schlagworte",
"Tags" : "Tags",
"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.",
@@ -64,30 +50,22 @@
"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" : "Schlagworte auswählen",
"Select tags" : "Schlagwörter auswählen",
"Assign users" : "Benutzer zuordnen",
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
"Choose a user to assign" : "Wählen Sie einen Benutzer zum Zuweisen",
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
"Due date" : "Zieltermin",
"Click to set" : "Setzen",
"Remove due date" : "Zieltermin entfernen",
"Description" : "Beschreibung",
"Attachments" : "Anhänge",
"Formatting help" : "Formatierungshilfe",
"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",

View File

@@ -1,7 +1,6 @@
OC.L10N.register(
"deck",
{
"Are you sure you want to delete this card with all of its data?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την κάρτα με όλα τα δεδομένα της;",
"Delete" : "Διαγραφή",
"Remove user from card" : "Αφαίρεση χρήστη από την κάρτα",
"Hours" : "Ώρες",
@@ -23,18 +22,14 @@ OC.L10N.register(
"Unarchive" : "Αναίρεση αρχειοθέτησης",
"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" : "Μέλη",
@@ -45,18 +40,17 @@ OC.L10N.register(
"Delete board" : "Διαγραφή πίνακα",
"Create new board" : "Δημιουργία νέου πίνακα",
"New board title" : "Νέος τίτλος πίνακα",
"by" : "από",
"Modified:" : "Τροποποιήθηκε:",
"Created:" : "Δημιουργήθηκε:",
"by" : "από",
"Due date" : "Ημερομηνία λήξης",
"Click to set" : "Κλικ για να ορίσετε",
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
"Description" : "Περιγραφή",
"Saved" : "Αποθηκεύτηκε",
"Formatting help" : "Βοήθεια μορφοποίησης",
"Saved" : "Αποθηκεύτηκε",
"Add a card description…" : "Προσθήκη περιγραφής κάρτας...",
"Shared boards" : "Διαμοιρασμένοι πίνακες",
"View more" : "Προβολή περισσοτέρων",
"Move board to archive" : "Μετακίνηση πίνακα στην αρχειοθήκη",
"Create a new board" : "Δημιουργία νέου πίνακα"
},

View File

@@ -1,5 +1,4 @@
{ "translations": {
"Are you sure you want to delete this card with all of its data?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την κάρτα με όλα τα δεδομένα της;",
"Delete" : "Διαγραφή",
"Remove user from card" : "Αφαίρεση χρήστη από την κάρτα",
"Hours" : "Ώρες",
@@ -21,18 +20,14 @@
"Unarchive" : "Αναίρεση αρχειοθέτησης",
"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" : "Μέλη",
@@ -43,18 +38,17 @@
"Delete board" : "Διαγραφή πίνακα",
"Create new board" : "Δημιουργία νέου πίνακα",
"New board title" : "Νέος τίτλος πίνακα",
"by" : "από",
"Modified:" : "Τροποποιήθηκε:",
"Created:" : "Δημιουργήθηκε:",
"by" : "από",
"Due date" : "Ημερομηνία λήξης",
"Click to set" : "Κλικ για να ορίσετε",
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
"Description" : "Περιγραφή",
"Saved" : "Αποθηκεύτηκε",
"Formatting help" : "Βοήθεια μορφοποίησης",
"Saved" : "Αποθηκεύτηκε",
"Add a card description…" : "Προσθήκη περιγραφής κάρτας...",
"Shared boards" : "Διαμοιρασμένοι πίνακες",
"View more" : "Προβολή περισσοτέρων",
"Move board to archive" : "Μετακίνηση πίνακα στην αρχειοθήκη",
"Create a new board" : "Δημιουργία νέου πίνακα"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

View File

@@ -15,8 +15,6 @@ 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",
@@ -54,9 +52,9 @@ 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",
@@ -67,9 +65,9 @@ OC.L10N.register(
"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",

View File

@@ -13,8 +13,6 @@
"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",
@@ -52,9 +50,9 @@
"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",
@@ -65,9 +63,9 @@
"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",

View File

@@ -6,28 +6,14 @@ OC.L10N.register(
"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?",
"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",
"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",
@@ -35,7 +21,6 @@ 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",
"Enter a card title" : "Introducir título de tarjeta",
@@ -66,14 +51,9 @@ 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",
@@ -84,12 +64,9 @@ OC.L10N.register(
"Click to set" : "Pinchar para establecer",
"Remove due date" : "Eliminar fecha límite",
"Description" : "Descripción",
"Attachments" : "Adjuntos",
"Formatting help" : "Ayuda de formato",
"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",

View File

@@ -4,28 +4,14 @@
"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?",
"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",
"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",
@@ -33,7 +19,6 @@
"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",
"Enter a card title" : "Introducir título de tarjeta",
@@ -64,14 +49,9 @@
"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",
@@ -82,12 +62,9 @@
"Click to set" : "Pinchar para establecer",
"Remove due date" : "Eliminar fecha límite",
"Description" : "Descripción",
"Attachments" : "Adjuntos",
"Formatting help" : "Ayuda de formato",
"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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",
"Saved" : "Guardado",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Add a card description…" : "Agregar una descripción de tarjeta...",
"Create a new board" : "Crear nuevo tablero"
},

View File

@@ -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",
"Saved" : "Guardado",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Add a card description…" : "Agregar una descripción de tarjeta...",
"Create a new board" : "Crear nuevo tablero"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

View File

@@ -1,12 +1,9 @@
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. ",
@@ -52,22 +49,21 @@ 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",

View File

@@ -1,10 +1,7 @@
{ "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. ",
@@ -50,22 +47,21 @@
"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",

View File

@@ -1,12 +1,9 @@
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. ",
@@ -52,22 +49,21 @@ 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",

View File

@@ -1,10 +1,7 @@
{ "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. ",
@@ -50,22 +47,21 @@
"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",

View File

@@ -1,12 +1,9 @@
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. ",
@@ -52,22 +49,21 @@ 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",

View File

@@ -1,10 +1,7 @@
{ "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. ",
@@ -50,22 +47,21 @@
"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",

View File

@@ -1,12 +1,9 @@
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. ",
@@ -52,22 +49,21 @@ 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",

View File

@@ -1,10 +1,7 @@
{ "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. ",
@@ -50,22 +47,21 @@
"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",

View File

@@ -1,12 +1,9 @@
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. ",
@@ -52,22 +49,21 @@ 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",

Some files were not shown because too many files have changed in this diff Show More