Skip to content

Commit 4983f45

Browse files
committed
Implement the once method on Evented.
1 parent 8c2f753 commit 4983f45

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

folium/elements.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,19 +107,20 @@ class EventHandler(MacroElement):
107107
_template = Template(
108108
"""
109109
{% macro script(this, kwargs) %}
110-
{{ this._parent.get_name()}}.on(
110+
{{ this._parent.get_name()}}.{{ this.method }}(
111111
{{ this.event|tojson}},
112112
{{ this.handler.js_code }}
113113
);
114114
{% endmacro %}
115115
"""
116116
)
117117

118-
def __init__(self, event: str, handler: JsCode):
118+
def __init__(self, event: str, handler: JsCode, once=False):
119119
super().__init__()
120120
self._name = "EventHandler"
121121
self.event = event
122122
self.handler = handler
123+
self.method = "once" if once else "on"
123124

124125

125126
class ElementAddToElement(MacroElement):

folium/map.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
class Evented(MacroElement):
2626
"""The base class for Layer and Map
2727
28-
Adds the `on` method for event handling capabilities.
28+
Adds the `on` and `once` methods for event handling capabilities.
2929
3030
See https://leafletjs.com/reference.html#evented for
3131
more in depth documentation. Please note that we have
@@ -34,8 +34,14 @@ class Evented(MacroElement):
3434
"""
3535

3636
def on(self, **event_map: JsCode):
37+
self._add(False, **event_map)
38+
39+
def once(self, **event_map: JsCode):
40+
self._add(True, **event_map)
41+
42+
def _add(self, once, **event_map: JsCode):
3743
for event_type, handler in event_map.items():
38-
self.add_child(EventHandler(event_type, handler))
44+
self.add_child(EventHandler(event_type, handler, once))
3945

4046

4147
class Layer(Evented):

0 commit comments

Comments
 (0)