import pickle import base64 import uuid from toolbox import get_conf """ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 第 1 部分 加载主题相关的工具函数 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- """ def load_dynamic_theme(THEME): adjust_dynamic_theme = None if THEME == "Chuanhu-Small-and-Beautiful": from .green import adjust_theme, advanced_css theme_declaration = ( '

[Chuanhu-Small-and-Beautiful主题]

' ) elif THEME == "High-Contrast": from .contrast import adjust_theme, advanced_css theme_declaration = "" elif "/" in THEME: from .gradios import adjust_theme, advanced_css from .gradios import dynamic_set_theme adjust_dynamic_theme = dynamic_set_theme(THEME) theme_declaration = "" else: from .default import adjust_theme, advanced_css theme_declaration = "" return adjust_theme, advanced_css, theme_declaration, adjust_dynamic_theme adjust_theme, advanced_css, theme_declaration, _ = load_dynamic_theme(get_conf("THEME")) """ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 第 2 部分 cookie相关工具函数 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- """ def init_cookie(cookies, chatbot): # 为每一位访问的用户赋予一个独一无二的uuid编码 cookies.update({"uuid": uuid.uuid4()}) return cookies def to_cookie_str(d): # Pickle the dictionary and encode it as a string pickled_dict = pickle.dumps(d) cookie_value = base64.b64encode(pickled_dict).decode("utf-8") return cookie_value def from_cookie_str(c): # Decode the base64-encoded string and unpickle it into a dictionary pickled_dict = base64.b64decode(c.encode("utf-8")) return pickle.loads(pickled_dict) """ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 第 3 部分 内嵌的javascript代码 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- """ js_code_for_css_changing = """(css) => { var existingStyles = document.querySelectorAll("body > gradio-app > div > style") for (var i = 0; i < existingStyles.length; i++) { var style = existingStyles[i]; style.parentNode.removeChild(style); } var existingStyles = document.querySelectorAll("style[data-loaded-css]"); for (var i = 0; i < existingStyles.length; i++) { var style = existingStyles[i]; style.parentNode.removeChild(style); } var styleElement = document.createElement('style'); styleElement.setAttribute('data-loaded-css', 'placeholder'); styleElement.innerHTML = css; document.body.appendChild(styleElement); } """ js_code_for_darkmode_init = """(dark) => { dark = dark == "True"; if (document.querySelectorAll('.dark').length) { if (!dark){ document.querySelectorAll('.dark').forEach(el => el.classList.remove('dark')); } } else { if (dark){ document.querySelector('body').classList.add('dark'); } } } """ js_code_for_toggle_darkmode = """() => { if (document.querySelectorAll('.dark').length) { document.querySelectorAll('.dark').forEach(el => el.classList.remove('dark')); } else { document.querySelector('body').classList.add('dark'); } document.querySelectorAll('code_pending_render').forEach(code => {code.remove();}) }""" js_code_for_persistent_cookie_init = """(persistent_cookie) => { return getCookie("persistent_cookie"); } """