|
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) |
|
|