Repository: python-visualization/folium

Issue:
Update MapBox to v4 ?
calls to MapBox basemaps use MapBox API V3 (examples from jupyter notebook)

```python
map_mapbox = folium.Map(
    location=[48.853, 2.35], 
    zoom_start=16, 
    tiles='Mapbox',
    API_key='mytoken',
    attr=attr)

map_mapbox

```
gives wrong call to basemaps from MapBox API V3

http://b.tiles.mapbox.com/v3/mytoken/18/132783/90184.png => HTTP 400 Bad Request

using manual configuration with  MapBox API V4 

```python
map_mapbox_custo = folium.Map(
    location=[48.853, 2.35], 
    zoom_start=19, 
    tiles='https://api.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}.png?access_token=mytoken',
    attr=attr)
map_mapbox_custo
```
gives good results.

Discussion:

Patch:
diff --git a/folium/folium.py b/folium/folium.py
index 6710c088..df65b4da 100644
--- a/folium/folium.py
+++ b/folium/folium.py
@@ -47,7 +47,7 @@ _default_css = [
     ('awesome_markers_css',
      'https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css'),  # noqa
     ('awesome_rotate_css',
-     'https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/leaflet.awesome.rotate.css'),  # noqa
+     'https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css'),  # noqa
     ]
 
 
@@ -150,20 +150,16 @@ class Map(MacroElement):
 
     Examples
     --------
-    >>> m = folium.Map(location=[45.523, -122.675],
-    ...                        width=750, height=500)
-    >>> m = folium.Map(location=[45.523, -122.675],
-                               tiles='Mapbox Control Room')
-    >>> m = folium.Map(location=(45.523, -122.675), max_zoom=20,
-                               tiles='Cloudmade', API_key='YourKey')
+    >>> m = folium.Map(location=[45.523, -122.675], width=750, height=500)
+    >>> m = folium.Map(location=[45.523, -122.675], tiles='cartodb positron')
     >>> m = folium.Map(
     ...    location=[45.523, -122.675],
     ...    zoom_start=2,
-    ...    tiles='http://{s}.tiles.mapbox.com/v3/mapbox.control-room/{z}/{x}/{y}.png',
+    ...    tiles='https://api.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}.png?access_token=mytoken',
     ...    attr='Mapbox attribution'
     ...)
 
