@@ -16,7 +16,7 @@ define([
16
16
'vp_base/js/com/component/Component' ,
17
17
'vp_base/js/com/component/SuggestInput' ,
18
18
'vp_base/js/com/component/MultiSelector'
19
- ] , function ( dataHTML , dataCss , com_String , com_util , Component , MultiSelector ) {
19
+ ] , function ( dataHTML , dataCss , com_String , com_util , Component , SuggestInput , MultiSelector ) {
20
20
//========================================================================
21
21
// [CLASS] DataSelector
22
22
//========================================================================
@@ -42,6 +42,8 @@ define([
42
42
...this . state
43
43
}
44
44
45
+ this . columnSelector = null ;
46
+
45
47
}
46
48
47
49
_bindEvent ( ) {
@@ -52,17 +54,21 @@ define([
52
54
that . close ( ) ;
53
55
} ) ;
54
56
57
+ // Click cancel
58
+ $ ( that . wrapSelector ( '#vp_dsCancel' ) ) . on ( 'click' , function ( ) {
59
+ that . close ( ) ;
60
+ } ) ;
61
+
55
62
// Click ok
56
63
$ ( that . wrapSelector ( '#vp_dsOk' ) ) . on ( 'click' , function ( ) {
57
64
// TODO: set target value
58
- let newValue = that . state . data ;
65
+ let newValue = that . generateCode ( ) ;
59
66
60
67
$ ( that . state . target ) . val ( newValue ) ;
61
68
$ ( that . state . target ) . data ( 'type' , that . state . dataType ) ;
62
69
that . state . finish ( newValue ) ;
63
70
that . close ( ) ;
64
71
} ) ;
65
-
66
72
}
67
73
68
74
/**
@@ -73,7 +79,9 @@ define([
73
79
74
80
// Click variable item
75
81
$ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . off ( 'click' ) ;
76
- $ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . on ( 'click' , function ( ) {
82
+ // $(that.wrapSelector('.vp-ds-var-item')).on('click', function() {
83
+ $ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . single_double_click ( function ( evt ) {
84
+ // single click
77
85
$ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . removeClass ( 'selected' ) ;
78
86
$ ( this ) . addClass ( 'selected' ) ;
79
87
@@ -82,7 +90,21 @@ define([
82
90
that . state . data = data ;
83
91
that . state . dataType = dataType ;
84
92
85
- // TODO: load preview
93
+ // render option page
94
+ that . renderOptionPage ( ) ;
95
+ } , function ( evt ) {
96
+ // double click to select directly
97
+ let data = $ ( this ) . find ( '.vp-ds-var-data' ) . text ( ) ;
98
+ let dataType = $ ( this ) . find ( '.vp-ds-var-type' ) . text ( ) ;
99
+ that . state . data = data ;
100
+ that . state . dataType = dataType ;
101
+
102
+ let newValue = that . generateCode ( ) ;
103
+
104
+ $ ( that . state . target ) . val ( newValue ) ;
105
+ $ ( that . state . target ) . data ( 'type' , that . state . dataType ) ;
106
+ that . state . finish ( newValue ) ;
107
+ that . close ( ) ;
86
108
} ) ;
87
109
}
88
110
@@ -117,19 +139,91 @@ define([
117
139
return dataHTML ;
118
140
}
119
141
142
+ templateForSlicing ( ) {
143
+ return `
144
+ <div>
145
+ <label>Type start/end index for slicing.</label>
146
+ </div>
147
+ <div>
148
+ <input type="number" class="vp-input" id="vp_dsStart" placeholder="Start value"/>
149
+ <input type="number" class="vp-input" id="vp_dsEnd" placeholder="End value"/>
150
+ </div>
151
+ ` ;
152
+ }
153
+
120
154
render ( ) {
121
155
super . render ( ) ;
122
156
123
157
this . loadVariables ( ) ;
124
158
}
125
159
160
+ renderOptionPage ( ) {
161
+ // initialize page and variables
162
+ $ ( this . wrapSelector ( '.vp-ds-option-inner-box' ) ) . html ( '' ) ;
163
+ this . columnSelector = null ;
164
+
165
+ switch ( this . state . dataType ) {
166
+ case 'DataFrame' :
167
+ // column selecting
168
+ this . columnSelector = new MultiSelector ( this . wrapSelector ( '.vp-ds-option-inner-box' ) ,
169
+ { mode : 'columns' , parent : [ this . state . data ] }
170
+ ) ;
171
+ break ;
172
+ case 'Series' :
173
+ case 'list' :
174
+ case 'ndarray' :
175
+ // slicing
176
+ $ ( this . wrapSelector ( '.vp-ds-option-inner-box' ) ) . html ( this . templateForSlicing ( ) ) ;
177
+ break ;
178
+ default :
179
+ break ;
180
+ }
181
+ }
182
+
183
+ generateCode ( ) {
184
+ let { data, dataType } = this . state ;
185
+ let code = new com_String ( ) ;
186
+
187
+ switch ( dataType ) {
188
+ case 'DataFrame' :
189
+ code . append ( data ) ;
190
+ if ( this . columnSelector != null ) {
191
+ let result = this . columnSelector . getDataList ( ) ;
192
+ let columnList = [ ] ;
193
+ result && result . forEach ( obj => {
194
+ columnList . push ( obj . code ) ;
195
+ } ) ;
196
+ if ( columnList . length > 0 ) {
197
+ code . appendFormat ( '[{0}]' , columnList . join ( ', ' ) ) ;
198
+ }
199
+ }
200
+ break ;
201
+ case 'Series' :
202
+ case 'list' :
203
+ case 'ndarray' :
204
+ code . append ( data ) ;
205
+ // start / end value
206
+ let start = $ ( this . wrapSelector ( '#vp_dsStart' ) ) . val ( ) ;
207
+ let end = $ ( this . wrapSelector ( '#vp_dsEnd' ) ) . val ( ) ;
208
+ if ( ( start && start != '' ) || ( end && end != '' ) ) {
209
+ code . appendFormat ( '[{0}:{1}]' , start , end ) ;
210
+ }
211
+ break ;
212
+ default :
213
+ code . append ( data ) ;
214
+ break ;
215
+ }
216
+ return code . toString ( ) ;
217
+ }
218
+
126
219
open ( ) {
127
220
$ ( this . wrapSelector ( ) ) . show ( ) ;
128
221
}
129
222
130
223
close ( ) {
131
224
$ ( this . wrapSelector ( ) ) . remove ( ) ;
132
225
}
226
+
133
227
}
134
228
135
229
return DataSelector ;
0 commit comments