import os import gradio as gr from modules import localization, shared, scripts, util from modules.paths import script_path, data_path def webpath(fn): return f'file={util.truncate_path(fn)}?{os.path.getmtime(fn)}' def javascript_html(): # Ensure localization is in `window` before scripts 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"): head += stylesheet(cssfile) user_css = os.path.join(data_path, "user.css") if os.path.exists(user_css): head += stylesheet(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