@@ -98,7 +98,7 @@ define([
9898 _loadState ( state ) {
9999 var {
100100 variable, groupby, display, method, advanced, allocateTo, resetIndex,
101- advPageDom, advColList, advNamingDict
101+ advPageDom, advColList, advNamingList
102102 } = state ;
103103
104104 $ ( this . _wrapSelector ( '#vp_gbVariable' ) ) . val ( variable ) ;
@@ -120,8 +120,8 @@ define([
120120 advColList . forEach ( ( arr , idx ) => {
121121 $ ( $ ( this . _wrapSelector ( '.vp-gb-adv-col' ) ) [ idx ] ) . data ( 'list' , arr ) ;
122122 } ) ;
123- advNamingDict . forEach ( ( dict , idx ) => {
124- $ ( $ ( this . _wrapSelector ( '.vp-gb-adv-naming' ) ) [ idx ] ) . data ( 'dict' , dict ) ;
123+ advNamingList . forEach ( ( obj , idx ) => {
124+ $ ( $ ( this . _wrapSelector ( '.vp-gb-adv-naming' ) ) [ idx ] ) . data ( 'dict' , obj ) ;
125125 } ) ;
126126 }
127127
@@ -185,7 +185,7 @@ define([
185185
186186 advPageDom : '' ,
187187 advColList : [ ] ,
188- advNamingDict : [ ]
188+ advNamingList : [ ]
189189 } ;
190190 this . popup = {
191191 type : '' ,
@@ -265,7 +265,7 @@ define([
265265 page . appendLine ( '</div>' ) ;
266266
267267 // Advanced box
268- page . appendFormatLine ( '<div class="{0}" style="display: none;">' , 'vp-gb-adv-box' ) ;
268+ page . appendFormatLine ( '<div class="{0} {1} " style="display: none;">' , 'vp-gb-adv-box' , 'vp-apiblock-scrollbar ') ;
269269 page . appendLine ( this . renderAdvancedItem ( ) ) ;
270270 page . appendFormatLine ( '<button id="{0}" class="{1}">{2}</button>' , 'vp_gbAdvAdd' , 'vp-button' , '+ Add' ) ;
271271 page . appendLine ( '</div>' ) ; // end of adv-box
@@ -315,6 +315,21 @@ define([
315315 $ ( this . _wrapSelector ( ) ) . hide ( ) ;
316316 }
317317
318+ renderVariableList ( varList , defaultValue = '' ) {
319+ var tag = new sb . StringBuilder ( ) ;
320+ tag . appendFormatLine ( '<select id="{0}">' , 'vp_gbVariable' ) ;
321+ varList . forEach ( vObj => {
322+ // varName, varType
323+ var label = vObj . varName ;
324+ tag . appendFormatLine ( '<option value="{0}" data-type="{1}" {2}>{3}</option>'
325+ , vObj . varName , vObj . varType
326+ , defaultValue == vObj . varName ?'selected' :''
327+ , label ) ;
328+ } ) ;
329+ tag . appendLine ( '</select>' ) ; // VP_VS_VARIABLES
330+ return tag . toString ( ) ;
331+ }
332+
318333 renderAdvancedItem ( ) {
319334 var page = new sb . StringBuilder ( ) ;
320335 page . appendFormatLine ( '<div class="{0}">' , 'vp-gb-adv-item' ) ;
@@ -368,23 +383,42 @@ define([
368383 renderColumnSelector ( previousList , includeList ) {
369384 this . popup . ColSelector = new vpColumnSelector ( this . _wrapSelector ( '.' + APP_POPUP_BODY ) , this . state . variable , previousList , includeList ) ;
370385 }
371-
372- renderVariableList ( varList , defaultValue = '' ) {
373- var tag = new sb . StringBuilder ( ) ;
374- tag . appendFormatLine ( '<select id="{0}">' , 'vp_gbVariable' ) ;
375- varList . forEach ( vObj => {
376- // varName, varType
377- var label = vObj . varName ;
378- tag . appendFormatLine ( '<option value="{0}" data-type="{1}" {2}>{3}</option>'
379- , vObj . varName , vObj . varType
380- , defaultValue == vObj . varName ?'selected' :''
381- , label ) ;
382- } ) ;
383- tag . appendLine ( '</select>' ) ; // VP_VS_VARIABLES
384- return tag . toString ( ) ;
386+
387+ renderNamingBox ( columns , method , previousDict ) {
388+ var page = new sb . StringBuilder ( ) ;
389+ page . appendFormatLine ( '<div class="{0}">' , 'vp-gb-naming-box' ) ;
390+ if ( columns && columns . length > 0 ) {
391+ page . appendFormatLine ( '<label>Replace {0} as ...</label>' , method ) ;
392+ columns . forEach ( col => {
393+ page . appendFormatLine ( '<div class="{0}">' , 'vp-gb-naming-item' ) ;
394+ page . appendFormatLine ( '<label>{0}</label>' , col ) ;
395+ var previousValue = '' ;
396+ if ( previousDict [ col ] ) {
397+ previousValue = previousDict [ col ] ;
398+ }
399+ page . appendFormatLine ( '<input type="text" class="{0}" placeholder="{1}" value="{2}" data-code="{3}"/>'
400+ , 'vp-gb-naming-text' , 'Name to replace ' + method , previousValue , col ) ;
401+ page . appendLine ( '</div>' ) ;
402+ } ) ;
403+ } else {
404+ var previousValue = '' ;
405+ if ( previousDict [ method ] ) {
406+ previousValue = previousDict [ method ] ;
407+ }
408+ page . appendFormatLine ( '<div class="{0}">' , 'vp-gb-naming-item' ) ;
409+ page . appendFormatLine ( '<label>{0}</label>' , method ) ;
410+ page . appendFormatLine ( '<input type="text" class="{0}" placeholder="{1}" value="{2}" data-code="{3}"/>'
411+ , 'vp-gb-naming-text' , 'Name to replace ' + method , previousValue , method ) ;
412+ page . appendLine ( '</div>' ) ;
413+ }
414+ page . appendLine ( '</div>' ) ;
415+ return page . toString ( ) ;
385416 }
417+
418+
386419
387420 openInnerPopup ( targetSelector , title = 'Select columns' , includeList = [ ] ) {
421+ this . popup . type = 'column' ;
388422 this . popup . targetSelector = targetSelector ;
389423 this . renderColumnSelector ( this . popup . targetSelector . data ( 'list' ) , includeList ) ;
390424
@@ -399,6 +433,18 @@ define([
399433 $ ( this . _wrapSelector ( '.' + APP_POPUP_BOX ) ) . hide ( ) ;
400434 }
401435
436+ openNamingPopup ( targetSelector , columns , method ) {
437+ this . popup . type = 'naming' ;
438+ this . popup . targetSelector = targetSelector ;
439+ $ ( this . _wrapSelector ( '.' + APP_POPUP_BODY ) ) . html ( this . renderNamingBox ( columns , method , $ ( this . popup . targetSelector ) . data ( 'dict' ) ) ) ;
440+
441+ // set title
442+ $ ( this . _wrapSelector ( '.' + APP_POPUP_BOX + ' .' + APP_TITLE ) ) . text ( 'Replace naming' ) ;
443+
444+ // show popup box
445+ $ ( this . _wrapSelector ( '.' + APP_POPUP_BOX ) ) . show ( ) ;
446+ }
447+
402448 loadVariableList ( ) {
403449 var that = this ;
404450 // load using kernel
@@ -536,23 +582,26 @@ define([
536582 //====================================================================
537583 // Advanced box Events
538584 //====================================================================
585+ // add advanced item
586+ $ ( document ) . on ( 'click' , this . _wrapSelector ( '#vp_gbAdvAdd' ) , function ( ) {
587+ $ ( that . renderAdvancedItem ( ) ) . insertBefore ( $ ( that . _wrapSelector ( '#vp_gbAdvAdd' ) ) ) ;
588+ } ) ;
589+
539590 // advanced item - column change event
540591 $ ( document ) . on ( 'change' , this . _wrapSelector ( '.vp-gb-adv-col' ) , function ( event ) {
541592 var colList = event . colList ;
542593 var idx = $ ( that . _wrapSelector ( '.vp-gb-adv-col' ) ) . index ( this ) ;
543- that . state . advColList [ idx ] = colList ;
544- } ) ;
545-
546- // advanced item - naming change event
547- $ ( document ) . on ( 'change' , this . _wrapSelector ( '.vp-gb-adv-naming' ) , function ( event ) {
548- var result = event . result ;
549- var idx = $ ( that . _wrapSelector ( '.vp-gb-adv-naming' ) ) . index ( this ) ;
550- that . state . advNamingDict [ idx ] = result ;
551- } ) ;
594+
595+ // if there's change, reset display namings
596+ var previousList = that . state . advColList [ idx ] ;
597+ if ( ! previousList || colList . length !== previousList . length
598+ || ! colList . slice ( ) . sort ( ) . every ( ( val , idx ) => { return val === previousList . slice ( ) . sort ( ) [ idx ] } ) ) {
599+ that . state . advNamingList = [ ]
600+ $ ( that . _wrapSelector ( '.vp-gb-adv-naming' ) ) . val ( '' ) ;
601+ $ ( that . _wrapSelector ( '.vp-gb-adv-naming' ) ) . data ( 'dict' , { } ) ;
602+ }
552603
553- // add advanced item
554- $ ( document ) . on ( 'click' , this . _wrapSelector ( '#vp_gbAdvAdd' ) , function ( ) {
555- $ ( that . renderAdvancedItem ( ) ) . insertBefore ( $ ( that . _wrapSelector ( '#vp_gbAdvAdd' ) ) ) ;
604+ that . state . advColList [ idx ] = colList ;
556605 } ) ;
557606
558607 // edit target columns
@@ -584,7 +633,19 @@ define([
584633 $ ( parentDiv ) . find ( '.vp-gb-adv-method-box' ) . hide ( ) ;
585634 } ) ;
586635
587- // edit columns naming // TODO:
636+ // advanced item - naming change event
637+ $ ( document ) . on ( 'change' , this . _wrapSelector ( '.vp-gb-adv-naming' ) , function ( event ) {
638+ var namingDict = event . namingDict ;
639+ var idx = $ ( that . _wrapSelector ( '.vp-gb-adv-naming' ) ) . index ( this ) ;
640+ that . state . advNamingList [ idx ] = namingDict ;
641+ } ) ;
642+
643+ // edit columns naming
644+ $ ( document ) . on ( 'click' , this . _wrapSelector ( '.vp-gb-adv-naming-selector' ) , function ( ) {
645+ var columns = $ ( this ) . parent ( ) . find ( '.vp-gb-adv-col' ) . data ( 'list' ) ;
646+ var method = $ ( this ) . parent ( ) . find ( '.vp-gb-adv-method' ) . val ( ) ;
647+ that . openNamingPopup ( $ ( this ) . parent ( ) . find ( '.vp-gb-adv-naming' ) , columns , method ) ;
648+ } ) ;
588649
589650 // delete advanced item
590651 $ ( document ) . on ( 'click' , this . _wrapSelector ( '.vp-gb-adv-item-delete' ) , function ( ) {
@@ -658,12 +719,32 @@ define([
658719 // ok input popup
659720 $ ( document ) . on ( 'click' , this . _wrapSelector ( '.' + APP_POPUP_OK ) , function ( ) {
660721 // ok input popup
661- var colList = that . popup . ColSelector . getColumnList ( ) ;
722+ if ( that . popup . type == 'column' ) {
723+ var colList = that . popup . ColSelector . getColumnList ( ) ;
724+
725+ $ ( that . popup . targetSelector ) . val ( colList . join ( ',' ) ) ;
726+ $ ( that . popup . targetSelector ) . data ( 'list' , colList ) ;
727+ $ ( that . popup . targetSelector ) . trigger ( { type : 'change' , colList : colList } ) ;
728+ that . closeInnerPopup ( ) ;
729+ } else {
730+ var dict = { } ;
731+ // get dict
732+ var tags = $ ( that . _wrapSelector ( '.vp-gb-naming-text' ) ) ;
733+ for ( var i = 0 ; i < tags . length ; i ++ ) {
734+ var key = $ ( tags [ i ] ) . data ( 'code' ) ;
735+ var val = $ ( tags [ i ] ) . val ( ) ;
736+ if ( val && val != '' ) {
737+ dict [ key ] = "'" + val + "'" ;
738+ }
739+ }
662740
663- $ ( that . popup . targetSelector ) . val ( colList . join ( ',' ) ) ;
664- $ ( that . popup . targetSelector ) . data ( 'list' , colList ) ;
665- $ ( that . popup . targetSelector ) . trigger ( { type : 'change' , colList : colList } ) ;
666- that . closeInnerPopup ( ) ;
741+ console . log ( dict ) ;
742+
743+ $ ( that . popup . targetSelector ) . val ( Object . values ( dict ) . join ( ',' ) ) ;
744+ $ ( that . popup . targetSelector ) . data ( 'dict' , dict ) ;
745+ $ ( that . popup . targetSelector ) . trigger ( { type : 'change' , namingDict : dict } ) ;
746+ that . closeInnerPopup ( ) ;
747+ }
667748 } ) ;
668749
669750 // cancel input popup
@@ -772,6 +853,8 @@ define([
772853 }
773854 }
774855
856+ console . log ( 'advColumnDict' , advColumnDict ) ;
857+
775858 // if target columns not selected
776859 if ( Object . keys ( advColumnDict ) . length == 1 ) {
777860 var noColList = advColumnDict [ 'nothing' ] ;
@@ -815,15 +898,17 @@ define([
815898 Object . keys ( advColumnDict ) . forEach ( key => {
816899 var colList = advColumnDict [ key ] ;
817900 var tmpList2 = [ ] ;
901+ var useTuple = false ;
818902 colList . forEach ( obj => {
819903 if ( obj . naming && obj . naming != undefined ) {
820904 tmpList2 . push ( vpCommon . formatString ( "({0}, {1})" , obj . naming , obj . method ) ) ;
905+ useTuple = true ;
821906 } else {
822907 tmpList2 . push ( obj . method ) ;
823908 }
824909 } ) ;
825910 var tmpStr = tmpList2 . join ( ',' ) ;
826- if ( tmpList2 . length > 1 ) {
911+ if ( tmpList2 . length > 1 || useTuple ) {
827912 tmpStr = '[' + tmpStr + ']' ;
828913 }
829914 tmpList1 . push ( vpCommon . formatString ( "{0}: {1}" , key , tmpStr ) ) ;
0 commit comments