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