-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multiple markers with one icon #2068
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -275,7 +275,6 @@ class Icon(MacroElement): | |
var {{ this.get_name() }} = L.AwesomeMarkers.icon( | ||
{{ this.options|tojavascript }} | ||
); | ||
{{ this._parent.get_name() }}.setIcon({{ this.get_name() }}); | ||
{% endmacro %} | ||
""" | ||
) | ||
|
@@ -402,9 +401,7 @@ def __init__( | |
draggable=draggable or None, autoPan=draggable or None, **kwargs | ||
) | ||
if icon is not None: | ||
# this makes sure it is added only once | ||
self._parent.add_child(icon, name=icon.get_name(), index=0) | ||
self.icon = icon | ||
self.add_child(icon) | ||
if popup is not None: | ||
self.add_child(popup if isinstance(popup, Popup) else Popup(str(popup))) | ||
if tooltip is not None: | ||
|
@@ -421,12 +418,13 @@ def _get_self_bounds(self) -> TypeBoundsReturn: | |
return cast(TypeBoundsReturn, [self.location, self.location]) | ||
|
||
def render(self): | ||
if self.icon: | ||
self.add_child(self.SetIcon(marker=self, icon=self.icon)) | ||
if self.location is None: | ||
raise ValueError( | ||
f"{self._name} location must be assigned when added directly to map." | ||
) | ||
for child in list(self._children.values()): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This looks strange to me. A marker can have only one There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
That would not work for the case where the icon is added using By looking through the children, we catch the icon whichever way it was added. |
||
if isinstance(child, Icon): | ||
self.add_child(self.SetIcon(marker=self, icon=child)) | ||
super().render() | ||
|
||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why did the above code not work?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It worked I think, but it's not necessary.
Figure.script
is an OrderedDict, so we are already guaranteed that multiple renders of the same Icon object will result in only one entry inFigure.script
.MacroElement.render
, that one Icon object is rendered multiple timesFigure.script
with the Icon object name as key. So each render overwrites the previous one, and the result is the Icon object appears in the final output only once.