<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@*" data-semver="1.2.0-rc2" src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script>
<script src="angularjs-google-places.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="mainCtrl">
<img src="https://maps.gstatic.com/mapfiles/api-3/images/powered-by-google-on-white2.png"/>
<h3>Detailed Place Search Example</h3>
<p>{{details || "loading..."}}</p>
<h3>Nearby Place Search Example</h3>
<p>{{data || "loading..."}}</p>
</div>
</body>
</html>
var myApp = angular.module('myApp',['ngGPlaces']);
myApp.controller('mainCtrl',function($scope,ngGPlacesAPI){
$scope.details = ngGPlacesAPI.placeDetails({reference:"CnRnAAAAnRm_imIW_SFd74bsj6iRwvRxBamZqtUaSyRjlb-i1vvkapOSVXyA5Dj452GSpBpno_MHbxyGsuFx9zqZvr_aa2a7uG0IZE8tC-N2OccvUC_i5N3QRQ11WmSRayo441riHebwQGqlbaf3RY-5KVsfGBIQXGtmUICHsD9LH2rd_y-J2hoUvW0lUEIHHtRnD15QyeUqi6tkHIg"}).then(function (data) {
return data;
});
$scope.data = ngGPlacesAPI.nearbySearch({latitude:-33.8665433, longitude:151.1956316}).then(function(data){
return data;
});
});
'use strict';
angular.module('ngGPlaces', []);
angular.module('ngGPlaces').value('gPlaces',google.maps.places);
angular.module('ngGPlaces').value('gMaps',google.maps);
angular.module('ngGPlaces').
provider('ngGPlacesAPI', function () {
var defaults = {
radius: 1000,
sensor: false,
latitude: null,
longitude: null,
types: ['food'],
map: null,
elem: null,
nearbySearchKeys: ['name','reference','vicinity'],
placeDetailsKeys: ['formatted_address', 'formatted_phone_number', 'reference', 'website'],
nearbySearchErr: 'Unable to find nearby places',
placeDetailsErr: 'Unable to find place details',
_nearbySearchApiFnCall: 'nearbySearch',
_placeDetailsApiFnCall: 'getDetails'
};
var parseNSJSON = function (response) {
var pResp = [];
var keys = defaults.nearbySearchKeys;
response.map(function (result) {
var obj = {};
angular.forEach(keys, function (k) {
obj[k] = result[k];
});
pResp.push(obj);
});
return pResp;
};
var parsePDJSON = function (response) {
var pResp = {};
var keys = defaults.placeDetailsKeys;
angular.forEach(keys, function (k) {
pResp[k] = response[k];
});
return pResp;
};
this.$get = function ($rootScope,$q,gMaps,gPlaces,$window) {
function commonAPI (args) {
var req = angular.copy(defaults, {});
angular.extend(req, args);
var deferred = $q.defer();
var elem, service;
function callback(results, status) {
if (status == gPlaces.PlacesServiceStatus.OK) {
$rootScope.$apply(function(){
return deferred.resolve(req._parser(results));
});
}
else {
$rootScope.$apply(function(){
deferred.reject(req._errorMsg);
});
}
}
if (req._genLocation) {
req.location = new gMaps.LatLng(req.latitude,req.longitude);
}
if (req.map) {
elem = req.map;
}
else if (req.elem) {
elem = req.elem;
}
else {
elem = $window.document.createElement('div');
}
service = new gPlaces.PlacesService(elem);
service[req._apiFnCall](req, callback);
return deferred.promise;
}
return {
getDefaults: function () {
return defaults;
},
nearbySearch: function (args) {
args._genLocation = true;
args._errorMsg = defaults.nearbySearchErr;
args._parser = parseNSJSON;
args._apiFnCall = defaults._nearbySearchApiFnCall;
return commonAPI(args);
},
placeDetails: function (args) {
args._errorMsg = defaults.placeDetailsErr;
args._parser = parsePDJSON;
args._apiFnCall = defaults._placeDetailsApiFnCall;
return commonAPI(args);
}
};
};
this.$get.$inject = ['$rootScope','$q','gMaps','gPlaces','$window'];
this.setDefaults = function (args) {
angular.extend(defaults, args);
};
});
/*! angularjs-google-places 24-09-2013 */
"use strict";angular.module("ngGPlaces",[]),angular.module("ngGPlaces").value("gPlaces",google.maps.places),angular.module("ngGPlaces").value("gMaps",google.maps),angular.module("ngGPlaces").provider("ngGPlacesAPI",function(){var a={radius:1e3,sensor:!1,latitude:null,longitude:null,types:["food"],map:null,elem:null,nearbySearchKeys:["name","reference","vicinity"],placeDetailsKeys:["formatted_address","formatted_phone_number","reference","website"],nearbySearchErr:"Unable to find nearby places",placeDetailsErr:"Unable to find place details",_nearbySearchApiFnCall:"nearbySearch",_placeDetailsApiFnCall:"getDetails"},b=function(b){var c=[],d=a.nearbySearchKeys;return b.map(function(a){var b={};angular.forEach(d,function(c){b[c]=a[c]}),c.push(b)}),c},c=function(b){var c={},d=a.placeDetailsKeys;return angular.forEach(d,function(a){c[a]=b[a]}),c};this.$get=function(d,e,f,g,h){function i(b){function c(a,b){b==g.PlacesServiceStatus.OK?d.$apply(function(){return l.resolve(i._parser(a))}):d.$apply(function(){l.reject(i._errorMsg)})}var i=angular.copy(a,{});angular.extend(i,b);var j,k,l=e.defer();return i._genLocation&&(i.location=new f.LatLng(i.latitude,i.longitude)),j=i.map?i.map:i.elem?i.elem:h.document.createElement("div"),k=new g.PlacesService(j),k[i._apiFnCall](i,c),l.promise}return{getDefaults:function(){return a},nearbySearch:function(c){return c._genLocation=!0,c._errorMsg=a.nearbySearchErr,c._parser=b,c._apiFnCall=a._nearbySearchApiFnCall,i(c)},placeDetails:function(b){return b._errorMsg=a.placeDetailsErr,b._parser=c,b._apiFnCall=a._placeDetailsApiFnCall,i(b)}}},this.$get.$inject=["$rootScope","$q","gMaps","gPlaces","$window"],this.setDefaults=function(b){angular.extend(a,b)}});