Browse Source

Merge upstream/master

* commit '56667112d7fd146a9847794207e9a2224b1115d7':
  Update ChangeLog.
  Minicard labels on the top and title on bottom.
  Update translations.
  Update translations.
  Add translations for Notification drawer like Trello.
  Add translations for Board Settings / Allow Rename Board/Swimlane/Card.
  Update ChangeLog.
  Fix start-wekan.sh MongoDB port to 27017.
  v3.87
  Update translations.
  Update ChangeLog.
  Improvements on card details visualization.
  Update ChangeLog.
  Move "Rules" from "Board View" to "Board Settings".
  Update ChangeLog.
  Fix richer editor submit did not clear edit area.
  Update ChangeLog.
  Fix Browser always reload the whole page when I change one of the card color. Fixed by making label colors and text again editable. Regression from [Wekan v3.86 2)](https://github.com/wekan/wekan/commit/b9099a8b7ea6f63c79bdcbb871cb993b2cb7e325).
Jonathan Baird 5 years ago
parent
commit
fcb1def355
73 changed files with 442 additions and 353 deletions
  1. 1 1
      .sandstorm-meteor-1.8/package-lock.json
  2. 1 1
      .sandstorm-meteor-1.8/package.json
  3. 29 1
      CHANGELOG.md
  4. 1 1
      Stackerfile.yml
  5. 0 7
      client/components/activities/comments.js
  6. 0 14
      client/components/boards/boardHeader.jade
  7. 0 4
      client/components/boards/boardHeader.js
  8. 1 1
      client/components/cards/attachments.jade
  9. 7 4
      client/components/cards/cardDetails.jade
  10. 1 1
      client/components/cards/minicard.styl
  11. 1 6
      client/components/main/editor.jade
  12. 19 47
      client/components/main/editor.js
  13. 4 0
      client/components/sidebar/sidebar.jade
  14. 4 0
      client/components/sidebar/sidebar.js
  15. 0 204
      client/lib/popup.js
  16. 7 1
      i18n/ar.i18n.json
  17. 7 1
      i18n/bg.i18n.json
  18. 7 1
      i18n/br.i18n.json
  19. 7 1
      i18n/ca.i18n.json
  20. 7 1
      i18n/cs.i18n.json
  21. 7 1
      i18n/da.i18n.json
  22. 7 1
      i18n/de.i18n.json
  23. 7 1
      i18n/el.i18n.json
  24. 7 1
      i18n/en-GB.i18n.json
  25. 7 1
      i18n/en.i18n.json
  26. 7 1
      i18n/eo.i18n.json
  27. 7 1
      i18n/es-AR.i18n.json
  28. 7 1
      i18n/es.i18n.json
  29. 7 1
      i18n/eu.i18n.json
  30. 7 1
      i18n/fa.i18n.json
  31. 7 1
      i18n/fi.i18n.json
  32. 7 1
      i18n/fr.i18n.json
  33. 7 1
      i18n/gl.i18n.json
  34. 7 1
      i18n/he.i18n.json
  35. 7 1
      i18n/hi.i18n.json
  36. 7 1
      i18n/hu.i18n.json
  37. 7 1
      i18n/hy.i18n.json
  38. 7 1
      i18n/id.i18n.json
  39. 7 1
      i18n/ig.i18n.json
  40. 7 1
      i18n/it.i18n.json
  41. 7 1
      i18n/ja.i18n.json
  42. 7 1
      i18n/ka.i18n.json
  43. 7 1
      i18n/km.i18n.json
  44. 7 1
      i18n/ko.i18n.json
  45. 7 1
      i18n/lv.i18n.json
  46. 7 1
      i18n/mk.i18n.json
  47. 7 1
      i18n/mn.i18n.json
  48. 7 1
      i18n/nb.i18n.json
  49. 7 1
      i18n/nl.i18n.json
  50. 7 1
      i18n/oc.i18n.json
  51. 7 1
      i18n/pl.i18n.json
  52. 8 2
      i18n/pt-BR.i18n.json
  53. 7 1
      i18n/pt.i18n.json
  54. 7 1
      i18n/ro.i18n.json
  55. 7 1
      i18n/ru.i18n.json
  56. 7 1
      i18n/sl.i18n.json
  57. 7 1
      i18n/sr.i18n.json
  58. 7 1
      i18n/sv.i18n.json
  59. 7 1
      i18n/sw.i18n.json
  60. 7 1
      i18n/ta.i18n.json
  61. 7 1
      i18n/th.i18n.json
  62. 7 1
      i18n/tr.i18n.json
  63. 7 1
      i18n/uk.i18n.json
  64. 7 1
      i18n/vi.i18n.json
  65. 7 1
      i18n/zh-CN.i18n.json
  66. 7 1
      i18n/zh-HK.i18n.json
  67. 7 1
      i18n/zh-TW.i18n.json
  68. 1 1
      package-lock.json
  69. 1 1
      package.json
  70. 2 2
      public/api/wekan.html
  71. 1 1
      public/api/wekan.yml
  72. 2 2
      sandstorm-pkgdef.capnp
  73. 1 1
      start-wekan.sh

+ 1 - 1
.sandstorm-meteor-1.8/package-lock.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v3.86.0",
+  "version": "v3.87.0",
   "lockfileVersion": 1,
   "lockfileVersion": 1,
   "requires": true,
   "requires": true,
   "dependencies": {
   "dependencies": {

+ 1 - 1
.sandstorm-meteor-1.8/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v3.86.0",
+  "version": "v3.87.0",
   "description": "Open-Source kanban",
   "description": "Open-Source kanban",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {

+ 29 - 1
CHANGELOG.md

@@ -1,11 +1,39 @@
 # Upcoming Wekan release
 # Upcoming Wekan release
 
 
-This release fixes the following bugs:
+This release 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
 - [Hide duplicate "Hide system messages" at Change Settings/Member Settings, because it's also on card
   slider](https://github.com/wekan/wekan/issues/2837).
   slider](https://github.com/wekan/wekan/issues/2837).
   Thanks to notohiro and xet7.
   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.
 Thanks to above GitHub users for their contributions and translators for their translations.
 
 
 # v3.86 2020-03-24 Wekan release
 # v3.86 2020-03-24 Wekan release

+ 1 - 1
Stackerfile.yml

@@ -1,5 +1,5 @@
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
 appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v3.86.0"
+appVersion: "v3.87.0"
 files:
 files:
   userUploads:
   userUploads:
     - README.md
     - README.md

+ 0 - 7
client/components/activities/comments.js

@@ -33,13 +33,6 @@ BlazeComponent.extendComponent({
               cardId,
               cardId,
             });
             });
             resetCommentInput(input);
             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();
             Tracker.flush();
             autosize.update(input);
             autosize.update(input);
             input.trigger('submitted');
             input.trigger('submitted');

+ 0 - 14
client/components/boards/boardHeader.jade

@@ -193,20 +193,6 @@ template(name="boardChangeViewPopup")
           | {{_ 'board-view-cal'}}
           | {{_ 'board-view-cal'}}
           if $eq Utils.boardView "board-view-cal"
           if $eq Utils.boardView "board-view-cal"
             i.fa.fa-check
             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")
 template(name="createBoard")
   form
   form

+ 0 - 4
client/components/boards/boardHeader.js

@@ -191,10 +191,6 @@ Template.boardChangeViewPopup.events({
     Utils.setBoardView('board-view-cal');
     Utils.setBoardView('board-view-cal');
     Popup.close();
     Popup.close();
   },
   },
-  'click .js-open-rules-view'() {
-    Modal.openWide('rulesMain');
-    Popup.close();
-  },
 });
 });
 
 
 const CreateBoard = BlazeComponent.extendComponent({
 const CreateBoard = BlazeComponent.extendComponent({

+ 1 - 1
client/components/cards/attachments.jade

@@ -55,5 +55,5 @@ template(name="attachmentsGalery")
         unless currentUser.isWorker
         unless currentUser.isWorker
           //li.attachment-item.add-attachment
           //li.attachment-item.add-attachment
           a.js-add-attachment
           a.js-add-attachment
-            i.fa.fa-paperclip
+            i.fa.fa-plus
             | {{_ 'add-attachment' }}
             | {{_ 'add-attachment' }}

+ 7 - 4
client/components/cards/cardDetails.jade

@@ -203,6 +203,7 @@ template(name="cardDetails")
     if canModifyCard
     if canModifyCard
       unless currentUser.isWorker
       unless currentUser.isWorker
         if currentBoard.allowsDescriptionTitle
         if currentBoard.allowsDescriptionTitle
+          hr
           h3
           h3
             i.fa.fa-align-left
             i.fa.fa-align-left
             card-details-item-title {{_ 'description'}}
             card-details-item-title {{_ 'description'}}
@@ -229,6 +230,7 @@ template(name="cardDetails")
                   a.js-close-inlined-form {{_ 'discard'}}
                   a.js-close-inlined-form {{_ 'discard'}}
     else if getDescription
     else if getDescription
       if currentBoard.allowsDescriptionTitle
       if currentBoard.allowsDescriptionTitle
+        hr
         h3.card-details-item-title {{_ 'description'}}
         h3.card-details-item-title {{_ 'description'}}
       if currentBoard.allowsDescriptionText
       if currentBoard.allowsDescriptionText
         +viewer
         +viewer
@@ -237,15 +239,16 @@ template(name="cardDetails")
     .card-checklist-attachmentGalerys
     .card-checklist-attachmentGalerys
       .card-checklist-attachmentGalery.card-checklists
       .card-checklist-attachmentGalery.card-checklists
         if currentBoard.allowsChecklists
         if currentBoard.allowsChecklists
+          hr
           +checklists(cardId = _id)
           +checklists(cardId = _id)
         if currentBoard.allowsSubtasks
         if currentBoard.allowsSubtasks
           hr
           hr
           +subtasks(cardId = _id)
           +subtasks(cardId = _id)
       if currentBoard.allowsAttachments
       if currentBoard.allowsAttachments
-        //- hr
-        //- h3
-        //- i.fa.fa-paperclip
-        //- | {{_ 'attachments'}}
+        hr
+        h3
+          i.fa.fa-paperclip
+          | {{_ 'attachments'}}
         .card-checklist-attachmentGalery.card-attachmentGalery
         .card-checklist-attachmentGalery.card-attachmentGalery
           +attachmentsGalery
           +attachmentsGalery
 
 

+ 1 - 1
client/components/cards/minicard.styl

@@ -79,7 +79,7 @@
     border-radius: top 2px
     border-radius: top 2px
 
 
   .minicard-labels
   .minicard-labels
-    float: right
+    float: none
     display: flex
     display: flex
     flex-wrap: wrap
     flex-wrap: wrap
 
 

+ 1 - 6
client/components/main/editor.jade

@@ -1,13 +1,8 @@
 template(name="editor")
 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(
   textarea.editor(
     dir="auto"
     dir="auto"
     class="{{class}}"
     class="{{class}}"
-    id="summernote"
+    id=id
     autofocus=autofocus
     autofocus=autofocus
     placeholder="{{_ 'comment-placeholder'}}")
     placeholder="{{_ 'comment-placeholder'}}")
     +Template.contentBlock
     +Template.contentBlock

+ 19 - 47
client/components/main/editor.js

@@ -30,7 +30,7 @@ Template.editor.onRendered(() => {
     autosize($textarea);
     autosize($textarea);
     $textarea.escapeableTextComplete(mentions);
     $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 isSmall = Utils.isMiniScreen();
     const toolbar = isSmall
     const toolbar = isSmall
       ? [
       ? [
@@ -108,45 +108,17 @@ Template.editor.onRendered(() => {
         }
         }
         return undefined;
         return undefined;
       };
       };
-      // Prevent @member mentions on Add Comment input field
-      // from closing card, part 1.
-      let popupShown = false;
       inputs.each(function(idx, input) {
       inputs.each(function(idx, input) {
         mSummernotes[idx] = $(input).summernote({
         mSummernotes[idx] = $(input).summernote({
           placeholder,
           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: {
           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) {
             onInit(object) {
               const originalInput = this;
               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
                 // when comment is submitted, the original textarea will be set to '', so shall we
                 if (!this.value) {
                 if (!this.value) {
                   const sn = getSummernote(this);
                   const sn = getSummernote(this);
-                  sn && sn.summernote('reset');
-                  object && object.editingArea.find('.note-placeholder').show();
+                  sn && sn.summernote('code', '');
                 }
                 }
               });
               });
               const jEditor = object && object.editable;
               const jEditor = object && object.editable;
@@ -163,6 +135,7 @@ Template.editor.onRendered(() => {
                 });
                 });
               }
               }
             },
             },
+
             onImageUpload(files) {
             onImageUpload(files) {
               const $summernote = getSummernote(this);
               const $summernote = getSummernote(this);
               if (files && files.length > 0) {
               if (files && files.length > 0) {
@@ -249,7 +222,7 @@ Template.editor.onRendered(() => {
                 // == Fix End ==
                 // == Fix End ==
                 const original = someNote.summernote('code');
                 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.
                 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.
                 someNote.summernote('pasteHTML', cleaned); //this sets the displayed content editor to the cleaned pasted code.
               };
               };
               setTimeout(function() {
               setTimeout(function() {
@@ -316,15 +289,15 @@ Blaze.Template.registerHelper(
 
 
     let currentMention;
     let currentMention;
     while ((currentMention = mentionRegex.exec(content)) !== null) {
     while ((currentMention = mentionRegex.exec(content)) !== null) {
-      const [fullMention, username] = currentMention;
+      const [fullMention, quoteduser, simple] = currentMention;
+      const username = quoteduser || simple;
       const knowedUser = _.findWhere(knowedUsers, { username });
       const knowedUser = _.findWhere(knowedUsers, { username });
       if (!knowedUser) {
       if (!knowedUser) {
         continue;
         continue;
       }
       }
 
 
       const linkValue = [' ', at, knowedUser.username];
       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()) {
       if (knowedUser.userId === Meteor.userId()) {
         linkClass += ' me';
         linkClass += ' me';
       }
       }
@@ -357,25 +330,24 @@ Template.viewer.events({
   // the corresponding text). Clicking a link shouldn't fire these actions, stop
   // the corresponding text). Clicking a link shouldn't fire these actions, stop
   // we stop these event at the viewer component level.
   // we stop these event at the viewer component level.
   'click a'(event, templateInstance) {
   '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;
     const userId = event.currentTarget.dataset.userid;
     if (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 {
     } else {
       const href = event.currentTarget.href;
       const href = event.currentTarget.href;
       if (href) {
       if (href) {
         window.open(href, '_blank');
         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();
+    }
   },
   },
 });
 });

+ 4 - 0
client/components/sidebar/sidebar.jade

@@ -267,6 +267,10 @@ template(name="outgoingWebhooksPopup")
 
 
 template(name="boardMenuPopup")
 template(name="boardMenuPopup")
   ul.pop-over-list
   ul.pop-over-list
+    li
+      a.js-open-rules-view(title="{{_ 'rules'}}")
+        i.fa.fa-magic
+        | {{_ 'rules'}}
     li
     li
       a.js-custom-fields
       a.js-custom-fields
         i.fa.fa-list-alt
         i.fa.fa-list-alt

+ 4 - 0
client/components/sidebar/sidebar.js

@@ -182,6 +182,10 @@ Template.memberPopup.helpers({
 
 
 Template.boardMenuPopup.events({
 Template.boardMenuPopup.events({
   'click .js-rename-board': Popup.open('boardChangeTitle'),
   'click .js-rename-board': Popup.open('boardChangeTitle'),
+  'click .js-open-rules-view'() {
+    Modal.openWide('rulesMain');
+    Popup.close();
+  },
   'click .js-custom-fields'() {
   'click .js-custom-fields'() {
     Sidebar.setView('customFields');
     Sidebar.setView('customFields');
     Popup.close();
     Popup.close();

+ 0 - 204
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;
-    };
-  }
-})();

+ 7 - 1
i18n/ar.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/bg.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/br.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/ca.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/cs.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/da.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/de.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Zeige auf Karte",
   "show-on-card": "Zeige auf Karte",
   "new": "Neu",
   "new": "Neu",
   "editUserPopup-title": "Benutzer ändern",
   "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"
 }
 }

+ 7 - 1
i18n/el.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/en-GB.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/en.i18n.json

@@ -762,5 +762,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/eo.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/es-AR.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/es.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Mostrar en la tarjeta",
   "show-on-card": "Mostrar en la tarjeta",
   "new": "Nuevo",
   "new": "Nuevo",
   "editUserPopup-title": "Editar el usuario",
   "editUserPopup-title": "Editar el usuario",
-  "newUserPopup-title": "Nuevo usuario"
+  "newUserPopup-title": "Nuevo usuario",
+  "notifications": "Notificaciones",
+  "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"
 }
 }

+ 7 - 1
i18n/eu.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/fa.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/fi.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Näytä kortilla",
   "show-on-card": "Näytä kortilla",
   "new": "Uusi",
   "new": "Uusi",
   "editUserPopup-title": "Muokkaa käyttäjää",
   "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"
 }
 }

+ 7 - 1
i18n/fr.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Afficher sur la carte",
   "show-on-card": "Afficher sur la carte",
   "new": "Nouveau",
   "new": "Nouveau",
   "editUserPopup-title": "Éditer l'utilisateur",
   "editUserPopup-title": "Éditer l'utilisateur",
-  "newUserPopup-title": "Nouvel utilisateur"
+  "newUserPopup-title": "Nouvel utilisateur",
+  "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"
 }
 }

+ 7 - 1
i18n/gl.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/he.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "הצגה על הכרטיס",
   "show-on-card": "הצגה על הכרטיס",
   "new": "חדש",
   "new": "חדש",
   "editUserPopup-title": "עריכת משתמש",
   "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"
 }
 }

+ 7 - 1
i18n/hi.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/hu.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/hy.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/id.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/ig.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/it.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Mostra sulla scheda",
   "show-on-card": "Mostra sulla scheda",
   "new": "Nuovo",
   "new": "Nuovo",
   "editUserPopup-title": "Modifica utente",
   "editUserPopup-title": "Modifica utente",
-  "newUserPopup-title": "Nuovo utente"
+  "newUserPopup-title": "Nuovo utente",
+  "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"
 }
 }

+ 7 - 1
i18n/ja.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "カードに表示する項目",
   "show-on-card": "カードに表示する項目",
   "new": "新規作成",
   "new": "新規作成",
   "editUserPopup-title": "ユーザーを編集",
   "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"
 }
 }

+ 7 - 1
i18n/ka.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/km.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/ko.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/lv.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/mk.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/mn.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/nb.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/nl.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Toon op kaart",
   "show-on-card": "Toon op kaart",
   "new": "Nieuw",
   "new": "Nieuw",
   "editUserPopup-title": "Wijzig gebruiker",
   "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"
 }
 }

+ 7 - 1
i18n/oc.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/pl.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Pokaż na karcie",
   "show-on-card": "Pokaż na karcie",
   "new": "Nowy",
   "new": "Nowy",
   "editUserPopup-title": "Edytuj użytkownika",
   "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"
 }
 }

+ 8 - 2
i18n/pt-BR.i18n.json

@@ -182,7 +182,7 @@
   "changeLanguagePopup-title": "Alterar Idioma",
   "changeLanguagePopup-title": "Alterar Idioma",
   "changePasswordPopup-title": "Alterar Senha",
   "changePasswordPopup-title": "Alterar Senha",
   "changePermissionsPopup-title": "Alterar Permissões",
   "changePermissionsPopup-title": "Alterar Permissões",
-  "changeSettingsPopup-title": "Altera configurações",
+  "changeSettingsPopup-title": "Alterar configurações",
   "subtasks": "Subtarefas",
   "subtasks": "Subtarefas",
   "checklists": "Listas de verificação",
   "checklists": "Listas de verificação",
   "click-to-star": "Marcar quadro como favorito.",
   "click-to-star": "Marcar quadro como favorito.",
@@ -759,5 +759,11 @@
   "show-on-card": "Mostrar no Cartão",
   "show-on-card": "Mostrar no Cartão",
   "new": "Novo",
   "new": "Novo",
   "editUserPopup-title": "Editar usuário",
   "editUserPopup-title": "Editar usuário",
-  "newUserPopup-title": "Novo usuário"
+  "newUserPopup-title": "Novo usuário",
+  "notifications": "Notificações",
+  "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"
 }
 }

