Allow users to add new Control classes without implementing a plugin by hansthen · Pull Request #2122 · python-visualization/folium

This is a new, smaller implementation of the Control class I implemented earlier. For this PR I focused only on the user's ability to load a new control in user space, without having to write a new plugin. It is not difficult to write a plugin, but it does require knowledge of Jinja. Also, there is quite some boilerplate code involved.

With this Control clas I was able to implement the minimap and ruler plugins, using just a few lines of code.

import folium
import streamlit as st
from folium import Control, TileLayer

from streamlit_folium import st_folium

st.set_page_config(
    page_title="minimap",
    layout="wide"
)

m = folium.Map(
    location=[39.949610, -75.150282],
    zoom_start=5,
    zoom_control=False
)
tiles = TileLayer(
    tiles="OpenStreetMap",
    show=False,
    control=False,
)
tiles.add_to(m)

minimap = Control("MiniMap", tiles)
minimap.add_js_link(
    "minimap_js",
    "https://cdnjs.cloudflare.com/ajax/libs/leaflet-minimap/3.6.1/Control.MiniMap.min.js"
)
minimap.add_css_link(
    "minimap_css",
    "https://cdnjs.cloudflare.com/ajax/libs/leaflet-minimap/3.6.1/Control.MiniMap.css"
)
minimap.add_to(m)

ruler = Control("Ruler", tiles)
ruler.add_js_link(
    "ruler_js",
    "https://cdn.rawgit.com/gokertanrisever/leaflet-ruler/master/src/leaflet-ruler.js",
)
ruler.add_css_link(
    "ruler_css",
    "https://cdn.rawgit.com/gokertanrisever/leaflet-ruler/master/src/leaflet-ruler.css",
)
ruler.add_to(m)

st_folium(m, width=1600, height=600)