116 lines
3.3 KiB
Python
116 lines
3.3 KiB
Python
from branca.element import MacroElement
|
|
|
|
from folium.elements import JSCSSMixin
|
|
from folium.template import Template
|
|
from folium.utilities import remove_empty
|
|
|
|
|
|
class BeautifyIcon(JSCSSMixin, MacroElement):
|
|
"""
|
|
Create a BeautifyIcon that can be added to a Marker
|
|
|
|
Parameters
|
|
----------
|
|
icon: string, default None
|
|
the Font-Awesome icon name to use to render the marker.
|
|
icon_shape: string, default None
|
|
the icon shape
|
|
border_width: integer, default 3
|
|
the border width of the icon
|
|
border_color: string with hexadecimal RGB, default '#000'
|
|
the border color of the icon
|
|
text_color: string with hexadecimal RGB, default '#000'
|
|
the text color of the icon
|
|
background_color: string with hexadecimal RGB, default '#FFF'
|
|
the background color of the icon
|
|
inner_icon_style: string with css styles for the icon, default ''
|
|
the css styles of the icon
|
|
spin: boolean, default False
|
|
allow the icon to be spinning.
|
|
number: integer, default None
|
|
the number of the icon.
|
|
|
|
Examples
|
|
--------
|
|
Plugin Website: https://github.com/masajid390/BeautifyMarker
|
|
>>> BeautifyIcon(
|
|
... text_color="#000", border_color="transparent", background_color="#FFF"
|
|
... ).add_to(marker)
|
|
>>> number_icon = BeautifyIcon(
|
|
... text_color="#000",
|
|
... border_color="transparent",
|
|
... background_color="#FFF",
|
|
... number=10,
|
|
... inner_icon_style="font-size:12px;padding-top:-5px;",
|
|
... )
|
|
>>> Marker(
|
|
... location=[45.5, -122.3],
|
|
... popup=folium.Popup("Portland, OR"),
|
|
... icon=number_icon,
|
|
... )
|
|
>>> BeautifyIcon(icon="arrow-down", icon_shape="marker").add_to(marker)
|
|
|
|
"""
|
|
|
|
_template = Template(
|
|
"""
|
|
{% macro script(this, kwargs) %}
|
|
var {{ this.get_name() }} = new L.BeautifyIcon.icon(
|
|
{{ this.options|tojavascript }}
|
|
)
|
|
{{ this._parent.get_name() }}.setIcon({{ this.get_name() }});
|
|
{% endmacro %}
|
|
"""
|
|
)
|
|
ICON_SHAPE_TYPES = [
|
|
"circle",
|
|
"circle-dot",
|
|
"doughnut",
|
|
"rectangle-dot",
|
|
"marker",
|
|
None,
|
|
]
|
|
|
|
default_js = [
|
|
(
|
|
"beautify_icon_js",
|
|
"https://cdn.jsdelivr.net/gh/marslan390/BeautifyMarker/leaflet-beautify-marker-icon.min.js",
|
|
)
|
|
]
|
|
default_css = [
|
|
(
|
|
"beautify_icon_css",
|
|
"https://cdn.jsdelivr.net/gh/marslan390/BeautifyMarker/leaflet-beautify-marker-icon.min.css",
|
|
)
|
|
]
|
|
|
|
def __init__(
|
|
self,
|
|
icon=None,
|
|
icon_shape=None,
|
|
border_width=3,
|
|
border_color="#000",
|
|
text_color="#000",
|
|
background_color="#FFF",
|
|
inner_icon_style="",
|
|
spin=False,
|
|
number=None,
|
|
**kwargs
|
|
):
|
|
super().__init__()
|
|
self._name = "BeautifyIcon"
|
|
|
|
self.options = remove_empty(
|
|
icon=icon,
|
|
icon_shape=icon_shape,
|
|
border_width=border_width,
|
|
border_color=border_color,
|
|
text_color=text_color,
|
|
background_color=background_color,
|
|
inner_icon_style=inner_icon_style,
|
|
spin=spin,
|
|
isAlphaNumericIcon=number is not None,
|
|
text=number,
|
|
**kwargs
|
|
)
|