Skip to content

Commit ad61d8e

Browse files
committed
feat: add file upload
- Add button "Upload file" in header - Add button "Upload file" in footer
1 parent 388e7a4 commit ad61d8e

5 files changed

Lines changed: 60 additions & 2 deletions

File tree

‎generator/css/content/json-body.css‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,18 @@
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
}

‎generator/css/mobile/json-body-mobile.css‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@
3636
-ms-overflow-style: none;
3737
scrollbar-width: none;
3838
}
39+
40+
#file-input {
41+
font-size: 0.8rem;
42+
}
3943
}

‎generator/js/app.js‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { setupFooter } from './modules/footer.js';
22
import { initJsonSetting } from './content/json-setting.js';
33
import { initJsonBody } from './content/json-body.js';
4+
import { initFileLoader } from './file-loader.js';
45

56
document.addEventListener('DOMContentLoaded', () => {
67
setupFooter();
78
initJsonSetting();
89
initJsonBody();
10+
initFileLoader();
911
});
1012

1113
document.querySelector('.theme-toggle').addEventListener('click', () => {

‎generator/js/file-loader.js‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}

‎generator/json-generator.html‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
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">
@@ -60,13 +61,13 @@
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>
@@ -82,11 +83,11 @@
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>

0 commit comments

Comments
 (0)