Commit 3cde64c5 by Tim Krones

Remove ability to invoke "Keyboard Help" by pressing "?".

This fixes two issues related to keyboard help for DnDv2:

- If multiple DnDv2 blocks are on the same page, pressing global
  shortcut ("?") brings up multiple dialogs
- It's almost impossible to enter "?" into any of the text boxes in the
  block settings in Studio, since it brings up the keyboard help dialog
  instead

Not using "?" as a global shortcut for "Keyboard Help" also means that
DnDv2 will not conflict with other XBlocks and/or runtimes that might be
using the same shortcut to, e.g., bring up help dialogs.
parent 47d67d93
......@@ -18,7 +18,6 @@ function DragAndDropBlock(runtime, element, configuration) {
var SPC = 32;
var TAB = 9;
var M = 77;
var QUESTION_MARK = 63;
var placementMode = false;
var $selectedItem;
......@@ -47,12 +46,6 @@ function DragAndDropBlock(runtime, element, configuration) {
initDroppable();
$(document).on('keydown mousedown touchstart', closePopup);
if (isFirstExercise()) { // Set up handler for "?" key only once,
// even if unit contains multiple DnDv2 exercises
$(document).on('keypress', function(evt) {
runOnKey(evt, QUESTION_MARK, showKeyboardHelp);
});
}
$element.on('click', '.keyboard-help-button', showKeyboardHelp);
$element.on('keydown', '.keyboard-help-button', function(evt) {
runOnKey(evt, RET, showKeyboardHelp);
......@@ -70,26 +63,6 @@ function DragAndDropBlock(runtime, element, configuration) {
});
};
var isFirstExercise = function() {
var klass = $element.attr('class');
var $block;
var siblingSelector;
if (klass.startsWith('xblock ')) { // We are in the LMS
$block = $element.parent();
siblingSelector = '.vert[data-id*="drag-and-drop-v2"]';
} else if (klass.startsWith('xblock-v1 ')) { // We are in the workbench
$block = $element;
siblingSelector = '.xblock-v1[data-block-type="drag-and-drop-v2"]';
}
var $previousBlocks = $block.prevAll(siblingSelector);
if ($previousBlocks.length === 0) {
return true;
}
return false;
};
var runOnKey = function(evt, key, handler) {
if (evt.which === key) {
handler(evt);
......
......@@ -79,9 +79,6 @@ class BaseIntegrationTest(SeleniumBaseTest):
def _get_keyboard_help_dialog(self):
return self._page.find_element_by_css_selector(".keyboard-help .keyboard-help-dialog")
def _get_keyboard_help_dialogs(self):
return self.browser.find_elements_by_css_selector(".keyboard-help .keyboard-help-dialog")
def _get_reset_button(self):
return self._page.find_element_by_css_selector('.reset-button')
......
......@@ -80,12 +80,12 @@ class InteractionTestBase(object):
element = self._get_item_by_value(item_value)
return element.find_element_by_class_name('numerical-input')
def _get_dialog_components(self, dialog):
def _get_dialog_components(self, dialog): # pylint: disable=no-self-use
dialog_modal_overlay = dialog.find_element_by_css_selector('.modal-window-overlay')
dialog_modal = dialog.find_element_by_css_selector('.modal-window')
return dialog_modal_overlay, dialog_modal
def _get_dialog_dismiss_button(self, dialog_modal):
def _get_dialog_dismiss_button(self, dialog_modal): # pylint: disable=no-self-use
return dialog_modal.find_element_by_css_selector('.modal-dismiss-button')
def _get_zone_position(self, zone_id):
......@@ -273,7 +273,7 @@ class InteractionTestBase(object):
self.assertDictEqual(locations_after_reset[item_key], initial_locations[item_key])
self.assert_reverted_item(item_key)
def interact_with_keyboard_help(self, scroll_down=250, use_keyboard=False, multiple_blocks=False):
def interact_with_keyboard_help(self, scroll_down=250, use_keyboard=False):
keyboard_help_button = self._get_keyboard_help_button()
keyboard_help_dialog = self._get_keyboard_help_dialog()
dialog_modal_overlay, dialog_modal = self._get_dialog_components(keyboard_help_dialog)
......@@ -298,18 +298,6 @@ class InteractionTestBase(object):
self.assertFalse(dialog_modal_overlay.is_displayed())
self.assertFalse(dialog_modal.is_displayed())
if use_keyboard and not multiple_blocks: # Try again with "?" key
# (behavior for multiple blocks has dedicated test below)
self._page.send_keys("?")
self.assertTrue(dialog_modal_overlay.is_displayed())
self.assertTrue(dialog_modal.is_displayed())
self._page.send_keys(Keys.ESCAPE)
self.assertFalse(dialog_modal_overlay.is_displayed())
self.assertFalse(dialog_modal.is_displayed())
class BasicInteractionTest(InteractionTestBase):
"""
......@@ -505,27 +493,4 @@ class MultipleBlocksDataInteraction(InteractionTestBase, BaseIntegrationTest):
self._switch_to_block(1)
# Test mouse and keyboard interaction
self.interact_with_keyboard_help(scroll_down=900)
self.interact_with_keyboard_help(scroll_down=0, use_keyboard=True, multiple_blocks=True)
# When pressing "?" on a page with multiple DnDv2 exercises,
# only a single "Keyboard Help" dialog should be shown:
first_keyboard_help_dialog, second_keyboard_help_dialog = self._get_keyboard_help_dialogs()
first_dialog_modal_overlay, first_dialog_modal = self._get_dialog_components(first_keyboard_help_dialog)
first_dialog_dismiss_button = self._get_dialog_dismiss_button(first_dialog_modal)
second_dialog_modal_overlay, second_dialog_modal = self._get_dialog_components(second_keyboard_help_dialog)
self._switch_to_block(0)
self._page.send_keys("?")
self.assertTrue(first_dialog_modal_overlay.is_displayed())
self.assertTrue(first_dialog_modal.is_displayed())
self.assertFalse(second_dialog_modal_overlay.is_displayed())
self.assertFalse(second_dialog_modal.is_displayed())
first_dialog_dismiss_button.click()
self._switch_to_block(1)
self._page.send_keys("?")
self.assertTrue(first_dialog_modal_overlay.is_displayed())
self.assertTrue(first_dialog_modal.is_displayed())
self.assertFalse(second_dialog_modal_overlay.is_displayed())
self.assertFalse(second_dialog_modal.is_displayed())
first_dialog_dismiss_button.click()
self.interact_with_keyboard_help(scroll_down=0, use_keyboard=True)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment