index.html
<html>
<head>
<title>Lexington Beer Establishments</title>
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link href='https://api.tiles.mapbox.com/mapbox.js/v1.4.0/mapbox.css' rel='stylesheet' />
<link media="screen" rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/maptimelex/spreadsheet-sorcery/gh-pages/beer-map/css/site.css">
</head>
<body>
<div id="wrapper">
<h1>Lexington Area Beer Establishments</h1>
<div class="container">
<div id="infoPane">
<div id="selectedBeer"></div>
</div>
<div id="map"></div>
</div>
<div class="container">
<input id="tableFilter" type="text" placeholder="filter by.."></input>
| <span class="clear">Clear</span> | <span class="resetMap">Reset Map</span> |
<br>
<span class="noMatches">no matches</span>
<div id="beerTable"></div>
</div>
<div id="info" class="container">
<h3>About the map</h3>
<p>Data for this map were collected from <a href="//www.lexbeerscene.com/" target="_blank">LexBeerScene.com's</a> directory of <a href="//www.lexbeerscene.com/localestablishments" target="_blank">local beer establishments</a>. You can access the Google Spreadsheet of the data <a href="https://docs.google.com/spreadsheets/d/13Xd93PIiGvGh2JQ6uygnsUTTLAlJu7F7TE-doTy-5OY/edit#gid=1993162178" target="_blank">here</a></p>
<p>This map was primarily built using <a href="//jlord.us/sheetsee.js/" target="_blank">SheetseeJS</a> and <a href="https://www.mapbox.com/mapbox.js/api/v2.2.3/" target="_blank">MapboxJS</a>/<a href="//leafletjs.com/" target="_blank">LeafletJS</a>. The design and functionaliy draw heavily on <a href="https://twitter.com/jllord" target="_blank">Jessica Lord's</a> "Hack Spots" map (<a href="//jlord.us/hack-spots/" target="_blank">map</a> | <a href="https://github.com/jlord/hack-spots" target="_blank">code</a>).</p>
<p>Icon Credit: <a href="https://thenounproject.com/search/?q=beer&i=124636" target="_blank">Beer by Fabián Sanabria from the Noun Project.</a></p>
</div>
</div>
<script id="selectedBeer" type="text/html">
{{#rows}}
<h4>SELECTED SPOT</h4>
<img class="establishmentIcon" src="{{icon}}">
<h2>{{name}}</h2>
<p>{{address}}<p>
<p>{{city}}{{#state}}, {{state}}{{/state}}{{#zip}}, {{zip}}{{/zip}}</p>
<ul>
{{#website}}<li><span class="category"><a href="{{website}}" target="_blank">Website</a></span></li>{{/website}}
{{#phone}}<li><span class="category">Phone:</span> {{phone}}</li>{{/phone}}
{{#taps}}<li><span class="category"># of Taps:</span> {{taps}}</li>{{/taps}}
{{#food}}<li><span class="category">Food ?:</span> {{food}}</li>{{/food}}
</ul>
{{/rows}}
</script>
<script id="beerTable" type="text/html">
<table>
<tr><th class="tHeader">Name</th><th class="tHeader">City</th><th class="tHeader">Type</th></tr>
{{#rows}}
<tr id="{{rowNumber}}" class="beerRow"><td>{{name}}</td><td>{{city}}</td><td>{{type}}</td></tr>
{{/rows}}
</table>
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src='https://cdn.rawgit.com/maptimelex/spreadsheet-sorcery/gh-pages/beer-map/js/tabletop1.3.4.js'></script>
<script src='https://cdn.rawgit.com/maptimelex/spreadsheet-sorcery/gh-pages/beer-map/js/sheetsee.js'></script>
<script type="text/javascript" src="app.js"></script>
</body>
</html>
app.js
document.addEventListener('DOMContentLoaded', function() {
var gData
var URL = "13Xd93PIiGvGh2JQ6uygnsUTTLAlJu7F7TE-doTy-5OY"
Tabletop.init({
key: URL,
callback: showInfo,
simpleSheet: true
})
})
function showInfo(gData) {
tableOptions = {
"data": gData,
"tableDiv": "#beerTable",
"filterDiv": "#tableFilter"
}
Sheetsee.makeTable(tableOptions)
Sheetsee.initiateTableFilter(tableOptions)
var optionsJSON = ["rowNumber", "name", "icon", "city", "type"]
var geoJSON = Sheetsee.createGeoJSON(gData, optionsJSON)
console.log(geoJSON);
var map = Sheetsee.loadMap("map")
var stamenToner = L.tileLayer('http://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png', {
attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> — Map data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);
markerLayer = L.geoJson(geoJSON,{
pointToLayer: function(feature,latlng) {
var featureIcon = L.icon({
iconUrl:'img/beer.png',
iconSize: [18,18],
popupAnchor: [0, -9]
})
var marker = L.marker(latlng,{
icon: featureIcon
});
var popupContent = "<div style='color: whitesmoke;'><h2>" + feature.opts.name + "</h2><p>" + feature.opts.city + " | " + feature.opts.type + "</p><img class='establishmentIcon' src='" + feature.opts.icon + "'></div>"
marker.bindPopup(popupContent);
return marker
}
}).addTo(map);
map.fitBounds(markerLayer.getBounds())
$('.beerRow').on("click", function(event) {
$('.beerRow').removeClass("selectedRow")
var rowNumber = $(this).closest("tr").attr("id")
$('#' + rowNumber).addClass("selectedRow")
var dataElement = Sheetsee.getMatches(gData, rowNumber, "rowNumber")
var selectedBeer = Sheetsee.ich.selectedBeer({
rows: dataElement
})
console.log(selectedBeer)
$('#selectedBeer').html(selectedBeer).css("display", "inline")
var selectedCoords = [dataElement[0].lat, dataElement[0].long]
map.setView(selectedCoords, 17)
})
markerLayer.on('click', function(e) {
$('.beerRow').removeClass("selectedRow")
var rowNumber = e.layer.feature.opts.rowNumber
$('#' + rowNumber).addClass("selectedRow")
var dataElement = Sheetsee.getMatches(gData, rowNumber.toString(), "rowNumber")
var selectedBeer = Sheetsee.ich.selectedBeer({
rows: dataElement
})
selectedMarkerLocation = [dataElement[0].lat, dataElement[0].long]
map.setView(selectedMarkerLocation, 17)
$('#selectedBeer').html(selectedBeer).css("display", "inline")
})
$('.resetMap').click(function() {
$('.beerRow').removeClass("selectedRow")
$('#selectedBeer').css("display", "none")
map.fitBounds(markerLayer.getBounds())
})
}