Update GUI building script

This commit is contained in:
Alexander Popov 2023-12-04 20:41:49 +03:00
parent 6598f0e2c3
commit e9b2653ad0
Signed by: iiiypuk
GPG Key ID: E47FE0AB36CD5ED6
4 changed files with 106 additions and 84 deletions

View File

@ -1 +1,4 @@
* [Ubuntu](https://assets.ubuntu.com/v1/0cef8205-ubuntu-font-family-0.83.zip) font family. ## 🧰 Завиисимости для сборки:
* webui 2.4.2
* Семейство шрифтов [Ubuntu](https://assets.ubuntu.com/v1/0cef8205-ubuntu-font-family-0.83.zip)

View File

@ -6,99 +6,114 @@ from bs4 import BeautifulSoup, Tag
from jsmin import jsmin from jsmin import jsmin
from csscompressor import compress from csscompressor import compress
# html param if __name__ == '__main__':
html = sys.argv[1] # html input param
# target param html = sys.argv[1]
target = sys.argv[2] # target output param
# path from html param target = sys.argv[2]
path = re.sub(r"[^\/]*$", "", html)
# open html file
soup = BeautifulSoup(open(html), 'html.parser')
# find last script as anchorpoint
lastScript = soup.findAll("script", attrs = {"src" : True})[-1]
# get all scripts containing src attribute (= external scripts)
scripts = soup.findAll("script", attrs = {"src" : True})
# find last style link as anchorpoint
lastStylesheet = soup.findAll("link", attrs = {"rel" : "stylesheet"})[-1]
# get all links to css stylesheets
stylesheets = soup.findAll("link", attrs = {"rel" : "stylesheet"})
# create list of script srcs # path from html param
print("\nRead Scripts:") path = re.sub(r'[^\/]*$', '', html)
scriptsSrc = deque()
for script in scripts:
scriptsSrc.append(path + script.attrs["src"])
print("\t" + path + script.attrs["src"])
# create list of stylesheets srcs # open html file
print("\nRead Stylesheets:") print('📂 Open HTML file...', end=' ')
stylesheetsSrc = deque() soup = BeautifulSoup(open(html), 'html.parser')
for stylesheet in stylesheets: print('OK!')
stylesheetsSrc.append(path + stylesheet.attrs["href"])
print("\t" + path + stylesheet.attrs["href"])
# merge scripts to temp.js # find last script as anchorpoint
print("\nMerge Scripts:") lastScript = soup.findAll('script', attrs={'src': True})[-1]
print("\t", end="") # get all scripts containing src attribute (= external scripts)
with open("temp.js", "w") as outfileScript: scripts = soup.findAll('script', attrs={'src': True})
for fname in scriptsSrc:
# add space every script # find last style link as anchorpoint
if fname != 'gui//webui.js': lastStylesheet = soup.findAll('link', attrs={'rel': 'stylesheet'})[-1]
outfileScript.write("\n") # get all links to css stylesheets
print("~", end="") stylesheets = soup.findAll('link', attrs={'rel': 'stylesheet'})
# create list of script srcs
print('🔎 Create list of scripts...', end=' ')
scriptsSrc = deque()
for script in scripts:
scriptsSrc.append(path + script.attrs['src'])
print('Complete!')
# create list of stylesheets srcs
print('🔎 Create list of stylesheets...', end=' ')
stylesheetsSrc = deque()
for stylesheet in stylesheets:
stylesheetsSrc.append(path + stylesheet.attrs['href'])
print('Complete!')
# merge scripts to .temp.js
print('📥 Merge scripts...', end=' ')
with open('.temp.js', 'w') as outfileScript:
for fname in scriptsSrc:
# add space every script
if fname != 'gui//webui.js':
outfileScript.write('\n')
with open(fname) as infile:
for line in infile:
outfileScript.write(line)
print('Complete!')
print('📥 Merge stylsheets...', end=' ')
# merge stylsheets to temp.css
with open('.temp.css', 'w') as outfileCSS:
for fname in stylesheetsSrc:
# add space every script
outfileCSS.write('\n')
with open(fname) as infile: with open(fname) as infile:
for line in infile: for line in infile:
outfileScript.write(line) outfileCSS.write(line)
print("\n"); print('Complete!')
# merge stylsheets to temp.css # minify javascript
print("Merge Stylesheets:") print('🗃️ Minify scripts...', end=' ')
print("\t", end="") with open('.temp.js') as js:
with open("temp.css", "w") as outfileCSS: minified_js = jsmin(js.read())
for fname in stylesheetsSrc: print('Complete!')
# add space every script
outfileCSS.write("\n")
print("~", end="")
with open(fname) as infile:
for line in infile:
outfileCSS.write(line)
print("\n");
# minify javascript # minify css
print("Minify temp.js\n\t~") print('🗃️ Minify stylsheets...', end=' ')
with open("temp.js") as js: with open('.temp.css') as css:
minified_js = jsmin(js.read()) minified_css = compress(css.read())
print('Complete!')
# minify css # replace scripts with merged and min embed script / css
print("\nMinify temp.css\n\t~") print('🔄 Embedding script and stylsheets...', end=' ')
with open("temp.css") as css: tag = soup.new_tag('script')
minified_css = compress(css.read()) tag['type'] = 'text/javascript'
tag.append(minified_js)
lastScript.replace_with(tag)
# replace scripts with merged and min embed script / css webui_tag = soup.new_tag('script')
print("\nReplacing and deleting\n\t~") webui_tag['type'] = 'text/javascript'
tag = soup.new_tag("script") webui_tag['src'] = '/webui.js'
tag["type"] = "text/javascript" tag.insert_before(webui_tag)
tag.append(minified_js)
lastScript.replace_with(tag)
tag = soup.new_tag("style") tag = soup.new_tag('style')
tag["type"] = "text/css" tag['type'] = 'text/css'
tag.append(minified_css) tag.append(minified_css)
lastStylesheet.replace_with(tag) lastStylesheet.replace_with(tag)
print('Complete!')
#remove script and style tags # remove script and style tags
for script in scripts: print('🧹 Cleaning...', end=' ')
script.decompose() for script in scripts:
for stylesheet in stylesheets: script.decompose()
stylesheet.decompose() for stylesheet in stylesheets:
stylesheet.decompose()
#remove temp # remove temp files
os.remove("temp.js") os.remove('.temp.js')
os.remove("temp.css") os.remove('.temp.css')
print('Complete!')
#save html as target # save html as target
file = open(target,"w") print('💾 Save builded document...', end=' ')
file.write(soup.prettify()) file = open(target, 'w')
file.close() file.write(soup.prettify())
file.close()
print('Complete!', end='\n\n')
print("\nFIN\n") print('🏁 Complete')

View File

@ -7,8 +7,8 @@
<link rel="stylesheet" type="text/css" href="bootstrap-v5.3.1.min.css" /> <link rel="stylesheet" type="text/css" href="bootstrap-v5.3.1.min.css" />
<link rel="stylesheet" type="text/css" href="ubuntu-font.css" /> <link rel="stylesheet" type="text/css" href="ubuntu-font.css" />
<link rel="stylesheet" type="text/css" href="styles.css" /> <link rel="stylesheet" type="text/css" href="styles.css" />
<script src="app.js"></script>
<script src="/webui.js"></script> <script src="/webui.js"></script>
<script src="/app.js"></script>
</head> </head>
<body class="d-flex h-100 text-bg-dark"> <body class="d-flex h-100 text-bg-dark">
<div class="d-flex h-100 mx-auto p-3"> <div class="d-flex h-100 mx-auto p-3">

4
pyproject.toml Normal file
View File

@ -0,0 +1,4 @@
[tool.black]
skip-string-normalization = true
pycodestyle = true
line-length = 100