From ea697d16cb75e302914e5f18b249da7b35f22128 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Sun, 5 May 2019 21:22:13 +0200 Subject: [PATCH] add keyboard support for mass inputs --- static/js/utils/massInput.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/static/js/utils/massInput.js b/static/js/utils/massInput.js index 3c983aee8..d77a4b942 100644 --- a/static/js/utils/massInput.js +++ b/static/js/utils/massInput.js @@ -49,14 +49,13 @@ // setup submit buttons inside this massinput so browser // uses correct submit button for form submission. - // contents of the massinput will be replaced either way, - // so unarming is no problem var buttons = getMassInputSubmitButtons(); buttons.forEach(function(button) { setupSubmitButton(button); }); massInputForm.addEventListener('submit', massInputFormSubmitHandler); + massInputForm.addEventListener('keypress', keypressHandler); // mark initialized element.classList.add(MASS_INPUT_INITIALIZED_CLASS); @@ -88,12 +87,8 @@ var activeElement; // check if event occured from either a mass input add/delete button or - // from inside one of massinput's inputs (i.e. they are focused/active) - if (event.type === 'click') { - activeElement = event.target; - } else { - activeElement = element.querySelector(':focus, :active'); - } + // from inside one of massinput's inputs (i.e. a child is focused/active) + activeElement = element.querySelector(':focus, :active'); if (!activeElement) { return false; @@ -140,6 +135,16 @@ }; } + function keypressHandler(event) { + if (event.keyCode !== 13) { + return false; + } + + if (massInputFormSubmitHandler) { + return massInputFormSubmitHandler(event); + } + } + function getMassInputSubmitButtons() { return Array.from(element.querySelectorAll('button[type="submit"][name][value], .' + MASS_INPUT_SUBMIT_BUTTON_CLASS)); } @@ -208,6 +213,7 @@ function reset() { element.classList.remove(MASS_INPUT_INITIALIZED_CLASS); massInputForm.removeEventListener('submit', massInputFormSubmitHandler) + massInputForm.removeEventListener('keypress', keypressHandler); var buttons = getMassInputSubmitButtons(); buttons.forEach(function(button) {