@@ -48,6 +48,10 @@ async function store(state, emitter) {
48
48
parentFolder : null , // Null parent folder means not saved?
49
49
source : 'disk'
50
50
} )
51
+ newFile . editor . onChange = function ( ) {
52
+ newFile . hasChanges = true
53
+ emitter . emit ( 'render' )
54
+ }
51
55
state . openFiles . push ( newFile )
52
56
state . editingFile = newFile . id
53
57
@@ -351,6 +355,7 @@ async function store(state, emitter) {
351
355
log ( 'error' , e )
352
356
}
353
357
358
+ openFile . hasChanges = false
354
359
state . isSaving = false
355
360
state . savingProgress = 0
356
361
emitter . emit ( 'refresh-files' )
@@ -365,6 +370,11 @@ async function store(state, emitter) {
365
370
} )
366
371
emitter . on ( 'close-tab' , ( id ) => {
367
372
log ( 'close-tab' , id )
373
+ const currentTab = state . openFiles . find ( f => f . id === id )
374
+ if ( currentTab . hasChanges && currentTab . parentFolder !== null ) {
375
+ let response = confirm ( "Your file has unsaved changes. Are you sure you want to proceed?" )
376
+ if ( ! response ) return false
377
+ }
368
378
state . openFiles = state . openFiles . filter ( f => f . id !== id )
369
379
// state.editingFile = null
370
380
@@ -375,6 +385,10 @@ async function store(state, emitter) {
375
385
source : 'disk' ,
376
386
parentFolder : null
377
387
} )
388
+ newFile . editor . onChange = function ( ) {
389
+ newFile . hasChanges = true
390
+ emitter . emit ( 'render' )
391
+ }
378
392
state . openFiles . push ( newFile )
379
393
state . editingFile = newFile . id
380
394
}
@@ -995,6 +1009,7 @@ async function store(state, emitter) {
995
1009
}
996
1010
}
997
1011
1012
+ openFile . hasChanges = false
998
1013
state . renamingTab = null
999
1014
state . isSaving = false
1000
1015
state . savingProgress = 0
@@ -1037,43 +1052,49 @@ async function store(state, emitter) {
1037
1052
let files = [ ]
1038
1053
for ( let i in state . selectedFiles ) {
1039
1054
let selectedFile = state . selectedFiles [ i ]
1055
+ let openFile = null
1040
1056
if ( selectedFile . type == 'folder' ) {
1041
1057
// Don't open folders
1042
1058
continue
1043
1059
}
1044
- if ( selectedFile . source === 'board' ) {
1060
+ if ( selectedFile . source == 'board' ) {
1045
1061
const fileContent = await serial . loadFile (
1046
1062
serial . getFullPath (
1047
1063
'/' ,
1048
1064
state . boardNavigationPath ,
1049
1065
selectedFile . fileName
1050
1066
)
1051
1067
)
1052
- files . push (
1053
- createFile ( {
1054
- parentFolder : state . boardNavigationPath ,
1055
- fileName : selectedFile . fileName ,
1056
- source : selectedFile . source ,
1057
- content : fileContent
1058
- } )
1059
- )
1060
- } else {
1068
+ openFile = createFile ( {
1069
+ parentFolder : state . boardNavigationPath ,
1070
+ fileName : selectedFile . fileName ,
1071
+ source : selectedFile . source ,
1072
+ content : fileContent
1073
+ } )
1074
+ openFile . editor . onChange = function ( ) {
1075
+ openFile . hasChanges = true
1076
+ emitter . emit ( 'render' )
1077
+ }
1078
+ } else if ( selectedFile . source == 'disk' ) {
1061
1079
const fileContent = await disk . loadFile (
1062
1080
disk . getFullPath (
1063
1081
state . diskNavigationRoot ,
1064
1082
state . diskNavigationPath ,
1065
1083
selectedFile . fileName
1066
1084
)
1067
1085
)
1068
- files . push (
1069
- createFile ( {
1070
- parentFolder : state . diskNavigationPath ,
1071
- fileName : selectedFile . fileName ,
1072
- source : selectedFile . source ,
1073
- content : fileContent
1074
- } )
1075
- )
1086
+ openFile = createFile ( {
1087
+ parentFolder : state . diskNavigationPath ,
1088
+ fileName : selectedFile . fileName ,
1089
+ source : selectedFile . source ,
1090
+ content : fileContent
1091
+ } )
1092
+ openFile . editor . onChange = function ( ) {
1093
+ openFile . hasChanges = true
1094
+ emitter . emit ( 'render' )
1095
+ }
1076
1096
}
1097
+ files . push ( openFile )
1077
1098
}
1078
1099
1079
1100
files = files . filter ( ( f ) => { // find files to open
@@ -1280,11 +1301,17 @@ async function store(state, emitter) {
1280
1301
emitter . emit ( 'render' )
1281
1302
} )
1282
1303
1283
- function createFile ( { source, parentFolder, fileName, content = newFileContent } ) {
1304
+ function createFile ( args ) {
1305
+ const {
1306
+ source,
1307
+ parentFolder,
1308
+ fileName,
1309
+ content = newFileContent ,
1310
+ hasChanges = false
1311
+ } = args
1284
1312
const id = generateHash ( )
1285
1313
const editor = state . cache ( CodeMirrorEditor , `editor_${ id } ` )
1286
1314
editor . content = content
1287
- const hasChanges = false
1288
1315
return {
1289
1316
id,
1290
1317
source,
@@ -1300,6 +1327,7 @@ async function store(state, emitter) {
1300
1327
fileName : generateFileName ( ) ,
1301
1328
parentFolder,
1302
1329
source,
1330
+ hasChanges : true
1303
1331
} )
1304
1332
}
1305
1333
}
0 commit comments