Update app.py
Browse files
app.py
CHANGED
@@ -16,37 +16,27 @@ def minify_html_file(html_file):
|
|
16 |
with open(html_file.name, 'r', encoding='utf-8') as f:
|
17 |
original_content = f.read()
|
18 |
|
19 |
-
original_size = len(original_content.encode('utf-8'))
|
20 |
|
21 |
-
#
|
22 |
-
# (можно регулировать, если нужно менее агрессивное сжатие)
|
23 |
minified_content = htmlmin.minify(
|
24 |
original_content,
|
25 |
-
remove_comments=True, #
|
26 |
-
remove_empty_space=True, #
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
remove_redundant_attributes=True, # Удалять избыточные атрибуты (e.g. type="text/javascript")
|
32 |
-
do_not_minify_page_inline_css=False, # Минифицировать <style> блоки
|
33 |
-
do_not_minify_page_inline_js=False, # Минифицировать <script> блоки
|
34 |
-
remove_http_protocol_attributes=False, # Не удалять http: из ссылок (может нарушить старые ссылки)
|
35 |
-
remove_input_attributes=False, # Не удалять type="text" у input
|
36 |
-
keep_pre=False # Минифицировать содержимое <pre> (может сломать форматирование)
|
37 |
-
# Можно добавить другие опции, см. документацию htmlmin
|
38 |
)
|
39 |
|
40 |
-
minified_size = len(minified_content.encode('utf-8'))
|
41 |
reduction_percent = ((original_size - minified_size) / original_size) * 100 if original_size > 0 else 0
|
42 |
|
43 |
status_message = f"Исходный размер: {original_size} байт\n" \
|
44 |
f"Минифицированный размер: {minified_size} байт\n" \
|
45 |
f"Уменьшение размера: {original_size - minified_size} байт ({reduction_percent:.2f}%)"
|
46 |
|
47 |
-
# Сохраняем
|
48 |
-
# Используем NamedTemporaryFile для безопасного создания файла и получения пути
|
49 |
-
# delete=False означает, что файл не будет удален сразу после закрытия, Gradio управляет этим
|
50 |
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.html', encoding='utf-8') as tmp_file:
|
51 |
tmp_file.write(minified_content)
|
52 |
temp_file_path = tmp_file.name
|
@@ -54,17 +44,10 @@ def minify_html_file(html_file):
|
|
54 |
return minified_content, status_message, temp_file_path
|
55 |
|
56 |
except Exception as e:
|
57 |
-
#
|
58 |
if 'temp_file_path' in locals() and os.path.exists(temp_file_path):
|
59 |
-
|
60 |
return "", f"Ошибка при минификации: {e}", None
|
61 |
-
finally:
|
62 |
-
# Gradio сам очищает временные файлы, созданные через file_obj.name
|
63 |
-
# Но если вы создаете свои временные файлы (как tmp_file), нужно убедиться в их удалении
|
64 |
-
# В данном случае NamedTemporaryFile с delete=False и управлением через Gradio download component достаточно.
|
65 |
-
# Просто убедимся, что исходный временный файл от Gradio корректно обрабатывается (он удаляется автоматически)
|
66 |
-
pass
|
67 |
-
|
68 |
|
69 |
# Создаем интерфейс Gradio
|
70 |
interface = gr.Interface(
|
@@ -76,9 +59,10 @@ interface = gr.Interface(
|
|
76 |
gr.File(label="Скачать минифицированный файл")
|
77 |
],
|
78 |
title="HTML Минификатор",
|
79 |
-
description="Загрузите HTML файл для
|
80 |
-
"Инструмент удаляет комментарии, лишние
|
81 |
-
"
|
|
|
82 |
)
|
83 |
|
84 |
# Запускаем приложение
|
|
|
16 |
with open(html_file.name, 'r', encoding='utf-8') as f:
|
17 |
original_content = f.read()
|
18 |
|
19 |
+
original_size = len(original_content.encode('utf-8')) # Размер в байтах
|
20 |
|
21 |
+
# Минифицируем содержимое с параметрами для максимальной эффективности
|
|
|
22 |
minified_content = htmlmin.minify(
|
23 |
original_content,
|
24 |
+
remove_comments=True, # Удаляем HTML-комментарии
|
25 |
+
remove_empty_space=True, # Удаляем лишние пробелы между тегами
|
26 |
+
reduce_empty_attributes=True, # Удаляем атрибуты с пустыми значениями (e.g., class="")
|
27 |
+
reduce_boolean_attributes=True,# Сокращаем булевы атрибуты (e.g., disabled="disabled" -> disabled)
|
28 |
+
remove_optional_attribute_quotes=False, # Оставляем кавычки атрибутов для безопасности
|
29 |
+
pre_tags=('pre', 'textarea') # Сохраняем содержимое <pre> и <textarea> без изменений
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
)
|
31 |
|
32 |
+
minified_size = len(minified_content.encode('utf-8')) # Размер после минификации
|
33 |
reduction_percent = ((original_size - minified_size) / original_size) * 100 if original_size > 0 else 0
|
34 |
|
35 |
status_message = f"Исходный размер: {original_size} байт\n" \
|
36 |
f"Минифицированный размер: {minified_size} байт\n" \
|
37 |
f"Уменьшение размера: {original_size - minified_size} байт ({reduction_percent:.2f}%)"
|
38 |
|
39 |
+
# Сохраняем минифицированный контент во временный файл для скачивания
|
|
|
|
|
40 |
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.html', encoding='utf-8') as tmp_file:
|
41 |
tmp_file.write(minified_content)
|
42 |
temp_file_path = tmp_file.name
|
|
|
44 |
return minified_content, status_message, temp_file_path
|
45 |
|
46 |
except Exception as e:
|
47 |
+
# Очищаем временный файл в случае ошибки
|
48 |
if 'temp_file_path' in locals() and os.path.exists(temp_file_path):
|
49 |
+
os.remove(temp_file_path)
|
50 |
return "", f"Ошибка при минификации: {e}", None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
# Создаем интерфейс Gradio
|
53 |
interface = gr.Interface(
|
|
|
59 |
gr.File(label="Скачать минифицированный файл")
|
60 |
],
|
61 |
title="HTML Минификатор",
|
62 |
+
description="Загрузите HTML файл для минификации. "
|
63 |
+
"Инструмент удаляет комментарии, лишние пробелы и оптимизирует атрибуты, "
|
64 |
+
"уменьшая размер файла без потери функциональности. "
|
65 |
+
"Содержимое тегов <pre> и <textarea> сохраняется как есть."
|
66 |
)
|
67 |
|
68 |
# Запускаем приложение
|