summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicoP-S <paetni1@gmail.com>2020-04-02 20:43:36 +0200
committerGitHub <noreply@github.com>2020-04-02 20:43:36 +0200
commite47ff25d458a0f7f7e61f9397e1730df21dc5cb7 (patch)
tree5e42af18c820337c1eedf837409bbb056acaa83d
parent7fa9603f9d53594227258d76a78af4023dc325b0 (diff)
parent1e0b53eb9bcfa6a2833ee2f268f480ca7d9838d7 (diff)
downloadwekan-e47ff25d458a0f7f7e61f9397e1730df21dc5cb7.tar.gz
wekan-e47ff25d458a0f7f7e61f9397e1730df21dc5cb7.tar.bz2
wekan-e47ff25d458a0f7f7e61f9397e1730df21dc5cb7.zip
Merge pull request #2 from wekan/master
Merge Wekan
-rw-r--r--.sandstorm-meteor-1.8/package-lock.json2
-rw-r--r--.sandstorm-meteor-1.8/package.json2
-rw-r--r--CHANGELOG.md37
-rw-r--r--Stackerfile.yml2
-rw-r--r--client/components/activities/activities.jade347
-rw-r--r--client/components/activities/activities.js111
-rw-r--r--client/components/activities/comments.js7
-rw-r--r--client/components/boards/boardHeader.jade14
-rw-r--r--client/components/boards/boardHeader.js4
-rw-r--r--client/components/cards/attachments.jade2
-rw-r--r--client/components/cards/cardDetails.jade11
-rw-r--r--client/components/cards/minicard.styl2
-rw-r--r--client/components/main/editor.jade7
-rwxr-xr-xclient/components/main/editor.js66
-rw-r--r--client/components/main/header.jade2
-rw-r--r--client/components/main/header.styl2
-rw-r--r--client/components/notifications/notification.jade10
-rw-r--r--client/components/notifications/notification.js28
-rw-r--r--client/components/notifications/notification.styl57
-rw-r--r--client/components/notifications/notificationIcon.jade53
-rw-r--r--client/components/notifications/notifications.jade5
-rw-r--r--client/components/notifications/notifications.js32
-rw-r--r--client/components/notifications/notifications.styl17
-rw-r--r--client/components/notifications/notificationsDrawer.jade16
-rw-r--r--client/components/notifications/notificationsDrawer.js38
-rw-r--r--client/components/notifications/notificationsDrawer.styl57
-rw-r--r--client/components/sidebar/sidebar.jade4
-rw-r--r--client/components/sidebar/sidebar.js4
-rw-r--r--client/lib/popup.js204
-rw-r--r--i18n/ar.i18n.json10
-rw-r--r--i18n/bg.i18n.json10
-rw-r--r--i18n/br.i18n.json10
-rw-r--r--i18n/ca.i18n.json10
-rw-r--r--i18n/cs.i18n.json32
-rw-r--r--i18n/da.i18n.json10
-rw-r--r--i18n/de.i18n.json10
-rw-r--r--i18n/el.i18n.json10
-rw-r--r--i18n/en-GB.i18n.json10
-rw-r--r--i18n/en.i18n.json10
-rw-r--r--i18n/eo.i18n.json10
-rw-r--r--i18n/es-AR.i18n.json10
-rw-r--r--i18n/es.i18n.json10
-rw-r--r--i18n/eu.i18n.json10
-rw-r--r--i18n/fa.i18n.json10
-rw-r--r--i18n/fi.i18n.json10
-rw-r--r--i18n/fr.i18n.json10
-rw-r--r--i18n/gl.i18n.json10
-rw-r--r--i18n/he.i18n.json10
-rw-r--r--i18n/hi.i18n.json10
-rw-r--r--i18n/hu.i18n.json10
-rw-r--r--i18n/hy.i18n.json10
-rw-r--r--i18n/id.i18n.json10
-rw-r--r--i18n/ig.i18n.json10
-rw-r--r--i18n/it.i18n.json10
-rw-r--r--i18n/ja.i18n.json10
-rw-r--r--i18n/ka.i18n.json10
-rw-r--r--i18n/km.i18n.json10
-rw-r--r--i18n/ko.i18n.json10
-rw-r--r--i18n/lv.i18n.json10
-rw-r--r--i18n/mk.i18n.json10
-rw-r--r--i18n/mn.i18n.json10
-rw-r--r--i18n/nb.i18n.json10
-rw-r--r--i18n/nl.i18n.json10
-rw-r--r--i18n/oc.i18n.json10
-rw-r--r--i18n/pl.i18n.json10
-rw-r--r--i18n/pt-BR.i18n.json12
-rw-r--r--i18n/pt.i18n.json10
-rw-r--r--i18n/ro.i18n.json10
-rw-r--r--i18n/ru.i18n.json10
-rw-r--r--i18n/sl.i18n.json10
-rw-r--r--i18n/sr.i18n.json14
-rw-r--r--i18n/sv.i18n.json10
-rw-r--r--i18n/sw.i18n.json10
-rw-r--r--i18n/ta.i18n.json10
-rw-r--r--i18n/th.i18n.json10
-rw-r--r--i18n/tr.i18n.json10
-rw-r--r--i18n/uk.i18n.json10
-rw-r--r--i18n/vi.i18n.json10
-rw-r--r--i18n/zh-CN.i18n.json10
-rw-r--r--i18n/zh-HK.i18n.json10
-rw-r--r--i18n/zh-TW.i18n.json10
-rw-r--r--models/attachments.js12
-rw-r--r--models/lists.js6
-rw-r--r--models/users.js33
-rw-r--r--package-lock.json2
-rw-r--r--package.json2
-rw-r--r--public/api/wekan.html44
-rw-r--r--public/api/wekan.yml14
-rw-r--r--sandstorm-pkgdef.capnp4
-rw-r--r--server/notifications/profile.js10
-rw-r--r--server/publications/notifications.js101
-rwxr-xr-xstart-wekan.sh2
92 files changed, 1241 insertions, 680 deletions
diff --git a/.sandstorm-meteor-1.8/package-lock.json b/.sandstorm-meteor-1.8/package-lock.json
index e7dc9e05..afff8923 100644
--- a/.sandstorm-meteor-1.8/package-lock.json
+++ b/.sandstorm-meteor-1.8/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v3.86.0",
+ "version": "v3.88.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/.sandstorm-meteor-1.8/package.json b/.sandstorm-meteor-1.8/package.json
index e934c3df..eab12d09 100644
--- a/.sandstorm-meteor-1.8/package.json
+++ b/.sandstorm-meteor-1.8/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v3.86.0",
+ "version": "v3.88.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a693131d..2070d3ba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,44 @@
-# Upcoming Wekan release
+# v3.88 2020-04-02 Wekan release
-This release fixes the following bugs:
+This release adds the following new features:
+
+- [Notification drawer](https://github.com/wekan/wekan/pull/2975) [like Trello](https://github.com/wekan/wekan/issues/2471).
+ Thanks to jtbairdsr and xet7.
+
+and makes the following UI changes:
+- [Minicard labels on the top and title on bottom](https://github.com/wekan/wekan/issues/2980).
+ Thanks to helioguardabaxo and xet7.
+
+and fixes the following bugs:
+
+- [Fix start-wekan.sh MongoDB port to 27017](https://github.com/wekan/wekan/commit/c60a092fc0ed9fe15c417bcb443b1e3e3aaedf7e).
+ Thanks to Keelan and xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v3.87 2020-04-01 Wekan release
+
+This release makes the following UI changes:
+
+- [Move "Rules" from "Board View" to "Board Settings"](https://github.com/wekan/wekan/issues/2973).
+ Thanks to helioguardabaxo and xet7.
+- [Improvements on card details visualization](https://github.com/wekan/wekan/issues/2974).
+ Thanks to helioguardabaxo and xet7.
- [Hide duplicate "Hide system messages" at Change Settings/Member Settings, because it's also on card
slider](https://github.com/wekan/wekan/issues/2837).
Thanks to notohiro and xet7.
+and fixes the following bugs:
+
+- [Fix Browser always reload the whole page when I change one of the card
+ color](https://github.com/wekan/wekan/commit/3546d7aa02bc65cf1183cb493adeb543ba51945d).
+ Fixed by making label colors and text again editable.
+ Regression from [Wekan v3.86 2)](https://github.com/wekan/wekan/commit/b9099a8b7ea6f63c79bdcbb871cb993b2cb7e325).
+ Thanks to javen9881 and xet7.
+- [Fix richer editor submit did not clear edit area](https://github.com/wekan/wekan/commit/033d6710470b2ecd7a0ec0b2f0741ff459e68b32).
+ Thanks to xet7.
+
Thanks to above GitHub users for their contributions and translators for their translations.
# v3.86 2020-03-24 Wekan release
diff --git a/Stackerfile.yml b/Stackerfile.yml
index 262919fe..9e0a31e6 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v3.86.0"
+appVersion: "v3.88.0"
files:
userUploads:
- README.md
diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade
index 8ecbdee8..c86936a0 100644
--- a/client/components/activities/activities.jade
+++ b/client/components/activities/activities.jade
@@ -8,234 +8,201 @@ template(name="activities")
+cardActivities
template(name="boardActivities")
- each currentBoard.activities
- .activity
- +userAvatar(userId=user._id)
- p.activity-desc
- +memberName(user=user)
+ each activityData in currentBoard.activities
+ +activity(activity=activityData card=card mode=mode)
- if($eq activityType 'deleteAttachment')
- | {{{_ 'activity-delete-attach' cardLink}}}.
+template(name="cardActivities")
+ each activityData in currentCard.activities
+ +activity(activity=activityData card=card mode=mode)
+
+template(name="activity")
+ .activity
+ +userAvatar(userId=activity.user._id)
+ p.activity-desc
+ +memberName(user=activity.user)
+
+ //- attachment activity -------------------------------------------------
+ if($eq activity.activityType 'deleteAttachment')
+ | {{{_ 'activity-delete-attach' cardLink}}}.
+
+ if($eq activity.activityType 'addAttachment')
+ | {{{_ 'activity-attached' attachmentLink cardLink}}}.
+ if($neq mode 'board')
+ if activity.attachment.isImage
+ img.attachment-image-preview(src=activity.attachment.url)
+
+ //- board activity ------------------------------------------------------
+ if($eq mode 'board')
+ if($eq activity.activityType 'createBoard')
+ | {{_ 'activity-created' boardLabel}}.
- if($eq activityType 'addAttachment')
- | {{{_ 'activity-attached' attachmentLink cardLink}}}.
+ if($eq activity.activityType 'importBoard')
+ | {{{_ 'activity-imported-board' boardLabel sourceLink}}}.
- if($eq activityType 'addBoardMember')
+ if($eq activity.activityType 'addBoardMember')
| {{{_ 'activity-added' memberLink boardLabel}}}.
- if($eq activityType 'addComment')
- | {{{_ 'activity-on' cardLink}}}
- a.activity-comment(href="{{ card.absoluteUrl }}")
- +viewer
- = comment.text
-
- if($eq activityType 'addChecklist')
- | {{{_ 'activity-checklist-added' cardLink}}}.
- .activity-checklist(href="{{ card.absoluteUrl }}")
- +viewer
- = checklist.title
- if($eq activityType 'removeChecklist')
- | {{{_ 'activity-checklist-removed' cardLink}}}.
-
- if($eq activityType 'checkedItem')
- | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}.
-
- if($eq activityType 'uncheckedItem')
- | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}.
-
- if($eq activityType 'checklistCompleted')
- | {{{_ 'activity-checklist-completed' checklist.title cardLink}}}.
+ if($eq activity.activityType 'removeBoardMember')
+ | {{{_ 'activity-excluded' memberLink boardLabel}}}.
- if($eq activityType 'checklistUncompleted')
- | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}.
+ //- card activity -------------------------------------------------------
+ if($eq activity.activityType 'createCard')
+ if($eq mode 'card')
+ | {{{_ 'activity-added' cardLabel activity.listName}}}.
+ else
+ | {{{_ 'activity-added' cardLabel boardLabel}}}.
- if($eq activityType 'addChecklistItem')
- | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}.
- .activity-checklist(href="{{ card.absoluteUrl }}")
- +viewer
- = checklistItem.title
- if($eq activityType 'removedChecklistItem')
- | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}.
+ if($eq activity.activityType 'importCard')
+ | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}.
- if($eq activityType 'archivedCard')
- | {{{_ 'activity-archived' cardLink}}}.
+ if($eq activity.activityType 'moveCard')
+ | {{{_ 'activity-moved' cardLabel activity.oldList.title activity.list.title}}}.
- if($eq activityType 'archivedList')
- | {{_ 'activity-archived' list.title}}.
+ if($eq activity.activityType 'moveCardBoard')
+ | {{{_ 'activity-moved' cardLink activity.oldBoardName activity.boardName}}}.
- if($eq activityType 'archivedSwimlane')
- | {{_ 'activity-archived' swimlane.title}}.
+ if($eq activity.activityType 'archivedCard')
+ | {{{_ 'activity-archived' cardLink}}}.
- if($eq activityType 'createBoard')
- | {{_ 'activity-created' boardLabel}}.
+ if($eq activity.activityType 'restoredCard')
+ | {{{_ 'activity-sent' cardLink boardLabel}}}.
- if($eq activityType 'createCard')
- | {{{_ 'activity-added' cardLink boardLabel}}}.
+ //- checklist activity --------------------------------------------------
+ if($eq activity.activityType 'addChecklist')
+ | {{{_ 'activity-checklist-added' cardLink}}}.
+ if($eq mode 'card')
+ .activity-checklist
+ +viewer
+ = activity.checklist.title
+ else
+ a.activity-checklist(href="{{ activity.card.absoluteUrl }}")
+ +viewer
+ = activity.checklist.title
- if($eq activityType 'createCustomField')
- | {{_ 'activity-customfield-created' customField}}.
+ if($eq activity.activityType 'removedChecklist')
+ | {{{_ 'activity-checklist-removed' cardLink}}}.
- if($eq activityType 'createList')
- | {{_ 'activity-added' list.title boardLabel}}.
+ if($eq activity.activityType 'completeChecklist')
+ | {{{_ 'activity-checklist-completed' activity.checklist.title cardLink}}}.
- if($eq activityType 'createSwimlane')
- | {{_ 'activity-added' swimlane.title boardLabel}}.
+ if($eq activity.activityType 'uncompleteChecklist')
+ | {{{_ 'activity-checklist-uncompleted' activity.checklist.title cardLink}}}.
- if($eq activityType 'removeList')
- | {{_ 'activity-removed' title boardLabel}}.
+ if($eq activity.activityType 'checkedItem')
+ | {{{_ 'activity-checked-item' checkItem activity.checklist.title cardLink}}}.
- if($eq activityType 'importBoard')
- | {{{_ 'activity-imported-board' boardLabel sourceLink}}}.
+ if($eq activity.activityType 'uncheckedItem')
+ | {{{_ 'activity-unchecked-item' checkItem activity.checklist.title cardLink}}}.
- if($eq activityType 'importCard')
- | {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}.
+ if($eq activity.activityType 'addChecklistItem')
+ | {{{_ 'activity-checklist-item-added' activity.checklist.title cardLink}}}.
+ .activity-checklist(href="{{ activity.card.absoluteUrl }}")
+ +viewer
+ = activity.checklistItem.title
- if($eq activityType 'importList')
- | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}.
+ if($eq activity.activityType 'removedChecklistItem')
+ | {{{_ 'activity-checklist-item-removed' activity.checklist.title cardLink}}}.
- if($eq activityType 'joinMember')
- if($eq user._id member._id)
- | {{{_ 'activity-joined' cardLink}}}.
+ //- comment activity ----------------------------------------------------
+ if($eq mode 'card')
+ //- if we are in card mode we display the comment in a way that it
+ //- can be edited by the owner
+ if($eq activity.activityType 'addComment')
+ +inlinedForm(classNames='js-edit-comment')
+ +editor(autofocus=true)
+ = activity.comment.text
+ .edit-controls
+ button.primary(type="submit") {{_ 'edit'}}
else
- | {{{_ 'activity-added' memberLink cardLink}}}.
-
- if($eq activityType 'moveCardBoard')
- | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}.
-
- if($eq activityType 'moveCard')
- | {{{_ 'activity-moved' cardLink oldList.title list.title}}}.
-
- if($eq activityType 'removeBoardMember')
- | {{{_ 'activity-excluded' memberLink boardLabel}}}.
+ .activity-comment
+ +viewer
+ = activity.comment.text
+ span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
+ if ($eq currentUser._id activity.comment.userId)
+ = ' - '
+ a.js-open-inlined-form {{_ "edit"}}
+ = ' - '
+ a.js-delete-comment {{_ "delete"}}
- if($eq activityType 'restoredCard')
- | {{{_ 'activity-sent' cardLink boardLabel}}}.
+ if($eq activity.activityType 'deleteComment')
+ | {{{_ 'activity-deleteComment' currentData.commentId}}}.
- if($eq activityType 'addedLabel')
- | {{{_ 'activity-added-label' lastLabel cardLink}}}.
+ if($eq activity.activityType 'editComment')
+ | {{{_ 'activity-editComment' currentData.commentId}}}.
+ else
+ //- if we are not in card mode we only display a summary of the comment
+ if($eq activity.activityType 'addComment')
+ | {{{_ 'activity-on' cardLink}}}
+ a.activity-comment(href="{{ activity.card.absoluteUrl }}")
+ +viewer
+ = activity.comment.text
- if($eq activityType 'removedLabel')
- | {{{_ 'activity-removed-label' lastLabel cardLink}}}.
+ //- customField activity ------------------------------------------------
+ if($eq mode 'board')
+ if($eq activity.activityType 'createCustomField')
+ | {{_ 'activity-customfield-created' customField}}.
- if($eq activityType 'setCustomField')
+ if($eq activity.activityType 'setCustomField')
| {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}.
- if($eq activityType 'unsetCustomField')
+ if($eq activity.activityType 'unsetCustomField')
| {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}.
- if($eq activityType 'unjoinMember')
- if($eq user._id member._id)
- | {{{_ 'activity-unjoined' cardLink}}}.
- else
- | {{{_ 'activity-removed' memberLink cardLink}}}.
+ //- label activity ------------------------------------------------------
+ if($eq activity.activityType 'addedLabel')
+ | {{{_ 'activity-added-label' lastLabel cardLink}}}.
- span(title=createdAt).activity-meta {{ moment createdAt }}
+ if($eq activity.activityType 'removedLabel')
+ | {{{_ 'activity-removed-label' lastLabel cardLink}}}.
-template(name="cardActivities")
- each currentCard.activities
- .activity
- +userAvatar(userId=user._id)
- p.activity-desc
- +memberName(user=user)
- if($eq activityType 'createCard')
- | {{_ 'activity-added' cardLabel listName}}.
- if($eq activityType 'importCard')
- | {{{_ 'activity-imported' cardLabel list.title sourceLink}}}.
- if($eq activityType 'joinMember')
- if($eq user._id member._id)
- | {{_ 'activity-joined' cardLabel}}.
- else
- | {{{_ 'activity-added' memberLink cardLabel}}}.
- if($eq activityType 'unjoinMember')
- if($eq user._id member._id)
- | {{_ 'activity-unjoined' cardLabel}}.
- else
- | {{{_ 'activity-removed' cardLabel memberLink}}}.
- if($eq activityType 'archivedCard')
- | {{_ 'activity-archived' cardLabel}}.
-
- if($eq activityType 'addedLabel')
- | {{{_ 'activity-added-label-card' lastLabel }}}.
+ //- list activity -------------------------------------------------------
+ if($neq mode 'card')
+ if($eq activity.activityType 'createList')
+ | {{{_ 'activity-added' listLabel boardLabel}}}.
- if($eq activityType 'removedLabel')
- | {{{_ 'activity-removed-label-card' lastLabel }}}.
+ if($eq activity.activityType 'importList')
+ | {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}.
- if($eq activityType 'removeChecklist')
- | {{{_ 'activity-checklist-removed' cardLabel}}}.
+ if($eq activity.activityType 'removeList')
+ | {{{_ 'activity-removed' activity.title boardLabel}}}.
- if($eq activityType 'checkedItem')
- | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}.
+ if($eq activity.activityType 'archivedList')
+ | {{_ 'activity-archived' listLabel}}.
- if($eq activityType 'uncheckedItem')
- | {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}.
+ //- member activity ----------------------------------------------------
+ if($eq activity.activityType 'joinMember')
+ if($eq user._id activity.member._id)
+ | {{{_ 'activity-joined' cardLink}}}.
+ else
+ | {{{_ 'activity-added' memberLink cardLink}}}.
- if($eq activityType 'checklistCompleted')
- | {{{_ 'activity-checklist-completed-card' checklist.title }}}.
+ if($eq activity.activityType 'unjoinMember')
+ if($eq user._id activity.member._id)
+ | {{{_ 'activity-unjoined' cardLink}}}.
+ else
+ | {{{_ 'activity-removed' memberLink cardLink}}}.
- if($eq activityType 'checklistUncompleted')
- | {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}.
+ //- swimlane activity --------------------------------------------------
+ if($neq mode 'card')
+ if($eq activity.activityType 'createSwimlane')
+ | {{{_ 'activity-added' activity.swimlane.title boardLabel}}}.
- if($eq activityType 'restoredCard')
- | {{_ 'activity-sent' cardLabel boardLabel}}.
- if($eq activityType 'moveCard')
- | {{_ 'activity-moved' cardLabel oldList.title list.title}}.
+ if($eq activity.activityType 'archivedSwimlane')
+ | {{_ 'activity-archived' activity.swimlane.title}}.
- if($eq activityType 'moveCardBoard')
- | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}.
- if($eq activityType 'addAttachment')
- | {{{_ 'activity-attached' attachmentLink cardLabel}}}.
- if attachment.isImage
- img.attachment-image-preview(src=attachment.url)
- if($eq activityType 'deleteAttachment')
- | {{{_ 'activity-delete-attach' cardLabel}}}.
- if($eq activityType 'removedChecklist')
- | {{{_ 'activity-checklist-removed' cardLabel}}}.
- if($eq activityType 'addChecklist')
- | {{{_ 'activity-checklist-added' cardLabel}}}.
- .activity-checklist
- +viewer
- = checklist.title
- if($eq activityType 'addChecklistItem')
- | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}.
- .activity-checklist(href="{{ card.absoluteUrl }}")
- +viewer
- = checklistItem.title
-
- if(currentData.timeKey)
- | {{{_ activityType }}}
+ //- I don't understand this part ----------------------------------------
+ if(currentData.timeKey)
+ | {{{_ activity.activityType }}}
+ = ' '
+ i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }}
+ if (currentData.timeOldValue)
= ' '
- i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }}
- if (currentData.timeOldValue)
- = ' '
- | {{{_ "previous_as" }}}
- = ' '
- i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }}
- = ' @'
- else if(currentData.timeValue)
- | {{{_ activityType currentData.timeValue}}}
-
-
- if($eq activityType 'deleteComment')
- | {{{_ 'activity-deleteComment' currentData.commentId}}}.
- if($eq activityType 'editComment')
- | {{{_ 'activity-editComment' currentData.commentId}}}.
- if($eq activityType 'addComment')
- +inlinedForm(classNames='js-edit-comment')
- +editor(autofocus=true)
- = comment.text
- .edit-controls
- button.primary(type="submit") {{_ 'edit'}}
- else
- .activity-comment
- +viewer
- = comment.text
- span(title=createdAt).activity-meta {{ moment createdAt }}
- if ($eq currentUser._id comment.userId)
- = ' - '
- a.js-open-inlined-form {{_ "edit"}}
- = ' - '
- a.js-delete-comment {{_ "delete"}}
-
- else
- span(title=createdAt).activity-meta {{ moment createdAt }}
+ | {{{_ "previous_as" }}}
+ = ' '
+ i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }}
+ = ' @'
+ else if(currentData.timeValue)
+ | {{{_ activity.activityType currentData.timeValue}}}
+
+ span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js
index b082273a..36214e19 100644
--- a/client/components/activities/activities.js
+++ b/client/components/activities/activities.js
@@ -41,7 +41,9 @@ BlazeComponent.extendComponent({
});
});
},
+}).register('activities');
+BlazeComponent.extendComponent({
loadNextPage() {
if (this.loadNextPageLocked === false) {
this.page.set(this.page.get() + 1);
@@ -50,41 +52,37 @@ BlazeComponent.extendComponent({
},
checkItem() {
- const checkItemId = this.currentData().checklistItemId;
+ const checkItemId = this.currentData().activity.checklistItemId;
const checkItem = ChecklistItems.findOne({ _id: checkItemId });
- return checkItem.title;
+ return checkItem && checkItem.title;
},
boardLabel() {
+ const data = this.currentData();
+ if (data.mode !== 'board') {
+ return createBoardLink(data.activity.board(), data.activity.listName);
+ }
return TAPi18n.__('this-board');
},
cardLabel() {
+ const data = this.currentData();
+ if (data.mode !== 'card') {
+ return createCardLink(this.currentData().activity.card());
+ }
return TAPi18n.__('this-card');
},
cardLink() {
- const card = this.currentData().card();
- return (
- card &&
- Blaze.toHTML(
- HTML.A(
- {
- href: card.absoluteUrl(),
- class: 'action-card',
- },
- card.title,
- ),
- )
- );
+ return createCardLink(this.currentData().activity.card());
},
lastLabel() {
- const lastLabelId = this.currentData().labelId;
+ const lastLabelId = this.currentData().activity.labelId;
if (!lastLabelId) return null;
- const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(
- lastLabelId,
- );
+ const lastLabel = Boards.findOne(
+ this.currentData().activity.boardId,
+ ).getLabelById(lastLabelId);
if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) {
return lastLabel.color;
} else {
@@ -94,7 +92,7 @@ BlazeComponent.extendComponent({
lastCustomField() {
const lastCustomField = CustomFields.findOne(
- this.currentData().customFieldId,
+ this.currentData().activity.customFieldId,
);
if (!lastCustomField) return null;
return lastCustomField.name;
@@ -102,10 +100,10 @@ BlazeComponent.extendComponent({
lastCustomFieldValue() {
const lastCustomField = CustomFields.findOne(
- this.currentData().customFieldId,
+ this.currentData().activity.customFieldId,
);
if (!lastCustomField) return null;
- const value = this.currentData().value;
+ const value = this.currentData().activity.value;
if (
lastCustomField.settings.dropdownItems &&
lastCustomField.settings.dropdownItems.length > 0
@@ -122,11 +120,13 @@ BlazeComponent.extendComponent({
},
listLabel() {
- return this.currentData().list().title;
+ const activity = this.currentData().activity;
+ const list = activity.list();
+ return (list && list.title) || activity.title;
},
sourceLink() {
- const source = this.currentData().source;
+ const source = this.currentData().activity.source;
if (source) {
if (source.url) {
return Blaze.toHTML(
@@ -146,30 +146,31 @@ BlazeComponent.extendComponent({
memberLink() {
return Blaze.toHTMLWithData(Template.memberName, {
- user: this.currentData().member(),
+ user: this.currentData().activity.member(),
});
},
attachmentLink() {
- const attachment = this.currentData().attachment();
+ const attachment = this.currentData().activity.attachment();
// trying to display url before file is stored generates js errors
return (
- attachment &&
- attachment.url({ download: true }) &&
- Blaze.toHTML(
- HTML.A(
- {
- href: attachment.url({ download: true }),
- target: '_blank',
- },
- attachment.name(),
- ),
- )
+ (attachment &&
+ attachment.url({ download: true }) &&
+ Blaze.toHTML(
+ HTML.A(
+ {
+ href: attachment.url({ download: true }),
+ target: '_blank',
+ },
+ attachment.name(),
+ ),
+ )) ||
+ this.currentData().activity.attachmentName
);
},
customField() {
- const customField = this.currentData().customField();
+ const customField = this.currentData().activity.customField();
if (!customField) return null;
return customField.name;
},
@@ -199,4 +200,36 @@ BlazeComponent.extendComponent({
},
];
},
-}).register('activities');
+}).register('activity');
+
+function createCardLink(card) {
+ return (
+ card &&
+ Blaze.toHTML(
+ HTML.A(
+ {
+ href: card.absoluteUrl(),
+ class: 'action-card',
+ },
+ card.title,
+ ),
+ )
+ );
+}
+
+function createBoardLink(board, list) {
+ let text = board.title;
+ if (list) text += `: ${list}`;
+ return (
+ board &&
+ Blaze.toHTML(
+ HTML.A(
+ {
+ href: board.absoluteUrl(),
+ class: 'action-board',
+ },
+ text,
+ ),
+ )
+ );
+}
diff --git a/client/components/activities/comments.js b/client/components/activities/comments.js
index e885459e..50ca019b 100644
--- a/client/components/activities/comments.js
+++ b/client/components/activities/comments.js
@@ -33,13 +33,6 @@ BlazeComponent.extendComponent({
cardId,
});
resetCommentInput(input);
- // With Richer editor is in use, and comment is submitted,
- // clear comment form with JQuery. Id #summernote is defined
- // at client/components/main/editor.jade where it previously was
- // id=id, now it is id="summernote".
- if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR === 'true') {
- $('#summernote').summernote('code', '');
- }
Tracker.flush();
autosize.update(input);
input.trigger('submitted');
diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade
index 53a74f76..4c0edac4 100644
--- a/client/components/boards/boardHeader.jade
+++ b/client/components/boards/boardHeader.jade
@@ -193,20 +193,6 @@ template(name="boardChangeViewPopup")
| {{_ 'board-view-cal'}}
if $eq Utils.boardView "board-view-cal"
i.fa.fa-check
- if currentUser.isAdmin
- hr
- li
- with "board-view-rules"
- a.js-open-rules-view(title="{{_ 'rules'}}")
- i.fa.fa-magic
- | {{_ 'rules'}}
- else if currentUser.isBoardAdmin
- hr
- li
- with "board-view-rules"
- a.js-open-rules-view(title="{{_ 'rules'}}")
- i.fa.fa-magic
- | {{_ 'rules'}}
template(name="createBoard")
form
diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js
index 9040ed83..dc553134 100644
--- a/client/components/boards/boardHeader.js
+++ b/client/components/boards/boardHeader.js
@@ -191,10 +191,6 @@ Template.boardChangeViewPopup.events({
Utils.setBoardView('board-view-cal');
Popup.close();
},
- 'click .js-open-rules-view'() {
- Modal.openWide('rulesMain');
- Popup.close();
- },
});
const CreateBoard = BlazeComponent.extendComponent({
diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade
index b695ea41..61454fa7 100644
--- a/client/components/cards/attachments.jade
+++ b/client/components/cards/attachments.jade
@@ -55,5 +55,5 @@ template(name="attachmentsGalery")
unless currentUser.isWorker
//li.attachment-item.add-attachment
a.js-add-attachment
- i.fa.fa-paperclip
+ i.fa.fa-plus
| {{_ 'add-attachment' }}
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 615ae1d5..257ca0a8 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -203,6 +203,7 @@ template(name="cardDetails")
if canModifyCard
unless currentUser.isWorker
if currentBoard.allowsDescriptionTitle
+ hr
h3
i.fa.fa-align-left
card-details-item-title {{_ 'description'}}
@@ -229,6 +230,7 @@ template(name="cardDetails")
a.js-close-inlined-form {{_ 'discard'}}
else if getDescription
if currentBoard.allowsDescriptionTitle
+ hr
h3.card-details-item-title {{_ 'description'}}
if currentBoard.allowsDescriptionText
+viewer
@@ -237,15 +239,16 @@ template(name="cardDetails")
.card-checklist-attachmentGalerys
.card-checklist-attachmentGalery.card-checklists
if currentBoard.allowsChecklists
+ hr
+checklists(cardId = _id)
if currentBoard.allowsSubtasks
hr
+subtasks(cardId = _id)
if currentBoard.allowsAttachments
- //- hr
- //- h3
- //- i.fa.fa-paperclip
- //- | {{_ 'attachments'}}
+ hr
+ h3
+ i.fa.fa-paperclip
+ | {{_ 'attachments'}}
.card-checklist-attachmentGalery.card-attachmentGalery
+attachmentsGalery
diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl
index 8607e118..7d72a588 100644
--- a/client/components/cards/minicard.styl
+++ b/client/components/cards/minicard.styl
@@ -79,7 +79,7 @@
border-radius: top 2px
.minicard-labels
- float: right
+ float: none
display: flex
flex-wrap: wrap
diff --git a/client/components/main/editor.jade b/client/components/main/editor.jade
index 5c5454ee..dbd61715 100644
--- a/client/components/main/editor.jade
+++ b/client/components/main/editor.jade
@@ -1,13 +1,8 @@
template(name="editor")
- // With Richer editor is in use, and comment is submitted,
- // clear comment form with JQuery Comment at
- // client/components/activities/comments.js . Id #summernote is defined
- // here at client/components/main/editor.jade where it previously was
- // id=id, now it is id="summernote".
textarea.editor(
dir="auto"
class="{{class}}"
- id="summernote"
+ id=id
autofocus=autofocus
placeholder="{{_ 'comment-placeholder'}}")
+Template.contentBlock
diff --git a/client/components/main/editor.js b/client/components/main/editor.js
index 3f09d284..081c6521 100755
--- a/client/components/main/editor.js
+++ b/client/components/main/editor.js
@@ -30,7 +30,7 @@ Template.editor.onRendered(() => {
autosize($textarea);
$textarea.escapeableTextComplete(mentions);
};
- if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR === 'true') {
+ if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false) {
const isSmall = Utils.isMiniScreen();
const toolbar = isSmall
? [
@@ -108,45 +108,17 @@ Template.editor.onRendered(() => {
}
return undefined;
};
- // Prevent @member mentions on Add Comment input field
- // from closing card, part 1.
- let popupShown = false;
inputs.each(function(idx, input) {
mSummernotes[idx] = $(input).summernote({
placeholder,
- // Prevent @member mentions on Add Comment input field
- // from closing card, part 2.
- onKeydown(e) {
- if (popupShown) {
- e.preventDefault();
- }
- },
- onKeyup(e) {
- if (popupShown) {
- e.preventDefault();
- }
- },
callbacks: {
- // Prevent @member mentions on Add Comment input field
- // from closing card, part 3.
- onKeydown(e) {
- if (popupShown) {
- e.preventDefault();
- }
- },
- onKeyup(e) {
- if (popupShown) {
- e.preventDefault();
- }
- },
onInit(object) {
const originalInput = this;
- $(originalInput).on('input', function() {
+ $(originalInput).on('submitted', function() {
// when comment is submitted, the original textarea will be set to '', so shall we
if (!this.value) {
const sn = getSummernote(this);
- sn && sn.summernote('reset');
- object && object.editingArea.find('.note-placeholder').show();
+ sn && sn.summernote('code', '');
}
});
const jEditor = object && object.editable;
@@ -163,6 +135,7 @@ Template.editor.onRendered(() => {
});
}
},
+
onImageUpload(files) {
const $summernote = getSummernote(this);
if (files && files.length > 0) {
@@ -249,7 +222,7 @@ Template.editor.onRendered(() => {
// == Fix End ==
const original = someNote.summernote('code');
const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML.
- someNote.summernote('reset'); //clear original
+ someNote.summernote('code', ''); //clear original
someNote.summernote('pasteHTML', cleaned); //this sets the displayed content editor to the cleaned pasted code.
};
setTimeout(function() {
@@ -316,15 +289,15 @@ Blaze.Template.registerHelper(
let currentMention;
while ((currentMention = mentionRegex.exec(content)) !== null) {
- const [fullMention, username] = currentMention;
+ const [fullMention, quoteduser, simple] = currentMention;
+ const username = quoteduser || simple;
const knowedUser = _.findWhere(knowedUsers, { username });
if (!knowedUser) {
continue;
}
const linkValue = [' ', at, knowedUser.username];
- //let linkClass = 'atMention js-open-member';
- let linkClass = 'atMention';
+ let linkClass = 'atMention js-open-member';
if (knowedUser.userId === Meteor.userId()) {
linkClass += ' me';
}
@@ -357,25 +330,24 @@ Template.viewer.events({
// the corresponding text). Clicking a link shouldn't fire these actions, stop
// we stop these event at the viewer component level.
'click a'(event, templateInstance) {
- event.stopPropagation();
-
- // XXX We hijack the build-in browser action because we currently don't have
- // `_blank` attributes in viewer links, and the transformer function is
- // handled by a third party package that we can't configure easily. Fix that
- // by using directly `_blank` attribute in the rendered HTML.
- event.preventDefault();
-
+ let prevent = true;
const userId = event.currentTarget.dataset.userid;
if (userId) {
- // Prevent @member mentions on Add Comment input field
- // from closing card, part 4.
- PopupNoClose.open('member').call({ userId }, event, templateInstance);
- event.preventDefault();
+ Popup.open('member').call({ userId }, event, templateInstance);
} else {
const href = event.currentTarget.href;
if (href) {
window.open(href, '_blank');
}
}
+ if (prevent) {
+ event.stopPropagation();
+
+ // XXX We hijack the build-in browser action because we currently don't have
+ // `_blank` attributes in viewer links, and the transformer function is
+ // handled by a third party package that we can't configure easily. Fix that
+ // by using directly `_blank` attribute in the rendered HTML.
+ event.preventDefault();
+ }
},
});
diff --git a/client/components/main/header.jade b/client/components/main/header.jade
index 75e84c0c..9a5a6b9b 100644
--- a/client/components/main/header.jade
+++ b/client/components/main/header.jade
@@ -35,6 +35,8 @@ template(name="header")
a#header-new-board-icon.js-create-board
i.fa.fa-plus(title="Create a new board")
+ +notifications
+
+headerUserBar
#header(class=currentBoard.colorClass)
diff --git a/client/components/main/header.styl b/client/components/main/header.styl
index f77c2aca..632d1535 100644
--- a/client/components/main/header.styl
+++ b/client/components/main/header.styl
@@ -99,7 +99,7 @@
height: 28px
font-size: 12px
display: flex
- z-index: 17
+ z-index: 21
#header-user-bar,
#header-new-board-icon,
diff --git a/client/components/notifications/notification.jade b/client/components/notifications/notification.jade
new file mode 100644
index 00000000..c98bbdba
--- /dev/null
+++ b/client/components/notifications/notification.jade
@@ -0,0 +1,10 @@
+template(name='notification')
+ li.notification(class="{{#if read}}read{{/if}}")
+ .read-status
+ .materialCheckBox(class="{{#if read}}is-checked{{/if}}")
+ +notificationIcon(activityData)
+ .details
+ +activity(activity=activityData mode='none')
+ if read
+ .remove
+ a.fa.fa-trash
diff --git a/client/components/notifications/notification.js b/client/components/notifications/notification.js
new file mode 100644
index 00000000..89277520
--- /dev/null
+++ b/client/components/notifications/notification.js
@@ -0,0 +1,28 @@
+Template.notification.events({
+ 'click .read-status .materialCheckBox'() {
+ const update = {};
+ update[`profile.notifications.${this.index}.read`] = this.read
+ ? null
+ : Date.now();
+ Users.update(Meteor.userId(), { $set: update });
+ },
+ 'click .remove a'() {
+ Meteor.user().removeNotification(this.activityData._id);
+ },
+});
+
+Template.notification.helpers({
+ mode: 'board',
+ isOfActivityType(activityId, type) {
+ const activity = Activities.findOne(activityId);
+ return activity && activity.activityType === type;
+ },
+ activityType(activityId) {
+ const activity = Activities.findOne(activityId);
+ return activity ? activity.activityType : '';
+ },
+ activityUser(activityId) {
+ const activity = Activities.findOne(activityId);
+ return activity && activity.userId;
+ },
+});
diff --git a/client/components/notifications/notification.styl b/client/components/notifications/notification.styl
new file mode 100644
index 00000000..0cf0cfd5
--- /dev/null
+++ b/client/components/notifications/notification.styl
@@ -0,0 +1,57 @@
+#notifications-drawer
+ &.show-read .notification.read
+ display: flex
+
+ .notification
+ display: flex
+ float: none
+ padding: 12px 8px 8px
+ color: black
+ border-bottom: 1px solid #dbdbdb
+
+ &.read
+ display: none
+
+ .read-status
+ width: 30px
+
+ input
+ width: 24px
+ height: 24px
+
+ .activity-type
+ margin: 16px 0 0
+ width: 17px
+ height: 17px
+ font-size: 17px
+ display: block
+ color: #bbb
+
+ .details
+ width: calc(100% - 30px)
+
+ .activity
+ display: flex
+
+ .activity-desc
+ width: 100%;
+
+ .activity-comment
+ display: block
+ width: 100%
+ border-radius: 3px
+ background: #fff
+ text-decoration: none
+ box-shadow: 0 1px 2px rgba(0,0,0,0.2)
+ margin-top: 5px
+ padding: 5px
+
+ .activity-meta
+ display: block
+ font-size: 0.8em
+ color: #999
+ font-style: italic
+
+ .remove
+ a:hover
+ color #eb4646 !important
diff --git a/client/components/notifications/notificationIcon.jade b/client/components/notifications/notificationIcon.jade
new file mode 100644
index 00000000..04377606
--- /dev/null
+++ b/client/components/notifications/notificationIcon.jade
@@ -0,0 +1,53 @@
+template(name='notificationIcon')
+ if($in activityType 'deleteAttachment' 'addAttachment')
+ i.fa.fa-paperclip.activity-type(title="attachment")
+ else if($in activityType 'createBoard' 'importBoard')
+ i.fa.fa-chalkboard.activity-type(title="board")
+
+ else if($in activityType 'createCard' 'importCard' 'moveCard')
+ +cardNotificationIcon
+ else if($in activityType 'moveCardBoard' 'archivedCard' 'restoredCard')
+ +cardNotificationIcon
+ //- $in can only handle up to 3 cases so we have to break this case over 2 cases... use a simple template to keep it
+ //- DRY and consistant
+
+ else if($in activityType 'addChecklist' 'removedChecklist' 'completeChecklist')
+ +checklistNotificationIcon
+ else if($in activityType 'uncompleteChecklist')
+ +checklistNotificationIcon
+ //- $in can only handle up to 3 cases so we have to break this case over 2 cases... use a simple template to keep it
+ //- DRY and consistant
+
+ else if($in activityType 'checkedItem' 'uncheckedItem' 'addChecklistItem' 'removedChecklistItem')
+ i.fa.fa-check-square.activity-type(title="checklist item")
+ else if($in activityType 'addComment')
+ i.fa.fa-comment-o.activity-type(title="comment")
+ else if($in activityType 'createCustomField' 'setCustomField' 'unsetCustomField')
+ i.fa.fa-code.activity-type(title="custom field")
+ else if($in activityType 'addedLabel' 'removedLabel')
+ i.fa.fa-tag.activity-type(title="label")
+
+ else if($in activityType 'createList' 'removeList' 'archivedList')
+ +listNotificationIcon
+ else if($in activityType 'importList')
+ +listNotificationIcon
+ //- $in can only handle up to 3 cases so we have to break this case over 2 cases... use a simple template to keep it
+ //- DRY and consistant
+
+ //- elswhere in the app we use fa-trello to indicate lists...
+ //- i personally like fa-columns a bit better
+ else if($in activityType 'unjoinMember' 'addBoardMember' 'joinMember' 'removeBoardMember')
+ i.fa.fa-user.activity-type(title="member")
+ else if($in activityType 'createSwimlane' 'archivedSwimlane')
+ i.fa.fa-th-large.activity-type(title="swimlane")
+ else
+ i.fa.fa-bug.activity-type(title="can't find icon for #{activityType}")
+
+template(name='cardNotificationIcon')
+ i.fa.fa-clone.activity-type(title="card")
+
+template(name='checklistNotificationIcon')
+ i.fa.fa-list.activity-type(title="checklist")
+
+template(name='listNotificationIcon')
+ i.fa.fa-columns.activity-type(title="list")
diff --git a/client/components/notifications/notifications.jade b/client/components/notifications/notifications.jade
new file mode 100644
index 00000000..bf8acbbf
--- /dev/null
+++ b/client/components/notifications/notifications.jade
@@ -0,0 +1,5 @@
+template(name='notifications')
+ #notifications.board-header-btns.right
+ a.notifications-drawer-toggle.fa.fa-bell(class="{{#if $gt unreadNotifications 0}}alert{{/if}}")
+ if $.Session.get 'showNotificationsDrawer'
+ +notificationsDrawer(unreadNotifications=unreadNotifications)
diff --git a/client/components/notifications/notifications.js b/client/components/notifications/notifications.js
new file mode 100644
index 00000000..c0aa6cb5
--- /dev/null
+++ b/client/components/notifications/notifications.js
@@ -0,0 +1,32 @@
+// this hides the notifications drawer if anyone clicks off of the panel
+Template.body.events({
+ click(event) {
+ if (
+ !$(event.target).is('#notifications *') &&
+ Session.get('showNotificationsDrawer')
+ ) {
+ toggleNotificationsDrawer();
+ }
+ },
+});
+
+Template.notifications.helpers({
+ unreadNotifications() {
+ const notifications = Users.findOne(Meteor.userId()).notifications();
+ const unreadNotifications = _.filter(notifications, v => !v.read);
+ return unreadNotifications.length;
+ },
+});
+
+Template.notifications.events({
+ 'click .notifications-drawer-toggle'() {
+ toggleNotificationsDrawer();
+ },
+});
+
+export function toggleNotificationsDrawer() {
+ Session.set(
+ 'showNotificationsDrawer',
+ !Session.get('showNotificationsDrawer'),
+ );
+}
diff --git a/client/components/notifications/notifications.styl b/client/components/notifications/notifications.styl
new file mode 100644
index 00000000..710cd3f9
--- /dev/null
+++ b/client/components/notifications/notifications.styl
@@ -0,0 +1,17 @@
+#notifications
+ position: relative
+
+ .notifications-drawer-toggle
+ display: block
+ line-height: 28px
+ color: #f2f2f2
+ margin: 0 10px
+ width: 28px
+ height: 28px
+ text-align: center
+ border: 0
+ padding: 0
+
+ &.alert
+ background-color: #eb4646;
+
diff --git a/client/components/notifications/notificationsDrawer.jade b/client/components/notifications/notificationsDrawer.jade
new file mode 100644
index 00000000..01117009
--- /dev/null
+++ b/client/components/notifications/notificationsDrawer.jade
@@ -0,0 +1,16 @@
+template(name='notificationsDrawer')
+ section#notifications-drawer(class="{{#if $.Session.get 'showReadNotifications'}}show-read{{/if}}")
+ .header
+ if $.Session.get 'showReadNotifications'
+ a.toggle-read {{_ 'filter-by-unread'}}
+ else
+ a.toggle-read {{_ 'view-all'}}
+ h5 {{_ 'notifications'}}
+ if($gt unreadNotifications 0)
+ |(#{unreadNotifications})
+ a.fa.fa-times-thin.close
+ ul.notifications
+ each transformedProfile.notifications
+ +notification(activityData=activity index=dbIndex read=read)
+ if($gt unreadNotifications 0)
+ a.all-read {{_ 'mark-all-as-read'}}
diff --git a/client/components/notifications/notificationsDrawer.js b/client/components/notifications/notificationsDrawer.js
new file mode 100644
index 00000000..98d4750d
--- /dev/null
+++ b/client/components/notifications/notificationsDrawer.js
@@ -0,0 +1,38 @@
+import { toggleNotificationsDrawer } from './notifications.js';
+
+Template.notificationsDrawer.onCreated(function() {
+ Meteor.subscribe('notificationActivities');
+ Meteor.subscribe('notificationCards');
+ Meteor.subscribe('notificationUsers');
+ Meteor.subscribe('notificationsAttachments');
+ Meteor.subscribe('notificationChecklistItems');
+ Meteor.subscribe('notificationChecklists');
+ Meteor.subscribe('notificationComments');
+ Meteor.subscribe('notificationLists');
+ Meteor.subscribe('notificationSwimlanes');
+});
+
+Template.notificationsDrawer.helpers({
+ transformedProfile() {
+ return Users.findOne(Meteor.userId());
+ },
+});
+
+Template.notificationsDrawer.events({
+ 'click .all-read'() {
+ const notifications = Meteor.user().profile.notifications;
+ for (const index in notifications) {
+ if (notifications.hasOwnProperty(index) && !notifications[index].read) {
+ const update = {};
+ update[`profile.notifications.${index}.read`] = Date.now();
+ Users.update(Meteor.userId(), { $set: update });
+ }
+ }
+ },
+ 'click .close'() {
+ toggleNotificationsDrawer();
+ },
+ 'click .toggle-read'() {
+ Session.set('showReadNotifications', !Session.get('showReadNotifications'));
+ },
+});
diff --git a/client/components/notifications/notificationsDrawer.styl b/client/components/notifications/notificationsDrawer.styl
new file mode 100644
index 00000000..a26b5e4a
--- /dev/null
+++ b/client/components/notifications/notificationsDrawer.styl
@@ -0,0 +1,57 @@
+belize = #2980b9
+
+section#notifications-drawer
+ position: fixed
+ top: 28px
+ right: 0
+ width: 400px
+ background-color: #fafafa
+ box-shadow: 0 1px 2px rgba(0,0,0,0.15)
+ border-radius: 2px
+ max-height: calc(100vh - 28px - 36px)
+ color: black
+ padding-top 36px;
+ overflow: scroll
+
+ a:hover
+ color: belize !important
+
+ .header
+ position: fixed
+ top 28px
+ right 0
+ width calc(400px - 32px)
+ padding: 8px 16px
+ background: #ededed
+ border-bottom: 1px solid #dbdbdb
+ z-index 2
+
+ .toggle-read
+ position absolute
+ left 16px
+ top calc(50% - 8px)
+ color belize
+
+ h5
+ text-align: center
+ margin: 0
+
+ .close
+ position: absolute
+ top: calc(50% - 12px)
+ right: 12px
+ font-size: 24px
+ height: 24px
+ line-height: 24px
+ opacity 1
+
+ .all-read
+ color belize
+ background-color: #fafafa
+ margin 8px 16px 12px
+ display inline-block
+
+ ul.notifications
+ display: block
+ padding: 0px 16px
+ margin: 0
diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade
index f0b0e4be..901fe99f 100644
--- a/client/components/sidebar/sidebar.jade
+++ b/client/components/sidebar/sidebar.jade
@@ -268,6 +268,10 @@ template(name="outgoingWebhooksPopup")
template(name="boardMenuPopup")
ul.pop-over-list
li
+ a.js-open-rules-view(title="{{_ 'rules'}}")
+ i.fa.fa-magic
+ | {{_ 'rules'}}
+ li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'custom-fields'}}
diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js
index 8e640564..baf57114 100644
--- a/client/components/sidebar/sidebar.js
+++ b/client/components/sidebar/sidebar.js
@@ -182,6 +182,10 @@ Template.memberPopup.helpers({
Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
+ 'click .js-open-rules-view'() {
+ Modal.openWide('rulesMain');
+ Popup.close();
+ },
'click .js-custom-fields'() {
Sidebar.setView('customFields');
Popup.close();
diff --git a/client/lib/popup.js b/client/lib/popup.js
index 8a55c2df..8095fbd2 100644
--- a/client/lib/popup.js
+++ b/client/lib/popup.js
@@ -206,207 +206,3 @@ escapeActions.forEach(actionName => {
},
);
});
-
-// Prevent @member mentions on Add Comment input field
-// from closing card, part 5.
-// This duplicate below of above popup function is needed, because at
-// wekan/components/main/editor.js at bottom is popping up visible
-// @member mention, and it seems to trigger closing also card popup,
-// so in below closing popup is disabled.
-window.PopupNoClose = new (class {
- constructor() {
- // The template we use to render popups
- this.template = Template.popup;
-
- // We only want to display one popup at a time and we keep the view object
- // in this `Popup.current` variable. If there is no popup currently opened
- // the value is `null`.
- this.current = null;
-
- // It's possible to open a sub-popup B from a popup A. In that case we keep
- // the data of popup A so we can return back to it. Every time we open a new
- // popup the stack grows, every time we go back the stack decrease, and if
- // we close the popup the stack is reseted to the empty stack [].
- this._stack = [];
-
- // We invalidate this internal dependency every time the top of the stack
- // has changed and we want to re-render a popup with the new top-stack data.
- this._dep = new Tracker.Dependency();
- }
-
- /// This function returns a callback that can be used in an event map:
- /// Template.tplName.events({
- /// 'click .elementClass': Popup.open("popupName"),
- /// });
- /// The popup inherit the data context of its parent.
- open(name) {
- const self = this;
- const popupName = `${name}Popup`;
- function clickFromPopup(evt) {
- return $(evt.target).closest('.js-pop-over').length !== 0;
- }
- return function(evt) {
- // If a popup is already opened, clicking again on the opener element
- // should close it -- and interrupt the current `open` function.
- /*
- if (self.isOpen()) {
- const previousOpenerElement = self._getTopStack().openerElement;
- if (previousOpenerElement === evt.currentTarget) {
- self.close();
- return;
- } else {
- $(previousOpenerElement).removeClass('is-active');
- }
- }
- */
- // We determine the `openerElement` (the DOM element that is being clicked
- // and the one we take in reference to position the popup) from the event
- // if the popup has no parent, or from the parent `openerElement` if it
- // has one. This allows us to position a sub-popup exactly at the same
- // position than its parent.
- let openerElement;
- if (clickFromPopup(evt)) {
- openerElement = self._getTopStack().openerElement;
- } else {
- self._stack = [];
- openerElement = evt.currentTarget;
- }
- $(openerElement).addClass('is-active');
- evt.preventDefault();
-
- // We push our popup data to the stack. The top of the stack is always
- // used as the data source for our current popup.
- self._stack.push({
- popupName,
- openerElement,
- hasPopupParent: clickFromPopup(evt),
- title: self._getTitle(popupName),
- depth: self._stack.length,
- offset: self._getOffset(openerElement),
- dataContext: (this && this.currentData && this.currentData()) || this,
- });
-
- // If there are no popup currently opened we use the Blaze API to render
- // one into the DOM. We use a reactive function as the data parameter that
- // return the complete along with its top element and depends on our
- // internal dependency that is being invalidated every time the top
- // element of the stack has changed and we want to update the popup.
- //
- // Otherwise if there is already a popup open we just need to invalidate
- // our internal dependency, and since we just changed the top element of
- // our internal stack, the popup will be updated with the new data.
- if (!self.isOpen()) {
- self.current = Blaze.renderWithData(
- self.template,
- () => {
- self._dep.depend();
- return { ...self._getTopStack(), stack: self._stack };
- },
- document.body,
- );
- } else {
- self._dep.changed();
- }
- };
- }
-
- /// This function returns a callback that can be used in an event map:
- /// Template.tplName.events({
- /// 'click .elementClass': Popup.afterConfirm("popupName", function() {
- /// // What to do after the user has confirmed the action
- /// }),
- /// });
- afterConfirm(name, action) {
- const self = this;
-
- return function(evt, tpl) {
- const context = (this.currentData && this.currentData()) || this;
- context.__afterConfirmAction = action;
- self.open(name).call(context, evt, tpl);
- };
- }
-
- /// The public reactive state of the popup.
- isOpen() {
- this._dep.changed();
- return Boolean(this.current);
- }
-
- /// In case the popup was opened from a parent popup we can get back to it
- /// with this `Popup.back()` function. You can go back several steps at once
- /// by providing a number to this function, e.g. `Popup.back(2)`. In this case
- /// intermediate popup won't even be rendered on the DOM. If the number of
- /// steps back is greater than the popup stack size, the popup will be closed.
- back(n = 1) {
- if (this._stack.length > n) {
- _.times(n, () => this._stack.pop());
- this._dep.changed();
- }
- // else {
- // this.close();
- //}
- }
-
- /// Close the current opened popup.
- /*
- close() {
- if (this.isOpen()) {
- Blaze.remove(this.current);
- this.current = null;
-
- const openerElement = this._getTopStack().openerElement;
- $(openerElement).removeClass('is-active');
-
- this._stack = [];
- }
- }
- */
-
- getOpenerComponent() {
- const { openerElement } = Template.parentData(4);
- return BlazeComponent.getComponentForElement(openerElement);
- }
-
- // An utility fonction that returns the top element of the internal stack
- _getTopStack() {
- return this._stack[this._stack.length - 1];
- }
-
- // We automatically calculate the popup offset from the reference element
- // position and dimensions. We also reactively use the window dimensions to
- // ensure that the popup is always visible on the screen.
- _getOffset(element) {
- const $element = $(element);
- return () => {
- Utils.windowResizeDep.depend();
-
- if (Utils.isMiniScreen()) return { left: 0, top: 0 };
-
- const offset = $element.offset();
- const popupWidth = 300 + 15;
- return {
- left: Math.min(offset.left, $(window).width() - popupWidth),
- top: offset.top + $element.outerHeight(),
- };
- };
- }
-
- // We get the title from the translation files. Instead of returning the
- // result, we return a function that compute the result and since `TAPi18n.__`
- // is a reactive data source, the title will be changed reactively.
- _getTitle(popupName) {
- return () => {
- const translationKey = `${popupName}-title`;
-
- // XXX There is no public API to check if there is an available
- // translation for a given key. So we try to translate the key and if the
- // translation output equals the key input we deduce that no translation
- // was available and returns `false`. There is a (small) risk a false
- // positives.
- const title = TAPi18n.__(translationKey);
- // when popup showed as full of small screen, we need a default header to clearly see [X] button
- const defaultTitle = Utils.isMiniScreen() ? '' : false;
- return title !== translationKey ? title : defaultTitle;
- };
- }
-})();
diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json
index 7773ddf3..f97beeac 100644
--- a/i18n/ar.i18n.json
+++ b/i18n/ar.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "ازالة تحقق %s من قائمة التحقق %s من %s",
"activity-checklist-added": "أضاف قائمة تحقق إلى %s",
"activity-checklist-removed": "ازالة قائمة التحقق من %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "لم يتم انجاز قائمة التحقق %s من %s",
"activity-checklist-item-added": "تم اضافة عنصر قائمة التحقق الى '%s' في %s",
"activity-checklist-item-removed": "تم ازالة عنصر قائمة التحقق الى '%s' في %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json
index 44549df5..425da96c 100644
--- a/i18n/bg.i18n.json
+++ b/i18n/bg.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "размаркира %s от списък със задачи %s на %s",
"activity-checklist-added": "добави списък със задачи към %s",
"activity-checklist-removed": "премахна списък със задачи от %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "\"отзавърши\" чеклистта %s в %s",
"activity-checklist-item-added": "добави точка към '%s' в/във %s",
"activity-checklist-item-removed": "премахна точка от '%s' в %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json
index 7dce4c8d..afbf510b 100644
--- a/i18n/br.i18n.json
+++ b/i18n/br.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json
index 629a1aee..195891a1 100644
--- a/i18n/ca.i18n.json
+++ b/i18n/ca.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "Checklist afegida a %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "afegida entrada de checklist de '%s' a %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json
index 9918d3c3..d2412847 100644
--- a/i18n/cs.i18n.json
+++ b/i18n/cs.i18n.json
@@ -22,8 +22,8 @@
"act-createBoard": "přidal(a) tablo __board__",
"act-createSwimlane": "created swimlane __swimlane__ to board __board__",
"act-createCard": "přidal(a) kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
- "act-createCustomField": "created custom field __customField__ at board __board__",
- "act-deleteCustomField": "deleted custom field __customField__ at board __board__",
+ "act-createCustomField": "přidal(a) pole __customField__ na tablo __board__",
+ "act-deleteCustomField": "odebral(a) pole __customField__ na tablu __board__",
"act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createList": "přidal(a) sloupec __list__ do tabla __board__",
"act-addBoardMember": "přidal(a) člena __member__ do tabla __board__",
@@ -64,7 +64,7 @@
"activity-unchecked-item": "nedokončen %s v seznamu %s z %s",
"activity-checklist-added": "přidán checklist do %s",
"activity-checklist-removed": "odstraněn checklist z %s",
- "activity-checklist-completed": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "nedokončen seznam %s z %s",
"activity-checklist-item-added": "přidána položka checklist do '%s' v %s",
"activity-checklist-item-removed": "odstraněna položka seznamu do '%s' v %s",
@@ -137,7 +137,7 @@
"board-view": "Náhled tabla",
"board-view-cal": "Kalendář",
"board-view-swimlanes": "Swimlanes",
- "board-view-collapse": "Collapse",
+ "board-view-collapse": "Sbalit",
"board-view-lists": "Sloupce",
"bucket-example": "Například \"O čem sním\"",
"cancel": "Zrušit",
@@ -320,8 +320,8 @@
"filter-no-label": "Žádný štítek",
"filter-no-member": "Žádný člen",
"filter-no-custom-fields": "Žádné vlastní pole",
- "filter-show-archive": "Show archived lists",
- "filter-hide-empty": "Hide empty lists",
+ "filter-show-archive": "Zobrazit archivované listy",
+ "filter-hide-empty": "Skrýt prázdné listy",
"filter-on": "Filtr je zapnut",
"filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.",
"filter-to-selection": "Filtrovat výběr",
@@ -749,15 +749,21 @@
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
"act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
- "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.",
- "accounts-allowUserDelete": "Allow users to self delete their account",
+ "delete-user-confirm-popup": "Jste si jisti, že chcete smazat tento účet? Tuto akci nelze vrátit zpět.",
+ "accounts-allowUserDelete": "Dovolit uživatelům smazat vlastní účet",
"hide-minicard-label-text": "Hide minicard label text",
"show-desktop-drag-handles": "Show desktop drag handles",
"assignee": "Assignee",
"cardAssigneesPopup-title": "Assignee",
- "addmore-detail": "Add a more detailed description",
- "show-on-card": "Show on Card",
- "new": "New",
- "editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "addmore-detail": "Přidat detailnější popis",
+ "show-on-card": "Zobrazit na kartě",
+ "new": "Nový",
+ "editUserPopup-title": "Editovat uživatele",
+ "newUserPopup-title": "Nový uživatel",
+ "notifications": "Upozornění",
+ "view-all": "Zobrazit vše",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Označit vše jako přečtené",
+ "allow-rename": "Povolit přejmenování",
+ "allowRenamePopup-title": "Povolit přejmenování"
}
diff --git a/i18n/da.i18n.json b/i18n/da.i18n.json
index 42d1942f..9c64f1d6 100644
--- a/i18n/da.i18n.json
+++ b/i18n/da.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index 1bab2b02..882eb658 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "hat %s in Checkliste %s von %s abgewählt",
"activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt",
"activity-checklist-removed": "entfernte eine Checkliste von %s",
- "activity-checklist-completed": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "unvervollständigte die Checkliste %s von %s",
"activity-checklist-item-added": "hat ein Checklistenelement zu '%s' in %s hinzugefügt",
"activity-checklist-item-removed": "hat ein Checklistenelement von '%s' in %s entfernt",
@@ -759,5 +759,11 @@
"show-on-card": "Zeige auf Karte",
"new": "Neu",
"editUserPopup-title": "Benutzer ändern",
- "newUserPopup-title": "Neuer Benutzer"
+ "newUserPopup-title": "Neuer Benutzer",
+ "notifications": "Benachrichtigungen",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json
index 425beb66..d379dfe0 100644
--- a/i18n/el.i18n.json
+++ b/i18n/el.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json
index b1321115..a562d26f 100644
--- a/i18n/en-GB.i18n.json
+++ b/i18n/en-GB.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index bce99384..e3b3288d 100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -762,5 +762,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json
index 5f9855d1..fcd8616d 100644
--- a/i18n/eo.i18n.json
+++ b/i18n/eo.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json
index f269de2c..e09f3b2a 100644
--- a/i18n/es-AR.i18n.json
+++ b/i18n/es-AR.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "agregada lista de tareas a %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "agregado item de lista de tareas a '%s' en %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json
index ce77ba7d..e6c69dfa 100644
--- a/i18n/es.i18n.json
+++ b/i18n/es.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "desmarcado %s en lista %s de %s",
"activity-checklist-added": "ha añadido una lista de verificación a %s",
"activity-checklist-removed": "eliminada una lista de verificación desde %s",
- "activity-checklist-completed": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "no completado la lista %s de %s",
"activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s",
"activity-checklist-item-removed": "eliminado un elemento de la lista de verificación desde '%s' en %s",
@@ -759,5 +759,11 @@
"show-on-card": "Mostrar en la tarjeta",
"new": "Nuevo",
"editUserPopup-title": "Editar el usuario",
- "newUserPopup-title": "Nuevo usuario"
+ "newUserPopup-title": "Nuevo usuario",
+ "notifications": "Notificaciones",
+ "view-all": "Ver todo",
+ "filter-by-unread": "Filtrar por no leído",
+ "mark-all-as-read": "Marcar todo como leido",
+ "allow-rename": "Permitir renombrar",
+ "allowRenamePopup-title": "Permitir renombrar"
}
diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json
index 785bcd8e..87587e22 100644
--- a/i18n/eu.i18n.json
+++ b/i18n/eu.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "egiaztaketa zerrenda %s(e)ra gehituta",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "egiaztaketa zerrendako elementuak '%s'(e)ra gehituta %s(e)n",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json
index 713c7be3..133c262d 100644
--- a/i18n/fa.i18n.json
+++ b/i18n/fa.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "چک نشده %s در چک لیست %s از %s",
"activity-checklist-added": "سیاهه به %s اضافه شد",
"activity-checklist-removed": "از چک لیست حذف گردید",
- "activity-checklist-completed": "سیاهه __checklist__ را در کارت __card__ در لیست __list__ در مسیر شناور __swimlane__ در برد __board__ کامل کرد",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "تمام نشده ها در چک لیست %s از %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "حذف شده از چک لیست '%s' در %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json
index 080e2d7a..f0e945b5 100644
--- a/i18n/fi.i18n.json
+++ b/i18n/fi.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "poistettu ruksi %s tarkistuslistassa %s / %s",
"activity-checklist-added": "lisätty tarkistuslista kortille %s",
"activity-checklist-removed": "poistettu tarkistuslista kohteesta %s",
- "activity-checklist-completed": "valmistui tarkistuslista __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "activity-checklist-completed": "saatiin valmiiksi tarkistuslista %s / %s",
"activity-checklist-uncompleted": "ei saatu valmiiksi tarkistuslista %s / %s",
"activity-checklist-item-added": "lisäsi kohdan tarkistuslistaan '%s' kortilla %s",
"activity-checklist-item-removed": "poistettu tarkistuslistan kohta '%s' / %s",
@@ -759,5 +759,11 @@
"show-on-card": "Näytä kortilla",
"new": "Uusi",
"editUserPopup-title": "Muokkaa käyttäjää",
- "newUserPopup-title": "Uusi käyttäjä"
+ "newUserPopup-title": "Uusi käyttäjä",
+ "notifications": "Ilmoitukset",
+ "view-all": "Näytä kaikki",
+ "filter-by-unread": "Suodata lukemattomat",
+ "mark-all-as-read": "Merkkaa kaikki luetuksi",
+ "allow-rename": "Salli uudelleennimeäminen",
+ "allowRenamePopup-title": "Salli uudelleennimeäminen"
}
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index 226a6c8a..d7d7040f 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "a décoché %s dans la checklist %s de %s",
"activity-checklist-added": "a ajouté une checklist à %s",
"activity-checklist-removed": "a supprimé une checklist de %s",
- "activity-checklist-completed": "a complété la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "a rendu incomplète la checklist %s de %s",
"activity-checklist-item-added": "a ajouté un élément à la checklist '%s' dans %s",
"activity-checklist-item-removed": "a supprimé une checklist de '%s' dans %s",
@@ -759,5 +759,11 @@
"show-on-card": "Afficher sur la carte",
"new": "Nouveau",
"editUserPopup-title": "Éditer l'utilisateur",
- "newUserPopup-title": "Nouvel utilisateur"
+ "newUserPopup-title": "Nouvel utilisateur",
+ "notifications": "Notifications",
+ "view-all": "Voir tout",
+ "filter-by-unread": "Filtrer par non lu",
+ "mark-all-as-read": "Marquer comme lus",
+ "allow-rename": "Autoriser le renommage",
+ "allowRenamePopup-title": "Autoriser le renommage"
}
diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json
index c88dde02..4908c2b9 100644
--- a/i18n/gl.i18n.json
+++ b/i18n/gl.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index fecbfbb3..027aadd8 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "בוטל הסימון של %s ברשימת המשימות %s מתוך %s",
"activity-checklist-added": "נוספה רשימת משימות אל %s",
"activity-checklist-removed": "הוסרה רשימת משימות מ־%s",
- "activity-checklist-completed": "רשימת המטלות __checklist__ בכרטיס __card__ שברשימה __list__ תחת המסלול __swimlane__ בלוח __board__ הושלמה",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "רשימת המשימות %s מתוך %s סומנה כבלתי מושלמת",
"activity-checklist-item-added": "נוסף פריט רשימת משימות אל ‚%s‘ תחת %s",
"activity-checklist-item-removed": "הוסר פריט מרשימת המשימות ‚%s’ תחת %s",
@@ -759,5 +759,11 @@
"show-on-card": "הצגה על הכרטיס",
"new": "חדש",
"editUserPopup-title": "עריכת משתמש",
- "newUserPopup-title": "משתמש חדש"
+ "newUserPopup-title": "משתמש חדש",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/hi.i18n.json b/i18n/hi.i18n.json
index e4c88a06..b6c9b7a6 100644
--- a/i18n/hi.i18n.json
+++ b/i18n/hi.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "अचिह्नित %s अंदर में चिह्नांकन-सूची %s of %s",
"activity-checklist-added": "संकलित चिह्नांकन-सूची तक %s",
"activity-checklist-removed": "हटा दिया एक चिह्नांकन-सूची से %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "अपूर्ण चिह्नांकन-सूची %s of %s",
"activity-checklist-item-added": "संकलित चिह्नांकन-सूची विषय तक '%s' अंदर में %s",
"activity-checklist-item-removed": "हटा दिया एक चिह्नांकन-सूची विषय से '%s' अंदर में %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json
index e022a075..aac9b873 100644
--- a/i18n/hu.i18n.json
+++ b/i18n/hu.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "ellenőrzőlista hozzáadva ehhez: %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "ellenőrzőlista elem hozzáadva ehhez: „%s”, ebben: %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json
index e2600d72..5439ce57 100644
--- a/i18n/hy.i18n.json
+++ b/i18n/hy.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json
index 2bf5431b..e5929f75 100644
--- a/i18n/id.i18n.json
+++ b/i18n/id.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "daftar periksa ditambahkan ke %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json
index 3c3c2ac3..5cb02f9c 100644
--- a/i18n/ig.i18n.json
+++ b/i18n/ig.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index 2099462f..b0c4e6bd 100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "disattivato %s nella checklist %s di %s",
"activity-checklist-added": "aggiunta checklist a %s",
"activity-checklist-removed": "È stata rimossa una checklist da%s",
- "activity-checklist-completed": "checklist __checklist__ completata nella scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "La checklist non è stata completata",
"activity-checklist-item-added": "Aggiunto l'elemento checklist a '%s' in %s",
"activity-checklist-item-removed": "è stato rimosso un elemento della checklist da '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Mostra sulla scheda",
"new": "Nuovo",
"editUserPopup-title": "Modifica utente",
- "newUserPopup-title": "Nuovo utente"
+ "newUserPopup-title": "Nuovo utente",
+ "notifications": "Notifiche",
+ "view-all": "Mostra Tutto",
+ "filter-by-unread": "Filtra per non Letto",
+ "mark-all-as-read": "Segna come letto",
+ "allow-rename": "Consenti Rinomina",
+ "allowRenamePopup-title": "Consenti Rinomina"
}
diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json
index 04f773c1..75ae43ea 100644
--- a/i18n/ja.i18n.json
+++ b/i18n/ja.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "チェックが外されました %s チェックリスト %s / %s",
"activity-checklist-added": "%s にチェックリストを追加しました",
"activity-checklist-removed": "チェックリストを %s から削除しました",
- "activity-checklist-completed": "チェックリスト __checklist__ ボード __board__, スイムレーン __swimlane__, リスト __list__, カード __card__ が完了しました",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "チェックリスト %s / %s が未完了になりました",
"activity-checklist-item-added": "チェックリスト項目を '%s' / %s に追加しました",
"activity-checklist-item-removed": "'%s' の チェックリスト %s の項目を削除しました",
@@ -759,5 +759,11 @@
"show-on-card": "カードに表示する項目",
"new": "新規作成",
"editUserPopup-title": "ユーザーを編集",
- "newUserPopup-title": "新規ユーザー"
+ "newUserPopup-title": "新規ユーザー",
+ "notifications": "通知",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json
index d43699eb..88fe76cd 100644
--- a/i18n/ka.i18n.json
+++ b/i18n/ka.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "დაემატა ჩამონათვალი %s-ს",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "დამატებულია ჩამონათვალის ელემენტები '%s' %s-ში",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json
index 05bbb797..bf6641df 100644
--- a/i18n/km.i18n.json
+++ b/i18n/km.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json
index 33a48b21..41c687e8 100644
--- a/i18n/ko.i18n.json
+++ b/i18n/ko.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "%s에 체크리스트를 추가함",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "알림",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json
index 87457e6b..52bc640a 100644
--- a/i18n/lv.i18n.json
+++ b/i18n/lv.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/mk.i18n.json b/i18n/mk.i18n.json
index ba11ed40..c893ae09 100644
--- a/i18n/mk.i18n.json
+++ b/i18n/mk.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "размаркира %s от списък със задачи %s на %s",
"activity-checklist-added": "добави списък със задачи към %s",
"activity-checklist-removed": "премахна списък със задачи от %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "\"отзавърши\" чеклистта %s в %s",
"activity-checklist-item-added": "добави точка към '%s' в/във %s",
"activity-checklist-item-removed": "премахна точка от '%s' в %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json
index f0f81dbd..bf9c9028 100644
--- a/i18n/mn.i18n.json
+++ b/i18n/mn.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json
index 176dcea0..a99c2a26 100644
--- a/i18n/nb.i18n.json
+++ b/i18n/nb.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "la til sjekkliste til %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json
index bc815fa6..82e3b875 100644
--- a/i18n/nl.i18n.json
+++ b/i18n/nl.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "%s uitgevinkt in checklist %s van %s",
"activity-checklist-added": "checklist toegevoegd aan %s",
"activity-checklist-removed": "checklist verwijderd van %s",
- "activity-checklist-completed": "heeft checklist __checklist__ afgewerkt op kaart __card__ van lijst __list__ in swimlane __swimlane__ op bord __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "checklist %s onafgewerkt van %s",
"activity-checklist-item-added": "checklist item toegevoegd aan '%s' in '%s'",
"activity-checklist-item-removed": "checklist item verwijderd van '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Toon op kaart",
"new": "Nieuw",
"editUserPopup-title": "Wijzig gebruiker",
- "newUserPopup-title": "Nieuwe gebruiker"
+ "newUserPopup-title": "Nieuwe gebruiker",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json
index 715ff470..42dcfee3 100644
--- a/i18n/oc.i18n.json
+++ b/i18n/oc.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "as descroiat %s dins la checklist %s de %s",
"activity-checklist-added": "as apondut a checklist a %s",
"activity-checklist-removed": "as tirat la checklist de %s",
- "activity-checklist-completed": "as acabat la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "as rendut incomplet la checklist %s de %s",
"activity-checklist-item-added": "as apondut un element a la checklist '%s' dins %s",
"activity-checklist-item-removed": "as tirat un element a la checklist '%s' dins %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index 67af6c98..0457a557 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "odznaczono %s w liście zadań %s z %s",
"activity-checklist-added": "dodał(a) listę zadań do %s",
"activity-checklist-removed": "usunął listę zadań z %s",
- "activity-checklist-completed": "wykonał(a) wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "nieukończono listy zadań %s z %s",
"activity-checklist-item-added": "dodał(a) zadanie '%s' do %s",
"activity-checklist-item-removed": "usunął element z listy zadań '%s' w %s",
@@ -759,5 +759,11 @@
"show-on-card": "Pokaż na karcie",
"new": "Nowy",
"editUserPopup-title": "Edytuj użytkownika",
- "newUserPopup-title": "Nowy użytkownik"
+ "newUserPopup-title": "Nowy użytkownik",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json
index 6470f2d0..a2ca6c33 100644
--- a/i18n/pt-BR.i18n.json
+++ b/i18n/pt-BR.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "desmarcado %s na lista de verificação %s de %s",
"activity-checklist-added": "Adicionada lista de verificação a %s",
"activity-checklist-removed": "removida a lista de verificação de %s",
- "activity-checklist-completed": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "não-completada a lista de verificação %s de %s",
"activity-checklist-item-added": "adicionado o item de lista de verificação para '%s' em %s",
"activity-checklist-item-removed": "removida o item de lista de verificação de '%s' na %s",
@@ -182,7 +182,7 @@
"changeLanguagePopup-title": "Alterar Idioma",
"changePasswordPopup-title": "Alterar Senha",
"changePermissionsPopup-title": "Alterar Permissões",
- "changeSettingsPopup-title": "Altera configurações",
+ "changeSettingsPopup-title": "Alterar configurações",
"subtasks": "Subtarefas",
"checklists": "Listas de verificação",
"click-to-star": "Marcar quadro como favorito.",
@@ -759,5 +759,11 @@
"show-on-card": "Mostrar no Cartão",
"new": "Novo",
"editUserPopup-title": "Editar usuário",
- "newUserPopup-title": "Novo usuário"
+ "newUserPopup-title": "Novo usuário",
+ "notifications": "Notificações",
+ "view-all": "Ver tudo",
+ "filter-by-unread": "Filtrar não lidas",
+ "mark-all-as-read": "Marcar todas como lidas",
+ "allow-rename": "Permitir renomear",
+ "allowRenamePopup-title": "Permitir renomear"
}
diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json
index 22c56c97..bf7fe7a2 100644
--- a/i18n/pt.i18n.json
+++ b/i18n/pt.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "desmarcou %s na lista de verificação %s de %s",
"activity-checklist-added": "adicionou a lista de verificação a %s",
"activity-checklist-removed": "removeu a lista de verificação de %s",
- "activity-checklist-completed": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "descompletou a lista de verificação %s de %s",
"activity-checklist-item-added": "adicionou o item a '%s' em %s",
"activity-checklist-item-removed": "removeu o item de '%s' na %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json
index 9d84e440..14cb571a 100644
--- a/i18n/ro.i18n.json
+++ b/i18n/ro.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index 459cfbde..b8d6577d 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "снял %s в контрольном списке %s в %s",
"activity-checklist-added": "добавил контрольный список в %s",
"activity-checklist-removed": "удалил контрольный список из %s",
- "activity-checklist-completed": "завершил контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "вновь открыл контрольный список %s в %s",
"activity-checklist-item-added": "добавил пункт в контрольный список '%s' в карточке %s",
"activity-checklist-item-removed": "удалил пункт из контрольного списка '%s' в карточке %s",
@@ -759,5 +759,11 @@
"show-on-card": "Показать на карточке",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Уведомления",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/sl.i18n.json b/i18n/sl.i18n.json
index 15163a0f..8638aea6 100644
--- a/i18n/sl.i18n.json
+++ b/i18n/sl.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "odkljukal %s na kontrolnem seznamu %s od %s",
"activity-checklist-added": "dodal kontrolni seznam na %s",
"activity-checklist-removed": "odstranil kontrolni seznam iz %s",
- "activity-checklist-completed": "dokončal kontrolni seznam __checklist__ na kartici __card__ na seznamu __list__ na plavalni stezi __swimlane__ na tabli __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "nedokončal kontrolni seznam %s od %s",
"activity-checklist-item-added": "dodal postavko kontrolnega seznama na '%s' v %s",
"activity-checklist-item-removed": "odstranil postavko kontrolnega seznama iz '%s' v %s",
@@ -759,5 +759,11 @@
"show-on-card": "Prikaži na kartici",
"new": "Novo",
"editUserPopup-title": "Uredi uporabnika",
- "newUserPopup-title": "Nov uporabnik"
+ "newUserPopup-title": "Nov uporabnik",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json
index 1ae2aba6..bea26ed0 100644
--- a/i18n/sr.i18n.json
+++ b/i18n/sr.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "lista je dodata u %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -757,7 +757,13 @@
"cardAssigneesPopup-title": "Asignat",
"addmore-detail": "Dodaj detaljaniji opis",
"show-on-card": "Prikaži na kartici",
- "new": "New",
- "editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "new": "Novo",
+ "editUserPopup-title": "Uredi korisnika",
+ "newUserPopup-title": "Novi korisnik",
+ "notifications": "Obaveštenja",
+ "view-all": "Prikaži sve",
+ "filter-by-unread": "Filtriraj nepročitano",
+ "mark-all-as-read": "Označi sve kao pročitano",
+ "allow-rename": "Dozvoli preimenovanje",
+ "allowRenamePopup-title": "Dozvoli preimenovanje"
}
diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json
index 66c08333..3ebba726 100644
--- a/i18n/sv.i18n.json
+++ b/i18n/sv.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "okryssad %s i checklistan %s av %s",
"activity-checklist-added": "lade kontrollista till %s",
"activity-checklist-removed": "tog bort en checklista från %s",
- "activity-checklist-completed": "slutförde checklista __checklist__ i kort __card__ i lista __list__ i simbana __swimlane__ på anslagstavla __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "inte slutfört checklistan %s av %s",
"activity-checklist-item-added": "lade checklista objekt till '%s' i %s",
"activity-checklist-item-removed": "tog bort en checklista objekt från \"%s\" i %s",
@@ -759,5 +759,11 @@
"show-on-card": "Visa på kort",
"new": "Ny",
"editUserPopup-title": "Redigera användare",
- "newUserPopup-title": "Ny användare"
+ "newUserPopup-title": "Ny användare",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/sw.i18n.json b/i18n/sw.i18n.json
index ba45497f..ae755922 100644
--- a/i18n/sw.i18n.json
+++ b/i18n/sw.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json
index 8d847659..83243c9a 100644
--- a/i18n/ta.i18n.json
+++ b/i18n/ta.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json
index 2d6df909..35920f70 100644
--- a/i18n/th.i18n.json
+++ b/i18n/th.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "รายการถูกเพิ่มไป %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index 74f2ccf5..5fc1a3d5 100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "%s içine yapılacak listesi ekledi",
"activity-checklist-removed": "%s Tarafından yapılacaklar listesi silinmiştir",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "%s içinde %s yapılacak listesine öğe ekledi",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Bildirim",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json
index 31fed042..284934e5 100644
--- a/i18n/uk.i18n.json
+++ b/i18n/uk.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "Додано контрольний список до %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json
index 19db8bd3..5966ff22 100644
--- a/i18n/vi.i18n.json
+++ b/i18n/vi.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "đã thêm checklist vào %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json
index 6347fd56..6e610103 100644
--- a/i18n/zh-CN.i18n.json
+++ b/i18n/zh-CN.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "未勾选 %s 于清单 %s 共 %s",
"activity-checklist-added": "已经将清单添加到 %s",
"activity-checklist-removed": "已从%s移除待办清单",
- "activity-checklist-completed": "完成检查列表__checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "未完成清单 %s 共 %s",
"activity-checklist-item-added": "添加清单项至'%s' 于 %s",
"activity-checklist-item-removed": "已从 '%s' 于 %s中 移除一个清单项",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "提示",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/zh-HK.i18n.json b/i18n/zh-HK.i18n.json
index 82aff057..1f9ab691 100644
--- a/i18n/zh-HK.i18n.json
+++ b/i18n/zh-HK.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json
index f42b05a4..f90c7b60 100644
--- a/i18n/zh-TW.i18n.json
+++ b/i18n/zh-TW.i18n.json
@@ -64,7 +64,7 @@
"activity-unchecked-item": "未勾選 %s 於清單 %s 共 %s",
"activity-checklist-added": "已新增待辦清單 %s",
"activity-checklist-removed": "已刪除%s的待辦清單",
- "activity-checklist-completed": "完成檢查清單__checklist__ 卡片 __card__ 清單 __list__ 泳道 __swimlane__ 看板 __board__",
+ "activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-uncompleted": "未完成清單 %s 共 %s",
"activity-checklist-item-added": "新增待辦清單項目從 %s 到 %s",
"activity-checklist-item-removed": "已從 '%s' 於 %s中 移除一個清單項",
@@ -759,5 +759,11 @@
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
- "newUserPopup-title": "New User"
+ "newUserPopup-title": "New User",
+ "notifications": "Notifications",
+ "view-all": "View All",
+ "filter-by-unread": "Filter by Unread",
+ "mark-all-as-read": "Mark all as read",
+ "allow-rename": "Allow Rename",
+ "allowRenamePopup-title": "Allow Rename"
}
diff --git a/models/attachments.js b/models/attachments.js
index 9b8ec04f..3fe1d745 100644
--- a/models/attachments.js
+++ b/models/attachments.js
@@ -219,6 +219,9 @@ if (Meteor.isServer) {
type: 'card',
activityType: 'addAttachment',
attachmentId: doc._id,
+ // this preserves the name so that notifications can be meaningful after
+ // this file is removed
+ attachmentName: doc.original.name,
boardId: doc.boardId,
cardId: doc.cardId,
listId: doc.listId,
@@ -246,18 +249,15 @@ if (Meteor.isServer) {
type: 'card',
activityType: 'deleteAttachment',
attachmentId: doc._id,
+ // this preserves the name so that notifications can be meaningful after
+ // this file is removed
+ attachmentName: doc.original.name,
boardId: doc.boardId,
cardId: doc.cardId,
listId: doc.listId,
swimlaneId: doc.swimlaneId,
});
});
-
- Attachments.files.after.remove((userId, doc) => {
- Activities.remove({
- attachmentId: doc._id,
- });
- });
}
export default Attachments;
diff --git a/models/lists.js b/models/lists.js
index f06b15b1..b123ab4f 100644
--- a/models/lists.js
+++ b/models/lists.js
@@ -369,6 +369,9 @@ if (Meteor.isServer) {
activityType: 'createList',
boardId: doc.boardId,
listId: doc._id,
+ // this preserves the name so that the activity can be useful after the
+ // list is deleted
+ title: doc.title,
});
});
@@ -397,6 +400,9 @@ if (Meteor.isServer) {
activityType: 'archivedList',
listId: doc._id,
boardId: doc.boardId,
+ // this preserves the name so that the activity can be useful after the
+ // list is deleted
+ title: doc.title,
});
}
});
diff --git a/models/users.js b/models/users.js
index d56f14ff..20581e65 100644
--- a/models/users.js
+++ b/models/users.js
@@ -165,7 +165,20 @@ Users.attachSchema(
/**
* enabled notifications for the user
*/
- type: [String],
+ type: [Object],
+ optional: true,
+ },
+ 'profile.notifications.$.activity': {
+ /**
+ * The id of the activity this notification references
+ */
+ type: String,
+ },
+ 'profile.notifications.$.read': {
+ /**
+ * the date on which this notification was read
+ */
+ type: Date,
optional: true,
},
'profile.showCardsCountAt': {
@@ -429,6 +442,20 @@ Users.helpers({
return _.contains(notifications, activityId);
},
+ notifications() {
+ const { notifications = [] } = this.profile || {};
+ for (const index in notifications) {
+ if (!notifications.hasOwnProperty(index)) continue;
+ const notification = notifications[index];
+ // this preserves their db sort order for editing
+ notification.dbIndex = index;
+ notification.activity = Activities.findOne(notification.activity);
+ }
+ // this sorts them newest to oldest to match Trello's behavior
+ notifications.reverse();
+ return notifications;
+ },
+
hasShowDesktopDragHandles() {
const profile = this.profile || {};
return profile.showDesktopDragHandles || false;
@@ -573,7 +600,7 @@ Users.mutations({
addNotification(activityId) {
return {
$addToSet: {
- 'profile.notifications': activityId,
+ 'profile.notifications': { activity: activityId },
},
};
},
@@ -581,7 +608,7 @@ Users.mutations({
removeNotification(activityId) {
return {
$pull: {
- 'profile.notifications': activityId,
+ 'profile.notifications': { activity: activityId },
},
};
},
diff --git a/package-lock.json b/package-lock.json
index 60f1a939..6cc34383 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v3.86.0",
+ "version": "v3.88.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index 5b008f84..9e771396 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v3.86.0",
+ "version": "v3.88.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
diff --git a/public/api/wekan.html b/public/api/wekan.html
index 2fb27d8d..4e42a13b 100644
--- a/public/api/wekan.html
+++ b/public/api/wekan.html
@@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<ul class="toc-list-h1">
<li>
- <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.86">Wekan REST API v3.86</a>
+ <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v3.88">Wekan REST API v3.88</a>
</li>
@@ -2017,7 +2017,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
- <h1 id="wekan-rest-api">Wekan REST API v3.86</h1>
+ <h1 id="wekan-rest-api">Wekan REST API v3.88</h1>
<blockquote>
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
</blockquote>
@@ -11665,9 +11665,9 @@ System.out.println(response.toString());
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [
- <span class="hljs-string">"string"</span>
- ],
+ <span class="hljs-attr">"notifications"</span>: [],
+ <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"starredBoards"</span>: [
<span class="hljs-string">"string"</span>
@@ -12320,9 +12320,9 @@ System.out.println(response.toString());
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [
- <span class="hljs-string">"string"</span>
- ],
+ <span class="hljs-attr">"notifications"</span>: [],
+ <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"starredBoards"</span>: [
<span class="hljs-string">"string"</span>
@@ -15625,9 +15625,9 @@ UserSecurity
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [
- <span class="hljs-string">"string"</span>
- ],
+ <span class="hljs-attr">"notifications"</span>: [],
+ <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"starredBoards"</span>: [
<span class="hljs-string">"string"</span>
@@ -15793,9 +15793,9 @@ UserSecurity
<span class="hljs-string">"string"</span>
],
<span class="hljs-attr">"language"</span>: <span class="hljs-string">"string"</span>,
- <span class="hljs-attr">"notifications"</span>: [
- <span class="hljs-string">"string"</span>
- ],
+ <span class="hljs-attr">"notifications"</span>: [],
+ <span class="hljs-attr">"activity"</span>: <span class="hljs-string">"string"</span>,
+ <span class="hljs-attr">"read"</span>: <span class="hljs-string">"string"</span>,
<span class="hljs-attr">"showCardsCountAt"</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">"starredBoards"</span>: [
<span class="hljs-string">"string"</span>
@@ -15887,12 +15887,26 @@ UserSecurity
</tr>
<tr>
<td>notifications</td>
-<td>[string]</td>
+<td>[<a href="#schemausersprofilenotifications">UsersProfileNotifications</a>]</td>
<td>false</td>
<td>none</td>
<td>enabled notifications for the user</td>
</tr>
<tr>
+<td>activity</td>
+<td>string</td>
+<td>true</td>
+<td>none</td>
+<td>The id of the activity this notification references</td>
+</tr>
+<tr>
+<td>read</td>
+<td>string</td>
+<td>false</td>
+<td>none</td>
+<td>the date on which this notification was read</td>
+</tr>
+<tr>
<td>showCardsCountAt</td>
<td>number</td>
<td>false</td>
diff --git a/public/api/wekan.yml b/public/api/wekan.yml
index cf0466ab..a194bdfe 100644
--- a/public/api/wekan.yml
+++ b/public/api/wekan.yml
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
- version: v3.86
+ version: v3.88
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -3025,8 +3025,15 @@ definitions:
enabled notifications for the user
type: array
items:
- type: string
- x-nullable: true
+ $ref: "#/definitions/UsersProfileNotifications"
+ activity:
+ description: |
+ The id of the activity this notification references
+ type: string
+ read:
+ description: |
+ the date on which this notification was read
+ type: string
showCardsCountAt:
description: |
showCardCountAt field of the user
@@ -3078,6 +3085,7 @@ definitions:
Reference to the board templates swimlane Id
type: string
required:
+ - activity
- templatesBoardId
- cardTemplatesSwimlaneId
- listTemplatesSwimlaneId
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index ec9f373f..297fa3d0 100644
--- a/sandstorm-pkgdef.capnp
+++ b/sandstorm-pkgdef.capnp
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
- appVersion = 386,
+ appVersion = 388,
# Increment this for every release.
- appMarketingVersion = (defaultText = "3.86.0~2020-03-24"),
+ appMarketingVersion = (defaultText = "3.88.0~2020-04-02"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
diff --git a/server/notifications/profile.js b/server/notifications/profile.js
index 6d9c7018..608931cf 100644
--- a/server/notifications/profile.js
+++ b/server/notifications/profile.js
@@ -1,9 +1,5 @@
Meteor.startup(() => {
- // XXX: add activity id to profile.notifications,
- // it can be displayed and rendered on web or mobile UI
- // will uncomment the following code once UI implemented
- //
- // Notifications.subscribe('profile', (user, title, description, params) => {
- // user.addNotification(params.activityId);
- // });
+ Notifications.subscribe('profile', (user, title, description, params) => {
+ user.addNotification(params.activityId);
+ });
});
diff --git a/server/publications/notifications.js b/server/publications/notifications.js
new file mode 100644
index 00000000..bc55a37c
--- /dev/null
+++ b/server/publications/notifications.js
@@ -0,0 +1,101 @@
+// We use these when displaying notifications in the notificationsDrawer
+
+// gets all activities associated with the current user
+Meteor.publish('notificationActivities', () => {
+ return activities();
+});
+
+// gets all attachments associated with activities associated with the current user
+Meteor.publish('notificationAttachments', function() {
+ return Attachments.find({
+ _id: {
+ $in: activities()
+ .map(v => v.attachmentId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+// gets all cards associated with activities associated with the current user
+Meteor.publish('notificationCards', function() {
+ return Cards.find({
+ _id: {
+ $in: activities()
+ .map(v => v.cardId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+// gets all checklistItems associated with activities associated with the current user
+Meteor.publish('notificationChecklistItems', function() {
+ return ChecklistItems.find({
+ _id: {
+ $in: activities()
+ .map(v => v.checklistItemId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+// gets all checklists associated with activities associated with the current user
+Meteor.publish('notificationChecklists', function() {
+ return Checklists.find({
+ _id: {
+ $in: activities()
+ .map(v => v.checklistId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+// gets all comments associated with activities associated with the current user
+Meteor.publish('notificationComments', function() {
+ return CardComments.find({
+ _id: {
+ $in: activities()
+ .map(v => v.commentId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+// gets all lists associated with activities associated with the current user
+Meteor.publish('notificationLists', function() {
+ return Lists.find({
+ _id: {
+ $in: activities()
+ .map(v => v.listId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+// gets all swimlanes associated with activities associated with the current user
+Meteor.publish('notificationSwimlanes', function() {
+ return Swimlanes.find({
+ _id: {
+ $in: activities()
+ .map(v => v.swimlaneId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+// gets all users associated with activities associated with the current user
+Meteor.publish('notificationUsers', function() {
+ return Users.find({
+ _id: {
+ $in: activities()
+ .map(v => v.userId)
+ .filter(v => !!v),
+ },
+ });
+});
+
+function activities() {
+ const notifications = Meteor.user().profile.notifications || [];
+ return Activities.find({
+ _id: { $in: notifications.map(v => v.activity) },
+ });
+}
diff --git a/start-wekan.sh b/start-wekan.sh
index 9a839b3c..bb9249a6 100755
--- a/start-wekan.sh
+++ b/start-wekan.sh
@@ -7,7 +7,7 @@
# Debug OIDC OAuth2 etc.
#export DEBUG=true
#---------------------------------------------
- export MONGO_URL='mongodb://127.0.0.1:27018/wekan'
+ export MONGO_URL='mongodb://127.0.0.1:27017/wekan'
#---------------------------------------------
# Production: https://example.com/wekan
# Local: http://localhost:2000