-    """
+    """  # noqa
     _template = Template(u"""
         {% macro header(this, kwargs) %}
             <meta name="viewport" content="width=device-width,
diff --git a/folium/plugins/beautify_icon.py b/folium/plugins/beautify_icon.py
index cf71c1f0..35f2e104 100644
--- a/folium/plugins/beautify_icon.py
+++ b/folium/plugins/beautify_icon.py
@@ -8,12 +8,12 @@ from jinja2 import Template
 
 _default_js = [
     ('beautify_icon_js',
-     'https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.js')
+     'https://cdn.jsdelivr.net/gh/marslan390/BeautifyMarker/leaflet-beautify-marker-icon.min.js')
     ]
 
 _default_css = [
     ('beautify_icon_css',
-     'https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.css')
+     'https://cdn.jsdelivr.net/gh/marslan390/BeautifyMarker/leaflet-beautify-marker-icon.min.css')
     ]
 
 
diff --git a/folium/plugins/dual_map.py b/folium/plugins/dual_map.py
index fb94c77f..6ac71c34 100644
--- a/folium/plugins/dual_map.py
+++ b/folium/plugins/dual_map.py
@@ -8,7 +8,7 @@ from jinja2 import Template
 
 _default_js = [
     ('Leaflet.Sync',
-     'https://rawcdn.githack.com/jieter/Leaflet.Sync/master/L.Map.Sync.js')
+     'https://cdn.jsdelivr.net/gh/jieter/Leaflet.Sync/L.Map.Sync.min.js')
     ]
 
 
diff --git a/folium/plugins/heat_map_withtime.py b/folium/plugins/heat_map_withtime.py
index 1752f5d4..77681c7f 100644
--- a/folium/plugins/heat_map_withtime.py
+++ b/folium/plugins/heat_map_withtime.py
@@ -9,18 +9,19 @@ from jinja2 import Template
 
 _default_js = [
     ('iso8601',
-     'https://rawcdn.githack.com/nezasa/iso8601-js-period/master/iso8601.min.js'),
+     'https://cdn.jsdelivr.net/npm/iso8601-js-period@0.2.1/iso8601.min.js'),
     ('leaflet.timedimension.min.js',
-     'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.min.js'),
+     'https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.min.js'),
     ('heatmap.min.js',
-     'https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_hm.min.js'),
+     'https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/pa7_hm.min.js'),
     ('leaflet-heatmap.js',
-     'https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_leaflet_hm.min.js'),
+     'https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/pa7_leaflet_hm.min.js'),
     ]
 
+
 _default_css = [
     ('leaflet.timedimension.control.min.css',
-     'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.control.min.css')
+     'https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.control.css')
     ]
 
 
diff --git a/folium/plugins/measure_control.py b/folium/plugins/measure_control.py
index afd4a48b..26d284ee 100644
--- a/folium/plugins/measure_control.py
+++ b/folium/plugins/measure_control.py
@@ -8,12 +8,12 @@ from jinja2 import Template
 
 _default_js = [
     ('leaflet_measure_js',
-     'https://rawcdn.githack.com/ljagis/leaflet-measure/2.1.7/dist/leaflet-measure.js')
+     'https://cdn.jsdelivr.net/gh/ljagis/leaflet-measure@2.1.7/dist/leaflet-measure.min.js')
     ]
 
 _default_css = [
     ('leaflet_measure_css',
-     'https://rawcdn.githack.com/ljagis/leaflet-measure/2.1.7/dist/leaflet-measure.css')
+     'https://cdn.jsdelivr.net/gh/ljagis/leaflet-measure@2.1.7/dist/leaflet-measure.min.css')
     ]
 
 
diff --git a/folium/plugins/mouse_position.py b/folium/plugins/mouse_position.py
index 119d7395..4557714e 100644
--- a/folium/plugins/mouse_position.py
+++ b/folium/plugins/mouse_position.py
@@ -8,12 +8,12 @@ from jinja2 import Template
 
 _default_js = [
     ('Control_MousePosition_js',
-     'https://rawcdn.githack.com/ardhi/Leaflet.MousePosition/c32f1c84/src/L.Control.MousePosition.js')
+     'https://cdn.jsdelivr.net/gh/ardhi/Leaflet.MousePosition/src/L.Control.MousePosition.min.js')
     ]
 
 _default_css = [
     ('Control_MousePosition_css',
-     'https://rawcdn.githack.com/ardhi/Leaflet.MousePosition/c32f1c84/src/L.Control.MousePosition.css')
+     'https://cdn.jsdelivr.net/gh/ardhi/Leaflet.MousePosition/src/L.Control.MousePosition.min.css')
     ]
 
 
diff --git a/folium/plugins/polyline_text_path.py b/folium/plugins/polyline_text_path.py
index 3ffc4365..e93ae011 100644
--- a/folium/plugins/polyline_text_path.py
+++ b/folium/plugins/polyline_text_path.py
@@ -9,7 +9,7 @@ from jinja2 import Template
 
 _default_js = [
     ('polylinetextpath',
-     'https://rawcdn.githack.com/makinacorpus/Leaflet.TextPath/leaflet0.8-dev/leaflet.textpath.js')
+     'https://cdn.jsdelivr.net/npm/leaflet-textpath@1.2.3/leaflet.textpath.min.js')
     ]
 
 
diff --git a/folium/plugins/timestamped_geo_json.py b/folium/plugins/timestamped_geo_json.py
index d7759d1a..30f6c10a 100644
--- a/folium/plugins/timestamped_geo_json.py
+++ b/folium/plugins/timestamped_geo_json.py
@@ -15,9 +15,9 @@ _default_js = [
     ('jqueryui1.10.2',
      'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js'),
     ('iso8601',
-     'https://rawcdn.githack.com/nezasa/iso8601-js-period/master/iso8601.min.js'),
+     'https://cdn.jsdelivr.net/npm/iso8601-js-period@0.2.1/iso8601.min.js'),
     ('leaflet.timedimension',
-     'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.min.js'),  # noqa
+     'https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.min.js'),  # noqa
     ('moment',
      'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js')
 ]
@@ -26,7 +26,7 @@ _default_css = [
     ('highlight.js_css',
      'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/default.min.css'),
     ('leaflet.timedimension_css',
-     'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.control.min.css')
+     'https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.control.css')
 ]
 
 
diff --git a/folium/plugins/timestamped_wmstilelayer.py b/folium/plugins/timestamped_wmstilelayer.py
index 5db02f1c..f80b1239 100644
--- a/folium/plugins/timestamped_wmstilelayer.py
+++ b/folium/plugins/timestamped_wmstilelayer.py
@@ -15,16 +15,16 @@ _default_js = [
     ('jqueryui1.10.2',
      'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js'),
     ('iso8601',
-     'https://rawcdn.githack.com/nezasa/iso8601-js-period/master/iso8601.min.js'),
+     'https://cdn.jsdelivr.net/npm/iso8601-js-period@0.2.1/iso8601.min.js'),
     ('leaflet.timedimension',
-     'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.min.js'),  # noqa
+     'https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.min.js'),  # noqa
 ]
 
 _default_css = [
     ('highlight.js_css',
      'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/default.min.css'),
     ('leaflet.timedimension_css',
-     'https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.control.min.css')  # noqa
+     'https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.control.css')  # noqa
 ]
 
 
diff --git a/folium/raster_layers.py b/folium/raster_layers.py
index 9caa78c5..5fe59ae2 100644
--- a/folium/raster_layers.py
+++ b/folium/raster_layers.py
@@ -27,9 +27,6 @@ class TileLayer(Layer):
             - "OpenStreetMap"
             - "Stamen Terrain", "Stamen Toner", "Stamen Watercolor"
             - "CartoDB positron", "CartoDB dark_matter"
-            - "Mapbox Bright", "Mapbox Control Room" (Limited zoom)
-            - "Cloudmade" (Must pass API key)
-            - "Mapbox" (Must pass API key)
 
         You can pass a custom tileset to Folium by passing a Leaflet-style
         URL to the tiles parameter: ``http://{s}.yourtiles.com/{z}/{x}/{y}.png``.
@@ -47,8 +44,6 @@ class TileLayer(Layer):
         If provided you can zoom in past this level. Else tiles will turn grey.
     attr: string, default None
         Map tile attribution; only required if passing custom tile URL.
-    API_key: str, default None
-        API key for Cloudmade or Mapbox tiles.
     detect_retina: bool, default False
         If true and user is on a retina display, it will request four
         tiles of half the specified size and a bigger zoom level in place
@@ -82,7 +77,7 @@ class TileLayer(Layer):
         """)
 
     def __init__(self, tiles='OpenStreetMap', min_zoom=0, max_zoom=18,
-                 max_native_zoom=None, attr=None, API_key=None,
+                 max_native_zoom=None, attr=None,
                  detect_retina=False, name=None, overlay=False,
                  control=True, show=True, no_wrap=False, subdomains='abc',
                  tms=False, opacity=1, **kwargs):
