Skip to content

Commit 0c11b04

Browse files
author
Martin Journois
committed
Handle several additions of the same plugin
1 parent ec48c00 commit 0c11b04

File tree

7 files changed

+46
-29
lines changed

7 files changed

+46
-29
lines changed

folium/folium.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ def add_plugin(self, plugin):
661661
A plugin to be added to the map. It has to implement the methods
662662
`render_html`, `render_css` and `render_js`.
663663
"""
664-
self.plugins[plugin.object_name] = plugin
664+
self.plugins.setdefault(plugin.plugin_name,[]).append(plugin)
665665

666666
def _auto_bounds(self):
667667
if 'fit_bounds' in self.template_vars:

folium/plugins/boat_marker.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@ def __init__(self, position=None, heading=0, wind_heading=None, wind_speed=0, **
3434
self.wind_speed = wind_speed
3535
self.kwargs = kwargs.copy()
3636

37-
def render_header(self):
37+
def render_header(self, nb):
3838
"""Generates the HTML part of the plugin."""
3939
return """
40-
<script src="https://tomaszbrue.github.io/leaflet.boatmarker/js/leaflet.boatmarker.min.js"></script>
41-
"""
40+
<script src="https://tomaszbrue.github.io/leaflet.boatmarker/js/leaflet.boatmarker.min.js"></script>
41+
""" if nb==0 else ""
4242

43-
def render_js(self):
43+
def render_js(self, nb):
4444
"""Generates the Javascript part of the plugin."""
4545
kwargs_str = "{%s}" % ",".join(["%s : %s" % (key,json.dumps(val)) for (key,val) in self.kwargs.items()])
4646
position_str = "map.getCenter()" if self.position is None else "[%.12f,%.12f]"%self.position
47-
out = 'var boatMarker = L.boatMarker(%s, %s).addTo(map);' % (position_str,kwargs_str)
47+
out = 'var boatMarker_%s = L.boatMarker(%s, %s).addTo(map);' % (nb,position_str,kwargs_str)
4848

4949
if self.wind_heading is None:
50-
out += "boatMarker.setHeading(%s);" % int(self.heading)
50+
out += "boatMarker_%s.setHeading(%s);" % (nb,int(self.heading))
5151
else:
52-
out += "boatMarker.setHeadingWind(%s, %s, %s);"%(int(self.heading),
52+
out += "boatMarker_%s.setHeadingWind(%s, %s, %s);"%(nb,int(self.heading),
5353
int(self.wind_speed),
5454
int(self.wind_heading),
5555
)

folium/plugins/marker_cluster.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ def __init__(self, data):
1919
self.plugin_name = 'MarkerCluster'
2020
self.data = [tuple(x) for x in data]
2121

22-
def render_header(self):
22+
def render_header(self, nb):
2323
"""Generates the HTML part of the plugin."""
2424
return """
2525
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/0.4.0/MarkerCluster.css" />
2626
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/0.4.0/MarkerCluster.Default.css" />
2727
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/0.4.0/leaflet.markercluster.js"></script>
28-
"""
28+
""" if nb==0 else ""
2929

30-
def render_js(self):
30+
def render_js(self, nb):
3131
"""Generates the Javascript part of the plugin."""
3232
out = """
3333
var addressPoints = """+json.dumps(self.data)+""";

folium/plugins/plugin.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ def __init__(self):
1010
self.plugin_name = 'Plugin'
1111
self.object_name = uuid4().hex
1212

13-
def render_html(self):
13+
def render_html(self, nb):
1414
"""Generates the HTML part of the plugin."""
1515
return ""
1616

17-
def render_css(self):
17+
def render_css(self, nb):
1818
"""Generates the CSS part of the plugin."""
1919
return ""
2020

21-
def render_js(self):
21+
def render_js(self, nb):
2222
"""Generates the Javascript part of the plugin."""
2323
return ""
24-
def render_header(self):
24+
def render_header(self, nb):
2525
"""Generates the Header part of the plugin."""
2626
return ""

folium/plugins/scroll_zoom_toggler.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ def __init__(self, zoom_enabled=False):
1717
self.plugin_name = 'ScrollZoomToggler'
1818
self.zoom_enabled = zoom_enabled
1919

20-
def render_html(self):
20+
def render_html(self, nb):
2121
"""Generates the HTML part of the plugin."""
2222
return """<img id="{}_{}" alt="scroll"
2323
src="https://cdnjs.cloudflare.com/ajax/libs/ionicons/1.5.2/png/512/arrow-move.png"
24-
onclick="toggleScroll()"></img>""".format(self.plugin_name,self.object_name)
24+
onclick="toggleScroll()"></img>""".format(self.plugin_name,self.object_name)\
25+
if nb==0 else ""
2526

26-
def render_css(self):
27+
def render_css(self, nb):
2728
"""Generates the CSS part of the plugin."""
2829
return """
2930
#"""+self.plugin_name+'_'+self.object_name+""" {
@@ -37,9 +38,9 @@ def render_css(self):
3738
line-height:35px;
3839
vertical-align: middle;
3940
}
40-
"""
41+
""" if nb==0 else ""
4142

