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

Update app.py

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