From 1d0efc758bc9404eebbc8b8d592de9dbb329899e Mon Sep 17 00:00:00 2001
From: François Frisch
Date: Sat, 17 Mar 2012 11:21:22 -0700
Subject: Adding feed reader and map
---
node_modules/montage/ui/map.reel/map.js | 283 ++++++++++++++++++++++++++++++++
1 file changed, 283 insertions(+)
create mode 100644 node_modules/montage/ui/map.reel/map.js
(limited to 'node_modules/montage/ui/map.reel/map.js')
diff --git a/node_modules/montage/ui/map.reel/map.js b/node_modules/montage/ui/map.reel/map.js
new file mode 100644
index 00000000..1e4f452c
--- /dev/null
+++ b/node_modules/montage/ui/map.reel/map.js
@@ -0,0 +1,283 @@
+/*
+ This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
+ */
+/**
+
+ @requires montage/core/core
+ @requires montage/ui/component
+*/
+var Montage = require("montage").Montage,
+ Component = require("ui/component").Component;
+
+/**
+ @class module:"montage/ui/google/map.reel".Map
+ @extends module:montage/ui/component.Component
+ */
+var Map = exports.Map = Montage.create(Component, /** @lends module:"montage/ui/toggle-switch.reel".ToggleSwitch# */ {
+
+ didCreate: {
+ value: function() {
+ var self = this;
+ window.initialize = function initialize() {
+ console.log('google maps api loaded');
+ self._mapLoaded = true;
+ self._geoCoder = new google.maps.Geocoder();
+ self.needsDraw = true;
+ };
+ }
+ },
+
+ _geoCoder: {value: null},
+
+ // HTMLElement to load the Map into
+ mapEl: {value: null},
+
+ _mapLoaded: {
+ enumerable: false,
+ value: false
+ },
+ _map: {
+ enumerable: false,
+ value: false
+ },
+ _latitude: {
+ enumerable: false,
+ value: -34.397
+ },
+ latitude: {
+ enumerable: false,
+ set: function(value) {
+ this._latitude = value;
+ this.needsDraw = true;
+ },
+ get: function() {
+ return this._latitude;
+ }
+ },
+ _longitude: {
+ enumerable: false,
+ value: -34.397
+ },
+ longitude: {
+ enumerable: false,
+ set: function(value) {
+ this._longitude = value;
+ this.needsDraw = true;
+ },
+ get: function() {
+ return this._longitude;
+ }
+ },
+
+ defaultLatLng: {
+ value: {lat: -34.397, lng: 150.644}
+ },
+
+ _latLng: {
+ value: this.defaultLatLng,
+ distinct: true
+ },
+ latLng: {
+ get: function() {
+ return this._latLng;
+ },
+ set: function(value) {
+ if(value) {
+ this._latLng = value;
+ // refresh the map
+ this.needsDraw = true;
+ }
+ }
+ },
+
+ // {lat, lon} Or a String representing the location (eg: Paris, France)
+ center: {
+ get: function() {
+ return this._center;
+ },
+ set: function(value) {
+ if(value) {
+ var self = this, geocoder = this._geoCoder;
+ this._center = value;
+ if(this._mapLoaded) {
+
+ if(String.isString(value)) {
+ // geocode
+ geocoder.geocode( { 'address': value}, function(results, status) {
+ if (status == google.maps.GeocoderStatus.OK) {
+ var loc = results[0].geometry.location;
+ self.latLng = {lat: loc.lat(), lng: loc.lng()};
+ } else {
+ console.log('Geocode was not successful : ' + status);
+ }
+ });
+ } else if(value.lat && value.lng) {
+ this.latLng = value;
+ } else {
+ // default location
+ this.latLng = this.defaultLatLng;
+ }
+
+ }
+
+ }
+
+ }
+ },
+
+ category: {
+ get: function() {
+ return this._category;
+ },
+ set: function(value) {
+ if(value) {
+ this._category = value;
+ this._getPlaces(this._category);
+ this.needsDraw = true;
+ }
+ }
+ },
+
+ zoom: {
+ value: 8
+ },
+
+ __places: {value: null},
+ _places: {
+ get: function() {
+ return this.__places;
+ },
+ set: function(value) {
+ if(value) {
+ this.__places = value;
+ this.needsDraw = true;
+ }
+ }
+ },
+
+ _getPlaces: {
+ value: function(type, keyword) {
+ var self = this;
+ var request = {
+ location: new window.google.maps.LatLng(this.latLng.lat, this.latLng.lng),
+ radius: 5000,
+ types: [type]
+ };
+ if(!this._infoWindow) {
+ this._infoWindow = new google.maps.InfoWindow();
+ }
+ var service = new google.maps.places.PlacesService(this._map);
+ service.search(request, function(results, status) {
+ if (status == google.maps.places.PlacesServiceStatus.OK) {
+ self._places = results;
+ } else {
+ self._places = [];
+ }
+ });
+ }
+ },
+
+ _infoWindow: {value: null},
+ _markers: {value: null},
+ _createMarker: {
+ value: function(place) {
+ var placeLoc = place.geometry.location, map = this._map;
+ var icon, image;
+ switch(this.category) {
+ case 'restaurant':
+ icon = '48-fork-and-knife.png';
+ break;
+ case 'hospital':
+ icon = '10-medical.png';
+ break;
+ case 'cafe':
+ icon = '34-coffee.png';
+ break;
+ case 'museum':
+ icon = '41-picture-frame.png';
+ break;
+ };
+ if(icon) {
+ image = new google.maps.MarkerImage('images/' + icon);
+ }
+ var options = {
+ map: map,
+ position: place.geometry.location
+ };
+ if(image) {
+ options.icon = image;
+ }
+
+ var marker = new google.maps.Marker(options);
+ if(!this._markers) {
+ this._markers = [];
+ }
+ this._markers.push(marker);
+
+ var infoWindow = this._infoWindow;
+ google.maps.event.addListener(marker, 'click', function() {
+ infoWindow.setContent(place.name + '
' + place.vicinity);
+ infoWindow.open(map, this);
+ });
+ }
+ },
+
+ _removeAllMarkers: {
+ value: function() {
+ if(this._markers && this._markers.length > 0) {
+ var i=0, len = this._markers.length;
+ for(i; i< len; i++) {
+ this._markers[i].setMap(null);
+ }
+ this._markers = [];
+ }
+ }
+ },
+
+
+/**
+ Description TODO
+ @function
+ */
+ draw: {
+ enumerable: false,
+ value: function () {
+
+ if(this._mapLoaded) {
+ var latLng = this.latLng || this.defaultLatLng;
+ if(!this._map) {
+ var map;
+ var myOptions = {
+ zoom: this.zoom,
+ center: new window.google.maps.LatLng(latLng.lat, latLng.lng),
+ mapTypeId: window.google.maps.MapTypeId.ROADMAP
+ };
+
+ this._map = new window.google.maps.Map(this.mapEl, myOptions);
+ } else {
+ var map = this._map;
+ map.setZoom(12);
+ var latLng = new window.google.maps.LatLng(latLng.lat, latLng.lng);
+ map.setCenter(latLng);
+ var marker = new google.maps.Marker({
+ map: map,
+ position: latLng
+ });
+
+ var places = this._places;
+ if(places && places.length > 0) {
+ this._removeAllMarkers();
+ for (var i = 0; i < places.length; i++) {
+ this._createMarker(places[i]);
+ }
+ }
+ }
+
+ }
+
+ //window.google.maps.event.addDomListener(window, 'load', initialize);
+ }
+ }
+});
--
cgit v1.2.3