Browse Source

Merge branch 'master' of https://github.com/wekan/wekan into new-search

John R. Supplee 4 years ago
parent
commit
9d2bb505ae
78 changed files with 899 additions and 1015 deletions
  1. 16 3
      CHANGELOG.md
  2. 1 1
      Stackerfile.yml
  3. 6 2
      client/components/boards/boardsList.js
  4. 13 7
      client/components/lists/listBody.js
  5. 4 0
      client/components/sidebar/sidebarCustomFields.jade
  6. 10 0
      client/components/sidebar/sidebarCustomFields.js
  7. 7 1
      i18n/ar-EG.i18n.json
  8. 7 1
      i18n/ar.i18n.json
  9. 7 1
      i18n/bg.i18n.json
  10. 7 1
      i18n/br.i18n.json
  11. 7 1
      i18n/ca.i18n.json
  12. 7 1
      i18n/cs.i18n.json
  13. 7 1
      i18n/da.i18n.json
  14. 7 1
      i18n/de.i18n.json
  15. 16 10
      i18n/el.i18n.json
  16. 7 1
      i18n/en-GB.i18n.json
  17. 2 1
      i18n/en.i18n.json
  18. 7 1
      i18n/eo.i18n.json
  19. 7 1
      i18n/es-AR.i18n.json
  20. 7 1
      i18n/es-CL.i18n.json
  21. 7 1
      i18n/es-MX.i18n.json
  22. 7 1
      i18n/es-PE.i18n.json
  23. 7 1
      i18n/es-PY.i18n.json
  24. 7 1
      i18n/es.i18n.json
  25. 7 1
      i18n/eu.i18n.json
  26. 7 1
      i18n/fa.i18n.json
  27. 7 1
      i18n/fi.i18n.json
  28. 7 1
      i18n/fr.i18n.json
  29. 7 1
      i18n/gl.i18n.json
  30. 7 1
      i18n/he.i18n.json
  31. 7 1
      i18n/hi.i18n.json
  32. 7 1
      i18n/hr.i18n.json
  33. 7 1
      i18n/hu.i18n.json
  34. 7 1
      i18n/hy.i18n.json
  35. 7 1
      i18n/id.i18n.json
  36. 7 1
      i18n/ig.i18n.json
  37. 7 1
      i18n/it.i18n.json
  38. 7 1
      i18n/ja.i18n.json
  39. 7 1
      i18n/ka.i18n.json
  40. 7 1
      i18n/km.i18n.json
  41. 7 1
      i18n/ko.i18n.json
  42. 7 1
      i18n/lt.i18n.json
  43. 7 1
      i18n/lv.i18n.json
  44. 7 1
      i18n/mk.i18n.json
  45. 7 1
      i18n/mn.i18n.json
  46. 8 2
      i18n/nl.i18n.json
  47. 7 1
      i18n/oc.i18n.json
  48. 7 1
      i18n/pa.i18n.json
  49. 11 5
      i18n/pl.i18n.json
  50. 7 1
      i18n/pt-BR.i18n.json
  51. 7 1
      i18n/pt.i18n.json
  52. 7 1
      i18n/ro.i18n.json
  53. 14 8
      i18n/ru.i18n.json
  54. 7 1
      i18n/sk.i18n.json
  55. 7 1
      i18n/sl.i18n.json
  56. 7 1
      i18n/sr.i18n.json
  57. 7 1
      i18n/sv.i18n.json
  58. 7 1
      i18n/sw.i18n.json
  59. 7 1
      i18n/ta.i18n.json
  60. 7 1
      i18n/th.i18n.json
  61. 7 1
      i18n/tr.i18n.json
  62. 7 1
      i18n/uk.i18n.json
  63. 7 1
      i18n/vi.i18n.json
  64. 27 21
      i18n/zh-CN.i18n.json
  65. 7 1
      i18n/zh-HK.i18n.json
  66. 7 1
      i18n/zh-TW.i18n.json
  67. 46 0
      models/boards.js
  68. 1 1
      models/cards.js
  69. 1 0
      models/csvCreator.js
  70. 28 0
      models/customFields.js
  71. 1 0
      models/trelloCreator.js
  72. 1 0
      models/wekanCreator.js
  73. 1 1
      package-lock.json
  74. 1 1
      package.json
  75. 294 272
      public/api/wekan.html
  76. 1 624
      public/api/wekan.yml
  77. 2 2
      sandstorm-pkgdef.capnp
  78. 16 0
      server/publications/boards.js

+ 16 - 3
CHANGELOG.md

@@ -1,10 +1,23 @@
-# Upcoming Wekan release
+# v4.84 2021-01-22 Wekan release
 
-This release fixes the following bugs:
+This release adds the following new features:
+
+- [Search All Boards: Added list of board, list and color names. Added operators for due, created and modified.
+  Added support for clicking list titles, label names and board titles. Make some heading translatable.
+  Set focus back to search phrase input after clicking a predicate. Fixed some spacing issues](https://github.com/wekan/wekan/pull/3459).
+  Thanks to jrsupplee.
+
+and fixes the following bugs:
 
 - [Fixed Upper/lowercase errors in some languages due to .toLowerCase](https://github.com/wekan/wekan/commit/a5f6dd6399142b3b05e9b6a0d106d931106807d6).
   Thanks to bronger and xet7.
-    
+- [Tried to fix possible prototype pollution reported by Deepcode.ai](https://github.com/wekan/wekan/commit/8f553497e4f21d44e78243d22d80b18f729a3d6a).
+  Thanks to Deepcode.ai and xet7.
+- [Disable some logs that are not needed anymore](https://github.com/wekan/wekan/commit/0373da44b38f7300f69470fed3cabab9b63c8783).
+  Thanks to xet7.
+- [Rules not copied during board copy](https://github.com/wekan/wekan/pull/3458).
+  Thanks to jrsupplee.
+ 
 Thanks to above GitHub users for their contributions and translators for their translations.
 
 # v4.83 2021-01-20 Wekan release

+ 1 - 1
Stackerfile.yml

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

+ 6 - 2
client/components/boards/boardsList.js

@@ -124,9 +124,13 @@ BlazeComponent.extendComponent({
         },
         'click .js-clone-board'(evt) {
           Meteor.call(
-            'cloneBoard',
+            'copyBoard',
             this.currentData()._id,
-            Session.get('fromBoard'),
+            {
+              sort: Boards.find({ archived: false }).count(),
+              type: 'board',
+              title: Boards.findOne(this.currentData()._id).copyTitle(),
+            },
             (err, res) => {
               if (err) {
                 this.setError(err.error);

+ 13 - 7
client/components/lists/listBody.js

@@ -239,7 +239,7 @@ BlazeComponent.extendComponent({
         .customFields()
         .fetch(),
       function(field) {
-        if (field.automaticallyOnCard)
+        if (field.automaticallyOnCard || field.alwaysOnCard)
           arr.push({ _id: field._id, value: null });
       },
     );
@@ -675,12 +675,18 @@ BlazeComponent.extendComponent({
             element.type = 'swimlane';
             _id = element.copy(this.boardId);
           } else if (this.isBoardTemplateSearch) {
-            board = Boards.findOne(element.linkedId);
-            board.sort = Boards.find({ archived: false }).count();
-            board.type = 'board';
-            board.title = element.title;
-            delete board.slug;
-            _id = board.copy();
+            Meteor.call(
+              'copyBoard',
+              element.linkedId,
+              {
+                sort: Boards.find({ archived: false }).count(),
+                type: 'board',
+                title: element.title,
+              },
+              (err, data) => {
+                _id = data;
+              },
+            );
           }
           Popup.close();
         },

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

@@ -59,6 +59,10 @@ template(name="createCustomFieldPopup")
 
             span {{_ 'automatically-field-on-card'}}
 
+        a.flex.js-field-always-on-card(class="{{#if alwaysOnCard}}is-checked{{/if}}")
+            .materialCheckBox(class="{{#if alwaysOnCard}}is-checked{{/if}}")
+            span {{_ 'always-field-on-card'}}
+
         a.flex.js-field-showLabel-on-card(class="{{#if showLabelOnMiniCard}}is-checked{{/if}}")
             .materialCheckBox(class="{{#if showLabelOnMiniCard}}is-checked{{/if}}")
 

+ 10 - 0
client/components/sidebar/sidebarCustomFields.js

@@ -174,6 +174,14 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
           $target.find('.materialCheckBox').toggleClass('is-checked');
           $target.toggleClass('is-checked');
         },
+        'click .js-field-always-on-card'(evt) {
+          let $target = $(evt.target);
+          if (!$target.hasClass('js-field-always-on-card')) {
+            $target = $target.parent();
+          }
+          $target.find('.materialCheckBox').toggleClass('is-checked');
+          $target.toggleClass('is-checked');
+        },
         'click .js-field-showLabel-on-card'(evt) {
           let $target = $(evt.target);
           if (!$target.hasClass('js-field-showLabel-on-card')) {
@@ -194,6 +202,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
               this.find('.js-field-showLabel-on-card.is-checked') !== null,
             automaticallyOnCard:
               this.find('.js-field-automatically-on-card.is-checked') !== null,
+            alwaysOnCard:
+              this.find('.js-field-always-on-card.is-checked') !== null,
           };
 
           // insert or update

+ 7 - 1
i18n/ar-EG.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ar.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "رقم"
+  "number": "رقم",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/bg.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "е",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Номер"
+  "number": "Номер",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/br.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ca.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/cs.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "je",
+  "operator-due": "do",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Číslo"
+  "number": "Číslo",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/da.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "er",
+  "operator-due": "forfalder",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Tal"
+  "number": "Tal",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/de.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "Zugewiesener",
   "operator-assignee-abbrev": "a",
   "operator-is": "wird",
+  "operator-due": "Fällig",
+  "operator-created": "erstellt",
+  "operator-modified": "geändert",
   "operator-unknown-error": "„%s“ ist kein Operator",
+  "operator-number-expected": "Operator „__operator__“ erwartete eine Zahl, bekam aber „__value__“",
   "heading-notes": "Bemerkungen",
   "globalSearch-instructions-heading": "Hinweise zur Suche",
   "globalSearch-instructions-description": "Suchanfragen können Operatoren enthalten, um die Suche zu verfeinern. Operatoren bestehen aus ihrem Namen und ihrem Wert, getrennt durch einen Doppelpunkt. Beispielsweise würde die Operatorangabe `list:Blockiert` die Suche beschränken auf Karten in einer Liste namens *Blockiert*. Wenn der Wet Leerschritte oder andere Spezialzeichen enthält, muss er in Anführungszeichen gesetzt sein (z.B. `__operator_list__:\"Im Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Zur Zeit werden keine archivierten Karten gefunden.",
   "link-to-search": "Link auf diese Suche",
   "excel-font": "Arial",
-  "number": "Zahl"
+  "number": "Zahl",
+  "label-colors": "Label-Farben",
+  "label-names": "Label-Namen"
 }

+ 16 - 10
i18n/el.i18n.json

@@ -327,8 +327,8 @@
   "export-board-json": "Εξαγωγή πίνακα σε JSON",
   "export-board-csv": "Εξαγωγή πίνακα σε CSV",
   "export-board-tsv": "Εξαγωγή πίνακα σε TSV",
-  "export-board-excel": "Export board to Excel",
-  "user-can-not-export-excel": "User can not export Excel",
+  "export-board-excel": "Εξαγωγή πίνακα σε Excel",
+  "user-can-not-export-excel": "Ο χρήστης δε μπορεί να εξάγει σε Excel",
   "export-board-html": "Εξαγωγή πίνακα σε HTML",
   "exportBoardPopup-title": "Εξαγωγή πίνακα",
   "sort": "Ταξινόμηση",
@@ -382,10 +382,10 @@
   "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.",
   "import-json-placeholder": "Επικολλήστε τα ορθά JSON δεδομένα σας εδώ",
   "import-csv-placeholder": "Επικολλήστε τα ορθά CSV/TSV δεδομένα σας εδώ",
-  "import-map-members": "Map members",
-  "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
+  "import-map-members": "Αντιστοίχιση μελών",
+  "import-members-map": "Ο εισαχθείς πίνακας έχει κάποια μέλη. Παρακαλούμε αντιστοιχίστε τα μέλη που θέλετε να εισάγετε στους χρήστες σας",
   "import-show-user-mapping": "Αναθεώρηση αντιστοίχισης μελών",
-  "import-user-select": "Pick your existing user you want to use as this member",
+  "import-user-select": "Επιλέξτε τον ήδη υπάρχοντα χρήστη που επιθυμείτε να χρησιμοποιήσετε ως αυτό το μέλος",
   "importMapMembersAddPopup-title": "Επιλογή μέλους",
   "info": "Έκδοση",
   "initials": "Αρχικά",
@@ -400,9 +400,9 @@
   "label-delete-pop": "Δεν υπάρχει δυνατότητα επαναφοράς. Θα διαγραφεί η ετικέτα από όλες τις κάρτες και θα καταστραφεί το ιστορικό της.",
   "labels": "Ετικέτες",
   "language": "Γλώσσα",
-  "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+  "last-admin-desc": "Δε μπορείτε να μεταβάλετε ρόλους επειδή πρέπει να υπάρχει τουλάχιστον ένας διαχειριστής.",
   "leave-board": "Αποχώρηση από Πίνακα",
-  "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
+  "leave-board-pop": "Είστε σίγουροι ότι θέλετε να αποχωρήσετε από το __boardTitle__? Θα αφαιρεθείτε από όλες τις κάρτες αυτού του πίνακα.",
   "leaveBoardPopup-title": "Αποχωρείτε απο τον Πίνακα;",
   "link-card": "Σύνδεσμος σε αυτή την κάρτα",
   "list-archive-cards": "Μεταφορά όλων των καρτών αυτής της λίστας στο Αρχείο",
@@ -461,7 +461,7 @@
   "previewAttachedImagePopup-title": "Προεπισκόπηση",
   "previewClipboardImagePopup-title": "Προεπισκόπηση",
   "private": "Private",
-  "private-desc": "This board is private. Only people added to the board can view and edit it.",
+  "private-desc": "Ο πίνακας αυτός είναι προσωπικός. Μόνο άτομα που έχουν προστεθεί σε αυτόν τον πίνακα μπορούν να τον δουν και να τον μεταβάλλουν.",
   "profile": "Προφίλ",
   "public": "Δημόσιο",
   "public-desc": "Αυτός ο πίνακας είναι δημόσιος. Είναι ορατός σε οποιονδήποτε κατέχει το σύνδεσμο προς αυτόν και θα εμφανίζεται σε μηχανές αναζήτησης όπως η Google. Ο πίνακας μπορεί να μεταβληθεί μόνο από άτομα που έχουν προστεθεί σε αυτόν.",
@@ -484,7 +484,7 @@
   "search-example": "Write text you search and press Enter",
   "select-color": "Επιλέξτε Χρώμα",
   "select-board": "Επιλογή Πίνακα",
-  "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
+  "set-wip-limit-value": "Προσδιορισμός ορίου στο μέγιστο αριθμό εργασιών σε αυτή τη λίστα.",
   "setWipLimitPopup-title": "Set WIP Limit",
   "shortcut-assign-self": "Assign yourself to current card",
   "shortcut-autocomplete-emoji": "Autocomplete emoji",
@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "είναι",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Αριθμός"
+  "number": "Αριθμός",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 2 - 1
i18n/en.i18n.json

@@ -601,7 +601,8 @@
   "minutes": "minutes",
   "seconds": "seconds",
   "show-field-on-card": "Show this field on card",
-  "automatically-field-on-card": "Auto create field to all cards",
+  "automatically-field-on-card": "Add field to new cards",
+  "always-field-on-card": "Add field to all cards",
   "showLabel-field-on-card": "Show field label on minicard",
   "yes": "Yes",
   "no": "No",

+ 7 - 1
i18n/eo.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Nombro"
+  "number": "Nombro",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Número"
+  "number": "Número",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "es",
+  "operator-due": "vencimiento",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Número"
+  "number": "Número",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "es",
+  "operator-due": "vencimiento",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s no es un operador",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notas",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Número"
+  "number": "Número",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/es.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "Asignar",
   "operator-assignee-abbrev": "a",
   "operator-is": "es",
+  "operator-due": "vencimiento",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s no es un operador",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notas",
   "globalSearch-instructions-heading": "Buscar instrucciones.",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Las tarjetas actualmente archivadas no son seleccionadas.",
   "link-to-search": "Enlazar a esta búsqueda",
   "excel-font": "Arial",
-  "number": "Número"
+  "number": "Número",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/eu.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/fa.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "هست",
+  "operator-due": "ناشی از",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "عدد"
+  "number": "عدد",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/fi.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "käsittelijä",
   "operator-assignee-abbrev": "a",
   "operator-is": "on",
+  "operator-due": "erääntyy",
+  "operator-created": "luotu",
+  "operator-modified": "muokattu",
   "operator-unknown-error": "%s ei ole operaattori",
+  "operator-number-expected": "operaattori __operator__ odotettiin numeroa, saatiin '__value__'",
   "heading-notes": "Huomioitavaa",
   "globalSearch-instructions-heading": "Etsintäohjeet",
   "globalSearch-instructions-description": "Etsinnät voi sisältää operaattoreita tarkentamaan hakua.  Operaattorit määritellään kirjoittamalla operaattorin nimi ja arvo eroteltuna kaksoispisteellä. Esimerkiksi, operaattori määritelmä `lista:Blokattu` rajoittaisi etsinnät kortteihin listassa nimeltä *Blokattu*.  Jos arvo sisältää välilyöntejä tai erityismerkkejä sen on oltava lainausmerkeissä (esim. `__operator_list__:\"Tarkista nämä\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Arkistoiduista korteista ei etsitä.",
   "link-to-search": "Linkki tähän hakuun",
   "excel-font": "Arial",
-  "number": "Numero"
+  "number": "Numero",
+  "label-colors": "Nimilappujen värit",
+  "label-names": "Nimilappujen nimet"
 }

+ 7 - 1
i18n/fr.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "personne assignée",
   "operator-assignee-abbrev": "a",
   "operator-is": "est",
+  "operator-due": "échéance",
+  "operator-created": "créé",
+  "operator-modified": "modifié",
   "operator-unknown-error": "'%s' n'est pas un opérateur",
+  "operator-number-expected": "L'opérateur __operator__ n'attend pas '__value__' mais un nombre",
   "heading-notes": "Remarques",
   "globalSearch-instructions-heading": "Instructions de recherche",
   "globalSearch-instructions-description": "Les recherches peuvent inclure des opérateurs pour affiner le résultat. Les opérateurs sont précisés en écrivant l'opérateur suivi d'une valeur séparé par un deux-point. Par exemple, une spécification comme `liste:Bloqué` limiterait le résultat aux cartes qui contiennent une liste appelée *Bloqué*. Si la valeur contient des espaces ou des caractères spéciaux, elle doit être entourée d'apostrophes (par ex. `__operator_list__:\"À valider\"`). ",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Les cartes actuellement archivées ne sont pas recherchées.",
   "link-to-search": "Lien vers cette recherche",
   "excel-font": "Arial",
-  "number": "Nombre"
+  "number": "Nombre",
+  "label-colors": "Couleurs d'étiquette",
+  "label-names": "Noms d'étiquette"
 }

+ 7 - 1
i18n/gl.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/he.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "אחראי",
   "operator-assignee-abbrev": "א",
   "operator-is": "הוא",
+  "operator-due": "תפוגה",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "הערות",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "לא מתבצע חיפוש על הכרטיסיות שכרגע בארכיון.",
   "link-to-search": "קישור לחיפוש הזה",
   "excel-font": "Arial",
-  "number": "מספר"
+  "number": "מספר",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/hi.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/hr.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "je",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Broj"
+  "number": "Broj",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/hu.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "..",
+  "operator-due": "határidő",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Szám"
+  "number": "Szám",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/hy.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/id.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "adalah",
+  "operator-due": "sampai",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ig.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/it.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "è",
+  "operator-due": "scadenza",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Numero"
+  "number": "Numero",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ja.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "が",
+  "operator-due": "期限",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "数値"
+  "number": "数値",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ka.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "რიცხვი"
+  "number": "რიცხვი",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/km.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ko.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "숫자"
+  "number": "숫자",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/lt.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/lv.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "ir",
+  "operator-due": "līdz",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Skaits"
+  "number": "Skaits",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/mk.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "е",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Број"
+  "number": "Број",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/mn.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 8 - 2
i18n/nl.i18n.json

@@ -608,7 +608,7 @@
   "accounts": "Accounts",
   "accounts-allowEmailChange": "Sta E-mailadres wijzigingen toe",
   "accounts-allowUserNameChange": "Sta Gebruikersnaam wijzigingen toe",
-  "createdAt": "Gemaakt op",
+  "createdAt": "Aangemaakt op",
   "modifiedAt": "Gewijzigd op",
   "verified": "Geverifieerd",
   "active": "Actief",
@@ -894,7 +894,11 @@
   "operator-assignee": "toegewezen aan",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "verval",
+  "operator-created": "aangemaakt",
+  "operator-modified": "gewijzigd",
   "operator-unknown-error": "%s is geen expressie",
+  "operator-number-expected": "expressie __operator__ verwachtte een getal maar kreeg '__value__'",
   "heading-notes": "Notities",
   "globalSearch-instructions-heading": "Zoek Instructies",
   "globalSearch-instructions-description": "Zoekacties kunnen expressies bevatten om het resultaat te verfijnen. Expressies worden gespecificeerd door de expressie-naam en de waarde, gescheiden door een dubbele punt. Voorbeeld, de expressie specificatie 'list:Blocked' moet het zoekresultaat limiteren tot alleen die kaarten uit een lijst met de naam *Blocked*. Als de waarde een speciaal karakter of spaties bevat dan moet deze tussen dubbele aanhalingstekens geschreven worden (bv.  `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Op dit moment worden gearchiveerde kaarten niet doorzocht.",
   "link-to-search": "Link naar deze zoekactie",
   "excel-font": "Arial",
-  "number": "Aantal"
+  "number": "Aantal",
+  "label-colors": "Labelkleuren",
+  "label-names": "Labelnamen"
 }

+ 7 - 1
i18n/oc.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Nombre"
+  "number": "Nombre",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/pa.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 11 - 5
i18n/pl.i18n.json

@@ -327,8 +327,8 @@
   "export-board-json": "Eksportuj tablicę do JSON",
   "export-board-csv": "Eksportuj tablicę do CSV",
   "export-board-tsv": "Eksportuj tablicę do TSV",
-  "export-board-excel": "Export board to Excel",
-  "user-can-not-export-excel": "User can not export Excel",
+  "export-board-excel": "Eksportuj tablicę w formacie Excel",
+  "user-can-not-export-excel": "Użytkownik nie może wyeksportować tablicy w formacie Excel",
   "export-board-html": "Eksportuj tablicę do HTML",
   "exportBoardPopup-title": "Eksportuj tablicę",
   "sort": "Sortuj",
@@ -609,7 +609,7 @@
   "accounts-allowEmailChange": "Zezwól na zmianę adresu email",
   "accounts-allowUserNameChange": "Zezwól na zmianę nazwy użytkownika",
   "createdAt": "Utworzone o",
-  "modifiedAt": "Modified at",
+  "modifiedAt": "Zmodyfikowano",
   "verified": "Zweryfikowane",
   "active": "Aktywny",
   "card-received": "Przyjęto",
@@ -872,7 +872,7 @@
   "swimlane-title-not-found": "Nie znaleziono ścieżki '%s'.",
   "list-title-not-found": "Nie znaleziono listy '%s'.",
   "label-not-found": "Nie znaleziono etykiety '%s'.",
-  "label-color-not-found": "Label color %s not found.",
+  "label-color-not-found": "Kolor etykiety %s nie istnieje.",
   "user-username-not-found": "Nie znaleziono użytkownika '%s'.",
   "globalSearch-title": "Przeszukaj wszystkie tablice",
   "no-cards-found": "Nie znaleziono kart",
@@ -894,7 +894,11 @@
   "operator-assignee": "przypisany",
   "operator-assignee-abbrev": "p",
   "operator-is": "jest",
+  "operator-due": "wykonania",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s nie jest operatorem",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notatki",
   "globalSearch-instructions-heading": "Instrukcja wyszukiwania",
   "globalSearch-instructions-description": "W wyszukiwanym ciągu można umieszczać specjalne klucze, aby doprecyzować zapytanie. Klucz składa się z operatora i argumentu, rozdzielonych dwukropkiem. Na przykład klucz `lista:Wstrzymane` zawęża wyszukiwanie do kart znajdujących się na listach o nazwie *Wstrzymane*. Jeśli argument zawiera spacje lub znaki specjalne, należy go umieścić w cudzysłowie, np. `__operator_list__:\"Do uzgodnienia\"`.",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Wyszukiwanie nie obejmuje obecnie kart zarchiwizowanych.",
   "link-to-search": "Link do tego wyszukiwania",
   "excel-font": "Arial",
-  "number": "Numer"
+  "number": "Numer",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/pt-BR.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "administrador",
   "operator-assignee-abbrev": "a",
   "operator-is": "é",
+  "operator-due": "prazo final",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s não é um operador",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notas",
   "globalSearch-instructions-heading": "Buscar instruções",
   "globalSearch-instructions-description": "Buscas podem incluir operadores para otimizar a consulta. Operadores são especificados para serem escritos com o nome do operador e o seu valor separados por sinal de dois pontos. Por exemplo, uma especificação de operador para `list:Blocked` poderia limitar a busca a cartões que estão em uma lista chamada *Blocked*. Se o valor contém espaços ou caracteres especiais deverá ser colocado entre aspas  (por exemplo, `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Cartões recém arquivados não são buscados",
   "link-to-search": "Link para esta busca",
   "excel-font": "Arial",
-  "number": "Número"
+  "number": "Número",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/pt.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "é",
+  "operator-due": "data limite",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Número"
+  "number": "Número",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ro.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 14 - 8
i18n/ru.i18n.json

@@ -894,26 +894,32 @@
   "operator-assignee": "Кому назначено",
   "operator-assignee-abbrev": "a",
   "operator-is": " ",
+  "operator-due": "выполнить к",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%1 не оператор",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Заметки",
   "globalSearch-instructions-heading": "Инструкция по поиску",
   "globalSearch-instructions-description": "Поисковая строка может содержать операторы для уточнения запроса. Оператор задается именем оператора и значением разделенными двоеточием. Например, оператор 'list:Blocked' ограничит результат запроса карточками состоящими в списке 'Blocked'. Если значение содержит пробелы или специальные символы, то оно должно быть заключено в кавычки(__operator_list__:\"To Review\").",
   "globalSearch-instructions-operators": "Доступные операторы:",
   "globalSearch-instructions-operator-board": "`__operator_board__:title` - карточки на досках с названием соответствующим \"title\"",
   "globalSearch-instructions-operator-list": "`__operator_list__:title` - карточки в списках соответствующих \"title\"",
-  "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:title` - cards in swimlanes matching the specified title",
-  "globalSearch-instructions-operator-label": "`__operator_label__:color` `__operator_label__:name` - cards that have a label matching the given color or name",
-  "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__label` - shorthand for `__operator_label__:label`",
-  "globalSearch-instructions-operator-user": "`__operator_user__:username` - cards where the specified user is a *member* or *assignee*",
-  "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:username`",
-  "globalSearch-instructions-operator-member": "`__operator_member__:username` - cards where the specified user is a *member*",
+  "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:title` - карточки в дорожках соответствующих заданному \"title\"",
+  "globalSearch-instructions-operator-label": "`__operator_label__:color` `__operator_label__:name` - карточки, которые имеют метки соответствующие заданным \"color\" или \"name\"",
+  "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__label` - сокращенный вариант `__operator_label__:label`",
+  "globalSearch-instructions-operator-user": "`__operator_user__:username` - карточки, где указанный пользователь является участником или исполнителем",
+  "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - сокращенный вариант `user:username`",
+  "globalSearch-instructions-operator-member": "`__operator_member__:username` - карточки, где указанный пользователь является участником",
   "globalSearch-instructions-operator-assignee": "`__operator_assignee__:username` - cards where the specified user is an *assignee*",
-  "globalSearch-instructions-notes-1": "Multiple operators may be specified.",
+  "globalSearch-instructions-notes-1": "Может быть задано несколько операторов.",
   "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together.  Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.",
   "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together.  Only cards that match all of the differing operators are returned.\n`__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
   "globalSearch-instructions-notes-4": "Text searches are case insensitive.",
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Номер"
+  "number": "Номер",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/sk.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/sl.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": " ",
+  "operator-due": "rok",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Število"
+  "number": "Število",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/sr.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "je",
+  "operator-due": "krajnji datum",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Broj"
+  "number": "Broj",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/sv.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "är",
+  "operator-due": "förfallotid",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Nummer"
+  "number": "Nummer",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/sw.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/ta.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "எண் "
+  "number": "எண் ",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/th.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/tr.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "vade",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Sayı"
+  "number": "Sayı",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/uk.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "до",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Номер"
+  "number": "Номер",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 7 - 1
i18n/vi.i18n.json

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 27 - 21
i18n/zh-CN.i18n.json

@@ -866,20 +866,20 @@
   "dueCardsViewChangePopup-title": "逾期卡片视图",
   "dueCardsViewChange-choice-me": "我",
   "dueCardsViewChange-choice-all": "所有用户",
-  "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.",
-  "broken-cards": "Broken Cards",
-  "board-title-not-found": "Board '%s' not found.",
+  "dueCardsViewChange-choice-all-description": "根据截至日期显示用户有权限访问的看板中未完成的卡片。",
+  "broken-cards": "损坏的卡片",
+  "board-title-not-found": "无法找到看板 '%s'",
   "swimlane-title-not-found": "Swimlane '%s' not found.",
-  "list-title-not-found": "List '%s' not found.",
-  "label-not-found": "Label '%s' not found.",
-  "label-color-not-found": "Label color %s not found.",
-  "user-username-not-found": "Username '%s' not found.",
-  "globalSearch-title": "Search All Boards",
-  "no-cards-found": "No Cards Found",
-  "one-card-found": "One Card Found",
-  "n-cards-found": "%s Cards Found",
+  "list-title-not-found": "无法找到列表%s",
+  "label-not-found": "无法找到标签%s",
+  "label-color-not-found": "无法找到标签颜色%s",
+  "user-username-not-found": "用户名%s无法找到",
+  "globalSearch-title": "查询所有看板",
+  "no-cards-found": "无法查询到卡片",
+  "one-card-found": "查询到一个卡片",
+  "n-cards-found": "查询到%s个卡片",
   "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
-  "operator-board": "board",
+  "operator-board": "看板",
   "operator-board-abbrev": "b",
   "operator-swimlane": "swimlane",
   "operator-swimlane-abbrev": "s",
@@ -887,18 +887,22 @@
   "operator-list-abbrev": "l",
   "operator-label": "标签",
   "operator-label-abbrev": "#",
-  "operator-user": "user",
+  "operator-user": "用户",
   "operator-user-abbrev": "@",
   "operator-member": "成员",
   "operator-member-abbrev": "m",
-  "operator-assignee": "assignee",
+  "operator-assignee": "指定人",
   "operator-assignee-abbrev": "a",
   "operator-is": "是",
-  "operator-unknown-error": "%s is not an operator",
-  "heading-notes": "Notes",
-  "globalSearch-instructions-heading": "Search Instructions",
+  "operator-due": "至",
+  "operator-created": "created",
+  "operator-modified": "modified",
+  "operator-unknown-error": "%s不是维护人员",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
+  "heading-notes": "注释",
+  "globalSearch-instructions-heading": "查询指示信息",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
-  "globalSearch-instructions-operators": "Available operators:",
+  "globalSearch-instructions-operators": "可利用的维护人员",
   "globalSearch-instructions-operator-board": "`__operator_board__:title` - cards in boards matching the specified title",
   "globalSearch-instructions-operator-list": "`__operator_list__:title` - cards in lists matching the specified title",
   "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:title` - cards in swimlanes matching the specified title",
@@ -912,8 +916,10 @@
   "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together.  Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.",
   "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together.  Only cards that match all of the differing operators are returned.\n`__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
   "globalSearch-instructions-notes-4": "Text searches are case insensitive.",
-  "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
-  "link-to-search": "Link to this search",
+  "globalSearch-instructions-notes-5": "无法查询当前已归档的卡片",
+  "link-to-search": "关联至本次查询",
   "excel-font": "Arial",
-  "number": "数字"
+  "number": "数字",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "assignee",
   "operator-assignee-abbrev": "a",
   "operator-is": "is",
+  "operator-due": "due",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s is not an operator",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "Notes",
   "globalSearch-instructions-heading": "Search Instructions",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "Currently archived cards are not searched.",
   "link-to-search": "Link to this search",
   "excel-font": "Arial",
-  "number": "Number"
+  "number": "Number",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

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

@@ -894,7 +894,11 @@
   "operator-assignee": "代理人",
   "operator-assignee-abbrev": "a",
   "operator-is": "是",
+  "operator-due": "至",
+  "operator-created": "created",
+  "operator-modified": "modified",
   "operator-unknown-error": "%s不是執行者",
+  "operator-number-expected": "operator __operator__ expected a number, got '__value__'",
   "heading-notes": "筆記",
   "globalSearch-instructions-heading": "搜尋指引",
   "globalSearch-instructions-description": "Searches can include operators to refine the search.  Operators are specified by writing the operator name and value separated by a colon.  For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*.  If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
@@ -915,5 +919,7 @@
   "globalSearch-instructions-notes-5": "未搜尋目前封存卡片",
   "link-to-search": "連結到此搜尋",
   "excel-font": "Arial",
-  "number": "數字"
+  "number": "數字",
+  "label-colors": "Label Colors",
+  "label-names": "Label Names"
 }

+ 46 - 0
models/boards.js

@@ -508,6 +508,7 @@ Boards.helpers({
   copy() {
     const oldId = this._id;
     delete this._id;
+    delete this.slug;
     const _id = Boards.insert(this);
 
     // Copy all swimlanes in board
@@ -537,7 +538,52 @@ Boards.helpers({
         },
       });
     });
+
+    // copy rules, actions, and triggers
+    const actionsMap = {};
+    Actions.find({ boardId: oldId }).forEach(action => {
+      const id = action._id;
+      delete action._id;
+      action.boardId = _id;
+      actionsMap[id] = Actions.insert(action);
+    });
+    const triggersMap = {};
+    Triggers.find({ boardId: oldId }).forEach(trigger => {
+      const id = trigger._id;
+      delete trigger._id;
+      trigger.boardId = _id;
+      triggersMap[id] = Triggers.insert(trigger);
+    });
+    Rules.find({ boardId: oldId }).forEach(rule => {
+      delete rule._id;
+      rule.boardId = _id;
+      rule.actionId = actionsMap[rule.actionId];
+      rule.triggerId = triggersMap[rule.triggerId];
+      Rules.insert(rule);
+    });
   },
+  /**
+   * Return a unique title based on the current title
+   *
+   * @returns {string|null}
+   */
+  copyTitle() {
+    const m = this.title.match(/^(?<title>.*?)\s*(\[(?<num>\d+)]\s*$|\s*$)/);
+    const title = m.groups.title;
+    let num = 0;
+    Boards.find({ title: new RegExp(`^${title}\\s*\\[\\d+]\\s*$`) }).forEach(
+      board => {
+        const m = board.title.match(/^(?<title>.*?)\s*\[(?<num>\d+)]\s*$/);
+        if (m) {
+          const n = parseInt(m.groups.num, 10);
+          num = num < n ? n : num;
+        }
+      },
+    );
+
+    return `${title} [${num + 1}]`;
+  },
+
   /**
    * Is supplied user authorized to view this board?
    */

+ 1 - 1
models/cards.js

@@ -2151,7 +2151,7 @@ Cards.globalSearch = queryParams => {
   const cards = Cards.find(selector, projection);
 
   // eslint-disable-next-line no-console
-  console.log('count:', cards.count());
+  //console.log('count:', cards.count());
 
   return { cards, errors };
 };

+ 1 - 0
models/csvCreator.js

@@ -147,6 +147,7 @@ export class CsvCreator {
         settings,
         showOnCard: false,
         automaticallyOnCard: false,
+        alwaysOnCard: false,
         showLabelOnMiniCard: false,
         boardIds: [boardId],
       });

+ 28 - 0
models/customFields.js

@@ -76,6 +76,12 @@ CustomFields.attachSchema(
        */
       type: Boolean,
     },
+    alwaysOnCard: {
+      /**
+       * should the custom field be automatically added to all cards?
+       */
+      type: Boolean,
+    },
     showLabelOnMiniCard: {
       /**
        * should the label of the custom field be shown on minicards?
@@ -111,6 +117,19 @@ CustomFields.attachSchema(
   }),
 );
 
+CustomFields.addToAllCards = cf => {
+  Cards.update(
+    {
+      boardId: { $in: cf.boardIds },
+      customFields: { $not: { $elemMatch: { _id: cf._id } } },
+    },
+    {
+      $push: { customFields: { _id: cf._id, value: null } },
+    },
+    { multi: true },
+  );
+};
+
 CustomFields.mutations({
   addBoard(boardId) {
     if (boardId) {
@@ -198,6 +217,10 @@ if (Meteor.isServer) {
 
   CustomFields.after.insert((userId, doc) => {
     customFieldCreation(userId, doc);
+
+    if (doc.alwaysOnCard) {
+      CustomFields.addToAllCards(doc);
+    }
   });
 
   CustomFields.before.update((userId, doc, fieldNames, modifier) => {
@@ -224,6 +247,11 @@ if (Meteor.isServer) {
     }
   });
 
+  CustomFields.after.update((userId, doc) => {
+    if (doc.alwaysOnCard) {
+      CustomFields.addToAllCards(doc);
+    }
+  });
   CustomFields.before.remove((userId, doc) => {
     customFieldDeletion(userId, doc);
     Activities.remove({

+ 1 - 0
models/trelloCreator.js

@@ -243,6 +243,7 @@ export class TrelloCreator {
           showOnCard: field.display.cardFront,
           showLabelOnMiniCard: field.display.cardFront,
           automaticallyOnCard: true,
+          alwaysOnCard: false,
           type: field.type,
           boardIds: [boardId],
           settings: {},

+ 1 - 0
models/wekanCreator.js

@@ -537,6 +537,7 @@ export class WekanCreator {
         showOnCard: field.showOnCard,
         showLabelOnMiniCard: field.showLabelOnMiniCard,
         automaticallyOnCard: field.automaticallyOnCard,
+        alwaysOnCard: field.alwaysOnCard,
         //use date "now" if now created at date is provided (e.g. for very old boards)
         createdAt: this._now(this.createdAt.customFields[field._id]),
         modifiedAt: field.modifiedAt,

+ 1 - 1
package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "wekan",
-  "version": "v4.83.0",
+  "version": "v4.84.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "wekan",
-  "version": "v4.83.0",
+  "version": "v4.84.0",
   "description": "Open-Source kanban",
   "private": true,
   "scripts": {

File diff suppressed because it is too large
+ 294 - 272
public/api/wekan.html


+ 1 - 624
public/api/wekan.yml

@@ -1,7 +1,7 @@
 swagger: '2.0'
 info:
   title: Wekan REST API
-  version: v4.83
+  version: v4.84
   description: |
     The REST API allows you to control and extend Wekan with ease.
 
@@ -134,198 +134,6 @@ paths:
           description: |
             Error in registration
 
-  /api/boards:
-    get:
-      operationId: get_public_boards
-      summary: Get all public boards
-      tags:
-        - Boards
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
-          schema:
-            type: array
-            items:
-              type: object
-              properties:
-                _id:
-                  type: string
-                title:
-                  type: string
-    post:
-      operationId: new_board
-      summary: Create a board
-      description: |
-        This allows to create a board.
-
-         The color has to be chosen between `belize`, `nephritis`, `pomegranate`,
-         `pumpkin`, `wisteria`, `moderatepink`, `strongcyan`,
-         `limegreen`, `midnight`, `dark`, `relax`, `corteza`:
-
-         <img src="https://wekan.github.io/board-colors.png" width="40%" alt="Wekan logo" />
-      tags:
-        - Boards
-      consumes:
-        - multipart/form-data
-        - application/json
-      parameters:
-        - name: title
-          in: formData
-          description: |
-            the new title of the board
-          type: string
-          required: true
-        - name: owner
-          in: formData
-          description: |
-            "ABCDE12345" <= User ID in Wekan.
-                 (Not username or email)
-          type: string
-          required: true
-        - name: isAdmin
-          in: formData
-          description: |
-            is the owner an admin of the board (default true)
-          type: boolean
-          required: false
-        - name: isActive
-          in: formData
-          description: |
-            is the board active (default true)
-          type: boolean
-          required: false
-        - name: isNoComments
-          in: formData
-          description: |
-            disable comments (default false)
-          type: boolean
-          required: false
-        - name: isCommentOnly
-          in: formData
-          description: |
-            only enable comments (default false)
-          type: boolean
-          required: false
-        - name: isWorker
-          in: formData
-          description: |
-            only move cards, assign himself to card and comment (default false)
-          type: boolean
-          required: false
-        - name: permission
-          in: formData
-          description: |
-            "private" board <== Set to "public" if you
-                 want public Wekan board
-          type: string
-          required: false
-        - name: color
-          in: formData
-          description: |
-            the color of the board
-          type: string
-          required: false
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
-          schema:
-            type: object
-            properties:
-              _id:
-                type: string
-              defaultSwimlaneId:
-                type: string
-  /api/boards/{board}:
-    get:
-      operationId: get_board
-      summary: Get the board with that particular ID
-      tags:
-        - Boards
-      parameters:
-        - name: board
-          in: path
-          description: |
-            the ID of the board to retrieve the data
-          type: string
-          required: true
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
-          schema:
-            $ref: "#/definitions/Boards"
-    delete:
-      operationId: delete_board
-      summary: Delete a board
-      tags:
-        - Boards
-      parameters:
-        - name: board
-          in: path
-          description: |
-            the ID of the board
-          type: string
-          required: true
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
-  /api/boards/{board}/attachments:
-    get:
-      operationId: get_board_attachments
-      summary: Get the list of attachments of a board
-      tags:
-        - Boards
-      parameters:
-        - name: board
-          in: path
-          description: |
-            the board ID
-          type: string
-          required: true
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
-          schema:
-            type: array
-            items:
-              type: object
-              properties:
-                attachmentId:
-                  type: string
-                attachmentName:
-                  type: string
-                attachmentType:
-                  type: string
-                cardId:
-                  type: string
-                listId:
-                  type: string
-                swimlaneId:
-                  type: string
   /api/boards/{board}/cards/{card}/checklists:
     get:
       operationId: get_all_checklists
@@ -1288,40 +1096,6 @@ paths:
             200 response
           schema:
             $ref: "#/definitions/Integrations"
-  /api/boards/{board}/labels:
-    put:
-      operationId: add_board_label
-      summary: Add a label to a board
-      description: |
-        If the board doesn't have the name/color label, this function
-         adds the label to the board.
-      tags:
-        - Boards
-      consumes:
-        - multipart/form-data
-        - application/json
-      parameters:
-        - name: label
-          in: formData
-          description: the label value
-          type: string
-          required: true
-        - name: board
-          in: path
-          description: |
-            the board
-          type: string
-          required: true
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
-          schema:
-            type: string
   /api/boards/{board}/lists:
     get:
       operationId: get_all_lists
@@ -1803,61 +1577,6 @@ paths:
             properties:
               _id:
                 type: string
-  /api/boards/{board}/members/{member}:
-    post:
-      operationId: set_board_member_permission
-      summary: Change the permission of a member of a board
-      tags:
-        - Boards
-        - Users
-      consumes:
-        - multipart/form-data
-        - application/json
-      parameters:
-        - name: isAdmin
-          in: formData
-          description: |
-            admin capability
-          type: boolean
-          required: true
-        - name: isNoComments
-          in: formData
-          description: |
-            NoComments capability
-          type: boolean
-          required: true
-        - name: isCommentOnly
-          in: formData
-          description: |
-            CommentsOnly capability
-          type: boolean
-          required: true
-        - name: isWorker
-          in: formData
-          description: |
-            Worker capability
-          type: boolean
-          required: true
-        - name: board
-          in: path
-          description: |
-            the ID of the board that we are changing
-          type: string
-          required: true
-        - name: member
-          in: path
-          description: |
-            the ID of the user to change permissions
-          type: string
-          required: true
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
   /api/boards/{board}/members/{user}/add:
     post:
       operationId: add_board_member
@@ -2314,349 +2033,7 @@ paths:
             properties:
               _id:
                 type: string
-  /api/users/{user}/boards:
-    get:
-      operationId: get_boards_from_user
-      summary: Get all boards attached to a user
-      tags:
-        - Boards
-      parameters:
-        - name: user
-          in: path
-          description: |
-            the ID of the user to retrieve the data
-          type: string
-          required: true
-      produces:
-        - application/json
-      security:
-          - UserSecurity: []
-      responses:
-        '200':
-          description: |-
-            200 response
-          schema:
-            type: array
-            items:
-              type: object
-              properties:
-                _id:
-                  type: string
-                title:
-                  type: string
 definitions:
-  Boards:
-    type: object
-    description:  This is a Board.
-    properties:
-      title:
-        description: |
-           The title of the board
-        type: string
-      slug:
-        description: |
-           The title slugified.
-        type: string
-      archived:
-        description: |
-           Is the board archived?
-        type: boolean
-      createdAt:
-        description: |
-           Creation time of the board
-        type: string
-      modifiedAt:
-        description: |
-           Last modification time of the board
-        type: string
-        x-nullable: true
-      stars:
-        description: |
-           How many stars the board has
-        type: number
-      labels:
-        description: |
-           List of labels attached to a board
-        type: array
-        items:
-          $ref: "#/definitions/BoardsLabels"
-      members:
-        description: |
-           List of members of a board
-        type: array
-        items:
-          $ref: "#/definitions/BoardsMembers"
-      permission:
-        description: |
-           visibility of the board
-        type: string
-        enum:
-          - public
-          - private
-      color:
-        description: |
-           The color of the board.
-        type: string
-        enum:
-          - belize
-          - nephritis
-          - pomegranate
-          - pumpkin
-          - wisteria
-          - moderatepink
-          - strongcyan
-          - limegreen
-          - midnight
-          - dark
-          - relax
-          - corteza
-          - clearblue
-          - natural
-          - modern
-          - moderndark
-      description:
-        description: |
-           The description of the board
-        type: string
-        x-nullable: true
-      subtasksDefaultBoardId:
-        description: |
-           The default board ID assigned to subtasks.
-        type: string
-        x-nullable: true
-      subtasksDefaultListId:
-        description: |
-           The default List ID assigned to subtasks.
-        type: string
-        x-nullable: true
-      dateSettingsDefaultBoardId:
-        type: string
-        x-nullable: true
-      dateSettingsDefaultListId:
-        type: string
-        x-nullable: true
-      allowsSubtasks:
-        description: |
-           Does the board allows subtasks?
-        type: boolean
-      allowsAttachments:
-        description: |
-           Does the board allows attachments?
-        type: boolean
-      allowsChecklists:
-        description: |
-           Does the board allows checklists?
-        type: boolean
-      allowsComments:
-        description: |
-           Does the board allows comments?
-        type: boolean
-      allowsDescriptionTitle:
-        description: |
-           Does the board allows description title?
-        type: boolean
-      allowsDescriptionText:
-        description: |
-           Does the board allows description text?
-        type: boolean
-      allowsActivities:
-        description: |
-           Does the board allows comments?
-        type: boolean
-      allowsLabels:
-        description: |
-           Does the board allows labels?
-        type: boolean
-      allowsAssignee:
-        description: |
-           Does the board allows assignee?
-        type: boolean
-      allowsMembers:
-        description: |
-           Does the board allows members?
-        type: boolean
-      allowsRequestedBy:
-        description: |
-           Does the board allows requested by?
-        type: boolean
-      allowsAssignedBy:
-        description: |
-           Does the board allows requested by?
-        type: boolean
-      allowsReceivedDate:
-        description: |
-           Does the board allows received date?
-        type: boolean
-      allowsStartDate:
-        description: |
-           Does the board allows start date?
-        type: boolean
-      allowsEndDate:
-        description: |
-           Does the board allows end date?
-        type: boolean
-      allowsDueDate:
-        description: |
-           Does the board allows due date?
-        type: boolean
-      presentParentTask:
-        description: |
-           Controls how to present the parent task:
-
-           - `prefix-with-full-path`: add a prefix with the full path
-           - `prefix-with-parent`: add a prefisx with the parent name
-           - `subtext-with-full-path`: add a subtext with the full path
-           - `subtext-with-parent`: add a subtext with the parent name
-           - `no-parent`: does not show the parent at all
-        type: string
-        enum:
-          - prefix-with-full-path
-          - prefix-with-parent
-          - subtext-with-full-path
-          - subtext-with-parent
-          - no-parent
-        x-nullable: true
-      startAt:
-        description: |
-           Starting date of the board.
-        type: string
-        x-nullable: true
-      dueAt:
-        description: |
-           Due date of the board.
-        type: string
-        x-nullable: true
-      endAt:
-        description: |
-           End date of the board.
-        type: string
-        x-nullable: true
-      spentTime:
-        description: |
-           Time spent in the board.
-        type: number
-        x-nullable: true
-      isOvertime:
-        description: |
-           Is the board overtimed?
-        type: boolean
-        x-nullable: true
-      type:
-        description: |
-           The type of board
-        type: string
-      sort:
-        description: |
-           Sort value
-        type: number
-    required:
-      - title
-      - slug
-      - archived
-      - createdAt
-      - stars
-      - labels
-      - members
-      - permission
-      - color
-      - allowsSubtasks
-      - allowsAttachments
-      - allowsChecklists
-      - allowsComments
-      - allowsDescriptionTitle
-      - allowsDescriptionText
-      - allowsActivities
-      - allowsLabels
-      - allowsAssignee
-      - allowsMembers
-      - allowsRequestedBy
-      - allowsAssignedBy
-      - allowsReceivedDate
-      - allowsStartDate
-      - allowsEndDate
-      - allowsDueDate
-      - type
-      - sort
-  BoardsLabels:
-    type: object
-    properties:
-      _id:
-        description: |
-           Unique id of a label
-        type: string
-      name:
-        description: |
-           Name of a label
-        type: string
-      color:
-        description: |
-           color of a label.
-
-           Can be amongst `green`, `yellow`, `orange`, `red`, `purple`,
-           `blue`, `sky`, `lime`, `pink`, `black`,
-           `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`,
-           `slateblue`, `magenta`, `gold`, `navy`, `gray`,
-           `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`
-        type: string
-        enum:
-          - green
-          - yellow
-          - orange
-          - red
-          - purple
-          - blue
-          - sky
-          - lime
-          - pink
-          - black
-          - silver
-          - peachpuff
-          - crimson
-          - plum
-          - darkgreen
-          - slateblue
-          - magenta
-          - gold
-          - navy
-          - gray
-          - saddlebrown
-          - paleturquoise
-          - mistyrose
-          - indigo
-    required:
-      - _id
-      - color
-  BoardsMembers:
-    type: object
-    properties:
-      userId:
-        description: |
-           The uniq ID of the member
-        type: string
-      isAdmin:
-        description: |
-           Is the member an admin of the board?
-        type: boolean
-      isActive:
-        description: |
-           Is the member active?
-        type: boolean
-      isNoComments:
-        description: |
-           Is the member not allowed to make comments
-        type: boolean
-      isCommentOnly:
-        description: |
-           Is the member only allowed to comment on the board
-        type: boolean
-      isWorker:
-        description: |
-           Is the member only allowed to move card, assign himself to card and comment
-        type: boolean
-    required:
-      - userId
-      - isAdmin
-      - isActive
   CardComments:
     type: object
     description:  A comment on a card

+ 2 - 2
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 = 483,
+    appVersion = 484,
     # Increment this for every release.
 
-    appMarketingVersion = (defaultText = "4.83.0~2021-01-20"),
+    appMarketingVersion = (defaultText = "4.84.0~2021-01-22"),
     # Human-readable presentation of the app version.
 
     minUpgradableAppVersion = 0,

+ 16 - 0
server/publications/boards.js

@@ -209,3 +209,19 @@ Meteor.publishRelations('board', function(boardId, isArchived) {
 
   return this.ready();
 });
+
+Meteor.methods({
+  copyBoard(boardId, properties) {
+    check(boardId, String);
+    check(properties, Object);
+
+    const board = Boards.findOne(boardId);
+    if (board) {
+      for (const key in properties) {
+        board[key] = properties[key];
+      }
+      return board.copy();
+    }
+    return null;
+  },
+});

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