Compile and serve js from /statica instead of inline in html

This commit is contained in:
James Tolton 2023-01-21 12:59:05 -05:00
parent a2749ec655
commit f726df8a2f
3 changed files with 33 additions and 5 deletions

View File

@ -10,6 +10,7 @@ import sys
import tempfile import tempfile
import time import time
import traceback import traceback
from collections import OrderedDict
from functools import partial, reduce from functools import partial, reduce
import warnings import warnings
@ -1918,27 +1919,51 @@ def create_ui():
def reload_javascript(): def reload_javascript():
javascript_files = OrderedDict()
with open(os.path.join(script_path, "script.js"), "r", encoding="utf8") as jsfile: with open(os.path.join(script_path, "script.js"), "r", encoding="utf8") as jsfile:
javascript = f'<script>{jsfile.read()}</script>' contents = jsfile.read()
javascript_files["script.js"] = [contents]
# javascript = f'<script>{contents}</script>'
scripts_list = modules.scripts.list_scripts("javascript", ".js") scripts_list = modules.scripts.list_scripts("javascript", ".js")
for basedir, filename, path in scripts_list: for basedir, filename, path in scripts_list:
with open(path, "r", encoding="utf8") as jsfile: with open(path, "r", encoding="utf8") as jsfile:
javascript += f"\n<!-- {filename} --><script>{jsfile.read()}</script>" contents = jsfile.read()
javascript_files[filename] = [contents]
# javascript += f"\n<!-- {filename} --><script>{contents}</script>"
if cmd_opts.theme is not None: if cmd_opts.theme is not None:
javascript += f"\n<script>set_theme('{cmd_opts.theme}');</script>\n" javascript_files["theme.js"] = [f"set_theme('{cmd_opts.theme}');"]
# javascript += f"\n<script>set_theme('{cmd_opts.theme}');</script>\n"
javascript += f"\n<script>{localization.localization_js(shared.opts.localization)}</script>" # javascript += f"\n<script>{localization.localization_js(shared.opts.localization)}</script>"
javascript_files["localization.js"] = [f"{localization.localization_js(shared.opts.localization)}"]
compiled_name = "webui-compiled.js"
head = f"""
<script src=/statica/{compiled_name}?{int(time.time())} type="text/javascript"></script>
"""
def template_response(*args, **kwargs): def template_response(*args, **kwargs):
res = shared.GradioTemplateResponseOriginal(*args, **kwargs) res = shared.GradioTemplateResponseOriginal(*args, **kwargs)
res.body = res.body.replace( res.body = res.body.replace(
b'</head>', f'{javascript}</head>'.encode("utf8")) b'</head>', f'{head}</head>'.encode("utf8"))
res.init_headers() res.init_headers()
return res return res
for k in javascript_files:
javascript_files[k] = "\n".join(javascript_files[k])
# make static_path if not exists
statica_path = os.path.join(script_path, 'statica')
if not os.path.exists(statica_path):
os.mkdir(statica_path)
javascript_out = "\n\n\n".join([f"// <!-- {k} -->\n\n{v}" for k, v in javascript_files.items()])
with open(os.path.join(script_path, "statica", compiled_name), "w", encoding="utf8") as jsfile:
jsfile.write(javascript_out)
gradio.routes.templates.TemplateResponse = template_response gradio.routes.templates.TemplateResponse = template_response

View File

@ -0,0 +1 @@
ayo

View File

@ -8,6 +8,7 @@ import re
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware from fastapi.middleware.gzip import GZipMiddleware
from starlette.staticfiles import StaticFiles
from modules import import_hook, errors, extra_networks from modules import import_hook, errors, extra_networks
from modules import extra_networks_hypernet, ui_extra_networks_hypernets, ui_extra_networks_textual_inversion from modules import extra_networks_hypernet, ui_extra_networks_hypernets, ui_extra_networks_textual_inversion
@ -195,6 +196,7 @@ def webui():
setup_cors(app) setup_cors(app)
app.add_middleware(GZipMiddleware, minimum_size=1000) app.add_middleware(GZipMiddleware, minimum_size=1000)
app.mount("/statica", StaticFiles(directory=os.path.join(script_path, 'statica')), name="statica")
modules.progress.setup_progress_api(app) modules.progress.setup_progress_api(app)