FIX: Keyboard handling regression

This commit is contained in:
Robin Ward 2015-11-18 12:35:17 -05:00
parent 0ede6b5ed6
commit 84a50a1260
4 changed files with 27 additions and 7 deletions

View File

@ -159,6 +159,7 @@ export default Ember.Component.extend({
insertLinkHidden: true,
link: '',
lastSel: null,
_mouseTrap: null,
@computed('placeholder')
placeholderTranslated(placeholder) {
@ -172,10 +173,12 @@ export default Ember.Component.extend({
loadScript('defer/html-sanitizer-bundle').then(() => this.set('ready', true));
const mouseTrap = Mousetrap(this.$('.d-editor-input')[0]);
const shortcuts = this.get('toolbar.shortcuts');
Ember.keys(shortcuts).forEach(sc => {
const button = shortcuts[sc];
Mousetrap(this.$('.d-editor-input')[0]).bind(sc, () => {
mouseTrap.bind(sc, () => {
this.send(button.action, button);
return false;
});
@ -190,15 +193,16 @@ export default Ember.Component.extend({
this.appEvents.on('composer:insert-text', text => {
this._addText(this._getSelected(), text);
});
this._mouseTrap = mouseTrap;
},
@on('willDestroyElement')
_shutDown() {
this.appEvents.off('composer:insert-text');
Ember.keys(this.get('toolbar.shortcuts')).forEach(sc => {
Mousetrap(this.$('.d-editor-input')[0]).unbind(sc);
});
const mouseTrap = this._mouseTrap;
Ember.keys(this.get('toolbar.shortcuts')).forEach(sc => mouseTrap.unbind(sc));
this.$('.d-editor-preview').off('click.preview');
},

View File

@ -374,8 +374,7 @@ export default {
if ((combo === 'ctrl+f' || combo === 'command+f') && element.id === 'search-term') {
return false;
}
return oldStopCallback(e, element, combo, sequence);
return oldStopCallback.call(this, e, element, combo, sequence);
};
}
};

View File

@ -42,6 +42,24 @@ test("Tests the Composer controls", () => {
ok(exists('.d-editor-textarea-wrapper .popup-tip.good'), 'the body is now good');
});
andThen(() => {
// Testing keyboard events is tough!
const mac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);
const event = document.createEvent('Event');
event.initEvent('keydown', true, true);
event[mac ? 'metaKey' : 'ctrlKey'] = true;
event.keyCode = 66;
find('#reply-control .d-editor-input')[0].dispatchEvent(event);
});
andThen(() => {
const example = I18n.t(`composer.bold_text`);
equal(find('#reply-control .d-editor-input').val().trim(),
`this is the *content* of a post**${example}**`,
"it supports keyboard shortcuts");
});
click('#reply-control a.cancel');
andThen(() => {
ok(exists('.bootbox.modal'), 'it pops up a confirmation dialog');

View File

@ -63,7 +63,6 @@ function testCase(title, testFunc) {
}
testCase(`bold button with no selection`, function(assert, textarea) {
console.log(textarea.selectionStart);
click(`button.bold`);
andThen(() => {
const example = I18n.t(`composer.bold_text`);