@@ -16,7 +16,7 @@ define([
1616'vp_base/js/com/component/Component' ,
1717'vp_base/js/com/component/SuggestInput' ,
1818'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 ) {
2020//========================================================================
2121// [CLASS] DataSelector
2222//========================================================================
@@ -42,6 +42,8 @@ define([
4242 ...this . state
4343}
4444
45+ this . columnSelector = null ;
46+
4547}
4648
4749_bindEvent ( ) {
@@ -52,17 +54,21 @@ define([
5254that . close ( ) ;
5355} ) ;
5456
57+ // Click cancel
58+ $ ( that . wrapSelector ( '#vp_dsCancel' ) ) . on ( 'click' , function ( ) {
59+ that . close ( ) ;
60+ } ) ;
61+
5562// Click ok
5663$ ( that . wrapSelector ( '#vp_dsOk' ) ) . on ( 'click' , function ( ) {
5764// TODO: set target value
58- let newValue = that . state . data ;
65+ let newValue = that . generateCode ( ) ;
5966
6067$ ( that . state . target ) . val ( newValue ) ;
6168$ ( that . state . target ) . data ( 'type' , that . state . dataType ) ;
6269that . state . finish ( newValue ) ;
6370that . close ( ) ;
6471} ) ;
65-
6672}
6773
6874/**
@@ -73,7 +79,9 @@ define([
7379
7480// Click variable item
7581$ ( 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
7785$ ( that . wrapSelector ( '.vp-ds-var-item' ) ) . removeClass ( 'selected' ) ;
7886$ ( this ) . addClass ( 'selected' ) ;
7987
@@ -82,7 +90,21 @@ define([
8290that . state . data = data ;
8391that . state . dataType = dataType ;
8492
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 ( ) ;
86108} ) ;
87109}
88110
@@ -117,19 +139,91 @@ define([
117139return dataHTML ;
118140}
119141
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+
120154render ( ) {
121155super . render ( ) ;
122156
123157this . loadVariables ( ) ;
124158}
125159
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+
126219open ( ) {
127220$ ( this . wrapSelector ( ) ) . show ( ) ;
128221}
129222
130223close ( ) {
131224$ ( this . wrapSelector ( ) ) . remove ( ) ;
132225}
226+
133227}
134228
135229return DataSelector ;