@@ -13,8 +13,9 @@ define([
1313 'vp_base/js/com/com_makeDom' ,
1414 'vp_base/js/com/component/SuggestInput' ,
1515 'vp_base/js/com/component/VarSelector2' ,
16- 'vp_base/js/com/component/DataSelector'
17- ] , function ( com_util , com_makeDom , SuggestInput , VarSelector2 , DataSelector ) {
16+ 'vp_base/js/com/component/DataSelector' ,
17+ 'vp_base/js/com/component/FileNavigation'
18+ ] , function ( com_util , com_makeDom , SuggestInput , VarSelector2 , DataSelector , FileNavigation ) {
1819 /**
1920 * show result after code executed
2021 */
@@ -41,7 +42,9 @@ define([
4142 'textarea' : 'Input textarea' ,
4243 'input_number' : 'Input number' ,
4344 'input_text' : 'Input text' ,
44- 'input' : 'Input value'
45+ 'input' : 'Input value' ,
46+ 'file_save' : 'Select file' ,
47+ 'file_load' : 'Select file'
4548 }
4649
4750 const _VP_BOOL_OPTIONS = [
@@ -434,10 +437,84 @@ define([
434437 }
435438 content = input ;
436439 break ;
440+ case 'file-save' :
441+ var input = $ ( '<input/>' ) . attr ( {
442+ type : 'text' ,
443+ class : 'vp-input input-single vp-state' ,
444+ id : obj . name ,
445+ placeholder : ( obj . placeholder == undefined ?'Input Data' :obj . placeholder ) ,
446+ value : ( obj . default == undefined ?'' :obj . default ) ,
447+ title : ( obj . help == undefined ?'' :obj . help ) ,
448+ required : obj . required == true
449+ } ) ;
450+ // cell metadata test
451+ if ( value != undefined ) {
452+ // set as saved value
453+ $ ( input ) . attr ( {
454+ 'value' : value
455+ } ) ;
456+ }
457+ var fileBrowerButton = $ ( `<div class="vp-file-browser-button" data-parent="${ obj . name } "></div>` ) ;
458+ var div = $ ( '<div></div>' ) ;
459+ div . append ( input ) ;
460+ div . append ( fileBrowerButton ) ;
461+
462+ $ ( document ) . on ( 'click' , pageThis . wrapSelector ( `.vp-file-browser-button[data-parent="${ obj . name } "]` ) , function ( ) {
463+ let fileNavi = new FileNavigation ( {
464+ type : 'save' ,
465+ extensions : ( obj . fileExtension == undefined ?[ ] :[ obj . fileExtension ] ) ,
466+ finish : function ( filesPath , status , error ) {
467+ let { file, path} = filesPath [ 0 ] ;
468+
469+ // set text
470+ $ ( pageThis . wrapSelector ( '#' + obj . name ) ) . data ( 'file' , file ) ;
471+ $ ( pageThis . wrapSelector ( '#' + obj . name ) ) . val ( path ) ;
472+ }
473+ } ) ;
474+ fileNavi . open ( ) ;
475+ } ) ;
476+ content = div ;
477+ break ;
478+ case 'file-open' :
479+ var input = $ ( '<input/>' ) . attr ( {
480+ type : 'text' ,
481+ class : 'vp-input input-single vp-state' ,
482+ id : obj . name ,
483+ placeholder : ( obj . placeholder == undefined ?'Input Data' :obj . placeholder ) ,
484+ value : ( obj . default == undefined ?'' :obj . default ) ,
485+ title : ( obj . help == undefined ?'' :obj . help ) ,
486+ required : obj . required == true
487+ } ) ;
488+ // cell metadata test
489+ if ( value != undefined ) {
490+ // set as saved value
491+ $ ( input ) . attr ( {
492+ 'value' : value
493+ } ) ;
494+ }
495+ var fileBrowerButton = $ ( `<div class="vp-file-browser-button" data-parent="${ obj . name } "></div>` ) ;
496+ var div = $ ( '<div></div>' ) ;
497+ div . append ( input ) ;
498+ div . append ( fileBrowerButton ) ;
499+
500+ $ ( document ) . on ( 'click' , pageThis . wrapSelector ( `.vp-file-browser-button[data-parent="${ obj . name } "]` ) , function ( ) {
501+ let fileNavi = new FileNavigation ( {
502+ type : 'open' ,
503+ extensions : ( obj . fileExtension == undefined ?[ ] :[ obj . fileExtension ] ) ,
504+ finish : function ( filesPath , status , error ) {
505+ let { file, path} = filesPath [ 0 ] ;
506+
507+ // set text
508+ $ ( pageThis . wrapSelector ( '#' + obj . name ) ) . data ( 'file' , file ) ;
509+ $ ( pageThis . wrapSelector ( '#' + obj . name ) ) . val ( path ) ;
510+ }
511+ } ) ;
512+ fileNavi . open ( ) ;
513+ } ) ;
514+ content = div ;
515+ break ;
437516 case 'table' :
438517 // break;
439- case 'file' :
440- // break;
441518 // default : input_single
442519 default :
443520 var input = $ ( '<input/>' ) . attr ( {
@@ -618,8 +695,9 @@ define([
618695 case 'dtype' :
619696 value = $ ( pageThis . wrapSelector ( parent + ' #' + obj . name ) ) . val ( ) ;
620697 break ;
698+ case 'file-open' :
699+ case 'file-save' :
621700 case 'table' :
622- case 'file' :
623701 case 'option_select' :
624702 case 'option_suggest' :
625703 case 'input_number' :
@@ -659,7 +737,8 @@ define([
659737 code = code . split ( id ) . join ( '' ) ;
660738 } else {
661739 // text quotation
662- if ( v . type == 'text' ) {
740+ if ( v . type == 'text'
741+ || ( v . component != undefined && ( v . component . includes ( 'file-open' ) || v . component . includes ( 'file-save' ) ) ) ) {
663742 val = "'" + val + "'" ;
664743 }
665744 // code completion
0 commit comments