import os
import gradio.routes
import gradio.utils
from modules import shared, theme
from modules.paths import script_path, data_path
import modules.scripts
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 html_head():
head = ''
main = ['script.js']
for js in main:
script_js = os.path.join(script_path, "javascript", js)
head += f'\n'
added = []
for script in modules.scripts.list_scripts("javascript", ".js"):
if script.filename in main:
continue
head += f'\n'
added.append(script.path)
for script in modules.scripts.list_scripts("javascript", ".mjs"):
head += f'\n'
added.append(script.path)
added = [a.replace(script_path, '').replace('\\', '/') for a in added]
# log.debug(f'Adding JS scripts: {added}')
return head
def html_body():
body = ''
inline = ''
if shared.opts.theme_style != 'Auto':
inline += f"set_theme('{shared.opts.theme_style.lower()}');"
body += f'\n'
return body
def html_css(is_builtin: bool):
added = []
def stylesheet(fn):
added.append(fn)
return f''
css = 'sdnext.css' if is_builtin else 'base.css'
head = stylesheet(os.path.join(script_path, 'javascript', css))
for cssfile in modules.scripts.list_files_with_name("style.css"):
if not os.path.isfile(cssfile):
continue
head += stylesheet(cssfile)
if shared.opts.gradio_theme in theme.list_builtin_themes():
head += stylesheet(os.path.join(script_path, "javascript", f"{shared.opts.gradio_theme}.css"))
if os.path.exists(os.path.join(data_path, "user.css")):
head += stylesheet(os.path.join(data_path, "user.css"))
added = [a.replace(script_path, '').replace('\\', '/') for a in added]
# log.debug(f'Adding CSS stylesheets: {added}')
return head
def reload_javascript():
is_builtin = theme.reload_gradio_theme()
head = html_head()
css = html_css(is_builtin)
body = html_body()
def template_response(*args, **kwargs):
res = shared.GradioTemplateResponseOriginal(*args, **kwargs)
res.body = res.body.replace(b'', f'{head}'.encode("utf8"))
res.body = res.body.replace(b'