diff --git a/lib/PropertiesPanel.js b/lib/PropertiesPanel.js index b365f2d42..5800be3bf 100644 --- a/lib/PropertiesPanel.js +++ b/lib/PropertiesPanel.js @@ -549,6 +549,16 @@ PropertiesPanel.prototype._bindListeners = function(container) { domDelegate.bind(container, 'input, textarea, [contenteditable]', 'input', debounce(handleChange, DEBOUNCE_DELAY)); domDelegate.bind(container, 'input, textarea, select, [contenteditable]', 'change', handleChange); + // handle key events + domDelegate.bind(container, 'select', 'keydown', function(e) { + + // DEL + if (e.keyCode === 46) { + e.stopPropagation(); + e.preventDefault(); + } + }); + domDelegate.bind(container, '[data-action]', 'click', function onClick(event) { // triggers on all inputs diff --git a/test/TestHelper.js b/test/TestHelper.js index 21a462804..c29e2e772 100644 --- a/test/TestHelper.js +++ b/test/TestHelper.js @@ -124,6 +124,20 @@ var triggerInput = function(element, value) { element.focus(); }; +var triggerKeyEvent = function(element, event, code) { + var e = document.createEvent('Events'); + + if (e.initEvent) { + e.initEvent(event, true, true); + } + + e.keyCode = code; + e.which = code; + + element.dispatchEvent(e); +}; + + /** * Select a form field with the specified index in the DOM * @@ -178,6 +192,7 @@ var selectedByIndex = function(element) { module.exports.triggerEvent = triggerEvent; module.exports.triggerValue = triggerValue; module.exports.triggerInput = triggerInput; +module.exports.triggerKeyEvent = triggerKeyEvent; module.exports.triggerFormFieldSelection = triggerFormFieldSelection; module.exports.selectedByOption = selectedByOption; module.exports.selectedByIndex = selectedByIndex; diff --git a/test/spec/PropertiesPanelSpec.js b/test/spec/PropertiesPanelSpec.js index 05f832be4..2f508757d 100644 --- a/test/spec/PropertiesPanelSpec.js +++ b/test/spec/PropertiesPanelSpec.js @@ -430,4 +430,42 @@ describe('properties-panel', function() { }); + describe('listeners', function() { + + function getSelect(container) { + return domQuery('select[name=select]', container); + } + + var select, spy; + + beforeEach(inject(function(propertiesPanel, elementRegistry, selection) { + propertiesPanel.attachTo(container); + + var task2 = elementRegistry.get('Task_2'); + selection.select(task2); + + select = getSelect(propertiesPanel._container); + + spy = sinon.spy(); + + document.addEventListener('keydown', spy); + })); + + afterEach(function() { + document.removeEventListener('keydown', spy); + }); + + + it('should stop propagation of DEL key events', function() { + + // when + TestHelper.triggerKeyEvent(select, 'keydown', 46); + + // then + expect(spy).to.not.have.been.called; + }); + + }); + + }); diff --git a/test/spec/properties/PropertiesProvider.js b/test/spec/properties/PropertiesProvider.js index 770a1e2e8..c62abd129 100644 --- a/test/spec/properties/PropertiesProvider.js +++ b/test/spec/properties/PropertiesProvider.js @@ -228,6 +228,9 @@ function createGroups(element, bpmnFactory) { a: !values.a && new Error('a must be checked') }; } + }, { + id: 'select', + html: '' } ] } diff --git a/test/spec/test.bpmn b/test/spec/test.bpmn index 7029957a5..22a1fd354 100644 --- a/test/spec/test.bpmn +++ b/test/spec/test.bpmn @@ -1,10 +1,11 @@ - + FOO FOO BAR BAR + @@ -17,6 +18,9 @@ + + +