Commit f726df8a authored by James Tolton's avatar James Tolton

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

parent a2749ec6
...@@ -10,6 +10,7 @@ import sys ...@@ -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(): ...@@ -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
......
ayo
\ No newline at end of file
...@@ -8,6 +8,7 @@ import re ...@@ -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(): ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment