|
import os |
|
import gradio as gr |
|
|
|
from modules import localization, shared, scripts |
|
from modules.paths import script_path, data_path |
|
|
|
|
|
def webpath(fn): |
|
if fn.startswith(script_path): |
|
web_path = os.path.relpath(fn, script_path).replace('\\', '/') |
|
else: |
|
web_path = os.path.abspath(fn) |
|
|
|
return f'file={web_path}?{os.path.getmtime(fn)}' |
|
|
|
|
|
def javascript_html(): |
|
|
|
head = f'<script type="text/javascript">{localization.localization_js(shared.opts.localization)}</script>\n' |
|
|
|
script_js = os.path.join(script_path, "script.js") |
|
head += f'<script type="text/javascript" src="{webpath(script_js)}"></script>\n' |
|
|
|
for script in scripts.list_scripts("javascript", ".js"): |
|
head += f'<script type="text/javascript" src="{webpath(script.path)}"></script>\n' |
|
|
|
for script in scripts.list_scripts("javascript", ".mjs"): |
|
head += f'<script type="module" src="{webpath(script.path)}"></script>\n' |
|
|
|
if shared.cmd_opts.theme: |
|
head += f'<script type="text/javascript">set_theme(\"{shared.cmd_opts.theme}\");</script>\n' |
|
|
|
return head |
|
|
|
|
|
def css_html(): |
|
head = "" |
|
|
|
def stylesheet(fn): |
|
return f'<link rel="stylesheet" property="stylesheet" href="{webpath(fn)}">' |
|
|
|
for cssfile in scripts.list_files_with_name("style.css"): |
|
if not os.path.isfile(cssfile): |
|
continue |
|
|
|
head += stylesheet(cssfile) |
|
|
|
if os.path.exists(os.path.join(data_path, "user.css")): |
|
head += stylesheet(os.path.join(data_path, "user.css")) |
|
|
|
return head |
|
|
|
|
|
def reload_javascript(): |
|
js = javascript_html() |
|
css = css_html() |
|
|
|
def template_response(*args, **kwargs): |
|
res = shared.GradioTemplateResponseOriginal(*args, **kwargs) |
|
res.body = res.body.replace(b'</head>', f'{js}</head>'.encode("utf8")) |
|
res.body = res.body.replace(b'</body>', f'{css}</body>'.encode("utf8")) |
|
res.init_headers() |
|
return res |
|
|
|
gr.routes.templates.TemplateResponse = template_response |
|
|
|
|
|
if not hasattr(shared, 'GradioTemplateResponseOriginal'): |
|
shared.GradioTemplateResponseOriginal = gr.routes.templates.TemplateResponse |
|
|