File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 5959 border-radius : 3px ;
6060}
6161
62+ .json-status-bar {
63+ transition : all 0.3s ease;
64+ }
65+
66+ .status-success {
67+ color : # 3ddc84 !important ;
68+ }
69+
70+ .status-error {
71+ color : # ff4444 !important ;
72+ }
73+
6274[data-theme = "dark" ] .json-body {
6375 background : # 202124 ;
6476}
Original file line number Diff line number Diff line change 3636 -ms-overflow-style : none;
3737 scrollbar-width : none;
3838 }
39+
40+ # file-input {
41+ font-size : 0.8rem ;
42+ }
3943}
Original file line number Diff line number Diff line change 11import { setupFooter } from './modules/footer.js' ;
22import { initJsonSetting } from './content/json-setting.js' ;
33import { initJsonBody } from './content/json-body.js' ;
4+ import { initFileLoader } from './file-loader.js' ;
45
56document . addEventListener ( 'DOMContentLoaded' , ( ) => {
67 setupFooter ( ) ;
78 initJsonSetting ( ) ;
89 initJsonBody ( ) ;
10+ initFileLoader ( ) ;
911} ) ;
1012
1113document . querySelector ( '.theme-toggle' ) . addEventListener ( 'click' , ( ) => {
Original file line number Diff line number Diff line change 1+ export function initFileLoader ( ) {
2+ const fileInput = document . getElementById ( 'file-input' ) ;
3+ const jsonTextarea = document . getElementById ( 'json-input' ) ;
4+ const statusBar = document . getElementById ( 'json-status' ) ;
5+
6+ document . querySelectorAll ( '[data-menu-item="load"]' ) . forEach ( button => {
7+ button . addEventListener ( 'click' , ( e ) => {
8+ e . preventDefault ( ) ;
9+ fileInput . click ( ) ;
10+ } ) ;
11+ } ) ;
12+
13+ fileInput . addEventListener ( 'change' , ( e ) => {
14+ const file = e . target . files [ 0 ] ;
15+ if ( ! file ) return ;
16+
17+ const reader = new FileReader ( ) ;
18+
19+ reader . onload = ( event ) => {
20+ try {
21+ const content = event . target . result ;
22+ const parsed = JSON . parse ( content ) ;
23+ jsonTextarea . value = JSON . stringify ( parsed , null , 2 ) ;
24+ statusBar . textContent = `Загружен файл: ${ file . name } ` ;
25+ statusBar . style . color = '#3ddc84' ;
26+ } catch ( error ) {
27+ statusBar . textContent = `Ошибка: ${ error . message } ` ;
28+ statusBar . style . color = '#ff4444' ;
29+ }
30+ } ;
31+
32+ reader . onerror = ( ) => {
33+ statusBar . textContent = 'Ошибка чтения файла' ;
34+ statusBar . style . color = '#ff4444' ;
35+ } ;
36+
37+ reader . readAsText ( file ) ;
38+ } ) ;
39+ }
Original file line number Diff line number Diff line change 3535 < nav class ="header-menu ">
3636 < ul >
3737 < li > < a href ="# " data-menu-item ="load "> Загрузить файл</ a > </ li >
38+ < li > < a href ="# " data-menu-item ="save "> Сохранить файл</ a > </ li >
3839 </ ul >
3940 </ nav >
4041 < button class ="theme-toggle " aria-label ="Toggle theme ">
6061 < div class ="json-status-bar " id ="json-status "> Готов к работе</ div >
6162 </ div >
6263 </ div >
63- </ div >
6464</ div >
6565
6666< footer class ="footer ">
6767 < nav class ="footer-menu ">
6868 < ul >
6969 < li > < a href ="# " data-menu-item ="load "> Загрузить файл</ a > </ li >
70+ < li > < a href ="# " data-menu-item ="save "> Сохранить файл</ a > </ li >
7071 </ ul >
7172 < div class ="footer-info ">
7273 < div class ="footer-year "> Программирование на Android © < span id ="currentYear "> </ span > </ div >
8283 * { outline: 1px solid red; } /* For debugging */
8384</style>
8485-->
85-
8686< script >
8787 window . marked = window . marked || {
8888 parse : function ( text ) { return text ; }
8989 } ;
9090</ script >
91+ < input type ="file " id ="file-input " accept =".json " style ="display: none; ">
9192</ body >
9293</ html >
You can’t perform that action at this time.
0 commit comments