Serg4451D commited on
Commit
c60585c
·
verified ·
1 Parent(s): 418f355

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -69
app.py CHANGED
@@ -1,78 +1,34 @@
1
  import gradio as gr
2
  import htmlmin
3
- import os
4
  import tempfile
5
 
6
- def minify_html_file(html_path):
7
- """
8
- Принимает путь к HTML-файлу, минифицирует его и возвращает:
9
- 1) минифицированный код в виде текста,
10
- 2) информацию о размере до/после и сэкономленных байтах,
11
- 3) путь к временному файлу для скачивания.
12
- """
13
- if not html_path:
14
- return "", "❗ Пожалуйста, загрузите HTML-файл.", ""
15
-
16
- try:
17
- # Читаем оригинальный код
18
- with open(html_path, 'r', encoding='utf-8') as f:
19
- original = f.read()
20
- orig_size = len(original.encode('utf-8'))
21
-
22
- # Минифицируем
23
- minified = htmlmin.minify(
24
- original,
25
- remove_comments=True,
26
- remove_empty_space=True,
27
- reduce_empty_attributes=True,
28
- reduce_boolean_attributes=True,
29
- remove_optional_attribute_quotes=False,
30
- keep_pre=True
31
- )
32
- min_size = len(minified.encode('utf-8'))
33
- saved = orig_size - min_size
34
- pct = (saved / orig_size * 100) if orig_size else 0.0
35
-
36
- status = (
37
- f"Исходный размер: {orig_size} байт\n"
38
- f"Минифицированный размер: {min_size} байт\n"
39
- f"Экономия: {saved} байт ({pct:.2f}%)"
40
- )
41
-
42
- # Сохраняем в tmp и возвращаем путь
43
- tmp_file = tempfile.NamedTemporaryFile(
44
- mode='w', delete=False, suffix='.html', encoding='utf-8'
45
- )
46
- tmp_file.write(minified)
47
- tmp_file.close()
48
-
49
- return minified, status, tmp_file.name
50
-
51
- except Exception as e:
52
- # При ошибке удаляем файл, если создался
53
- if 'tmp_file' in locals() and os.path.exists(tmp_file.name):
54
- os.remove(tmp_file.name)
55
- return "", f"❌ Ошибка при минификации:\n{e}", ""
56
 
57
- # --- Gradio UI ---
58
  interface = gr.Interface(
59
- fn=minify_html_file,
60
- inputs=gr.File(
61
- label="Загрузите HTML-файл (.html)",
62
- file_types=['.html'],
63
- type="filepath" # <-- заменили "file" на "filepath"
64
- ),
65
- outputs=[
66
- gr.Textbox(label="Минифицированный HTML-код", lines=20, interactive=False),
67
- gr.Textbox(label="Результат оптимизации", interactive=False),
68
- gr.File(label="Скачать минифицированный файл")
69
- ],
70
- title="🌐 HTML Минификатор",
71
- description=(
72
- "Загрузите ваш HTML-файл для минификации. "
73
- "Удаляем комментарии, лишние пробелы, оптимизируем атрибуты "
74
- "и сохраняем <pre>/<textarea> без изменений."
75
- )
76
  )
77
 
78
  if __name__ == "__main__":
 
1
  import gradio as gr
2
  import htmlmin
 
3
  import tempfile
4
 
5
+ def minify_html(path):
6
+ # Читаем исходник
7
+ with open(path, "r", encoding="utf-8") as f:
8
+ txt = f.read()
9
+ # Очень жёсткая минификация
10
+ minified = htmlmin.minify(
11
+ txt,
12
+ remove_comments=True,
13
+ remove_empty_space=True,
14
+ reduce_empty_attributes=True,
15
+ reduce_boolean_attributes=True,
16
+ remove_optional_attribute_quotes=True,
17
+ keep_pre=False # пусть всё свалит без исключений
18
+ )
19
+ # Сохраняем и возвращаем путь
20
+ tmp = tempfile.NamedTemporaryFile(
21
+ mode="w", delete=False, suffix=".html", encoding="utf-8"
22
+ )
23
+ tmp.write(minified)
24
+ tmp.close()
25
+ return tmp.name
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
 
27
  interface = gr.Interface(
28
+ fn=minify_html,
29
+ inputs=gr.File(label="Загрузите .html", type="filepath"),
30
+ outputs=gr.File(label="Скачать минифицированный .html"),
31
+ title="Максимальная HTML‑минификация"
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  )
33
 
34
  if __name__ == "__main__":