@@ -19,6 +19,7 @@ var urlencode = utils.urlencode;
19
19
var uuid4 = utils . uuid4 ;
20
20
var htmlTreeAsString = utils . htmlTreeAsString ;
21
21
var parseUrl = utils . parseUrl ;
22
+ var debounce = utils . debounce ;
22
23
23
24
var dsnKeys = 'source protocol user pass host port path' . split ( ' ' ) ,
24
25
dsnPattern = / ^ (?: ( \w + ) : ) ? \/ \/ (?: ( \w + ) ( : \w + ) ? @ ) ? ( [ \w \. - ] + ) (?: : ( \d + ) ) ? ( \/ .* ) / ;
@@ -618,7 +619,6 @@ Raven.prototype = {
618
619
}
619
620
} ,
620
621
621
-
622
622
/**
623
623
* Wraps addEventListener to capture UI breadcrumbs
624
624
* @param evtName the event name (e.g. "click")
@@ -644,6 +644,17 @@ Raven.prototype = {
644
644
} ;
645
645
} ,
646
646
647
+ _keypressEventHandler : function ( ) {
648
+ var self = this ;
649
+
650
+ // TODO: if somehow user switches keypress target before
651
+ // debounce timeout is triggered, we will only capture
652
+ // a single breadcrumb from the LAST target (acceptable?)
653
+ return debounce ( function ( evt ) {
654
+ self . _breadcrumbEventHandler ( 'keypress' ) ( evt ) ;
655
+ } , 500 ) ; // 500ms after last consecutive keypress, record breadcrumb
656
+ } ,
657
+
647
658
/**
648
659
* Captures a breadcrumb of type "navigation", normalizing input URLs
649
660
* @param to the originating URL
@@ -727,8 +738,12 @@ Raven.prototype = {
727
738
728
739
// TODO: more than just click
729
740
var before ;
730
- if ( ( global === 'EventTarget' || global === 'Node' ) && evt === 'click' ) {
731
- before = self . _breadcrumbEventHandler ( evt , fn ) ;
741
+ if ( global === 'EventTarget' || global === 'Node' ) {
742
+ if ( evt === 'click' ) {
743
+ before = self . _breadcrumbEventHandler ( evt , fn ) ;
744
+ } else if ( evt === 'keypress' ) {
745
+ before = self . _keypressEventHandler ( ) ;
746
+ }
732
747
}
733
748
return orig . call ( this , evt , self . wrap ( fn , undefined , before ) , capture , secure ) ;
734
749
} ;
@@ -764,6 +779,7 @@ Raven.prototype = {
764
779
// to the document. Do this before we instrument addEventListener.
765
780
if ( this . _hasDocument ) {
766
781
document . addEventListener ( 'click' , self . _breadcrumbEventHandler ( 'click' ) ) ;
782
+ document . addEventListener ( 'keypress' , self . _keypressEventHandler ( ) ) ;
767
783
}
768
784
769
785
// event targets borrowed from bugsnag-js:
0 commit comments