moseca / app /footer.py
fabiogra
style: css tabs and footer improvements
2849148
import streamlit as st
from htbuilder import HtmlElement, a, div, img, p, styles
from htbuilder.units import percent, px
from streamlit.components.v1 import html
def image(src_as_string, **style):
return img(src=src_as_string, style=styles(**style))
def link(link, text, **style):
return a(_href=link, _target="_blank", style=styles(**style))(text)
def layout(*args):
style = """
<style>
footer {visibility: hidden;}
.stApp { bottom: 50px; }
</style>
"""
style_div = styles(
position="fixed",
left=0,
bottom=0,
margin=px(0, 0, 0, 0),
width=percent(100),
color="black",
text_align="center",
height="auto",
opacity=1,
align_items="center",
flex_direction="column",
display="flex",
)
body = p(
id="myFooter",
style=styles(
margin=px(0, 0, 0, 0),
padding=px(5),
font_size="0.9rem",
color="rgb(51,51,51)",
font_family="Exo",
),
)
foot = div(style=style_div)(body)
st.markdown(style, unsafe_allow_html=True)
for arg in args:
if isinstance(arg, str) or isinstance(arg, HtmlElement):
body(arg)
st.markdown(str(foot), unsafe_allow_html=True)
js_code = """
<script>
function rgbReverse(rgb){
var r = rgb[0]*0.299;
var g = rgb[1]*0.587;
var b = rgb[2]*0.114;
if ((r + g + b)/255 > 0.5){
return "rgb(49, 51, 63)"
}else{
return "rgb(250, 250, 250)"
}
};
var stApp_css = window.parent.document.querySelector("#root > div:nth-child(1) > div > div > div");
window.onload = function () {
var mutationObserver = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
var bgColor = window.getComputedStyle(stApp_css).backgroundColor.replace("rgb(", "").replace(")", "").split(", ");
var fontColor = rgbReverse(bgColor);
var pTag = window.parent.document.getElementById("myFooter");
pTag.style.color = fontColor;
});
});
/**Element**/
mutationObserver.observe(stApp_css, {
attributes: true,
characterData: true,
childList: true,
subtree: true,
attributeOldValue: true,
characterDataOldValue: true
});
}
</script>
"""
html(js_code)
def footer():
myargs = [
"Made in ๐Ÿ‡ฎ๐Ÿ‡น with ",
link(
"https://streamlit.io/",
image("https://streamlit.io/images/brand/streamlit-mark-color.png", width="18px"),
),
" by ",
link("https://twitter.com/grsFabio", "@grsFabio"),
"&nbsp;&nbsp;&nbsp;",
link(
"https://www.buymeacoffee.com/fabiogra",
image("https://i.imgur.com/YFu6MMA.png", margin="0em", align="top", width="130px"),
),
]
layout(*myargs)