@@ -27,9 +27,10 @@ Plotly.newPlot(figurecontainer, [clone(iniPointsD)], clone(layout), {
27
27
modeBarButtonsToAdd : [ [ {
28
28
name : 'Save the image' ,
29
29
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
+ }
33
34
} ] ]
34
35
} ) ;
35
36
var points = figurecontainer . querySelector ( ".scatterlayer .trace:first-of-type .points" ) . getElementsByTagName ( "path" ) ;
@@ -49,7 +50,7 @@ function setUpFor2d() {
49
50
$ ( '#yLabel' ) . html ( 'X' )
50
51
$ ( '#zLabel' ) . html ( 'Y' )
51
52
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' ] )
53
54
disableMenu ( [ "tax" , '3dview' ] )
54
55
}
55
56
@@ -60,7 +61,7 @@ function setUpFor3d() {
60
61
$ ( '#zLabel' ) . html ( 'Z' )
61
62
setUpSlider ( ) ;
62
63
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' ] )
64
65
disableMenu ( [ "rgfit" , 'lmfit' ] )
65
66
}
66
67
@@ -143,7 +144,7 @@ function fileReader(fname) {
143
144
swapped = 0 ; xName = "X" ; saved = true , index = [ ] , firstSave = true ;
144
145
undoRedo . reset ( )
145
146
swapper . close ( ) ;
146
-
147
+
147
148
data = fileOpener ( fname )
148
149
is3D = data . length != 1 ;
149
150
@@ -190,6 +191,7 @@ function fileReader(fname) {
190
191
toolbarutil . closeToolBar ( )
191
192
autoSaver . resetReminder ( )
192
193
sidebar . buildSideBar ( )
194
+ saveProp . reset ( )
193
195
analytics . add ( 'fileLoaded' )
194
196
}
195
197
@@ -561,31 +563,37 @@ function saveAs() {
561
563
}
562
564
563
565
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
+ }
581
572
573
+ var checkCol = [ ]
574
+ saveProp . checks . forEach ( ( e , i ) => { if ( e ) checkCol . push ( i ) } )
582
575
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' )
583
581
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
+ }
584
592
}
585
593
586
594
587
595
588
- function saveData ( ) {
596
+ function saveData_old ( ) {
589
597
var tmpData = swapped ? expRotate ( data , col . y , col . x ) : data
590
598
// https://www.npmjs.com/package/d3-format#locale_formatPrefix
591
599
//^ using d3 format, `g` means decimal/exponent notation, rounded to significant digits
@@ -932,7 +940,7 @@ class Analytics {
932
940
store . set ( 'shown' , shown + 1 )
933
941
// if (shown % 10 == 0) { // shown after every 10 opening
934
942
// }
935
- if ( shown == 0 ) {
943
+ if ( shown == 0 ) {
936
944
setTimeout ( ( ) => {
937
945
showInfo (
938
946
"Note from developer !" ,
@@ -972,4 +980,49 @@ class Analytics {
972
980
}
973
981
}
974
982
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