from folium.elements import JSCSSMixin from folium.features import MacroElement from folium.template import Template from folium.utilities import remove_empty class PolyLineTextPath(JSCSSMixin, MacroElement): """ Shows a text along a PolyLine. Parameters ---------- polyline: folium.features.PolyLine object The folium.features.PolyLine object to attach the text to. text: string The string to be attached to the polyline. repeat: bool, default False Specifies if the text should be repeated along the polyline. center: bool, default False Centers the text according to the polyline's bounding box below: bool, default False Show text below the path offset: int, default 0 Set an offset to position text relative to the polyline. orientation: int, default 0 Rotate text to a specified angle. attributes: dict Object containing the attributes applied to the text tag. Check valid attributes here: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/text#attributes Example: {'fill': '#007DEF', 'font-weight': 'bold', 'font-size': '24'} See https://github.com/makinacorpus/Leaflet.TextPath for more information. """ _template = Template( """ {% macro script(this, kwargs) %} {{ this.polyline.get_name() }}.setText( {{ this.text|tojson }}, {{ this.options|tojavascript }} ); {% endmacro %} """ ) default_js = [ ( "polylinetextpath", "https://cdn.jsdelivr.net/npm/leaflet-textpath@1.2.3/leaflet.textpath.min.js", ) ] def __init__( self, polyline, text, repeat=False, center=False, below=False, offset=0, orientation=0, attributes=None, **kwargs ): super().__init__() self._name = "PolyLineTextPath" self.polyline = polyline self.text = text self.options = remove_empty( repeat=repeat, center=center, below=below, offset=offset, orientation=orientation, attributes=attributes, **kwargs )