103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
import re
|
|
import time
|
|
|
|
import streamlit as st
|
|
from streamlit_js_eval import streamlit_js_eval
|
|
|
|
ss = st.session_state
|
|
|
|
# Allows us to get a Streamlit cookie safely without added fuss:
|
|
def get_cookie(key):
|
|
if "cookies" in ss:
|
|
if key in ss.cookies.keys():
|
|
value = ss.cookies[key]
|
|
|
|
if value is None or len(value) < 1:
|
|
del ss.cookies[key]
|
|
return None
|
|
|
|
return ss.cookies[key]
|
|
|
|
cookies = st.context.cookies
|
|
|
|
if "cookies" not in st.session_state:
|
|
ss.cookies = {}
|
|
|
|
if key in cookies.keys():
|
|
ss.cookies[key] = cookies[key]
|
|
return cookies[key]
|
|
|
|
return None
|
|
|
|
|
|
# Set a cookie in-page using JavaScript without the "rerun" BS:
|
|
def set_cookie(key, value):
|
|
print(f"set_cookie({key}, {value}) called...")
|
|
|
|
if value is None:
|
|
value = ""
|
|
|
|
javascript_string = f"""
|
|
var cookies = parent.document.cookie;
|
|
parent.document.cookie = `{key}={value};`;
|
|
console.log(`parent.document.cookie = ${{parent.document.cookie}}`)
|
|
"""
|
|
|
|
streamlit_js_eval(js_expressions=javascript_string)
|
|
time.sleep(1)
|
|
|
|
|
|
def page_redirect(url=""):
|
|
js = f"""
|
|
var link = parent.document.createElement("a");
|
|
parent.document.body.appendChild(link);
|
|
link.href = "{url}";
|
|
if (link.href === "")
|
|
link.href = window.location.href;
|
|
link.click();
|
|
"""
|
|
streamlit_js_eval(js_expressions=js)
|
|
|
|
|
|
def perform_redirect(pg_category, pg_name):
|
|
if pg_category not in ss.PAGE_REGISTRY_MAP.keys(): return
|
|
if pg_name not in ss.PAGE_REGISTRY_MAP[pg_category].keys(): return
|
|
pg = ss.PAGE_REGISTRY_MAP[pg_category][pg_name]
|
|
st.switch_page(pg)
|
|
|
|
|
|
def handle_redirect():
|
|
if "redirect_page_category" in st.session_state:
|
|
if "redirect_page_name" in st.session_state:
|
|
pg_category = ss.redirect_page_category
|
|
pg_name = ss.redirect_page_name
|
|
del st.session_state.redirect_page_category
|
|
del st.session_state.redirect_page_name
|
|
perform_redirect(pg_category, pg_name)
|
|
|
|
|
|
def redirect(pg_category, pg_name):
|
|
print(f"Redirecting to page {pg_category} {pg_name}")
|
|
st.session_state.redirect_page_category = pg_category
|
|
st.session_state.redirect_page_name = pg_name
|
|
st.rerun()
|
|
|
|
|
|
def hide_deploy_button():
|
|
st.markdown("""
|
|
<style>
|
|
.stAppDeployButton { display: none; }
|
|
</style>
|
|
""", unsafe_allow_html=True)
|
|
|
|
def shrink_sidebar():
|
|
js = """
|
|
|
|
setTimeout(function() {
|
|
const sidebar = document.querySelector(".stSidebar");
|
|
sidebar.style.width = "244px";
|
|
}, 2500);
|
|
"""
|
|
|
|
streamlit_js_eval(js_expressions=js)
|