diff --git a/js/forum/dist/app.js b/js/forum/dist/app.js index 7c570405b..0ee42cab7 100644 --- a/js/forum/dist/app.js +++ b/js/forum/dist/app.js @@ -31658,28 +31658,53 @@ System.register('flarum/utils/KeyboardNavigatable', [], function (_export, _cont babelHelpers.createClass(KeyboardNavigatable, [{ key: 'onUp', value: function onUp(callback) { - this.callbacks[38] = callback; + this.callbacks[38] = function (e) { + e.preventDefault(); + callback(e); + }; return this; } }, { key: 'onDown', value: function onDown(callback) { - this.callbacks[40] = callback; + this.callbacks[40] = function (e) { + e.preventDefault(); + callback(e); + }; return this; } }, { key: 'onSelect', value: function onSelect(callback) { - this.callbacks[9] = this.callbacks[13] = callback; + this.callbacks[9] = this.callbacks[13] = function (e) { + e.preventDefault(); + callback(e); + }; return this; } }, { key: 'onCancel', value: function onCancel(callback) { - this.callbacks[27] = callback; + this.callbacks[27] = function (e) { + e.stopPropagation(); + e.preventDefault(); + callback(e); + }; + + return this; + } + }, { + key: 'onRemove', + value: function onRemove(callback) { + this.callbacks[8] = function (e) { + if (e.target.selectionStart === 0 && e.target.selectionEnd === 0) { + callback(e); + e.preventDefault(); + } + }; return this; } @@ -31704,9 +31729,7 @@ System.register('flarum/utils/KeyboardNavigatable', [], function (_export, _cont var keyCallback = this.callbacks[event.which]; if (keyCallback) { - keyCallback(); - event.stopPropagation(); - event.preventDefault(); + keyCallback(event); } } }]); diff --git a/js/forum/src/utils/KeyboardNavigatable.js b/js/forum/src/utils/KeyboardNavigatable.js index f2e39c09e..dd1e1ee3d 100644 --- a/js/forum/src/utils/KeyboardNavigatable.js +++ b/js/forum/src/utils/KeyboardNavigatable.js @@ -23,7 +23,10 @@ export default class KeyboardNavigatable { * @return {KeyboardNavigatable} */ onUp(callback) { - this.callbacks[38] = callback; + this.callbacks[38] = e => { + e.preventDefault(); + callback(e); + }; return this; } @@ -38,7 +41,10 @@ export default class KeyboardNavigatable { * @return {KeyboardNavigatable} */ onDown(callback) { - this.callbacks[40] = callback; + this.callbacks[40] = e => { + e.preventDefault(); + callback(e); + }; return this; } @@ -53,7 +59,10 @@ export default class KeyboardNavigatable { * @return {KeyboardNavigatable} */ onSelect(callback) { - this.callbacks[9] = this.callbacks[13] = callback; + this.callbacks[9] = this.callbacks[13] = e => { + e.preventDefault(); + callback(e); + }; return this; } @@ -68,7 +77,31 @@ export default class KeyboardNavigatable { * @return {KeyboardNavigatable} */ onCancel(callback) { - this.callbacks[27] = callback; + this.callbacks[27] = e => { + e.stopPropagation(); + e.preventDefault(); + callback(e); + } + + return this; + } + + /** + * Provide a callback to be executed when previous input is removed. + * + * This will be triggered by the Backspace key. + * + * @public + * @param {Function} callback + * @return {KeyboardNavigatable} + */ + onRemove(callback) { + this.callbacks[8] = e => { + if (e.target.selectionStart === 0 && e.target.selectionEnd === 0) { + callback(e); + e.preventDefault(); + } + }; return this; } @@ -109,9 +142,7 @@ export default class KeyboardNavigatable { const keyCallback = this.callbacks[event.which]; if (keyCallback) { - keyCallback(); - event.stopPropagation(); - event.preventDefault(); + keyCallback(event); } } }