Skip to content

Commit 092c5c1

Browse files
committed
WIP: Functionality
- Introduce PinElement - Minor javascript refactoring - Remove icon functionality
1 parent 6fcdf85 commit 092c5c1

File tree

4 files changed

+48
-25
lines changed

4 files changed

+48
-25
lines changed

examples/simple.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
from flask import Flask, render_template
2-
from flask_googlemaps import GoogleMaps, Map, icons
2+
3+
from flask_googlemaps import GoogleMaps, Map
4+
from flask_googlemaps.pin import Pin
35

46
app = Flask(__name__)
57
GoogleMaps(app)
68

9+
red = Pin(border_color="", glyph_color="",
10+
background="")
11+
blue = Pin(border_color="blue", glyph_color="",
12+
background="black")
13+
714

815
@app.route("/")
916
def map_created_in_view():
10-
1117
gmap = Map(
1218
identifier="gmap",
1319
varname="gmap",
1420
lat=37.4419,
1521
lng=-122.1419,
1622
markers={
17-
icons.dots.green: [(37.4419, -122.1419), (37.4500, -122.1350)],
18-
icons.dots.blue: [(37.4300, -122.1400, "Hello World")],
23+
red: [(37.4419, -122.1419), (37.4500, -122.1350)],
24+
blue: [(37.4300, -122.1400, "Hello World")],
1925
},
2026
style="height:400px;width:600px;margin:0;",
2127
)

flask_googlemaps/__init__.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
from flask import Blueprint, g, render_template
99
from markupsafe import Markup
1010

11-
from flask_googlemaps.icons import dots, Icon
11+
from flask_googlemaps.pin import Pin
1212

13-
DEFAULT_ICON = dots.red
13+
DEFAULT_PIN = Pin(border_color="", glyph_color="", background="")
1414
DEFAULT_CLUSTER_IMAGE_PATH = "static/images/m"
1515

1616

@@ -115,9 +115,9 @@ def build_markers(self, markers):
115115
raise AttributeError("markers accepts only dict, list and tuple")
116116

117117
if isinstance(markers, dict):
118-
for icon, marker_list in markers.items():
118+
for pin, marker_list in markers.items():
119119
for marker in marker_list:
120-
marker_dict = self.build_marker_dict(marker, icon=icon)
120+
marker_dict = self.build_marker_dict(marker, pin=pin)
121121
self.add_marker(**marker_dict)
122122
else:
123123
for marker in markers:
@@ -127,17 +127,17 @@ def build_markers(self, markers):
127127
marker_dict = self.build_marker_dict(marker)
128128
self.add_marker(**marker_dict)
129129

130-
def build_marker_dict(self, marker, icon=None):
131-
# type: (Union[List, Tuple], Optional[Icon]) -> Dict
130+
def build_marker_dict(self, marker, pin=None):
131+
# type: (Union[List, Tuple], Optional[Pin]) -> Dict
132132
marker_dict = {
133133
"lat": marker[0],
134134
"lng": marker[1],
135-
"icon": icon or DEFAULT_ICON,
135+
"pin": pin or DEFAULT_PIN,
136136
}
137137
if len(marker) > 2:
138138
marker_dict["infobox"] = marker[2]
139139
if len(marker) > 3:
140-
marker_dict["icon"] = marker[3]
140+
marker_dict["pin"] = marker[3]
141141
return marker_dict
142142

143143
def add_marker(self, lat=None, lng=None, **kwargs):
@@ -821,7 +821,7 @@ def verify_lat_lng_coordinates(self, lat, lng):
821821
def js(self):
822822
# type: () -> Markup
823823
return Markup(
824-
self.render("googlemaps/gmapjs.html", gmap=self, DEFAULT_ICON=DEFAULT_ICON)
824+
self.render("googlemaps/gmapjs.html", gmap=self, DEFAULT_PIN=DEFAULT_PIN)
825825
)
826826

827827
@property

flask_googlemaps/pin.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from dataclasses import dataclass
2+
from typing import Optional
3+
4+
5+
@dataclass(frozen=True)
6+
class Pin:
7+
border_color: str
8+
glyph_color: str
9+
background: str
10+
glyph: Optional[str] = None
11+
scale: float = 1.0

