feat: implement dynamic training course tab system and modular PDF data migration scripts
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import re
|
||||
import os
|
||||
|
||||
html_path = '/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/templates/dao-tao-detail.html'
|
||||
css_path = '/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/static/css/custom.css'
|
||||
|
||||
with open(html_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
css_rules = []
|
||||
class_counter = 1
|
||||
|
||||
def process_html(text):
|
||||
global class_counter
|
||||
start = 0
|
||||
while True:
|
||||
idx = text.find(' style="', start)
|
||||
if idx == -1:
|
||||
idx = text.find(" style='", start)
|
||||
if idx == -1:
|
||||
break
|
||||
|
||||
quote = text[idx + 7]
|
||||
end_idx = text.find(quote, idx + 8)
|
||||
if end_idx == -1:
|
||||
break
|
||||
|
||||
style_content = text[idx+8:end_idx]
|
||||
if "animation-composition" in style_content:
|
||||
new_class = f"devtools-style-{class_counter}"
|
||||
class_counter += 1
|
||||
|
||||
# Format CSS rule
|
||||
styles = [s.strip() for s in style_content.split(';') if s.strip()]
|
||||
css_rule = f".{new_class} {{\n"
|
||||
for s in styles:
|
||||
css_rule += f" {s};\n"
|
||||
css_rule += "}\n"
|
||||
css_rules.append(css_rule)
|
||||
|
||||
# Remove style attribute
|
||||
text = text[:idx] + text[end_idx+1:]
|
||||
|
||||
# Now we need to inject new_class into the nearest preceding class="..."
|
||||
# Search backwards for `class="` before `idx` (but only within the current tag, so stop at `<`)
|
||||
tag_start = text.rfind('<', 0, idx)
|
||||
class_idx = text.find('class="', tag_start, idx)
|
||||
if class_idx != -1:
|
||||
# insert new_class inside the existing class attribute
|
||||
insert_pos = class_idx + 7
|
||||
text = text[:insert_pos] + new_class + " " + text[insert_pos:]
|
||||
start = idx # adjust start roughly
|
||||
else:
|
||||
# element has no class attribute, insert one where style was
|
||||
text = text[:idx] + f' class="{new_class}"' + text[idx:]
|
||||
start = idx
|
||||
|
||||
else:
|
||||
start = end_idx + 1
|
||||
|
||||
return text
|
||||
|
||||
new_html = process_html(content)
|
||||
|
||||
if css_rules:
|
||||
with open(css_path, 'a', encoding='utf-8') as f:
|
||||
f.write("\n/* --- Extracted Inline Styles --- */\n")
|
||||
f.write("\n".join(css_rules))
|
||||
|
||||
with open(html_path, 'w', encoding='utf-8') as f:
|
||||
f.write(new_html)
|
||||
print(f"Extracted {len(css_rules)} styles to custom.css")
|
||||
else:
|
||||
print("No styles found.")
|
||||
Reference in New Issue
Block a user