@@ -24,11 +24,20 @@ define([
24
24
*/
25
25
var vp_showInterfaceOnPage = function ( selector , package ) {
26
26
27
+ let autoCols = { } ;
28
+
27
29
// generate input variable tag
28
30
var tblInput = $ ( selector + ' #vp_inputOutputBox table tbody' ) ;
29
31
package . input && package . input . forEach ( function ( o , i ) {
30
32
var obj = JSON . parse ( JSON . stringify ( o ) ) ;
31
33
tblInput . append ( vp_createTag ( selector , obj , true , ( obj . required == false ? false : true ) ) ) ;
34
+ if ( obj . component === 'col_select' ) {
35
+ if ( autoCols [ obj . target ] != undefined ) {
36
+ autoCols [ obj . target ] . push ( obj . name ) ;
37
+ } else {
38
+ autoCols [ obj . target ] = [ obj . name ] ;
39
+ }
40
+ }
32
41
} ) ;
33
42
34
43
// generate option variable tag
@@ -37,13 +46,38 @@ define([
37
46
// cell metadata test
38
47
var obj = JSON . parse ( JSON . stringify ( o ) ) ; // deep copy
39
48
tblOption . append ( vp_createTag ( selector , obj , true , ( obj . required == true ) ) ) ;
49
+ if ( obj . component === 'col_select' ) {
50
+ if ( autoCols [ obj . target ] != undefined ) {
51
+ autoCols [ obj . target ] . push ( obj . name ) ;
52
+ } else {
53
+ autoCols [ obj . target ] = [ obj . name ] ;
54
+ }
55
+ }
40
56
} ) ;
41
57
42
58
// generate output variable tag
43
59
var tblOutput = $ ( selector + ' #vp_inputOutputBox table tbody' ) ;
44
60
package . output && package . output . forEach ( function ( o , i ) {
45
61
var obj = JSON . parse ( JSON . stringify ( o ) ) ; // deep copy
46
62
tblOutput . append ( vp_createTag ( selector , obj , true , ( obj . required == true ) ) ) ;
63
+ if ( obj . component === 'col_select' ) {
64
+ if ( autoCols [ obj . target ] != undefined ) {
65
+ autoCols [ obj . target ] . push ( obj . name ) ;
66
+ } else {
67
+ autoCols [ obj . target ] = [ obj . name ] ;
68
+ }
69
+ }
70
+ } ) ;
71
+
72
+ // bind column list FIXME: change event not triggered on changing df input
73
+ Object . keys ( autoCols ) . forEach ( target => {
74
+ let targetSelector = selector + ' #' + target ;
75
+ vp_bindColumnSource ( selector , targetSelector , autoCols [ target ] ) ;
76
+ // on change event
77
+ $ ( targetSelector ) . on ( 'change' , function ( ) {
78
+ console . log ( 'change event ' , selector , targetSelector , autoCols [ target ] ) ;
79
+ vp_bindColumnSource ( selector , this , autoCols [ target ] ) ;
80
+ } ) ;
47
81
} ) ;
48
82
}
49
83
@@ -135,6 +169,15 @@ define([
135
169
vp_generateVarSelect ( tag , obj . var_type , obj . value ) ;
136
170
tblInput . appendChild ( tag ) ;
137
171
break ;
172
+ case 'col_select' :
173
+ var tag = document . createElement ( 'input' ) ;
174
+ $ ( tag ) . attr ( {
175
+ 'type' : 'text' ,
176
+ 'id' : obj . name ,
177
+ 'class' : 'vp-input vp-state'
178
+ } ) ;
179
+ tblInput . appendChild ( tag ) ;
180
+ break ;
138
181
case 'textarea' :
139
182
var textarea = $ ( `<textarea id="${ obj . name } " class="vp-textarea vp-state">${ ( obj . default == undefined ?'' :obj . default ) } </textarea>` ) ;
140
183
// cell metadata test
@@ -209,7 +252,7 @@ define([
209
252
suggestInput . setSelectEvent ( function ( selectedValue ) {
210
253
// trigger change
211
254
$ ( divTag + ' #' + obj . name ) . val ( selectedValue ) ;
212
- $ ( divTag + ' #' + obj . name ) . trigger ( 'select_suggestvalue ' ) ;
255
+ $ ( divTag + ' #' + obj . name ) . trigger ( 'change ' ) ;
213
256
} ) ;
214
257
$ ( divTag + ' #' + obj . name ) . replaceWith ( function ( ) {
215
258
return suggestInput . toTagString ( ) ;
@@ -320,6 +363,9 @@ define([
320
363
case 'var_multi' :
321
364
value = $ ( vp_wrapSelector ( pageId , '#' + obj . name ) ) . val ( ) ;
322
365
break ;
366
+ case 'col_select' :
367
+ value = $ ( vp_wrapSelector ( pageId , '#' + obj . name ) ) . val ( ) ;
368
+ break ;
323
369
case 'table' :
324
370
case 'file' :
325
371
default :
@@ -424,26 +470,28 @@ define([
424
470
425
471
/**
426
472
* Bind columns source function
427
- * @param {object } pageThis
473
+ * @param {string } selector thisWrapSelector
428
474
* @param {object } target
429
475
* @param {array } columnInputIdList
430
476
* Usage :
431
477
* $(document).on('change', this.wrapSelector('#dataframe_tag_id'), function() {
432
- * pdGen.vp_bindColumnSource(that, this, ['column_input_id']);
478
+ * pdGen.vp_bindColumnSource(that.wrapSelector() , this, ['column_input_id']);
433
479
* });
434
480
*/
435
- var vp_bindColumnSource = function ( pageThis , target , columnInputIdList ) {
436
- var varName = $ ( target ) . val ( ) ;
437
-
481
+ var vp_bindColumnSource = function ( selector , target , columnInputIdList ) {
482
+ var varName = '' ;
483
+ if ( $ ( target ) . length > 0 ) {
484
+ varName = $ ( target ) . val ( ) ;
485
+ }
438
486
if ( varName === '' ) {
439
487
// reset with no source
440
488
columnInputIdList && columnInputIdList . forEach ( columnInputId => {
441
489
var suggestInputX = new SuggestInput ( ) ;
442
490
suggestInputX . setComponentID ( columnInputId ) ;
443
- suggestInputX . addClass ( 'vp-input' ) ;
491
+ suggestInputX . addClass ( 'vp-input vp-state ' ) ;
444
492
suggestInputX . setNormalFilter ( false ) ;
445
- suggestInputX . setValue ( $ ( pageThis . wrapSelector ( ' #' + columnInputId ) ) . val ( ) ) ;
446
- $ ( pageThis . wrapSelector ( ' #' + columnInputId ) ) . replaceWith ( function ( ) {
493
+ suggestInputX . setValue ( $ ( selector + ' #' + columnInputId ) . val ( ) ) ;
494
+ $ ( selector + ' #' + columnInputId ) . replaceWith ( function ( ) {
447
495
return suggestInputX . toTagString ( ) ;
448
496
} ) ;
449
497
} ) ;
@@ -454,22 +502,20 @@ define([
454
502
try {
455
503
let { result, type, msg } = resultObj ;
456
504
var varResult = JSON . parse ( result ) ;
457
-
458
- if ( varResult . length > 0 ) {
459
- // columns using suggestInput
460
- columnInputIdList && columnInputIdList . forEach ( columnInputId => {
461
- var suggestInputX = new SuggestInput ( ) ;
462
- suggestInputX . setComponentID ( columnInputId ) ;
463
- suggestInputX . addClass ( 'vp-input' ) ;
464
- suggestInputX . setPlaceholder ( "column name" ) ;
465
- suggestInputX . setSuggestList ( function ( ) { return varResult ; } ) ; //FIXME:
466
- suggestInputX . setNormalFilter ( false ) ;
467
- suggestInputX . setValue ( $ ( pageThis . wrapSelector ( '#' + columnInputId ) ) . val ( ) ) ;
468
- $ ( pageThis . wrapSelector ( '#' + columnInputId ) ) . replaceWith ( function ( ) {
469
- return suggestInputX . toTagString ( ) ;
470
- } ) ;
505
+
506
+ // columns using suggestInput
507
+ columnInputIdList && columnInputIdList . forEach ( columnInputId => {
508
+ var suggestInputX = new SuggestInput ( ) ;
509
+ suggestInputX . setComponentID ( columnInputId ) ;
510
+ suggestInputX . addClass ( 'vp-input vp-state' ) ;
511
+ suggestInputX . setPlaceholder ( "column name" ) ;
512
+ suggestInputX . setSuggestList ( function ( ) { return varResult ; } ) ; //FIXME:
513
+ suggestInputX . setNormalFilter ( false ) ;
514
+ suggestInputX . setValue ( $ ( selector + ' #' + columnInputId ) . val ( ) ) ;
515
+ $ ( selector + ' #' + columnInputId ) . replaceWith ( function ( ) {
516
+ return suggestInputX . toTagString ( ) ;
471
517
} ) ;
472
- }
518
+ } ) ;
473
519
} catch ( e ) {
474
520
vpLog . display ( VP_LOG_TYPE . ERROR , 'com_generator - bindColumnSource: not supported data type. ' , e ) ;
475
521
}
0 commit comments