diff --git a/gulpfile.js b/gulpfile.js
index a4dad77..1a89936 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -22,6 +22,7 @@ var paths = {
'!**/url-search-params/**/*.js'
]).concat([
'js/Util.js',
+ 'js/Map.js',
'js/router/BRouter.js',
'js/plugin/*.js',
'js/control/*.js',
diff --git a/js/Map.js b/js/Map.js
new file mode 100644
index 0000000..5243f80
--- /dev/null
+++ b/js/Map.js
@@ -0,0 +1,126 @@
+BR.Map = {
+
+ initMap: function() {
+ var map,
+ layersControl;
+
+ L.Icon.Default.imagePath = 'dist/images';
+
+ var osmAttribution = '© OpenStreetMap contributors';
+ var maxZoom = 19;
+
+ var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
+ maxZoom: maxZoom,
+ attribution: 'tiles ' + osmAttribution
+ });
+
+ var osmde = L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', {
+ maxNativeZoom: 18,
+ maxZoom: maxZoom,
+ attribution: 'tiles by openstreetmap.de ' + osmAttribution
+ });
+
+ var topo = L.tileLayer('http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
+ maxNativeZoom: 17,
+ maxZoom: maxZoom,
+ attribution: 'tiles © OpenTopoMap, CC-BY-SA'
+ + ', SRTM'
+ });
+
+ var thunderforestAttribution = 'tiles © Thunderforest '
+ + '(CC-BY-SA 2.0)';
+ var cycle = L.tileLayer('http://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png', {
+ maxNativeZoom: 18,
+ maxZoom: maxZoom,
+ attribution: thunderforestAttribution
+ });
+ var outdoors = L.tileLayer('http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png', {
+ maxNativeZoom: 18,
+ maxZoom: maxZoom,
+ attribution: thunderforestAttribution
+ });
+
+ var cycling = L.tileLayer('http://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', {
+ maxNativeZoom: 18,
+ maxZoom: maxZoom,
+ opacity: 0.7,
+ attribution: 'Cycling © Waymarked Trails '
+ + '(CC-BY-SA 3.0 DE)'
+ });
+ var hiking = L.tileLayer('http://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png', {
+ maxNativeZoom: 18,
+ maxZoom: maxZoom,
+ opacity: 0.7,
+ attribution: 'Hiking © Waymarked Trails '
+ + '(CC-BY-SA 3.0 DE)'
+ });
+
+ // COPYING: Please get your own Bing maps key at http://www.microsoft.com/maps/default.aspx
+ var bing = new BR.BingLayer();
+ BR.Util.get(BR.conf.bingKeyUrl, function (err, key) {
+ if (err) {
+ layersControl.removeLayer(bing);
+ return;
+ }
+
+ bing._key = key;
+ bing.loadMetadata();
+ });
+
+ map = new L.Map('map', {
+ worldCopyJump: true
+ });
+ if (!map.restoreView()) {
+ map.setView([50.99, 9.86], 6);
+ }
+ map.attributionControl.addAttribution(
+ 'BRouter © Arndt Brenschede, '
+ + 'routing + map data © OpenStreetMap contributors '
+ + '(ODbL)');
+
+ var baseLayers = {
+ 'OpenStreetMap': osm,
+ 'OpenStreetMap.de': osmde,
+ 'OpenTopoMap': topo,
+ 'OpenCycleMap (Thunderf.)': cycle,
+ 'Outdoors (Thunderforest)': outdoors,
+ 'Bing Aerial': bing
+ };
+ var overlays = {
+ 'Cycling (Waymarked Trails)': cycling,
+ 'Hiking (Waymarked Trails)': hiking
+ };
+
+ if (BR.conf.clearBaseLayers) {
+ baseLayers = {};
+ }
+ for (i in BR.conf.baseLayers) {
+ if (BR.conf.baseLayers.hasOwnProperty(i)) {
+ baseLayers[i] = L.tileLayer(BR.conf.baseLayers[i]);
+ }
+ }
+
+ for (i in BR.conf.overlays) {
+ if (BR.conf.overlays.hasOwnProperty(i)) {
+ overlays[i] = L.tileLayer(BR.conf.overlays[i]);
+ }
+ }
+ // after applying custom base layer configurations, add first base layer to map
+ var firstLayer = baseLayers[Object.keys(baseLayers)[0]];
+ if (firstLayer) {
+ map.addLayer(firstLayer);
+ }
+
+ layersControl = L.control.layers(baseLayers, overlays).addTo(map);
+
+ // expose map instance for console debugging
+ BR.debug = BR.debug || {};
+ BR.debug.map = map;
+
+ return {
+ map: map,
+ layersControl: layersControl
+ };
+ }
+
+};
\ No newline at end of file
diff --git a/js/index.js b/js/index.js
index 0f0d560..61569fd 100644
--- a/js/index.js
+++ b/js/index.js
@@ -6,126 +6,12 @@
(function() {
- var map,
- layersControl;
+ var mapContext;
- function initMap() {
- L.Icon.Default.imagePath = 'dist/images';
-
- var osmAttribution = '© OpenStreetMap contributors';
- var maxZoom = 19;
-
- var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
- maxZoom: maxZoom,
- attribution: 'tiles ' + osmAttribution
- });
-
- var osmde = L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', {
- maxNativeZoom: 18,
- maxZoom: maxZoom,
- attribution: 'tiles by openstreetmap.de ' + osmAttribution
- });
-
- var topo = L.tileLayer('http://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
- maxNativeZoom: 17,
- maxZoom: maxZoom,
- attribution: 'tiles © OpenTopoMap, CC-BY-SA'
- + ', SRTM'
- });
-
- var thunderforestAttribution = 'tiles © Thunderforest '
- + '(CC-BY-SA 2.0)';
- var cycle = L.tileLayer('http://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png', {
- maxNativeZoom: 18,
- maxZoom: maxZoom,
- attribution: thunderforestAttribution
- });
- var outdoors = L.tileLayer('http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png', {
- maxNativeZoom: 18,
- maxZoom: maxZoom,
- attribution: thunderforestAttribution
- });
-
- var cycling = L.tileLayer('http://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', {
- maxNativeZoom: 18,
- maxZoom: maxZoom,
- opacity: 0.7,
- attribution: 'Cycling © Waymarked Trails '
- + '(CC-BY-SA 3.0 DE)'
- });
- var hiking = L.tileLayer('http://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png', {
- maxNativeZoom: 18,
- maxZoom: maxZoom,
- opacity: 0.7,
- attribution: 'Hiking © Waymarked Trails '
- + '(CC-BY-SA 3.0 DE)'
- });
-
- // COPYING: Please get your own Bing maps key at http://www.microsoft.com/maps/default.aspx
- var bing = new BR.BingLayer();
- BR.Util.get(BR.conf.bingKeyUrl, function (err, key) {
- if (err) {
- layersControl.removeLayer(bing);
- return;
- }
-
- bing._key = key;
- bing.loadMetadata();
- });
-
- map = new L.Map('map', {
- worldCopyJump: true
- });
- if (!map.restoreView()) {
- map.setView([50.99, 9.86], 6);
- }
- map.attributionControl.addAttribution(
- 'BRouter © Arndt Brenschede, '
- + 'routing + map data © OpenStreetMap contributors '
- + '(ODbL)');
-
- var baseLayers = {
- 'OpenStreetMap': osm,
- 'OpenStreetMap.de': osmde,
- 'OpenTopoMap': topo,
- 'OpenCycleMap (Thunderf.)': cycle,
- 'Outdoors (Thunderforest)': outdoors,
- 'Bing Aerial': bing
- };
- var overlays = {
- 'Cycling (Waymarked Trails)': cycling,
- 'Hiking (Waymarked Trails)': hiking
- };
-
- if (BR.conf.clearBaseLayers) {
- baseLayers = {};
- }
- for (i in BR.conf.baseLayers) {
- if (BR.conf.baseLayers.hasOwnProperty(i)) {
- baseLayers[i] = L.tileLayer(BR.conf.baseLayers[i]);
- }
- }
-
- for (i in BR.conf.overlays) {
- if (BR.conf.overlays.hasOwnProperty(i)) {
- overlays[i] = L.tileLayer(BR.conf.overlays[i]);
- }
- }
- // after applying custom base layer configurations, add first base layer to map
- var firstLayer = baseLayers[Object.keys(baseLayers)[0]];
- if (firstLayer) {
- map.addLayer(firstLayer);
- }
-
- layersControl = L.control.layers(baseLayers, overlays).addTo(map);
-
- // expose map instance for console debugging
- BR.debug = BR.debug || {};
- BR.debug.map = map;
- }
-
- function initApp() {
- var search,
+ function initApp(mapContext) {
+ var map = mapContext.map,
+ layersControl = mapContext.layersControl,
+ search,
router,
routing,
routesLayer,
@@ -394,7 +280,7 @@
L.control.scale().addTo(map);
}
- initMap();
- initApp();
+ mapContext = BR.Map.initMap();
+ initApp(mapContext);
})();