@@ -35,17 +35,17 @@ define([
3535 super . _init ( ) ;
3636 /** Write codes executed before rendering */
3737 this . config . dataview = false ;
38- this . config . sizeLevel = 1 ;
38+ this . config . sizeLevel = 2 ;
3939 this . config . checkModules = [ 'pd' ] ;
4040
4141 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' ]
4949 }
5050
5151 this . package = {
@@ -69,7 +69,8 @@ define([
6969 }
7070
7171 this . state = {
72- fileExtension : 'csv' ,
72+ fileType : 'csv' ,
73+ fileExtension : [ 'csv' ] ,
7374 selectedFile : '' ,
7475 selectedPath : '' ,
7576 vp_fileioType : 'Read' ,
@@ -188,6 +189,11 @@ define([
188189 }
189190 }
190191
192+ _unbindEvent ( ) {
193+ super . _unbindEvent ( ) ;
194+ $ ( document ) . off ( 'change' , this . wrapSelector ( '#fileReadAs' ) ) ;
195+ }
196+
191197 _bindEvent ( ) {
192198 super . _bindEvent ( ) ;
193199 /** Implement binding events */
@@ -198,6 +204,19 @@ define([
198204 $ ( that . wrapSelector ( '.vp-fileio-box' ) ) . hide ( ) ;
199205 $ ( that . wrapSelector ( '#vp_file' + pageType ) ) . show ( ) ;
200206
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+
201220
202221 //set fileExtensions
203222 that . fileResultState = {
@@ -210,26 +229,24 @@ define([
210229 let isChecked = $ ( this ) . prop ( 'checked' ) ;
211230 var fileioType = that . state . vp_fileioType ;
212231 var prefix = '#vp_file' + fileioType + ' ' ;
213- var selectedFileFormat = that . fileState [ fileioType ] . selectedType ;
232+ var selectedType = that . fileState [ fileioType ] [ ' selectedType' ] ;
214233 var fileioTypePrefix = fileioType . toLowerCase ( ) ;
215234 if ( fileioTypePrefix == 'write' ) {
216235 fileioTypePrefix = "to" ;
217236 }
237+ let fileId = that . fileState [ fileioType ] . fileTypeId [ selectedType ] ;
218238
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);
221242 $ ( 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
226246 $ ( that . wrapSelector ( prefix + '#vp_optionBox' ) ) . closest ( '.vp-accordian-container' ) . show ( ) ;
227247 }
228248 }
229249
230- var fileTypeObj = that . fileState [ fileioType ] [ 'fileTypeId' ] ;
231- var selectedType = that . fileState [ fileioType ] [ 'selectedType' ] ;
232- let fileId = fileTypeObj [ selectedType ] ;
233250 let pdLib = pandasLibrary . PANDAS_FUNCTION ;
234251 let thisPkg = JSON . parse ( JSON . stringify ( pdLib [ fileId ] ) ) ;
235252
@@ -246,31 +263,14 @@ define([
246263 if ( fileioTypePrefix == 'write' ) {
247264 fileioTypePrefix = "to" ;
248265 }
249- var selectedFileFormat = that . fileState [ pageType ] . selectedType ;
250266 // select file type
251267 $ ( 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 ;
258270
259271 // reload
260272 that . renderPage ( pageType ) ;
261273 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- }
274274 } ) ;
275275
276276 // open file navigation
@@ -282,8 +282,8 @@ define([
282282 }
283283
284284 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 ;
287287 }
288288
289289 let fileNavi = new FileNavigation ( {
@@ -417,8 +417,7 @@ define([
417417 $ ( '<tr>' ) . append ( $ ( `<td><label for="fileType" class="vp-bold vp-orange-text">File Type</label></td>` ) )
418418 . append ( $ ( '<td><select id="fileType" class="vp-select"></select> <label><input id="fileReadAs" type="checkbox"/><span>Use PyArrow</span></label></td>' ) )
419419 ) ;
420- }
421- else {
420+ } else {
422421 $ ( this . wrapSelector ( prefix + '#vp_inputOutputBox table tbody' ) ) . prepend (
423422 $ ( '<tr>' ) . append ( $ ( `<td><label for="fileType" class="vp-bold vp-orange-text">File Type</label></td>` ) )
424423 . append ( $ ( '<td><select id="fileType" class="vp-select"></select> </td>' ) )
@@ -433,7 +432,6 @@ define([
433432 ) ;
434433 } ) ;
435434
436-
437435 // prepend user option
438436 let hasAllocateTo = $ ( this . wrapSelector ( prefix + '#o0' ) ) . length > 0 ;
439437 if ( hasAllocateTo ) {
@@ -476,6 +474,18 @@ define([
476474 , 'vp-file-browser-button' )
477475 ) ;
478476 }
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+ }
479489
480490 // encoding suggest input
481491 $ ( this . wrapSelector ( '#encoding' ) ) . replaceWith ( function ( ) {
@@ -488,6 +498,18 @@ define([
488498 suggestInput . setPlaceholder ( 'encoding option' ) ;
489499 return suggestInput . toTagString ( ) ;
490500 } ) ;
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+ } ) ;
491513 }
492514
493515 render ( ) {
0 commit comments