@@ -95,16 +90,20 @@ class TileLayer(Layer):
         self._env = ENV
 
         tiles_flat = ''.join(tiles.lower().strip().split())
-        if tiles_flat in ('cloudmade', 'mapbox') and not API_key:
-            raise ValueError('You must pass an API key if using Cloudmade'
-                             ' or non-default Mapbox tiles.')
+        if tiles_flat in {'cloudmade', 'mapbox', 'mapboxbright', 'mapboxcontrolroom'}:
+            # added in May 2020 after v0.11.0, remove in a future release
+            raise ValueError(
+                'Built-in templates for Mapbox and Cloudmade have been removed. '
+                'You can still use these providers by passing a URL to the `tiles` '
+                'argument. See the documentation of the `TileLayer` class.'
+            )
         templates = list(self._env.list_templates(
             filter_func=lambda x: x.startswith('tiles/')))
         tile_template = 'tiles/' + tiles_flat + '/tiles.txt'
         attr_template = 'tiles/' + tiles_flat + '/attr.txt'
 
         if tile_template in templates and attr_template in templates:
-            self.tiles = self._env.get_template(tile_template).render(API_key=API_key)  # noqa
+            self.tiles = self._env.get_template(tile_template).render()
             attr = self._env.get_template(attr_template).render()
         else:
             self.tiles = tiles
