@@ -1003,3 +1003,87 @@ describe('finance charts updates:', function() {
1003
1003
} ) ;
1004
1004
1005
1005
} ) ;
1006
+
1007
+ describe ( 'finance charts *special* handlers:' , function ( ) {
1008
+
1009
+ afterEach ( destroyGraphDiv ) ;
1010
+
1011
+ it ( '`editable: true` handlers should work' , function ( done ) {
1012
+
1013
+ var gd = createGraphDiv ( ) ;
1014
+
1015
+ function editText ( itemNumber , newText ) {
1016
+ var textNode = d3 . selectAll ( 'text.legendtext' )
1017
+ . filter ( function ( _ , i ) { return i === itemNumber ; } ) . node ( ) ;
1018
+ textNode . dispatchEvent ( new window . MouseEvent ( 'click' ) ) ;
1019
+
1020
+ var editNode = d3 . select ( '.plugin-editable.editable' ) . node ( ) ;
1021
+ editNode . dispatchEvent ( new window . FocusEvent ( 'focus' ) ) ;
1022
+
1023
+ editNode . textContent = newText ;
1024
+ editNode . dispatchEvent ( new window . FocusEvent ( 'focus' ) ) ;
1025
+ editNode . dispatchEvent ( new window . FocusEvent ( 'blur' ) ) ;
1026
+ }
1027
+
1028
+ // makeEditable in svg_text_utils clears the edit <div> in
1029
+ // a 0-second transition, so push the resolve call at the back
1030
+ // of the rendering queue to make sure the edit <div> is properly
1031
+ // cleared after each mocked text edits.
1032
+ function delayedResolve ( resolve ) {
1033
+ setTimeout ( function ( ) { return resolve ( gd ) ; } , 0 ) ;
1034
+ }
1035
+
1036
+ Plotly . plot ( gd , [
1037
+ Lib . extendDeep ( { } , mock0 , { type : 'ohlc' } ) ,
1038
+ Lib . extendDeep ( { } , mock0 , { type : 'candlestick' } )
1039
+ ] , { } , {
1040
+ editable : true
1041
+ } )
1042
+ . then ( function ( gd ) {
1043
+ return new Promise ( function ( resolve ) {
1044
+ gd . once ( 'plotly_restyle' , function ( eventData ) {
1045
+ expect ( eventData [ 0 ] [ 'increasing.name' ] ) . toEqual ( '0' ) ;
1046
+ expect ( eventData [ 1 ] ) . toEqual ( [ 0 ] ) ;
1047
+ delayedResolve ( resolve ) ;
1048
+ } ) ;
1049
+
1050
+ editText ( 0 , '0' ) ;
1051
+ } ) ;
1052
+ } )
1053
+ . then ( function ( gd ) {
1054
+ return new Promise ( function ( resolve ) {
1055
+ gd . once ( 'plotly_restyle' , function ( eventData ) {
1056
+ expect ( eventData [ 0 ] [ 'decreasing.name' ] ) . toEqual ( '1' ) ;
1057
+ expect ( eventData [ 1 ] ) . toEqual ( [ 0 ] ) ;
1058
+ delayedResolve ( resolve ) ;
1059
+ } ) ;
1060
+
1061
+ editText ( 1 , '1' ) ;
1062
+ } ) ;
1063
+ } )
1064
+ . then ( function ( gd ) {
1065
+ return new Promise ( function ( resolve ) {
1066
+ gd . once ( 'plotly_restyle' , function ( eventData ) {
1067
+ expect ( eventData [ 0 ] [ 'decreasing.name' ] ) . toEqual ( '2' ) ;
1068
+ expect ( eventData [ 1 ] ) . toEqual ( [ 1 ] ) ;
1069
+ delayedResolve ( resolve ) ;
1070
+ } ) ;
1071
+
1072
+ editText ( 3 , '2' ) ;
1073
+ } ) ;
1074
+ } )
1075
+ . then ( function ( gd ) {
1076
+ return new Promise ( function ( resolve ) {
1077
+ gd . once ( 'plotly_restyle' , function ( eventData ) {
1078
+ expect ( eventData [ 0 ] [ 'increasing.name' ] ) . toEqual ( '3' ) ;
1079
+ expect ( eventData [ 1 ] ) . toEqual ( [ 1 ] ) ;
1080
+ delayedResolve ( resolve ) ;
1081
+ } ) ;
1082
+
1083
+ editText ( 2 , '3' ) ;
1084
+ } ) ;
1085
+ } )
1086
+ . then ( done ) ;
1087
+ } ) ;
1088
+
1089
+ } ) ;
0 commit comments