@@ -4,7 +4,13 @@ import { highlight, languages } from 'prismjs/components/prism-core';
44import { saveAs } from 'file-saver' ;
55import Modal from './ParentModal' ;
66import './file-edit.css' ;
7+ import 'prismjs/components/prism-bash' ;
78import 'prismjs/components/prism-clike' ;
9+ import 'prismjs/components/prism-c' ;
10+ import 'prismjs/components/prism-cpp' ;
11+ import 'prismjs/components/prism-matlab' ;
12+ import 'prismjs/components/prism-verilog' ;
13+ import 'prismjs/components/prism-python' ;
814import 'prismjs/components/prism-javascript' ;
915import 'prismjs/themes/prism.css' ;
1016import { actionType as T } from '../../reducer' ;
@@ -20,8 +26,12 @@ const FileEditModal = ({ superState, dispatcher }) => {
2026 }
2127 } , [ ] ) ;
2228
23- const close = ( ) => dispatcher ( { type : T . EDIT_TEXTFILE , payload : { show : false } } ) ;
24- // TODO - Save file
29+ const close = ( ) => {
30+ dispatcher ( { type : T . EDIT_TEXTFILE , payload : { show : false } } ) ;
31+ setCodeStuff ( '' ) ;
32+ setFileName ( '' ) ;
33+ } ;
34+
2535 async function submit ( ) {
2636 if ( superState . fileHandle ) {
2737 const stream = await superState . fileHandle . createWritable ( ) ;
@@ -62,14 +72,33 @@ const FileEditModal = ({ superState, dispatcher }) => {
6272 }
6373 } , [ superState . fileObj ] ) ;
6474
75+ function highlightSyntax ( code ) {
76+ const extensions = [ 'v' , 'c' , 'h' , 'hpp' , 'cpp' , 'py' , 'm' , 'sh' ] ;
77+ const fileEx = fileName . split ( '.' ) . pop ( ) ;
78+ if ( extensions . includes ( fileEx ) ) {
79+ switch ( fileEx ) {
80+ case 'v' : return highlight ( code , languages . verilog , 'verilog' ) ;
81+ case 'c' : return highlight ( code , languages . c , 'c' ) ;
82+ case 'h' : return highlight ( code , languages . c , 'c' ) ;
83+ case 'hpp' : return highlight ( code , languages . c , 'c' ) ;
84+ case 'cpp' : return highlight ( code , languages . cpp , 'cpp' ) ;
85+ case 'py' : return highlight ( code , languages . python , 'python' ) ;
86+ case 'm' : return highlight ( code , languages . matlab , 'matlab' ) ;
87+ case 'sh' : return highlight ( code , languages . bash , 'bash' ) ;
88+ default : return highlight ( code , languages . plaintext ) ;
89+ }
90+ }
91+ return highlight ( code , languages . plaintext ) ;
92+ }
93+
6594 return (
6695 < Modal
6796 ModelOpen = { superState . textFileModal }
6897 closeModal = { close }
6998 title = { fileName }
7099 >
71- < div className = "File Edit Container" >
72- < div className = "footer " >
100+ < div >
101+ < div className = "save-bar " >
73102 { fileName
74103 && (
75104 < button type = "submit" className = "btn btn-primary" onClick = { submit } > Save</ button >
@@ -81,27 +110,32 @@ const FileEditModal = ({ superState, dispatcher }) => {
81110 < button type = "submit" className = "btn btn-primary" onClick = { saveSubmit } > Save As</ button >
82111 ) }
83112 </ div >
84- < div
85- style = { {
86- minHeight : '400px' ,
87- } }
88- >
113+ < div className = "setting-container" >
89114 < Editor
90115 value = { codeStuff }
91116 onValueChange = { ( e ) => setCodeStuff ( e ) }
92- highlight = { ( code ) => highlight ( code , languages . js ) }
117+ highlight = { ( code ) => highlightSyntax ( code ) }
93118 padding = { 10 }
94119 style = { {
95120 fontFamily : '"Arial"' ,
96121 fontSize : 16 ,
97122 minHeight : '100vh' ,
98- minWidth : '80vw ' ,
123+ minWidth : '90vw ' ,
99124 border : '1px solid black' ,
100125 } }
101126 />
102127 </ div >
103- < div className = "footer" >
104- < button type = "submit" className = "btn btn-primary" onClick = { submit } > Save</ button >
128+ < div className = "save-bar" >
129+ { fileName
130+ && (
131+ < button type = "submit" className = "btn btn-primary" onClick = { submit } > Save</ button >
132+ ) }
133+ { dirButton && (
134+ < button type = "submit" className = "btn btn-primary" onClick = { saveAsSubmit } > Save As</ button >
135+ ) }
136+ { ! dirButton && (
137+ < button type = "submit" className = "btn btn-primary" onClick = { saveSubmit } > Save As</ button >
138+ ) }
105139 </ div >
106140 </ div >
107141 </ Modal >
0 commit comments