42-
def render_js(self):
43+
def render_js(self, nb):
4344
"""Generates the Javascript part of the plugin."""
4445
out = """
4546
map.scrollEnabled = true;
@@ -57,4 +58,4 @@ def render_js(self):
5758
"""
5859
if not self.zoom_enabled:
5960
out += "\n toggleScroll();"
60-
return out
61+
return out if nb==0 else ""

folium/plugins/terminator.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def __init__(self):
2121
super(Terminator, self).__init__()
2222
self.plugin_name = 'Terminator'
2323

24-
def render_header(self):
24+
def render_header(self, nb):
2525
"""Generates the header part of the plugin."""
26-
return '<script type="text/javascript">'+_terminator_script+'</script>'
26+
return '<script type="text/javascript">'+_terminator_script+'</script>' if nb==0 else ""
2727

28-
def render_js(self):
28+
def render_js(self, nb):
2929
"""Generates the Javascript part of the plugin."""
30-
return "L.terminator().addTo(map);"
30+
return "L.terminator().addTo(map);" if nb==0 else ""

folium/templates/fol_template.html

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@
2424
<link rel="stylesheet" href="https://birdage.github.io/Leaflet.awesome-markers/dist/leaflet.awesome.rotate.css">
2525

2626
{% for name, plugin in plugins.items() %}
27-
{{plugin.render_header()}}
27+
{% set plugin_nb = 0 %}
28+
{% for plugin_object in plugin %}
29+
{{plugin_object.render_header(plugin_nb)}}
30+
{% set plugin_nb = plugin_nb +1 %}
31+
{% endfor %}
2832
{% endfor %}
2933

3034
{{ dvf_js }}
@@ -50,7 +54,11 @@
5054
}
5155

5256
{% for name, plugin in plugins.items() %}
53-
{{plugin.render_css()}}
57+
{% set plugin_nb = 0 %}
58+
{% for plugin_object in plugin %}
59+
{{plugin_object.render_css(plugin_nb)}}
60+
{% set plugin_nb = plugin_nb +1 %}
61+
{% endfor %}
5462
{% endfor %}
5563

5664
</style>
@@ -61,7 +69,11 @@
6169
<div class="folium-map" id="{{ map_id }}" {{ size }}></div>
6270

6371
{% for name, plugin in plugins.items() %}
64-
{{plugin.render_html()}}
72+
{% set plugin_nb = 0 %}
73+
{% for plugin_object in plugin %}
74+
{{plugin_object.render_html(plugin_nb)}}
75+
{% set plugin_nb = plugin_nb +1 %}
76+
{% endfor %}
6577
{% endfor %}
6678

6779
<script>
@@ -164,7 +176,11 @@
164176
{% if fit_bounds %}{{ fit_bounds }}{% endif %}
165177

166178
{% for name, plugin in plugins.items() %}
167-
{{plugin.render_js()}}
179+
{% set plugin_nb = 0 %}
180+
{% for plugin_object in plugin %}
181+
{{plugin_object.render_js(plugin_nb)}}
182+
{% set plugin_nb = plugin_nb +1 %}
183+
{% endfor %}
168184
{% endfor %}
169185

170186
</script>

0 commit comments

Comments
 (0)