Serg4451D commited on
Commit
60c0cd2
·
verified ·
1 Parent(s): 31efc13

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -32
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, # Удалять HTML комментарии
26
- remove_empty_space=True, # Удалять пробелы между тегами и внутри блоков
27
- remove_empty_attributes=True, # Удалять пустые атрибуты (e.g., class="")
28
- reduce_empty_attributes=True, # Синоним remove_empty_attributes
29
- reduce_boolean_attributes=True,# Сокращать булевы атрибуты (e.g., <input disabled>)
30
- remove_optional_attribute_quotes=False, # Оставлять кавычки атрибутов (убирать их может быть рискованно)
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
- os.remove(temp_file_path)
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
- "Инструмент удаляет комментарии, лишние пробелы, оптимизирует инлайн CSS и JS, "
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
  # Запускаем приложение