+ 7 - 1
i18n/pt.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/ro.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/ru.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Показать на карточке",
   "show-on-card": "Показать на карточке",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/sl.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Prikaži na kartici",
   "show-on-card": "Prikaži na kartici",
   "new": "Novo",
   "new": "Novo",
   "editUserPopup-title": "Uredi uporabnika",
   "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"
 }
 }

+ 7 - 1
i18n/sr.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Prikaži na kartici",
   "show-on-card": "Prikaži na kartici",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/sv.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Visa på kort",
   "show-on-card": "Visa på kort",
   "new": "Ny",
   "new": "Ny",
   "editUserPopup-title": "Redigera användare",
   "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"
 }
 }

+ 7 - 1
i18n/sw.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/ta.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/th.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/tr.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/uk.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/vi.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/zh-CN.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/zh-HK.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 7 - 1
i18n/zh-TW.i18n.json

@@ -759,5 +759,11 @@
   "show-on-card": "Show on Card",
   "show-on-card": "Show on Card",
   "new": "New",
   "new": "New",
   "editUserPopup-title": "Edit User",
   "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"
 }
 }

+ 1 - 1
package-lock.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v3.86.0",
+  "version": "v3.87.0",
   "lockfileVersion": 1,
   "lockfileVersion": 1,
   "requires": true,
   "requires": true,
   "dependencies": {
   "dependencies": {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wekan",
   "name": "wekan",
-  "version": "v3.86.0",
+  "version": "v3.87.0",
   "description": "Open-Source kanban",
   "description": "Open-Source kanban",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {

+ 2 - 2
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">
 	  	<ul class="toc-list-h1">
         
         
           <li>
           <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.87">Wekan REST API v3.87</a>
             
             
           </li>
           </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="page-wrapper">
       <div class="dark-box"></div>
       <div class="dark-box"></div>
       <div class="content">
       <div class="content">
-        <h1 id="wekan-rest-api">Wekan REST API v3.86</h1>
+        <h1 id="wekan-rest-api">Wekan REST API v3.87</h1>
 <blockquote>
 <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>
 <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>
 </blockquote>

+ 1 - 1
public/api/wekan.yml

@@ -1,7 +1,7 @@
 swagger: '2.0'
 swagger: '2.0'
 info:
 info:
   title: Wekan REST API
   title: Wekan REST API
-  version: v3.86
+  version: v3.87
   description: |
   description: |
     The REST API allows you to control and extend Wekan with ease.
     The REST API allows you to control and extend Wekan with ease.
 
 

+ 2 - 2
sandstorm-pkgdef.capnp

@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
     appTitle = (defaultText = "Wekan"),
     appTitle = (defaultText = "Wekan"),
     # The name of the app as it is displayed to the user.
     # The name of the app as it is displayed to the user.
 
 
-    appVersion = 386,
+    appVersion = 387,
     # Increment this for every release.
     # Increment this for every release.
 
 
-    appMarketingVersion = (defaultText = "3.86.0~2020-03-24"),
+    appMarketingVersion = (defaultText = "3.87.0~2020-04-01"),
     # Human-readable presentation of the app version.
     # Human-readable presentation of the app version.
 
 
     minUpgradableAppVersion = 0,
     minUpgradableAppVersion = 0,

+ 1 - 1
start-wekan.sh

@@ -7,7 +7,7 @@
       # Debug OIDC OAuth2 etc.
       # Debug OIDC OAuth2 etc.
       #export DEBUG=true
       #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
       # Production: https://example.com/wekan
       # Local: http://localhost:2000
       # Local: http://localhost:2000