Spaces:
Running
Running
| import gradio | |
| # Adapted from https://github.com/gradio-app/gradio/discussions/2932 | |
| class JavaScriptLoader: | |
| def __init__(self, target): | |
| #Copy the template response | |
| self.original_template = gradio.routes.templates.TemplateResponse | |
| #Prep the js files | |
| self.load_js(target) | |
| #reassign the template response to your method, so gradio calls your method instead | |
| gradio.routes.templates.TemplateResponse = self.template_response | |
| def load_js(self, target): | |
| with open(target, 'r', encoding="utf-8") as file: | |
| self.loaded_script = f"<script>\n{file.read()}\n</script>" | |
| def template_response(self, *args, **kwargs): | |
| """Once gradio calls your method, you call the original, you modify it to include | |
| your scripts and you return the modified version | |
| """ | |
| response = self.original_template(*args, **kwargs) | |
| response.body = response.body.replace( | |
| '</head>'.encode('utf-8'), self.loaded_script + "\n</head>".encode("utf-8") | |
| ) | |
| response.init_headers() | |
| return response |