flask_googlemaps/templates/googlemaps/gmapjs.html

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{% if not is_googlemaps_loaded() and not gmap.heatmap_layer %} {% if GOOGLEMAPS_KEY %}
2-
<script async src="//maps.googleapis.com/maps/api/js?key={{GOOGLEMAPS_KEY}}&map_ids={{gmap.map_ids}}&language={{gmap.language}}&region={{gmap.region}}" type="text/javascript"></script>
2+
<script async src="//maps.googleapis.com/maps/api/js?key={{GOOGLEMAPS_KEY}}&map_ids={{gmap.map_ids}}&language={{gmap.language}}&region={{gmap.region}}&loading=async" type="text/javascript"></script>
33
{% else %}
4-
<script async src="//maps.googleapis.com/maps/api/js?language={{gmap.language}}&region={{gmap.region}}" type="text/javascript"></script>
4+
<script async src="//maps.googleapis.com/maps/api/js?language={{gmap.language}}&region={{gmap.region}}&loading=async" type="text/javascript"></script>
55
{% endif %} {{ set_googlemaps_loaded() }} {% endif %}{% if gmap.cluster %}
66
<script src="//cdnjs.cloudflare.com/ajax/libs/js-marker-clusterer/1.0.0/markerclusterer_compiled.js" type="text/javascript"></script>
77
{% endif %}{% if gmap.heatmap_layer %}{% if GOOGLEMAPS_KEY %}
8-
<script async src="//maps.googleapis.com/maps/api/js?key={{GOOGLEMAPS_KEY}}&map_ids={{gmap.map_ids}}&language={{gmap.language}}&region={{gmap.region}}&libraries=visualization" type="text/javascript"></script>
8+
<script async src="//maps.googleapis.com/maps/api/js?key={{GOOGLEMAPS_KEY}}&map_ids={{gmap.map_ids}}&language={{gmap.language}}&region={{gmap.region}}&libraries=visualization&loading=async" type="text/javascript"></script>
99
{% endif %}{% endif%}
1010

1111

@@ -82,22 +82,28 @@
8282
{% endif %}
8383

8484
// add gmap markers
85-
var raw_markers = {{gmap.markers|tojson|safe}};
86-
const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
87-
for(i=0; i<{{gmap.markers|length}};i++) {
85+
const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker");
86+
87+
for (const marker of {{gmap.markers|tojson|safe}}) {
8888
tempMarker = new AdvancedMarkerElement({
89-
position: new google.maps.LatLng(raw_markers[i].lat, raw_markers[i].lng),
89+
position: new google.maps.LatLng(marker.lat, marker.lng),
9090
map: {{gmap.varname}},
91-
title: raw_markers[i].title ? raw_markers[i].title : null,
91+
title: marker.title ? marker.title : null,
92+
content: new PinElement({
93+
glyphColor: marker.pin.glyph_color,
94+
background: marker.pin.background,
95+
borderColor: marker.pin.border_color,
96+
glyph: marker.pin.glyph,
97+
}).element,
9298
});
9399

94100

95-
if(raw_markers[i].infobox)
101+
if(marker.infobox)
96102
{
97103
google.maps.event.addListener(
98104
tempMarker,
99105
'click',
100-
getInfoCallback({{gmap.varname}}, raw_markers[i].infobox)
106+
getInfoCallback({{gmap.varname}}, marker.infobox)
101107
);
102108
}
103109

@@ -106,10 +112,10 @@
106112
google.maps.event.addListener(
107113
tempMarker,
108114
'click',
109-
function (event) { markerClickposCallback('{{gmap.markerClickpos_uri}}', event.latLng, raw_markers[i].title, raw_markers[i].label)}
115+
function (event) { markerClickposCallback('{{gmap.markerClickpos_uri}}', event.latLng, marker.title, marker.label)}
110116
);
111117
}
112-
{{gmap.varname}}_markers[i] = tempMarker;
118+
{{gmap.varname}}_markers.push(tempMarker);
113119

114120
}
115121

0 commit comments

Comments
 (0)