Skip to content

Commit 3c48be0

Browse files
Refactor hardcoded JS CDN links to module variables (#1312)
1 parent 2c8e2a5 commit 3c48be0

22 files changed

+315
-155
lines changed

folium/plugins/antpath.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66

77
from jinja2 import Template
88

9+
_default_js = [
10+
('antpath',
11+
'https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet-ant-path.min.js')
12+
]
13+
914

1015
class AntPath(BaseMultiLocation):
1116
"""
@@ -66,7 +71,6 @@ def render(self, **kwargs):
6671
assert isinstance(figure, Figure), ('You cannot render this Element '
6772
'if it is not in a Figure.')
6873

69-
figure.header.add_child(
70-
JavascriptLink('https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet-ant-path.min.js'), # noqa
71-
name='antpath',
72-
)
74+
# Import Javascripts
75+
for name, url in _default_js:
76+
figure.header.add_child(JavascriptLink(url), name=name)

folium/plugins/beautify_icon.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66

77
from jinja2 import Template
88

9+
_default_js = [
10+
('beautify_icon_js',
11+
'https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.js')
12+
]
13+
14+
_default_css = [
15+
('beautify_icon_css',
16+
'https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.css')
17+
]
18+
919

1020
class BeautifyIcon(MacroElement):
1121
"""
@@ -82,10 +92,11 @@ def render(self, **kwargs):
8292
figure = self.get_root()
8393
assert isinstance(figure, Figure), ('You cannot render this Element '
8494
'if it is not in a Figure.')
85-
figure.header.add_child(
86-
CssLink('https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.css'), # noqa
87-
name='beautify_icon_css')
8895

89-
figure.header.add_child(
90-
JavascriptLink('https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.js'), # noqa
91-
name='beautify_icon_js')
96+
# Import Javascripts
97+
for name, url in _default_js:
98+
figure.header.add_child(JavascriptLink(url), name=name)
99+
100+
# Import Css
101+
for name, url in _default_css:
102+
figure.header.add_child(CssLink(url), name=name)

folium/plugins/boat_marker.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77

88
from jinja2 import Template
99

10+
_default_js = [
11+
('markerclusterjs',
12+
'https://unpkg.com/leaflet.boatmarker/leaflet.boatmarker.min.js'),
13+
]
14+
1015

1116
class BoatMarker(Marker):
1217
"""Add a Marker in the shape of a boat.
@@ -65,6 +70,6 @@ def render(self, **kwargs):
6570
assert isinstance(figure, Figure), ('You cannot render this Element '
6671
'if it is not in a Figure.')
6772

68-
figure.header.add_child(
69-
JavascriptLink('https://unpkg.com/leaflet.boatmarker/leaflet.boatmarker.min.js'), # noqa
70-
name='markerclusterjs')
73+
# Import Javascripts
74+
for name, url in _default_js:
75+
figure.header.add_child(JavascriptLink(url), name=name)

folium/plugins/draw.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44

55
from jinja2 import Template
66

7+
_default_js = [
8+
('leaflet_draw_js',
9+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.2/leaflet.draw.js')
10+
]
11+
12+
_default_css = [
13+
('leaflet_draw_css',
14+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.2/leaflet.draw.css')
15+
]
16+
717

818
class Draw(MacroElement):
919
"""
@@ -101,10 +111,13 @@ def render(self, **kwargs):
101111
assert isinstance(figure, Figure), ('You cannot render this Element '
102112
'if it is not in a Figure.')
103113

104-
figure.header.add_child(
105-
JavascriptLink('https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.2/leaflet.draw.js')) # noqa
106-
figure.header.add_child(
107-
CssLink('https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.2/leaflet.draw.css')) # noqa
114+
# Import Javascripts
115+
for name, url in _default_js:
116+
figure.header.add_child(JavascriptLink(url), name=name)
117+
118+
# Import Css
119+
for name, url in _default_css:
120+
figure.header.add_child(CssLink(url), name=name)
108121

109122
export_style = """
110123
<style>

folium/plugins/dual_map.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
from jinja2 import Template
2-
31
from branca.element import MacroElement, Figure, JavascriptLink
42

53
from folium.folium import Map
64
from folium.map import LayerControl
75
from folium.utilities import deep_copy
86

7+
from jinja2 import Template
8+
9+
_default_js = [
10+
('Leaflet.Sync',
11+
'https://rawcdn.githack.com/jieter/Leaflet.Sync/master/L.Map.Sync.js')
12+
]
13+
914

1015
class DualMap(MacroElement):
1116
"""Create two maps in the same window.
@@ -93,8 +98,9 @@ def render(self, **kwargs):
9398
assert isinstance(figure, Figure), ('You cannot render this Element '
9499
'if it is not in a Figure.')
95100

96-
figure.header.add_child(JavascriptLink('https://rawcdn.githack.com/jieter/Leaflet.Sync/master/L.Map.Sync.js'), # noqa
97-
name='Leaflet.Sync')
101+
# Import Javascripts
102+
for name, url in _default_js:
103+
figure.header.add_child(JavascriptLink(url), name=name)
98104

99105
super(DualMap, self).render(**kwargs)
100106

folium/plugins/feature_group_sub_group.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66

77
from jinja2 import Template
88

9+
_default_js = [
10+
('featuregroupsubgroupjs',
11+
'https://unpkg.com/[email protected]/dist/leaflet.featuregroup.subgroup.js'),
12+
]
13+
914

1015
class FeatureGroupSubGroup(Layer):
1116
"""
@@ -78,6 +83,6 @@ def render(self, **kwargs):
7883
assert isinstance(figure, Figure), ('You cannot render this Element '
7984
'if it is not in a Figure.')
8085

81-
figure.header.add_child(
82-
JavascriptLink('https://unpkg.com/[email protected]/dist/leaflet.featuregroup.subgroup.js'), # noqa
83-
name='featuregroupsubgroupjs')
86+
# Import Javascripts
87+
for name, url in _default_js:
88+
figure.header.add_child(JavascriptLink(url), name=name)

folium/plugins/fullscreen.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66

77
from jinja2 import Template
88

9+
_default_js = [
10+
('Control.Fullscreen.js',
11+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet.fullscreen/1.4.2/Control.FullScreen.min.js')
12+
]
13+
14+
_default_css = [
15+
('Control.FullScreen.css',
16+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet.fullscreen/1.4.2/Control.FullScreen.min.css')
17+
]
18+
919

1020
class Fullscreen(MacroElement):
1121
"""
@@ -27,7 +37,6 @@ class Fullscreen(MacroElement):
2737
force seperate button to detach from zoom buttons,
2838
2939
See https://github.com/brunob/leaflet.fullscreen for more information.
30-
3140
"""
3241
_template = Template("""
3342
{% macro script(this, kwargs) %}
@@ -57,12 +66,10 @@ def render(self, **kwargs):
5766
assert isinstance(figure, Figure), ('You cannot render this Element '
5867
'if it is not in a Figure.')
5968

60-
figure.header.add_child(
61-
JavascriptLink('https://cdnjs.cloudflare.com/ajax/libs/leaflet.fullscreen/1.4.2/Control.FullScreen.min.js'), # noqa
62-
name='Control.Fullscreen.js'
63-
)
69+
# Import Javascripts
70+
for name, url in _default_js:
71+
figure.header.add_child(JavascriptLink(url), name=name)
6472

65-
figure.header.add_child(
66-
CssLink('https://cdnjs.cloudflare.com/ajax/libs/leaflet.fullscreen/1.4.2/Control.FullScreen.min.css'), # noqa
67-
name='Control.FullScreen.css'
68-
)
73+
# Import Css
74+
for name, url in _default_css:
75+
figure.header.add_child(CssLink(url), name=name)

folium/plugins/heat_map.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515

1616
import numpy as np
1717

18+
_default_js = [
19+
('leaflet-heat.js',
20+
'https://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js'),
21+
]
22+
1823

1924
class HeatMap(Layer):
2025
"""
@@ -84,16 +89,17 @@ def render(self, **kwargs):
8489
assert isinstance(figure, Figure), ('You cannot render this Element '
8590
'if it is not in a Figure.')
8691

87-
figure.header.add_child(
88-
JavascriptLink('https://leaflet.github.io/Leaflet.heat/dist/leaflet-heat.js'), # noqa
89-
name='leaflet-heat.js')
92+
# Import Javascripts
93+
for name, url in _default_js:
94+
figure.header.add_child(JavascriptLink(url), name=name)
9095

9196
def _get_self_bounds(self):
9297
"""
9398
Computes the bounds of the object itself (not including it's children)
9499
in the form [[lat_min, lon_min], [lat_max, lon_max]].
95100
96101
"""
102+
97103
bounds = [[None, None], [None, None]]
98104
for point in self.data:
99105
bounds = [

folium/plugins/heat_map_withtime.py

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@
77

88
from jinja2 import Template
99

10+
_default_js = [
11+
('iso8601',
12+
'https://rawcdn.githack.com/nezasa/iso8601-js-period/master/iso8601.min.js'),
13+
('leaflet.timedimension.min.js',
14+
'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.min.js'),
15+
('heatmap.min.js',
16+
'https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_hm.min.js'),
17+
('leaflet-heatmap.js',
18+
'https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_leaflet_hm.min.js'),
19+
]
20+
21+
_default_css = [
22+
('leaflet.timedimension.control.min.css',
23+
'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.control.min.css')
24+
]
25+
1026

1127
class HeatMapWithTime(Layer):
1228
"""
@@ -161,26 +177,13 @@ def render(self, **kwargs):
161177
assert isinstance(figure, Figure), ('You cannot render this Element '
162178
'if it is not in a Figure.')
163179

164-
figure.header.add_child(
165-
JavascriptLink('https://rawcdn.githack.com/nezasa/iso8601-js-period/master/iso8601.min.js'), # noqa
166-
name='iso8601')
167-
168-
figure.header.add_child(
169-
JavascriptLink('https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.min.js'), # noqa
170-
name='leaflet.timedimension.min.js')
171-
172-
figure.header.add_child(
173-
JavascriptLink(
174-
'https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_hm.min.js'), # noqa
175-
name='heatmap.min.js')
180+
# Import Javascripts
181+
for name, url in _default_js:
182+
figure.header.add_child(JavascriptLink(url), name=name)
176183

177-
figure.header.add_child(
178-
JavascriptLink('https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_leaflet_hm.min.js'), # noqa
179-
name='leaflet-heatmap.js')
180-
181-
figure.header.add_child(
182-
CssLink('https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.control.min.css'), # noqa
183-
name='leaflet.timedimension.control.min.css')
184+
# Import Css
185+
for name, url in _default_css:
186+
figure.header.add_child(CssLink(url), name=name)
184187

185188
figure.header.add_child(
186189
Element(

folium/plugins/locate_control.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,20 @@
55

66
from branca.element import CssLink, Figure, JavascriptLink, MacroElement
77

8-
from jinja2 import Template
98
from folium.utilities import parse_options
109

10+
from jinja2 import Template
11+
12+
_default_js = [
13+
('Control_locate_min_js',
14+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet-locatecontrol/0.66.2/L.Control.Locate.min.js')
15+
]
16+
17+
_default_css = [
18+
('Control_locate_min_css',
19+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet-locatecontrol/0.66.2/L.Control.Locate.min.css')
20+
]
21+
1122

1223
class LocateControl(MacroElement):
1324
"""Control plugin to geolocate the user.
@@ -66,8 +77,10 @@ def render(self, **kwargs):
6677
assert isinstance(figure, Figure), ('You cannot render this Element '
6778
'if it is not in a Figure.')
6879

69-
figure.header.add_child(
70-
CssLink(
71-
"https://cdnjs.cloudflare.com/ajax/libs/leaflet-locatecontrol/0.66.2/L.Control.Locate.min.css")) # noqa
72-
figure.header.add_child(JavascriptLink(
73-
"https://cdnjs.cloudflare.com/ajax/libs/leaflet-locatecontrol/0.66.2/L.Control.Locate.min.js")) # noqa
80+
# Import Javascripts
81+
for name, url in _default_js:
82+
figure.header.add_child(JavascriptLink(url), name=name)
83+
84+
# Import Css
85+
for name, url in _default_css:
86+
figure.header.add_child(CssLink(url), name=name)

folium/plugins/marker_cluster.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@
77

88
from jinja2 import Template
99

10+
_default_js = [
11+
('markerclusterjs',
12+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/leaflet.markercluster.js')
13+
]
14+
15+
_default_css = [
16+
('markerclustercss',
17+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/MarkerCluster.css'),
18+
('markerclusterdefaultcss',
19+
'https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/MarkerCluster.Default.css')
20+
]
21+
1022

1123
class MarkerCluster(Layer):
1224
"""
@@ -87,14 +99,10 @@ def render(self, **kwargs):
8799
assert isinstance(figure, Figure), ('You cannot render this Element '
88100
'if it is not in a Figure.')
89101

90-
figure.header.add_child(
91-
JavascriptLink('https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/leaflet.markercluster.js'), # noqa
92-
name='markerclusterjs')
93-
94-
figure.header.add_child(
95-
CssLink('https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/MarkerCluster.css'), # noqa
96-
name='markerclustercss')
102+
# Import Javascripts
103+
for name, url in _default_js:
104+
figure.header.add_child(JavascriptLink(url), name=name)
97105

98-
figure.header.add_child(
99-
CssLink('https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/MarkerCluster.Default.css'), # noqa
100-
name='markerclusterdefaultcss')
106+
# Import Css
107+
for name, url in _default_css:
108+
figure.header.add_child(CssLink(url), name=name)

0 commit comments

Comments
 (0)