Skip to content

Commit 8466b17

Browse files
committed
ch19: added dealers map (/dealers).
1 parent 5672c9f commit 8466b17

File tree

4 files changed

+79
-1
lines changed

4 files changed

+79
-1
lines changed

ch19/handlers/dealers.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
var credentials = require('../credentials.js');
2+
3+
exports.home = function(req, res) {
4+
res.render('dealers', { googleApiKey: credentials.googleApiKey });
5+
};

ch19/less/main.less

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
body {
22
background-image: static("/img/background.png");
33
}
4+
5+
.dealers #map {
6+
width: 100%;
7+
height: 400px;
8+
}

ch19/routes.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ var main = require('./handlers/main.js'),
55
cartValidation = require('./lib/cartValidation.js');
66
contact = require('./handlers/contact.js'),
77
samples = require('./handlers/sample.js'),
8-
customerController = require('./controllers/customer.js');
8+
customerController = require('./controllers/customer.js'),
9+
dealers = require('./handlers/dealers.js');
910

1011
module.exports = function(app){
1112

@@ -50,6 +51,9 @@ module.exports = function(app){
5051
app.get('/data/nursery-rhyme', samples.nurseryRhymeData);
5152
app.get('/epic-fail', samples.epicFail);
5253

54+
// dealers
55+
app.get('/dealers', dealers.home);
56+
5357
// customer routes
5458
customerController.registerRoutes(app);
5559

ch19/views/dealers.handlebars

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<script src="https://maps.googleapis.com/maps/api/js?key={{googleApiKey}}&sensor=false"></script>
2+
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.3.0/handlebars.min.js"></script>
3+
4+
<script id="dealerTemplate" type="text/x-handlebars-template">
5+
\{{#each dealers}}
6+
<div class="dealer">
7+
<h3>\{{name}}</h3>
8+
\{{address1}}<br>
9+
\{{#if address2}}\{{address2}}<br>\{{/if}}
10+
\{{city}}, \{{state}} \{{zip}}<br>
11+
\{{#if country}}\{{country}}<br>\{{/if}}
12+
\{{#if phone}}\{{phone}}<br>\{{/if}}
13+
\{{#if website}}<a href="{{website}}">\{{website}}</a><br>\{{/if}}
14+
</div>
15+
\{{/each}}
16+
</script>
17+
18+
<div class="dealers">
19+
<div id="map"></div>
20+
<div id="dealerList"></div>
21+
</div>
22+
23+
{{#section 'jquery'}}
24+
<script>
25+
var map;
26+
var dealerTemplate = Handlebars.compile($('#dealerTemplate').html());
27+
$(document).ready(function(){
28+
29+
// center map on US, set zoom to show whole country
30+
var mapOptions = {
31+
center: new google.maps.LatLng(38.2562, -96.0650),
32+
zoom: 4,
33+
};
34+
35+
// initialize map
36+
map = new google.maps.Map(
37+
document.getElementById('map'),
38+
mapOptions);
39+
40+
// fetch JSON
41+
$.getJSON('/dealers.json', function(dealers){
42+
43+
// add markers on map for each dealer
44+
dealers.forEach(function(dealer){
45+
// skip any dealers without geocoding
46+
if(!dealer.lat || !dealer.lng) return;
47+
var pos = new google.maps.LatLng(dealer.lat, dealer.lng);
48+
var marker = new google.maps.Marker({
49+
position: pos,
50+
map: map,
51+
title: dealer.name
52+
});
53+
});
54+
55+
// update dealer list using Handlebars
56+
$('#dealerList').html(dealerTemplate({ dealers: dealers }));
57+
58+
});
59+
60+
});
61+
</script>
62+
{{/section}}
63+
64+

0 commit comments

Comments
 (0)