@@ -27,9 +27,10 @@ Plotly.newPlot(figurecontainer, [clone(iniPointsD)], clone(layout), {
2727 modeBarButtonsToAdd : [ [ {
2828 name : 'Save the image' ,
2929 icon : Plotly . Icons . camera ,
30- click ( ) { document . getElementById ( 'imRes' ) . value = `${ window . innerWidth } x${ window . innerHeight } ` ;
31- $ ( '#popupEx' ) . show ( )
32- }
30+ click ( ) {
31+ document . getElementById ( 'imRes' ) . value = `${ window . innerWidth } x${ window . innerHeight } ` ;
32+ $ ( '#popupEx' ) . show ( )
33+ }
3334 } ] ]
3435} ) ;
3536var points = figurecontainer . querySelector ( ".scatterlayer .trace:first-of-type .points" ) . getElementsByTagName ( "path" ) ;
@@ -49,7 +50,7 @@ function setUpFor2d() {
4950 $ ( '#yLabel' ) . html ( 'X' )
5051 $ ( '#zLabel' ) . html ( 'Y' )
5152 col = store . get ( "cols2d" , { x : 0 , y : 0 , z : 0 , s : 0 } )
52- enableMenu ( [ 'save' , 'saveas' , 'tfs' , 'tpl' , "spr" , 'swapen' , "extend" , "fill" , "filter" , 'af' , 'arf' , 'rgfit' , 'lmfit' , 'smooth' , 'fixer' ] )
53+ enableMenu ( [ 'save' , 'saveas' , 'savepref' , ' tfs', 'tpl' , "spr" , 'swapen' , "extend" , "fill" , "filter" , 'af' , 'arf' , 'rgfit' , 'lmfit' , 'smooth' , 'fixer' ] )
5354 disableMenu ( [ "tax" , '3dview' ] )
5455}
5556
@@ -60,7 +61,7 @@ function setUpFor3d() {
6061 $ ( '#zLabel' ) . html ( 'Z' )
6162 setUpSlider ( ) ;
6263 col = store . get ( "cols3d" , { x : 0 , y : 0 , z : 0 , s : 0 } )
63- enableMenu ( [ 'save' , 'saveas' , 'tfs' , 'tpl' , "spr" , 'swapen' , "extend" , "fill" , "filter" , 'af' , 'arf' , 'tax' , '3dview' , 'smooth' , 'fixer' ] )
64+ enableMenu ( [ 'save' , 'saveas' , 'savepref' , ' tfs', 'tpl' , "spr" , 'swapen' , "extend" , "fill" , "filter" , 'af' , 'arf' , 'tax' , '3dview' , 'smooth' , 'fixer' ] )
6465 disableMenu ( [ "rgfit" , 'lmfit' ] )
6566}
6667
@@ -143,7 +144,7 @@ function fileReader(fname) {
143144 swapped = 0 ; xName = "X" ; saved = true , index = [ ] , firstSave = true ;
144145 undoRedo . reset ( )
145146 swapper . close ( ) ;
146-
147+
147148 data = fileOpener ( fname )
148149 is3D = data . length != 1 ;
149150
@@ -190,6 +191,7 @@ function fileReader(fname) {
190191 toolbarutil . closeToolBar ( )
191192 autoSaver . resetReminder ( )
192193 sidebar . buildSideBar ( )
194+ saveProp . reset ( )
193195 analytics . add ( 'fileLoaded' )
194196}
195197
@@ -561,31 +563,37 @@ function saveAs() {
561563}
562564
563565
564- function parseSaveOption ( ) {
565-
566- getVal = ( x ) => document . getElementById ( x ) . value . trim ( )
567-
568- let delimiter = getVal ( "saveDel" )
569- let format = getVal ( "saveForm" ) . split ( ',' )
570- let saveCols = getVal ( "saveCol" ) . split ( ',' )
571- let saveHead = getVal ( "saveHead" )
572- let colLength = data [ 0 ] . length
573-
574- if ( delimiter == "" ) delimiter = "\t"
575-
576- if ( format == "" ) format = ".8g"
577- if ( format . length == 1 ) format = new Array ( colLength ) . fill ( format )
578- if ( format . length != 1 ) alertElec ( "Format should be a single specifier or secifier for each column" )
579-
580- // if(saveCols=="")
566+ function saveData ( ) {
567+ try {
568+ var formats = saveProp . formats . map ( Plotly . d3 . format )
569+ } catch ( error ) {
570+ alertElec ( "Invalid write format" )
571+ }
581572
573+ var checkCol = [ ]
574+ saveProp . checks . forEach ( ( e , i ) => { if ( e ) checkCol . push ( i ) } )
582575
576+ try {
577+ var tmpData = swapped ? expRotate ( data , col . y , col . x ) : data
578+ var txt = tmpData . map ( x => transpose ( x ) . map ( y =>
579+ checkCol . map ( ind => formats [ ind ] ( y [ ind ] ) ) . join ( '\t' )
580+ ) . join ( '\n' ) ) . join ( '\n\n' )
583581
582+ fs . writeFileSync ( saveNames [ currentEditable ] , txt ) ;
583+ showStatus ( "Data Saved in file " + replaceWithHome ( saveNames [ currentEditable ] ) ) ;
584+ saved = true ;
585+ autoSaver . resetReminder ( )
586+ analytics . add ( 'saved' )
587+ } catch ( error ) {
588+ showStatus ( "Something went wrong! Couldn't save the data..." )
589+ console . error ( error )
590+ return false ;
591+ }
584592}
585593
586594
587595
588- function saveData ( ) {
596+ function saveData_old ( ) {
589597 var tmpData = swapped ? expRotate ( data , col . y , col . x ) : data
590598 // https://www.npmjs.com/package/d3-format#locale_formatPrefix
591599 //^ using d3 format, `g` means decimal/exponent notation, rounded to significant digits
@@ -932,7 +940,7 @@ class Analytics {
932940 store . set ( 'shown' , shown + 1 )
933941 // if (shown % 10 == 0) { // shown after every 10 opening
934942 // }
935- if ( shown == 0 ) {
943+ if ( shown == 0 ) {
936944 setTimeout ( ( ) => {
937945 showInfo (
938946 "Note from developer !" ,
@@ -972,4 +980,49 @@ class Analytics {
972980 }
973981}
974982
975- const analytics = new Analytics ( )
983+ const analytics = new Analytics ( )
984+
985+
986+ class SaveProperties {
987+ // https://docs.python.org/3/library/string.html#format-specification-mini-language
988+ constructor ( ) {
989+ }
990+
991+ reset ( ) { // should load on every file load and also in every column change
992+ this . colLenght = data [ 0 ] . length
993+ this . formats = new Array ( this . colLenght ) . fill ( '.8g' )
994+ this . checks = new Array ( this . colLenght ) . fill ( true )
995+ }
996+
997+ createui = ( ) => { // reset on every file load
998+ document . getElementById ( 'sBody' ) . innerHTML = data [ 0 ] . map ( ( _ , i ) => `
999+ <tr>
1000+ <td> ${ i + 1 } . </td>
1001+ <td><input type="checkbox" class="sCheck" ${ this . checks [ i ] ? 'checked' : '' } ></td>
1002+ <td><input type="text" class="sFormat" value=${ this . formats [ i ] } ></td>
1003+ </tr>
1004+ ` ) . join ( '' )
1005+ $ ( '#popAdSv' ) . show ( )
1006+ document . getElementById ( 'popSv' ) . addEventListener ( 'click' , ( ) => {
1007+ try {
1008+ this . getchecks ( )
1009+ this . getformat ( )
1010+ } catch ( error ) {
1011+ alertElec ( "Invalid write format" )
1012+ }
1013+ $ ( '#popAdSv' ) . hide ( )
1014+ } )
1015+ }
1016+
1017+ getchecks = ( ) => {
1018+ var ts = $ ( 'tBody input:checkbox' )
1019+ for ( let i = 0 ; i < ts . length ; i ++ ) this . checks [ i ] = ts [ i ] . checked ;
1020+ }
1021+
1022+ getformat = ( ) => {
1023+ var ts = $ ( 'tBody input:text' )
1024+ for ( let i = 0 ; i < ts . length ; i ++ ) this . formats [ i ] = ts [ i ] . value ;
1025+ }
1026+ }
1027+
1028+ const saveProp = new SaveProperties ( )
0 commit comments