diff --git a/client/lib/keyboard.js b/client/lib/keyboard.js index 4499a5a49..111d2e7a4 100644 --- a/client/lib/keyboard.js +++ b/client/lib/keyboard.js @@ -179,6 +179,35 @@ Mousetrap.bind(numArray, (evt, key) => { } }); +Mousetrap.bind(_.range(1, 10).map(x => `ctrl+alt+${x}`), (evt, key) => { + // Make sure the current user is defined + if (!ReactiveCache.getCurrentUser()) + return; + + // Make sure the current user is a board member + if (!ReactiveCache.getCurrentUser().isBoardMember()) + return; + + const memberIndex = parseInt(key.split("+").pop()) - 1; + const currentBoard = Utils.getCurrentBoard(); + const boardMembers = currentBoard.memberUsers(); + + if (memberIndex >= boardMembers.length) + return; + + if (MultiSelection.isActive()) { + for (const cardId of MultiSelection.getSelectedCardIds()) + ReactiveCache.getCard(cardId).toggleAssignee(boardMembers[memberIndex]._id); + } else { + const cardId = getSelectedCardId(); + + if (!cardId) + return; + + ReactiveCache.getCard(cardId).toggleAssignee(boardMembers[memberIndex]._id); + } +}); + Mousetrap.bind('m', evt => { const cardId = getSelectedCardId(); if (!cardId) { @@ -333,5 +362,9 @@ Template.keyboardShortcuts.helpers({ keys: ['shift + number keys 1-9'], action: 'remove-labels-multiselect' }, + { + keys: ['ctrl + alt + number keys 1-9'], + action: 'toggle-asignees' + }, ], }); diff --git a/imports/i18n/data/en.i18n.json b/imports/i18n/data/en.i18n.json index 2eb6c9401..6763e62d2 100644 --- a/imports/i18n/data/en.i18n.json +++ b/imports/i18n/data/en.i18n.json @@ -610,6 +610,7 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", + "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking",