@@ -36,8 +36,6 @@ export interface SequenceItemInfo {
3636 sizing ?: string | string [ ] ;
3737}
3838
39- const NAVIGATION_KEYS = [ 'Backspace' , 'Enter' , ' ' , 'ArrowLeft' , 'ArrowUp' , 'ArrowRight' , 'ArrowDown' ] ;
40-
4139const KEY_REPEAT_DELAY = 500 ;
4240const KEY_REPEAT_RATE = 100 ;
4341const WARNING_DURATION = 5000 ;
@@ -83,7 +81,7 @@ const DEFAULT_BORDER_COLOR = '#D8D8D8';
8381 styleUrls : [ './ks-sequence-editor.component.scss' ]
8482} )
8583export class KsSequenceEditorComponent implements AfterViewInit , OnInit , OnDestroy {
86- private static lastKeydown = 0 ;
84+ private static lastKeyTimestamp = 0 ;
8785 private static lastKeyKey = '' ;
8886 private static useHiddenInput = isAndroid ( ) ;
8987 private static addFocusOutline = isEdge ( ) || isIE ( ) || isIOS ( ) ;
@@ -216,7 +214,7 @@ export class KsSequenceEditorComponent implements AfterViewInit, OnInit, OnDestr
216214
217215 this . hiddenInput . addEventListener ( 'keydown' , event => this . onKeyDown ( event ) ) ;
218216 this . hiddenInput . addEventListener ( 'keypress' , event => this . onKeyPress ( event ) ) ;
219- this . hiddenInput . addEventListener ( 'keyup' , event => this . onKeyUp ( event ) ) ;
217+ this . hiddenInput . addEventListener ( 'keyup' , ( ) => this . onKeyUp ( ) ) ;
220218 this . hiddenInput . addEventListener ( 'input' , ( ) => this . onInput ( ) ) ;
221219 this . hiddenInput . addEventListener ( 'focus' , ( ) => this . onHiddenInputFocus ( true ) ) ;
222220 this . hiddenInput . addEventListener ( 'blur' , ( ) => this . onHiddenInputFocus ( false ) ) ;
@@ -609,39 +607,40 @@ export class KsSequenceEditorComponent implements AfterViewInit, OnInit, OnDestr
609607 // for legitimately separate keystrokes, so repeated timestamps have to be expected and allowed there.
610608 //
611609 if ( KsSequenceEditorComponent . checkForRepeatedKeyTimestamps &&
612- ( abs ( event . timeStamp - KsSequenceEditorComponent . lastKeydown ) <= FALSE_REPEAT_THRESHOLD &&
610+ ( abs ( event . timeStamp - KsSequenceEditorComponent . lastKeyTimestamp ) <= FALSE_REPEAT_THRESHOLD &&
613611 key === KsSequenceEditorComponent . lastKeyKey ) ) {
614612 event . preventDefault ( ) ;
615613
616614 return false ;
617615 }
618616
619- KsSequenceEditorComponent . lastKeydown = event . timeStamp ;
620- KsSequenceEditorComponent . lastKeyKey = key ;
621-
622617 // In at least one version of Android many key events carry no useful information about the key that was
623618 // pressed. They instead match the following test and we have to grab a character out of the hidden
624619 // input field to find out what was actually typed in.
625620 if ( this . hiddenInput && key === 'Unidentified' && event . keyCode === 229 ) {
626621 this . getCharFromInputEvent = true ;
622+ KsSequenceEditorComponent . lastKeyTimestamp = event . timeStamp ;
627623
628624 return true ;
629625 }
630626
631627 if ( key === 'Tab' || event . altKey || event . ctrlKey || event . metaKey )
632628 return true ;
633629
634- this . onKey ( key ) ;
635-
636- if ( NAVIGATION_KEYS . includes ( key ) && ! this . keyTimer )
630+ // If the built-in auto-repeat is in effect, ignore keystrokes that come along until that auto-repeat ends.
631+ if ( ! this . keyTimer ) {
632+ this . onKey ( key ) ;
637633 this . keyTimer = timer ( KEY_REPEAT_DELAY , KEY_REPEAT_RATE ) . subscribe ( ( ) => this . onKey ( key ) ) ;
634+ }
638635
639636 event . preventDefault ( ) ;
637+ KsSequenceEditorComponent . lastKeyTimestamp = event . timeStamp ;
638+ KsSequenceEditorComponent . lastKeyKey = key ;
640639
641640 return false ;
642641 }
643642
644- onKeyUp ( event : KeyboardEvent ) : boolean {
643+ onKeyUp ( ) : boolean {
645644 this . stopKeyTimer ( ) ;
646645
647646 return true ;
@@ -670,9 +669,8 @@ export class KsSequenceEditorComponent implements AfterViewInit, OnInit, OnDestr
670669 }
671670
672671 protected onKey ( key : string ) : void {
673- if ( this . disabled || this . viewOnly || ! this . hasFocus || ! this . items [ this . selection ] . editable ) {
672+ if ( this . disabled || this . viewOnly || ! this . hasFocus || ! this . items [ this . selection ] . editable )
674673 return ;
675- }
676674
677675 if ( this . selection !== this . signDigit ) {
678676 if ( key === '-' )
0 commit comments