diff --git a/folium/templates/tiles/cloudmade/attr.txt b/folium/templates/tiles/cloudmade/attr.txt
deleted file mode 100644
index 88a97e93..00000000
--- a/folium/templates/tiles/cloudmade/attr.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery &copy; <a href="http://cloudmade.com">CloudMade</a>
diff --git a/folium/templates/tiles/cloudmade/tiles.txt b/folium/templates/tiles/cloudmade/tiles.txt
deleted file mode 100644
index 659f444f..00000000
--- a/folium/templates/tiles/cloudmade/tiles.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-http://{s}.tile.cloudmade.com/{{ API_key }}/997/256/{z}/{x}/{y}.png
\ No newline at end of file
diff --git a/folium/templates/tiles/mapbox/attr.txt b/folium/templates/tiles/mapbox/attr.txt
deleted file mode 100644
index c5f59e3a..00000000
--- a/folium/templates/tiles/mapbox/attr.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-Map tiles by &copy; <a href="http://www.mapbox.com/about/maps">Mapbox</a> Data by &copy; <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>.
diff --git a/folium/templates/tiles/mapbox/tiles.txt b/folium/templates/tiles/mapbox/tiles.txt
deleted file mode 100644
index c6d0f4c2..00000000
--- a/folium/templates/tiles/mapbox/tiles.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-http://{s}.tiles.mapbox.com/v3/{{ API_key }}/{z}/{x}/{y}.png
\ No newline at end of file
diff --git a/folium/templates/tiles/mapboxbright/attr.txt b/folium/templates/tiles/mapboxbright/attr.txt
deleted file mode 100644
index c5f59e3a..00000000
--- a/folium/templates/tiles/mapboxbright/attr.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-Map tiles by &copy; <a href="http://www.mapbox.com/about/maps">Mapbox</a> Data by &copy; <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>.
diff --git a/folium/templates/tiles/mapboxbright/tiles.txt b/folium/templates/tiles/mapboxbright/tiles.txt
deleted file mode 100644
index 11025ef8..00000000
--- a/folium/templates/tiles/mapboxbright/tiles.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-https://{s}.tiles.mapbox.com/v3/mapbox.world-bright/{z}/{x}/{y}.png
diff --git a/folium/templates/tiles/mapboxcontrolroom/attr.txt b/folium/templates/tiles/mapboxcontrolroom/attr.txt
deleted file mode 100644
index c5f59e3a..00000000
--- a/folium/templates/tiles/mapboxcontrolroom/attr.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-Map tiles by &copy; <a href="http://www.mapbox.com/about/maps">Mapbox</a> Data by &copy; <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>.
diff --git a/folium/templates/tiles/mapboxcontrolroom/tiles.txt b/folium/templates/tiles/mapboxcontrolroom/tiles.txt
deleted file mode 100644
index 6f47eb2a..00000000
--- a/folium/templates/tiles/mapboxcontrolroom/tiles.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-https://{s}.tiles.mapbox.com/v3/mapbox.control-room/{z}/{x}/{y}.png


Test patch:
diff --git a/tests/plugins/test_beautify_icon.py b/tests/plugins/test_beautify_icon.py
index 29c90c41..42d548b7 100644
--- a/tests/plugins/test_beautify_icon.py
+++ b/tests/plugins/test_beautify_icon.py
@@ -41,11 +41,11 @@ def test_beautify_icon():
     out = normalize(m._parent.render())
 
     # We verify that the script import is present.
-    script = '<script src="https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.js"></script>'  # noqa
+    script = '<script src="https://cdn.jsdelivr.net/gh/marslan390/BeautifyMarker/leaflet-beautify-marker-icon.min.js"></script>'  # noqa
     assert script in out
 
     # We verify that the css import is present.
-    css = '<link rel="stylesheet" href="https://rawcdn.githack.com/marslan390/BeautifyMarker/master/leaflet-beautify-marker-icon.css"/>'  # noqa
+    css = '<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/marslan390/BeautifyMarker/leaflet-beautify-marker-icon.min.css"/>'  # noqa
     assert css in out
 
     # We verify that the Beautiful Icons are rendered correctly.
diff --git a/tests/plugins/test_dual_map.py b/tests/plugins/test_dual_map.py
index e0292c92..43e9e062 100644
--- a/tests/plugins/test_dual_map.py
+++ b/tests/plugins/test_dual_map.py
@@ -23,7 +23,7 @@ def test_dual_map():
     assert isinstance(figure, folium.Figure)
     out = normalize(figure.render())
 
