Use dispatchEvent instead of jQuery triggerHandler for focus/blur events

triggerHandler will not bubble up the DOM, which is necessary for some
listeners such as Charinsert.

This patch applies the fix to both CodeMirror 5 and CodeMirror 6.

Bug: T361465
Change-Id: I4c01b031de0b19d72b6f2c31566a7f9cc0b02ad8
This commit is contained in:
MusikAnimal 2024-04-10 11:54:37 -04:00
parent 7d3482f89e
commit f9ecb5b2de
2 changed files with 8 additions and 4 deletions

View file

@ -104,8 +104,12 @@ class CodeMirror {
this.dirExtension,
EditorState.readOnly.of( this.readOnly ),
EditorView.domEventHandlers( {
blur: () => this.$textarea.triggerHandler( 'blur' ),
focus: () => this.$textarea.triggerHandler( 'focus' )
blur: () => {
this.$textarea[ 0 ].dispatchEvent( new Event( 'blur' ) );
},
focus: () => {
this.$textarea[ 0 ].dispatchEvent( new Event( 'focus' ) );
}
} ),
EditorView.lineWrapping,
keymap.of( [

View file

@ -191,10 +191,10 @@ function init() {
const $codeMirror = $( codeMirror.getWrapperElement() );
codeMirror.on( 'focus', () => {
$textbox1.triggerHandler( 'focus' );
$textbox1[ 0 ].dispatchEvent( new Event( 'focus' ) );
} );
codeMirror.on( 'blur', () => {
$textbox1.triggerHandler( 'blur' );
$textbox1[ 0 ].dispatchEvent( new Event( 'blur' ) );
} );
mw.hook( 'editRecovery.loadEnd' ).add( ( data ) => {
codeMirror.on( 'change', data.fieldChangeHandler );