@@ -35,17 +35,17 @@ define([
35
35
super . _init ( ) ;
36
36
/** Write codes executed before rendering */
37
37
this . config . dataview = false ;
38
- this . config . sizeLevel = 1 ;
38
+ this . config . sizeLevel = 2 ;
39
39
this . config . checkModules = [ 'pd' ] ;
40
40
41
41
this . fileExtensions = {
42
- 'csv' : 'csv' ,
43
- 'excel' : 'xlsx' ,
44
- 'json' : 'json' ,
45
- 'pickle' : '' ,
46
- 'sas' : '' , // xport or sas7bdat
47
- 'spss' : '' ,
48
- 'parquet' :'parquet'
42
+ 'csv' : [ 'csv' , 'tsv' ] ,
43
+ 'excel' : [ 'xlsx' , 'xls' ] ,
44
+ 'json' : [ 'json' ] ,
45
+ 'pickle' : [ ] ,
46
+ 'sas' : [ ] , // xport or sas7bdat
47
+ 'spss' : [ ] ,
48
+ 'parquet' : [ 'parquet' ]
49
49
}
50
50
51
51
this . package = {
@@ -69,7 +69,8 @@ define([
69
69
}
70
70
71
71
this . state = {
72
- fileExtension : 'csv' ,
72
+ fileType : 'csv' ,
73
+ fileExtension : [ 'csv' ] ,
73
74
selectedFile : '' ,
74
75
selectedPath : '' ,
75
76
vp_fileioType : 'Read' ,
@@ -188,6 +189,11 @@ define([
188
189
}
189
190
}
190
191
192
+ _unbindEvent ( ) {
193
+ super . _unbindEvent ( ) ;
194
+ $ ( document ) . off ( 'change' , this . wrapSelector ( '#fileReadAs' ) ) ;
195
+ }
196
+
191
197
_bindEvent ( ) {
192
198
super . _bindEvent ( ) ;
193
199
/** Implement binding events */
@@ -198,6 +204,19 @@ define([
198
204
$ ( that . wrapSelector ( '.vp-fileio-box' ) ) . hide ( ) ;
199
205
$ ( that . wrapSelector ( '#vp_file' + pageType ) ) . show ( ) ;
200
206
207
+ if ( pageType === 'Read' && that . fileState [ pageType ] . selectedType === 'spss' ) {
208
+ // show install button
209
+ that . showInstallButton ( ) ;
210
+ // show install note below File type selection
211
+ $ ( `<tr class="vp-spss-note"><td colspan="2">
212
+ <label class="vp-orange-text vp-italic">NOTE: </label>
213
+ <label class="vp-gray-text vp-italic">pyreadstat package is required to read spss file.</label>
214
+ </td></tr>` ) . insertAfter ( $ ( that . wrapSelector ( '#fileType' ) ) . closest ( 'tr' ) ) ;
215
+ } else {
216
+ that . hideInstallButton ( ) ;
217
+ $ ( that . wrapSelector ( '.vp-spss-note' ) ) . remove ( ) ;
218
+ }
219
+
201
220
202
221
//set fileExtensions
203
222
that . fileResultState = {
@@ -210,26 +229,24 @@ define([
210
229
let isChecked = $ ( this ) . prop ( 'checked' ) ;
211
230
var fileioType = that . state . vp_fileioType ;
212
231
var prefix = '#vp_file' + fileioType + ' ' ;
213
- var selectedFileFormat = that . fileState [ fileioType ] . selectedType ;
232
+ var selectedType = that . fileState [ fileioType ] [ ' selectedType' ] ;
214
233
var fileioTypePrefix = fileioType . toLowerCase ( ) ;
215
234
if ( fileioTypePrefix == 'write' ) {
216
235
fileioTypePrefix = "to" ;
217
236
}
237
+ let fileId = that . fileState [ fileioType ] . fileTypeId [ selectedType ] ;
218
238
219
- if ( isChecked ) { // pyArrow
220
- that . fileState [ fileioType ] . fileTypeId [ that . state . fileExtension ] = "pa_" + fileioTypePrefix + selectedFileFormat [ 0 ] . toUpperCase ( ) + selectedFileFormat . slice ( 1 ) ;
239
+ if ( isChecked ) { // pyArrow
240
+ fileId = "pa_" + fileioTypePrefix + selectedType [ 0 ] . toUpperCase ( ) + selectedType . slice ( 1 ) ;
241
+ // that.fileState[fileioType].fileTypeId[that.state.fileExtension] = "pa_" + fileioTypePrefix + selectedFileFormat[0].toUpperCase() + selectedFileFormat.slice(1);
221
242
$ ( that . wrapSelector ( prefix + '#vp_optionBox' ) ) . closest ( '.vp-accordian-container' ) . hide ( ) ;
222
- }
223
- else { // pandas
224
- that . fileState [ fileioType ] . fileTypeId [ that . state . fileExtension ] = "pd_" + fileioTypePrefix + selectedFileFormat [ 0 ] . toUpperCase ( ) + selectedFileFormat . slice ( 1 ) ;
225
- if ( that . state . fileExtension != 'parquet' ) { // parquet has no options area
243
+ } else { // pandas
244
+ // that.fileState[fileioType].fileTypeId[that.state.fileExtension] = "pd_" + fileioTypePrefix + selectedFileFormat[0].toUpperCase() + selectedFileFormat.slice(1);
245
+ if ( that . state . fileType != 'parquet' ) { // parquet has no options area
226
246
$ ( that . wrapSelector ( prefix + '#vp_optionBox' ) ) . closest ( '.vp-accordian-container' ) . show ( ) ;
227
247
}
228
248
}
229
249
230
- var fileTypeObj = that . fileState [ fileioType ] [ 'fileTypeId' ] ;
231
- var selectedType = that . fileState [ fileioType ] [ 'selectedType' ] ;
232
- let fileId = fileTypeObj [ selectedType ] ;
233
250
let pdLib = pandasLibrary . PANDAS_FUNCTION ;
234
251
let thisPkg = JSON . parse ( JSON . stringify ( pdLib [ fileId ] ) ) ;
235
252
@@ -246,31 +263,14 @@ define([
246
263
if ( fileioTypePrefix == 'write' ) {
247
264
fileioTypePrefix = "to" ;
248
265
}
249
- var selectedFileFormat = that . fileState [ pageType ] . selectedType ;
250
266
// select file type
251
267
$ ( this . wrapSelector ( prefix + '#fileType' ) ) . change ( function ( ) {
252
- var value = $ ( this ) . val ( ) ;
253
- that . fileState [ pageType ] . selectedType = value ;
254
-
255
- // Whenever change the file type, change to default pandas
256
- that . fileState [ pageType ] . fileTypeId [ that . state . fileExtension ] = "pd_" + fileioTypePrefix + selectedFileFormat [ 0 ] . toUpperCase ( ) + selectedFileFormat . slice ( 1 ) ;
257
-
268
+ var fileType = $ ( this ) . val ( ) ;
269
+ that . fileState [ pageType ] . selectedType = fileType ;
258
270
259
271
// reload
260
272
that . renderPage ( pageType ) ;
261
273
that . _bindEventByType ( pageType ) ;
262
-
263
- if ( value === 'spss' ) {
264
- // show install button
265
- that . showInstallButton ( ) ;
266
- // show install note below File type selection
267
- $ ( `<tr><td colspan="2">
268
- <label class="vp-orange-text vp-italic">NOTE: </label>
269
- <label class="vp-gray-text vp-italic">pyreadstat package is required to read spss file.</label>
270
- </td></tr>` ) . insertAfter ( $ ( that . wrapSelector ( '#fileType' ) ) . closest ( 'tr' ) ) ;
271
- } else {
272
- that . hideInstallButton ( ) ;
273
- }
274
274
} ) ;
275
275
276
276
// open file navigation
@@ -282,8 +282,8 @@ define([
282
282
}
283
283
284
284
let extensionList = [ ] ;
285
- if ( that . state . fileExtension !== '' ) {
286
- extensionList = [ that . state . fileExtension ] ;
285
+ if ( that . state . fileExtension && that . state . fileExtension . length > 0 ) {
286
+ extensionList = that . state . fileExtension ;
287
287
}
288
288
289
289
let fileNavi = new FileNavigation ( {
@@ -417,8 +417,7 @@ define([
417
417
$ ( '<tr>' ) . append ( $ ( `<td><label for="fileType" class="vp-bold vp-orange-text">File Type</label></td>` ) )
418
418
. append ( $ ( '<td><select id="fileType" class="vp-select"></select> <label><input id="fileReadAs" type="checkbox"/><span>Use PyArrow</span></label></td>' ) )
419
419
) ;
420
- }
421
- else {
420
+ } else {
422
421
$ ( this . wrapSelector ( prefix + '#vp_inputOutputBox table tbody' ) ) . prepend (
423
422
$ ( '<tr>' ) . append ( $ ( `<td><label for="fileType" class="vp-bold vp-orange-text">File Type</label></td>` ) )
424
423
. append ( $ ( '<td><select id="fileType" class="vp-select"></select> </td>' ) )
@@ -433,7 +432,6 @@ define([
433
432
) ;
434
433
} ) ;
435
434
436
-
437
435
// prepend user option
438
436
let hasAllocateTo = $ ( this . wrapSelector ( prefix + '#o0' ) ) . length > 0 ;
439
437
if ( hasAllocateTo ) {
@@ -476,6 +474,18 @@ define([
476
474
, 'vp-file-browser-button' )
477
475
) ;
478
476
}
477
+
478
+ if ( pageType === 'Read' && selectedType === 'spss' ) {
479
+ // show install button
480
+ this . showInstallButton ( ) ;
481
+ // show install note below File type selection
482
+ $ ( `<tr class="vp-spss-note"><td colspan="2">
483
+ <label class="vp-orange-text vp-italic">NOTE: </label>
484
+ <label class="vp-gray-text vp-italic">pyreadstat package is required to read spss file.</label>
485
+ </td></tr>` ) . insertAfter ( $ ( this . wrapSelector ( '#fileType' ) ) . closest ( 'tr' ) ) ;
486
+ } else {
487
+ this . hideInstallButton ( ) ;
488
+ }
479
489
480
490
// encoding suggest input
481
491
$ ( this . wrapSelector ( '#encoding' ) ) . replaceWith ( function ( ) {
@@ -488,6 +498,18 @@ define([
488
498
suggestInput . setPlaceholder ( 'encoding option' ) ;
489
499
return suggestInput . toTagString ( ) ;
490
500
} ) ;
501
+
502
+ // seperator suggest input
503
+ $ ( this . wrapSelector ( '#sep' ) ) . replaceWith ( function ( ) {
504
+ // seperator list :
505
+ var sepList = [ ',' , '|' , '\\t' , '\\n' , ':' , ';' , '-' , '_' , '&' , '/' , '\\' ] ;
506
+ var suggestInput = new SuggestInput ( ) ;
507
+ suggestInput . setComponentID ( 'sep' ) ;
508
+ suggestInput . addClass ( 'vp-input vp-state' ) ;
509
+ suggestInput . setSuggestList ( function ( ) { return sepList ; } ) ;
510
+ suggestInput . setPlaceholder ( 'Input seperator' ) ;
511
+ return suggestInput . toTagString ( ) ;
512
+ } ) ;
491
513
}
492
514
493
515
render ( ) {
0 commit comments