-    script = '<script src="https://rawcdn.githack.com/jieter/Leaflet.Sync/master/L.Map.Sync.js"></script>'  # noqa
+    script = '<script src="https://cdn.jsdelivr.net/gh/jieter/Leaflet.Sync/L.Map.Sync.min.js"></script>'  # noqa
     assert script in out
 
     tmpl = Template("""
diff --git a/tests/plugins/test_heat_map_withtime.py b/tests/plugins/test_heat_map_withtime.py
index 81ca109d..06c06518 100644
--- a/tests/plugins/test_heat_map_withtime.py
+++ b/tests/plugins/test_heat_map_withtime.py
@@ -26,13 +26,13 @@ def test_heat_map_with_time():
     out = normalize(m._parent.render())
 
     # We verify that the script imports are present.
-    script = '<script src="https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.min.js"></script>'  # noqa
+    script = '<script src="https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.min.js"></script>'  # noqa
     assert script in out
-    script = '<script src="https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_hm.min.js"></script>'  # noqa
+    script = '<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/pa7_hm.min.js"></script>'  # noqa
     assert script in out
-    script = '<script src="https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/pa7_leaflet_hm.min.js"></script>'  # noqa
+    script = '<script src="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/pa7_leaflet_hm.min.js"></script>'  # noqa
     assert script in out
-    script = '<link rel="stylesheet" href="https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.control.min.css"/>'  # noqa
+    script = '<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.control.css"/>'  # noqa
     assert script in out
 
     # We verify that the script part is correct.
diff --git a/tests/plugins/test_polyline_text_path.py b/tests/plugins/test_polyline_text_path.py
index 4bc6b161..c2812a1f 100644
--- a/tests/plugins/test_polyline_text_path.py
+++ b/tests/plugins/test_polyline_text_path.py
@@ -46,7 +46,7 @@ def test_polyline_text_path():
     out = normalize(m._parent.render())
 
     # We verify that the script import is present.
-    script = '<script src="https://rawcdn.githack.com/makinacorpus/Leaflet.TextPath/leaflet0.8-dev/leaflet.textpath.js"></script>'  # noqa
+    script = '<script src="https://cdn.jsdelivr.net/npm/leaflet-textpath@1.2.3/leaflet.textpath.min.js"></script>'  # noqa
     assert script in out
 
     # We verify that the script part is correct.
diff --git a/tests/plugins/test_timestamped_geo_json.py b/tests/plugins/test_timestamped_geo_json.py
index f5de8f0e..23a4e6eb 100644
--- a/tests/plugins/test_timestamped_geo_json.py
+++ b/tests/plugins/test_timestamped_geo_json.py
@@ -98,10 +98,10 @@ def test_timestamped_geo_json():
     # Verify the imports.
     assert '<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>' in out
     assert '<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>' in out
-    assert '<script src="https://rawcdn.githack.com/nezasa/iso8601-js-period/master/iso8601.min.js"></script>' in out
-    assert '<script src="https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.min.js"></script>' in out  # noqa
+    assert '<script src="https://cdn.jsdelivr.net/npm/iso8601-js-period@0.2.1/iso8601.min.js"></script>' in out
+    assert '<script src="https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.min.js"></script>' in out  # noqa
     assert '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.4/styles/default.min.css"/>' in out  # noqa
-    assert '<link rel="stylesheet" href="https://rawcdn.githack.com/socib/Leaflet.TimeDimension/master/dist/leaflet.timedimension.control.min.css"/>' in out  # noqa
+    assert '<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet-timedimension@1.1.1/dist/leaflet.timedimension.control.css"/>' in out  # noqa
     assert '<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>' in out
 
     # Verify that the script is okay.
diff --git a/tests/test_folium.py b/tests/test_folium.py
index 26a81819..a101303d 100644
--- a/tests/test_folium.py
+++ b/tests/test_folium.py
@@ -124,8 +124,6 @@ class TestFolium(object):
             "OpenStreetMap",
             "Stamen Terrain",
             "Stamen Toner",
-            "Mapbox Bright",
-            "Mapbox Control Room",
             "CartoDB positron",
             "CartoDB dark_matter",
         ]
diff --git a/tests/test_raster_layers.py b/tests/test_raster_layers.py
index 42b466c5..6bdef3f9 100644
--- a/tests/test_raster_layers.py
+++ b/tests/test_raster_layers.py
@@ -59,16 +59,6 @@ def test_custom_tile_subdomains():
     assert 'mytilesubdomain' in out
 
 
-def test_tilelayer_api_key():
-    """Test cloudmade tiles and the API key."""
-    with pytest.raises(ValueError):
-        folium.TileLayer(tiles='cloudmade')
-
-    tile_layer = folium.TileLayer(tiles='cloudmade', API_key='###')
-    cloudmade = 'http://{s}.tile.cloudmade.com/###/997/256/{z}/{x}/{y}.png'
-    assert tile_layer.tiles == cloudmade
-
-
 def test_wms():
     m = folium.Map([40, -100], zoom_start=4)
     url = 'http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi'