diff options
51 files changed, 587 insertions, 3 deletions
@@ -39,7 +39,7 @@ host = https://www.transifex.com # tap:i18n requires us to use `-` separator in the language identifiers whereas # Transifex uses a `_` separator, without an option to customize it on one side # or the other, so we need to do a Manual mapping. -lang_map = en_GB:en-GB, es_AR:es-AR, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, zh_CN:zh-CN, zh_TW:zh-TW +lang_map = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, zh_CN:zh-CN, zh_TW:zh-TW [wekan.application] file_filter = i18n/<lang>.i18n.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 0753bd1d..a18368f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Upcoming Wekan release -This release adds following [Snap updates](https://github.com/wekan/wekan/pull/1495): +This release adds the following new features: + +- [Search from card titles and descriptions on this board](https://github.com/wekan/wekan/pull/1503). +- Add Bulgarian language. + +and adds the following [Snap updates](https://github.com/wekan/wekan/pull/1495): - Cleanup of snap helper scripts - Cleanup and snapctl settings handling @@ -17,7 +22,7 @@ and fixes the following bugs: - [Fix: card-shadow no longer covered the page if you scroll down](https://github.com/wekan/wekan/pull/1496). -Thanks to GitHub users kubiko and stefano-pogliani for their contributions. +Thanks to GitHub users GhassenRjab, kubiko and stefano-pogliani for their contributions. # v0.76 2018-02-21 Wekan release diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 1a65ce27..9fa9c8a4 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -87,6 +87,10 @@ template(name="boardHeaderBar") a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}") i.fa.fa-times-thin + a.board-header-btn.js-open-search-view(title="{{_ 'search'}}") + i.fa.fa-search + span {{_ 'search'}} + a.board-header-btn.js-toggle-board-view( title="{{_ 'board-view'}}") i.fa.fa-th-large diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index 67b05446..64cb0a54 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -100,6 +100,9 @@ BlazeComponent.extendComponent({ Sidebar.setView(); Filter.reset(); }, + 'click .js-open-search-view'() { + Sidebar.setView('search'); + }, 'click .js-multiselection-activate'() { const currentCard = Session.get('currentCard'); MultiSelection.activate(); diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index f4f0c118..e4a7c409 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -4,6 +4,7 @@ const defaultView = 'home'; const viewTitles = { filter: 'filter-cards', + search: 'search-cards', multiselection: 'multi-selection', archives: 'archives', }; diff --git a/client/components/sidebar/sidebarSearches.jade b/client/components/sidebar/sidebarSearches.jade new file mode 100644 index 00000000..2ad5b00f --- /dev/null +++ b/client/components/sidebar/sidebarSearches.jade @@ -0,0 +1,8 @@ +template(name="searchSidebar") + form.js-search-term-form + input(type="text" name="searchTerm" placeholder="{{_ 'search-example'}}" autofocus) + .list-body.js-perfect-scrollbar + .minicards.clearfix.js-minicards + each (results) + a.minicard-wrapper.js-minicard(href=absoluteUrl) + +minicard(this) diff --git a/client/components/sidebar/sidebarSearches.js b/client/components/sidebar/sidebarSearches.js new file mode 100644 index 00000000..111a86b8 --- /dev/null +++ b/client/components/sidebar/sidebarSearches.js @@ -0,0 +1,19 @@ +BlazeComponent.extendComponent({ + onCreated() { + this.term = new ReactiveVar(''); + }, + + results() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return currentBoard.searchCards(this.term.get()); + }, + + events() { + return [{ + 'submit .js-search-term-form'(evt) { + evt.preventDefault(); + this.term.set(evt.target.searchTerm.value); + }, + }]; + }, +}).register('searchSidebar'); diff --git a/client/components/sidebar/sidebarSearches.styl b/client/components/sidebar/sidebarSearches.styl new file mode 100644 index 00000000..6b8ad904 --- /dev/null +++ b/client/components/sidebar/sidebarSearches.styl @@ -0,0 +1,2 @@ +input + max-width: 100% diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json index 8788ec5b..738743fe 100644 --- a/i18n/ar.i18n.json +++ b/i18n/ar.i18n.json @@ -331,6 +331,8 @@ "restore": "استعادة", "save": "حفظ", "search": "بحث", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "اختيار اللون", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json new file mode 100644 index 00000000..310a1ccc --- /dev/null +++ b/i18n/bg.i18n.json @@ -0,0 +1,439 @@ +{ + "accept": "Accept", + "act-activity-notify": "[Wekan] Activity Notification", + "act-addAttachment": "attached __attachment__ to __card__", + "act-addChecklist": "added checklist __checklist__ to __card__", + "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__", + "act-addComment": "commented on __card__: __comment__", + "act-createBoard": "created __board__", + "act-createCard": "added __card__ to __list__", + "act-createList": "added __list__ to __board__", + "act-addBoardMember": "added __member__ to __board__", + "act-archivedBoard": "archived __board__", + "act-archivedCard": "archived __card__", + "act-archivedList": "archived __list__", + "act-archivedSwimlane": "archived __swimlane__", + "act-importBoard": "imported __board__", + "act-importCard": "imported __card__", + "act-importList": "imported __list__", + "act-joinMember": "added __member__ to __card__", + "act-moveCard": "moved __card__ from __oldList__ to __list__", + "act-removeBoardMember": "removed __member__ from __board__", + "act-restoredCard": "restored __card__ to __board__", + "act-unjoinMember": "removed __member__ from __card__", + "act-withBoardTitle": "[Wekan] __board__", + "act-withCardTitle": "[__board__] __card__", + "actions": "Actions", + "activities": "Activities", + "activity": "Activity", + "activity-added": "added %s to %s", + "activity-archived": "archived %s", + "activity-attached": "attached %s to %s", + "activity-created": "created %s", + "activity-excluded": "excluded %s from %s", + "activity-imported": "imported %s into %s from %s", + "activity-imported-board": "imported %s from %s", + "activity-joined": "joined %s", + "activity-moved": "moved %s from %s to %s", + "activity-on": "на %s", + "activity-removed": "removed %s from %s", + "activity-sent": "sent %s to %s", + "activity-unjoined": "unjoined %s", + "activity-checklist-added": "added checklist to %s", + "activity-checklist-item-added": "added checklist item to '%s' in %s", + "add": "Add", + "add-attachment": "Add Attachment", + "add-board": "Add Board", + "add-card": "Add Card", + "add-swimlane": "Add Swimlane", + "add-checklist": "Add Checklist", + "add-checklist-item": "Add an item to checklist", + "add-cover": "Add Cover", + "add-label": "Add Label", + "add-list": "Add List", + "add-members": "Добави членове", + "added": "Added", + "addMemberPopup-title": "Членове", + "admin": "Администратор", + "admin-desc": "Can view and edit cards, remove members, and change settings for the board.", + "admin-announcement": "Съобщение", + "admin-announcement-active": "Active System-Wide Announcement", + "admin-announcement-title": "Announcement from Administrator", + "all-boards": "All boards", + "and-n-other-card": "And __count__ other card", + "and-n-other-card_plural": "And __count__ other cards", + "apply": "Apply", + "app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.", + "archive": "Архив", + "archive-all": "Архивирай всички", + "archive-board": "Архивирай дъската", + "archive-card": "Архивирай картата", + "archive-list": "Архивирай списъка", + "archive-swimlane": "Архивирай коридора", + "archive-selection": "Archive selection", + "archiveBoardPopup-title": "Archive Board?", + "archived-items": "Archived Items", + "archived-boards": "Archived Boards", + "restore-board": "Restore Board", + "no-archived-boards": "No Archived Boards.", + "archives": "Archives", + "assign-member": "Assign member", + "attached": "attached", + "attachment": "Attachment", + "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.", + "attachmentDeletePopup-title": "Delete Attachment?", + "attachments": "Attachments", + "auto-watch": "Automatically watch boards when they are created", + "avatar-too-big": "The avatar is too large (70KB max)", + "back": "Back", + "board-change-color": "Change color", + "board-nb-stars": "%s stars", + "board-not-found": "Board not found", + "board-private-info": "This board will be <strong>private</strong>.", + "board-public-info": "This board will be <strong>public</strong>.", + "boardChangeColorPopup-title": "Change Board Background", + "boardChangeTitlePopup-title": "Rename Board", + "boardChangeVisibilityPopup-title": "Change Visibility", + "boardChangeWatchPopup-title": "Change Watch", + "boardMenuPopup-title": "Board Menu", + "boards": "Дъски", + "board-view": "Board View", + "board-view-swimlanes": "Коридори", + "board-view-lists": "Lists", + "bucket-example": "Like “Bucket List” for example", + "cancel": "Cancel", + "card-archived": "This card is archived.", + "card-comments-title": "This card has %s comment.", + "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.", + "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.", + "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.", + "card-due": "Due", + "card-due-on": "Due on", + "card-spent": "Spent Time", + "card-edit-attachments": "Edit attachments", + "card-edit-labels": "Edit labels", + "card-edit-members": "Edit members", + "card-labels-title": "Change the labels for the card.", + "card-members-title": "Add or remove members of the board from the card.", + "card-start": "Начало", + "card-start-on": "Starts on", + "cardAttachmentsPopup-title": "Attach From", + "cardDeletePopup-title": "Delete Card?", + "cardDetailsActionsPopup-title": "Card Actions", + "cardLabelsPopup-title": "Labels", + "cardMembersPopup-title": "Членове", + "cardMorePopup-title": "More", + "cards": "Cards", + "change": "Change", + "change-avatar": "Change Avatar", + "change-password": "Change Password", + "change-permissions": "Change permissions", + "change-settings": "Change Settings", + "changeAvatarPopup-title": "Change Avatar", + "changeLanguagePopup-title": "Change Language", + "changePasswordPopup-title": "Change Password", + "changePermissionsPopup-title": "Change Permissions", + "changeSettingsPopup-title": "Change Settings", + "checklists": "Checklists", + "click-to-star": "Click to star this board.", + "click-to-unstar": "Click to unstar this board.", + "clipboard": "Clipboard or drag & drop", + "close": "Close", + "close-board": "Close Board", + "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.", + "color-black": "black", + "color-blue": "blue", + "color-green": "green", + "color-lime": "lime", + "color-orange": "orange", + "color-pink": "pink", + "color-purple": "purple", + "color-red": "red", + "color-sky": "sky", + "color-yellow": "yellow", + "comment": "Comment", + "comment-placeholder": "Write Comment", + "comment-only": "Comment only", + "comment-only-desc": "Can comment on cards only.", + "computer": "Computer", + "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist", + "copy-card-link-to-clipboard": "Copy card link to clipboard", + "copyCardPopup-title": "Copy Card", + "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards", + "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", + "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", + "create": "Create", + "createBoardPopup-title": "Create Board", + "chooseBoardSourcePopup-title": "Import board", + "createLabelPopup-title": "Create Label", + "current": "current", + "date": "Date", + "decline": "Decline", + "default-avatar": "Default avatar", + "delete": "Delete", + "deleteLabelPopup-title": "Delete Label?", + "description": "Description", + "disambiguateMultiLabelPopup-title": "Disambiguate Label Action", + "disambiguateMultiMemberPopup-title": "Disambiguate Member Action", + "discard": "Discard", + "done": "Done", + "download": "Download", + "edit": "Edit", + "edit-avatar": "Change Avatar", + "edit-profile": "Edit Profile", + "edit-wip-limit": "Edit WIP Limit", + "soft-wip-limit": "Soft WIP Limit", + "editCardStartDatePopup-title": "Change start date", + "editCardDueDatePopup-title": "Change due date", + "editCardSpentTimePopup-title": "Change spent time", + "editLabelPopup-title": "Change Label", + "editNotificationPopup-title": "Edit Notification", + "editProfilePopup-title": "Edit Profile", + "email": "Email", + "email-enrollAccount-subject": "An account created for you on __siteName__", + "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.", + "email-fail": "Sending email failed", + "email-fail-text": "Error trying to send email", + "email-invalid": "Invalid email", + "email-invite": "Invite via Email", + "email-invite-subject": "__inviter__ sent you an invitation", + "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.", + "email-resetPassword-subject": "Reset your password on __siteName__", + "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.", + "email-sent": "Email sent", + "email-verifyEmail-subject": "Verify your email address on __siteName__", + "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.", + "enable-wip-limit": "Enable WIP Limit", + "error-board-doesNotExist": "This board does not exist", + "error-board-notAdmin": "You need to be admin of this board to do that", + "error-board-notAMember": "You need to be a member of this board to do that", + "error-json-malformed": "Your text is not valid JSON", + "error-json-schema": "Your JSON data does not include the proper information in the correct format", + "error-list-doesNotExist": "This list does not exist", + "error-user-doesNotExist": "This user does not exist", + "error-user-notAllowSelf": "You can not invite yourself", + "error-user-notCreated": "This user is not created", + "error-username-taken": "This username is already taken", + "error-email-taken": "Email has already been taken", + "export-board": "Export board", + "filter": "Filter", + "filter-cards": "Filter Cards", + "filter-clear": "Clear filter", + "filter-no-label": "No label", + "filter-no-member": "No member", + "filter-on": "Filter is on", + "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", + "filter-to-selection": "Filter to selection", + "fullname": "Full Name", + "header-logo-title": "Go back to your boards page.", + "hide-system-messages": "Hide system messages", + "headerBarCreateBoardPopup-title": "Create Board", + "home": "Home", + "import": "Import", + "import-board": "import board", + "import-board-c": "Import board", + "import-board-title-trello": "Import board from Trello", + "import-board-title-wekan": "Import board from Wekan", + "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.", + "from-trello": "From Trello", + "from-wekan": "From Wekan", + "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.", + "import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", + "import-json-placeholder": "Paste your valid JSON data here", + "import-map-members": "Map members", + "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users", + "import-show-user-mapping": "Review members mapping", + "import-user-select": "Pick the Wekan user you want to use as this member", + "importMapMembersAddPopup-title": "Select Wekan member", + "info": "Version", + "initials": "Initials", + "invalid-date": "Invalid date", + "invalid-time": "Invalid time", + "invalid-user": "Invalid user", + "joined": "joined", + "just-invited": "You are just invited to this board", + "keyboard-shortcuts": "Keyboard shortcuts", + "label-create": "Create Label", + "label-default": "%s label (default)", + "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.", + "labels": "Labels", + "language": "Language", + "last-admin-desc": "You can’t change roles because there must be at least one admin.", + "leave-board": "Leave Board", + "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.", + "leaveBoardPopup-title": "Leave Board ?", + "link-card": "Link to this card", + "list-archive-cards": "Archive all cards in this list", + "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.", + "list-move-cards": "Move all cards in this list", + "list-select-cards": "Select all cards in this list", + "listActionPopup-title": "List Actions", + "swimlaneActionPopup-title": "Swimlane Actions", + "listImportCardPopup-title": "Import a Trello card", + "listMorePopup-title": "More", + "link-list": "Link to this list", + "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.", + "list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.", + "lists": "Lists", + "swimlanes": "Коридори", + "log-out": "Log Out", + "log-in": "Log In", + "loginPopup-title": "Log In", + "memberMenuPopup-title": "Member Settings", + "members": "Членове", + "menu": "Menu", + "move-selection": "Move selection", + "moveCardPopup-title": "Move Card", + "moveCardToBottom-title": "Move to Bottom", + "moveCardToTop-title": "Move to Top", + "moveSelectionPopup-title": "Move selection", + "multi-selection": "Multi-Selection", + "multi-selection-on": "Multi-Selection is on", + "muted": "Muted", + "muted-info": "You will never be notified of any changes in this board", + "my-boards": "My Boards", + "name": "Name", + "no-archived-cards": "No archived cards.", + "no-archived-lists": "No archived lists.", + "no-archived-swimlanes": "No archived swimlanes.", + "no-results": "No results", + "normal": "Normal", + "normal-desc": "Can view and edit cards. Can't change settings.", + "not-accepted-yet": "Invitation not accepted yet", + "notify-participate": "Receive updates to any cards you participate as creater or member", + "notify-watch": "Receive updates to any boards, lists, or cards you’re watching", + "optional": "optional", + "or": "or", + "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.", + "page-not-found": "Page not found.", + "password": "Password", + "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)", + "participating": "Participating", + "preview": "Preview", + "previewAttachedImagePopup-title": "Preview", + "previewClipboardImagePopup-title": "Preview", + "private": "Private", + "private-desc": "This board is private. Only people added to the board can view and edit it.", + "profile": "Profile", + "public": "Public", + "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.", + "quick-access-description": "Star a board to add a shortcut in this bar.", + "remove-cover": "Remove Cover", + "remove-from-board": "Remove from Board", + "remove-label": "Remove Label", + "listDeletePopup-title": "Delete List ?", + "remove-member": "Remove Member", + "remove-member-from-card": "Remove from Card", + "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.", + "removeMemberPopup-title": "Remove Member?", + "rename": "Rename", + "rename-board": "Rename Board", + "restore": "Restore", + "save": "Save", + "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", + "select-color": "Select Color", + "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", + "setWipLimitPopup-title": "Set WIP Limit", + "shortcut-assign-self": "Assign yourself to current card", + "shortcut-autocomplete-emoji": "Autocomplete emoji", + "shortcut-autocomplete-members": "Autocomplete members", + "shortcut-clear-filters": "Clear all filters", + "shortcut-close-dialog": "Close Dialog", + "shortcut-filter-my-cards": "Filter my cards", + "shortcut-show-shortcuts": "Bring up this shortcuts list", + "shortcut-toggle-filterbar": "Toggle Filter Sidebar", + "shortcut-toggle-sidebar": "Toggle Board Sidebar", + "show-cards-minimum-count": "Show cards count if list contains more than", + "sidebar-open": "Open Sidebar", + "sidebar-close": "Close Sidebar", + "signupPopup-title": "Create an Account", + "star-board-title": "Click to star this board. It will show up at top of your boards list.", + "starred-boards": "Starred Boards", + "starred-boards-description": "Starred boards show up at the top of your boards list.", + "subscribe": "Subscribe", + "team": "Team", + "this-board": "this board", + "this-card": "this card", + "spent-time-hours": "Spent time (hours)", + "overtime-hours": "Overtime (hours)", + "overtime": "Overtime", + "has-overtime-cards": "Has overtime cards", + "has-spenttime-cards": "Has spent time cards", + "time": "Time", + "title": "Title", + "tracking": "Tracking", + "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", + "unassign-member": "Unassign member", + "unsaved-description": "You have an unsaved description.", + "unwatch": "Unwatch", + "upload": "Upload", + "upload-avatar": "Upload an avatar", + "uploaded-avatar": "Uploaded an avatar", + "username": "Username", + "view-it": "View it", + "warn-list-archived": "warning: this card is in an archived list", + "watch": "Watch", + "watching": "Watching", + "watching-info": "You will be notified of any change in this board", + "welcome-board": "Welcome Board", + "welcome-swimlane": "Milestone 1", + "welcome-list1": "Basics", + "welcome-list2": "Advanced", + "what-to-do": "What do you want to do?", + "wipLimitErrorPopup-title": "Invalid WIP Limit", + "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", + "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", + "admin-panel": "Admin Panel", + "settings": "Settings", + "people": "People", + "registration": "Registration", + "disable-self-registration": "Disable Self-Registration", + "invite": "Invite", + "invite-people": "Invite People", + "to-boards": "To board(s)", + "email-addresses": "Email Addresses", + "smtp-host-description": "The address of the SMTP server that handles your emails.", + "smtp-port-description": "The port your SMTP server uses for outgoing emails.", + "smtp-tls-description": "Enable TLS support for SMTP server", + "smtp-host": "SMTP Host", + "smtp-port": "SMTP Port", + "smtp-username": "Username", + "smtp-password": "Password", + "smtp-tls": "TLS support", + "send-from": "From", + "send-smtp-test": "Send a test email to yourself", + "invitation-code": "Invitation Code", + "email-invite-register-subject": "__inviter__ sent you an invitation", + "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", + "email-smtp-test-subject": "SMTP Test Email From Wekan", + "email-smtp-test-text": "You have successfully sent an email", + "error-invitation-code-not-exist": "Invitation code doesn't exist", + "error-notAuthorized": "You are not authorized to view this page.", + "outgoing-webhooks": "Outgoing Webhooks", + "outgoingWebhooksPopup-title": "Outgoing Webhooks", + "new-outgoing-webhook": "New Outgoing Webhook", + "no-name": "(Unknown)", + "Wekan_version": "Wekan version", + "Node_version": "Node version", + "OS_Arch": "OS Arch", + "OS_Cpus": "OS CPU Count", + "OS_Freemem": "OS Free Memory", + "OS_Loadavg": "OS Load Average", + "OS_Platform": "OS Platform", + "OS_Release": "OS Release", + "OS_Totalmem": "OS Total Memory", + "OS_Type": "OS Type", + "OS_Uptime": "OS Uptime", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "yes": "Yes", + "no": "No", + "accounts": "Accounts", + "accounts-allowEmailChange": "Allow Email Change", + "createdAt": "Created at", + "verified": "Verified", + "active": "Active" +}
\ No newline at end of file diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json index 77276135..824f2a5b 100644 --- a/i18n/br.i18n.json +++ b/i18n/br.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json index a4f09da8..f14d0915 100644 --- a/i18n/ca.i18n.json +++ b/i18n/ca.i18n.json @@ -331,6 +331,8 @@ "restore": "Restaura", "save": "Desa", "search": "Cerca", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Selecciona color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json index 1d51b8bf..26df3797 100644 --- a/i18n/cs.i18n.json +++ b/i18n/cs.i18n.json @@ -331,6 +331,8 @@ "restore": "Obnovit", "save": "Uložit", "search": "Hledat", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index f70a5515..7853b07c 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -331,6 +331,8 @@ "restore": "Wiederherstellen", "save": "Speichern", "search": "Suchen", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Farbe auswählen", "set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste", "setWipLimitPopup-title": "WIP-Limit setzen", diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json index 691df748..85e0df22 100644 --- a/i18n/el.i18n.json +++ b/i18n/el.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Αποθήκευση", "search": "Αναζήτηση", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Επιλέξτε Χρώμα", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json index e0a52e19..5e64ae5e 100644 --- a/i18n/en-GB.i18n.json +++ b/i18n/en-GB.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 67b6fea7..de07b943 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json index 0fb40e82..f180ec4c 100644 --- a/i18n/eo.i18n.json +++ b/i18n/eo.i18n.json @@ -331,6 +331,8 @@ "restore": "Forigi", "save": "Savi", "search": "Serĉi", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json index 2cd53da0..d131c253 100644 --- a/i18n/es-AR.i18n.json +++ b/i18n/es-AR.i18n.json @@ -331,6 +331,8 @@ "restore": "Restaurar", "save": "Grabar", "search": "Buscar", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Seleccionar Color", "set-wip-limit-value": "Fijar un límite para el número máximo de tareas en esta lista", "setWipLimitPopup-title": "Establecer Límite TEP", diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json index bc9e4a13..68b2f62a 100644 --- a/i18n/es.i18n.json +++ b/i18n/es.i18n.json @@ -331,6 +331,8 @@ "restore": "Restaurar", "save": "Guardar", "search": "Buscar", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Selecciona un color", "set-wip-limit-value": "Fija un límite para el número máximo de tareas en esta lista.", "setWipLimitPopup-title": "Fijar el límite del TEP", diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json index 809a7c70..c147c51c 100644 --- a/i18n/eu.i18n.json +++ b/i18n/eu.i18n.json @@ -331,6 +331,8 @@ "restore": "Berrezarri", "save": "Gorde", "search": "Bilatu", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Aukeratu kolorea", "set-wip-limit-value": "Zerrenda honetako atazen muga maximoa ezarri", "setWipLimitPopup-title": "WIP muga ezarri", diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json index f08db786..a7e98d64 100644 --- a/i18n/fa.i18n.json +++ b/i18n/fa.i18n.json @@ -331,6 +331,8 @@ "restore": "بازیابی", "save": "ذخیره", "search": "جستجو", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json index 65dd1e20..fafe2dd5 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -331,6 +331,8 @@ "restore": "Palauta", "save": "Tallenna", "search": "Etsi", + "search-cards": "Etsi korttien otsikoista ja kuvauksista tällä taululla", + "search-example": "Teksti jota etsitään?", "select-color": "Valitse väri", "set-wip-limit-value": "Aseta tämän listan tehtävien enimmäismäärä", "setWipLimitPopup-title": "Aseta WIP-raja", diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json index 9987fafc..64d255a6 100644 --- a/i18n/fr.i18n.json +++ b/i18n/fr.i18n.json @@ -331,6 +331,8 @@ "restore": "Restaurer", "save": "Enregistrer", "search": "Chercher", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Sélectionner une couleur", "set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste", "setWipLimitPopup-title": "Définir la limite WIP", diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json index 7a17963d..ac5d9c0a 100644 --- a/i18n/gl.i18n.json +++ b/i18n/gl.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json index 7916d18d..adbd5f43 100644 --- a/i18n/he.i18n.json +++ b/i18n/he.i18n.json @@ -331,6 +331,8 @@ "restore": "שחזור", "save": "שמירה", "search": "חיפוש", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "בחירת צבע", "set-wip-limit-value": "הגדרת מגבלה למספר המרבי של משימות ברשימה זו", "setWipLimitPopup-title": "הגדרת מגבלת „בעבודה”", diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json index 2fe5424e..4428fe58 100644 --- a/i18n/hu.i18n.json +++ b/i18n/hu.i18n.json @@ -331,6 +331,8 @@ "restore": "Visszaállítás", "save": "Mentés", "search": "Keresés", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Szín kiválasztása", "set-wip-limit-value": "Korlát beállítása a listán lévő feladatok legnagyobb számához", "setWipLimitPopup-title": "WIP korlát beállítása", diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json index 883587e4..1f5aa45b 100644 --- a/i18n/id.i18n.json +++ b/i18n/id.i18n.json @@ -331,6 +331,8 @@ "restore": "Pulihkan", "save": "Simpan", "search": "Cari", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json index 45f58191..326528f0 100644 --- a/i18n/ig.i18n.json +++ b/i18n/ig.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json index de5676ff..21f84184 100644 --- a/i18n/it.i18n.json +++ b/i18n/it.i18n.json @@ -331,6 +331,8 @@ "restore": "Ripristina", "save": "Salva", "search": "Cerca", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Seleziona Colore", "set-wip-limit-value": "Seleziona un limite per il massimo numero di attività in questa lista", "setWipLimitPopup-title": "Imposta limite di work in progress", diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json index 70d741fe..d0c606f0 100644 --- a/i18n/ja.i18n.json +++ b/i18n/ja.i18n.json @@ -331,6 +331,8 @@ "restore": "復元", "save": "保存", "search": "検索", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "色を選択", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json index 29998a61..1358954c 100644 --- a/i18n/ko.i18n.json +++ b/i18n/ko.i18n.json @@ -331,6 +331,8 @@ "restore": "복구", "save": "저장", "search": "검색", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "색 선택", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json index 5ce98ead..896ae201 100644 --- a/i18n/lv.i18n.json +++ b/i18n/lv.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json index 699e9f3a..0bb091db 100644 --- a/i18n/mn.i18n.json +++ b/i18n/mn.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json index ea4707a0..d3fd2676 100644 --- a/i18n/nb.i18n.json +++ b/i18n/nb.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json index 93b9db79..7177e032 100644 --- a/i18n/nl.i18n.json +++ b/i18n/nl.i18n.json @@ -331,6 +331,8 @@ "restore": "Herstel", "save": "Opslaan", "search": "Zoek", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Selecteer kleur", "set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst", "setWipLimitPopup-title": "Zet een WIP limiet", diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json index 048ba789..26404fdd 100644 --- a/i18n/pl.i18n.json +++ b/i18n/pl.i18n.json @@ -331,6 +331,8 @@ "restore": "Przywróć", "save": "Zapisz", "search": "Wyszukaj", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Wybierz kolor", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json index ce2b473a..03e22f68 100644 --- a/i18n/pt-BR.i18n.json +++ b/i18n/pt-BR.i18n.json @@ -331,6 +331,8 @@ "restore": "Restaurar", "save": "Salvar", "search": "Buscar", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Selecionar Cor", "set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista", "setWipLimitPopup-title": "Definir Limite WIP", diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index 034bfd77..b81455bb 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json index db768033..75fc9e95 100644 --- a/i18n/ro.i18n.json +++ b/i18n/ro.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Salvează", "search": "Caută", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json index 143762ad..68be9d9a 100644 --- a/i18n/ru.i18n.json +++ b/i18n/ru.i18n.json @@ -331,6 +331,8 @@ "restore": "Восстановить", "save": "Сохранить", "search": "Поиск", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Выбрать цвет", "set-wip-limit-value": "Устанавливает ограничение на максимальное количество задач в этом списке", "setWipLimitPopup-title": "Задать лимит на кол-во задач", diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json index b03fb3f9..67effbdc 100644 --- a/i18n/sr.i18n.json +++ b/i18n/sr.i18n.json @@ -331,6 +331,8 @@ "restore": "Oporavi", "save": "Snimi", "search": "Pretraga", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json index 15e5aba4..cb864379 100644 --- a/i18n/sv.i18n.json +++ b/i18n/sv.i18n.json @@ -331,6 +331,8 @@ "restore": "Återställ", "save": "Spara", "search": "Sök", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Välj färg", "set-wip-limit-value": "Ange en gräns för det maximala antalet uppgifter i den här listan", "setWipLimitPopup-title": "Ställ in WIP-gräns", diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json index 21e89140..4f60c04e 100644 --- a/i18n/ta.i18n.json +++ b/i18n/ta.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json index e9833792..8543372a 100644 --- a/i18n/th.i18n.json +++ b/i18n/th.i18n.json @@ -331,6 +331,8 @@ "restore": "กู้คืน", "save": "บันทึก", "search": "ค้นหา", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json index f1a876c5..eaed4b5b 100644 --- a/i18n/tr.i18n.json +++ b/i18n/tr.i18n.json @@ -331,6 +331,8 @@ "restore": "Geri Getir", "save": "Kaydet", "search": "Arama", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Renk Seç", "set-wip-limit-value": "Bu listedeki en fazla öğe sayısı için bir sınır belirleyin", "setWipLimitPopup-title": "Devam Eden İş Sınırı Belirle", diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json index a42602f2..38bef7df 100644 --- a/i18n/uk.i18n.json +++ b/i18n/uk.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json index 9fdd7679..7a7ab781 100644 --- a/i18n/vi.i18n.json +++ b/i18n/vi.i18n.json @@ -331,6 +331,8 @@ "restore": "Restore", "save": "Save", "search": "Search", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "Select Color", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json index 60c61432..37bbeb92 100644 --- a/i18n/zh-CN.i18n.json +++ b/i18n/zh-CN.i18n.json @@ -331,6 +331,8 @@ "restore": "还原", "save": "保存", "search": "搜索", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "选择颜色", "set-wip-limit-value": "设置此列表中的最大任务数", "setWipLimitPopup-title": "设置最大任务数", diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json index 6c1e5dda..cff408ac 100644 --- a/i18n/zh-TW.i18n.json +++ b/i18n/zh-TW.i18n.json @@ -331,6 +331,8 @@ "restore": "還原", "save": "儲存", "search": "搜尋", + "search-cards": "Search from card titles and descriptions on this board", + "search-example": "Text to search for?", "select-color": "選擇顏色", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", diff --git a/models/boards.js b/models/boards.js index 84a715fb..55b0711c 100644 --- a/models/boards.js +++ b/models/boards.js @@ -264,6 +264,27 @@ Boards.helpers({ Boards.direct.update(this._id, { $push: { labels: { _id, name, color } } }); return _id; }, + + searchCards(term) { + check(term, Match.OneOf(String, null, undefined)); + + let query = { boardId: this._id }; + const projection = { limit: 10, sort: { createdAt: -1 } }; + + if (term) { + const regex = new RegExp(term, 'i'); + + query = { + boardId: this._id, + $or: [ + { title: regex }, + { description: regex }, + ], + }; + } + + return Cards.find(query, projection); + }, }); Boards.mutations({ |