Spaces:
Sleeping
Sleeping
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"), | |
" ", | |
link( | |
"https://www.buymeacoffee.com/fabiogra", | |
image("https://i.imgur.com/YFu6MMA.png", margin="0em", align="top", width="130px"), | |
), | |
] | |
layout(*myargs) | |