|
// Note, needs to be served over HTTPS without CORS conflicts |
|
var app = angular.module("App", ["ngMaterial", "ngMap"]); |
|
// Theming |
|
app.config(function($mdThemingProvider) { |
|
$mdThemingProvider |
|
.theme("default") |
|
.primaryPalette("grey") |
|
.warnPalette("orange"); |
|
$mdThemingProvider.theme("night").primaryPalette("grey").dark(); |
|
$mdThemingProvider.alwaysWatchTheme(true); |
|
}); |
|
|
|
app.controller("ctrl", [ |
|
"$scope", |
|
"$http", |
|
"$timeout", |
|
"NgMap", |
|
"$window", |
|
function($scope, $http, $timeout, NgMap, $window) { |
|
// Scope vars |
|
$scope.results = []; |
|
$scope.theme = "night"; |
|
$scope.nightMode = true; |
|
$scope.styles1 = []; |
|
$scope.styles2 = [ |
|
{ elementType: "geometry", stylers: [{ color: "#242f3e" }] }, |
|
{ elementType: "labels.text.stroke", stylers: [{ color: "#242f3e" }] }, |
|
{ elementType: "labels.text.fill", stylers: [{ color: "#746855" }] }, |
|
{ |
|
featureType: "administrative.locality", |
|
elementType: "labels.text.fill", |
|
stylers: [{ color: "#d59563" }, { visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "poi", |
|
elementType: "labels.text.fill", |
|
stylers: [{ color: "#d59563" }] |
|
}, |
|
{ |
|
featureType: "poi.park", |
|
elementType: "geometry", |
|
stylers: [{ color: "#263c3f" }, { visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "poi.park", |
|
elementType: "labels.text.fill", |
|
stylers: [{ color: "#6b9a76" }, { visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "poi.government", |
|
stylers: [{ visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "poi.medical", |
|
stylers: [{ visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "poi.place_of_worship", |
|
stylers: [{ visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "poi.school", |
|
stylers: [{ visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "poi.sports_complex", |
|
stylers: [{ visibility: "off" }] |
|
}, |
|
{ |
|
featureType: "road", |
|
elementType: "geometry", |
|
stylers: [{ color: "#38414e" }] |
|
}, |
|
{ |
|
featureType: "road", |
|
elementType: "geometry.stroke", |
|
stylers: [{ color: "#212a37" }] |
|
}, |
|
{ |
|
featureType: "road", |
|
elementType: "labels.text.fill", |
|
stylers: [{ color: "#9ca5b3" }] |
|
}, |
|
{ |
|
featureType: "road.highway", |
|
elementType: "geometry", |
|
stylers: [{ color: "#746855" }] |
|
}, |
|
{ |
|
featureType: "road.highway", |
|
elementType: "geometry.stroke", |
|
stylers: [{ color: "#1f2835" }] |
|
}, |
|
{ |
|
featureType: "road.highway", |
|
elementType: "labels.text.fill", |
|
stylers: [{ color: "#f3d19c" }] |
|
}, |
|
{ |
|
featureType: "transit", |
|
elementType: "geometry", |
|
stylers: [{ color: "#2f3948" }] |
|
}, |
|
{ |
|
featureType: "transit.station", |
|
elementType: "labels.text.fill", |
|
stylers: [{ color: "#d59563" }] |
|
}, |
|
{ |
|
featureType: "water", |
|
elementType: "geometry", |
|
stylers: [{ color: "#17263c" }] |
|
}, |
|
{ |
|
featureType: "water", |
|
elementType: "labels.text.fill", |
|
stylers: [{ color: "#515c6d" }] |
|
}, |
|
{ |
|
featureType: "water", |
|
elementType: "labels.text.stroke", |
|
stylers: [{ color: "#17263c" }] |
|
} |
|
]; |
|
// Util Vars |
|
// scope functions: |
|
|
|
$scope.initPlaces = function(map) { |
|
$scope.myMap = map; |
|
$scope.$apply(); |
|
|
|
$scope.service = new google.maps.places.PlacesService($scope.myMap); |
|
$scope.request = { |
|
location: { |
|
lat: $scope.myMap.getCenter().lat(), |
|
lng: $scope.myMap.getCenter().lng() |
|
}, |
|
rankBy: google.maps.places.RankBy.DISTANCE, |
|
type: ["restaurant"] |
|
}; |
|
$scope.service.nearbySearch($scope.request, $scope.callback); |
|
}; |
|
|
|
$scope.callback = function(results, status) { |
|
$scope.$apply(function() { |
|
$scope.results = results; |
|
}); |
|
}; |
|
|
|
$scope.toggle = function() { |
|
$scope.theme = $scope.nightMode ? "night" : "default"; |
|
$scope.myMap.styles = $scope.nightMode ? $scope.styles2 : $scope.styles1; |
|
$scope.myMap.setOptions({ styles: $scope.myMap.styles }); |
|
}; |
|
|
|
$scope.restaurantSelect = function(location) { |
|
var marker = new google.maps.Marker({ |
|
position: location, |
|
map: $scope.myMap |
|
}); |
|
}; |
|
|
|
$scope.restaurantRate = function(restaurantId) { |
|
$window.open('//search.google.com/local/writereview?placeid='+restaurantId); |
|
}; |
|
// Init: |
|
$timeout(function() { |
|
$scope.render = true; |
|
}, 100); |
|
} |
|
]); |