diff --git a/app/views/applications/show.html.haml b/app/views/applications/show.html.haml
index b687f20db..d77e2b3a5 100644
--- a/app/views/applications/show.html.haml
+++ b/app/views/applications/show.html.haml
@@ -90,49 +90,9 @@
- if @application.location
:javascript
$(document).ready(function(){
- var map = new mxn.Mapstraction("map_div","google");
- point = new mxn.LatLonPoint(#{@application.lat},#{@application.lng});
- map.setCenterAndZoom(point,16);
- map.addControls({ zoom: 'small' });
- marker = new mxn.Marker(point)
- marker.setLabel("#{escape_javascript(@application.address)}");
- map.addMarker(marker);
-
- // Can't yet figure out how to make the POV point at the marker
- var pointToLookAt = new google.maps.LatLng(#{@application.lat},#{@application.lng});
- var myPano = new google.maps.StreetViewPanorama(document.getElementById("pano"),
- {position: pointToLookAt, navigationControl: false, addressControl: false, zoom: 0});
- google.maps.event.addListener(myPano, 'position_changed', function() {
- // Orient the camera to face the position we're interested in
- var angle = computeAngle(pointToLookAt, myPano.getPosition());
- myPano.setPov({heading:angle, pitch:0, zoom:1});
- });
- var panoMarker = new google.maps.Marker({position: pointToLookAt, title: "#{escape_javascript(@application.address)}"});
- panoMarker.setMap(myPano);
-
+ initialiseMaps(#{@application.lat}, #{@application.lng}, "#{escape_javascript(@application.address)}");
})
- function computeAngle(endLatLng, startLatLng) {
- var DEGREE_PER_RADIAN = 57.2957795;
- var RADIAN_PER_DEGREE = 0.017453;
-
- var dlat = endLatLng.lat() - startLatLng.lat();
- var dlng = endLatLng.lng() - startLatLng.lng();
- // We multiply dlng with cos(endLat), since the two points are very closeby,
- // so we assume their cos values are approximately equal.
- var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
- * DEGREE_PER_RADIAN;
- return wrapAngle(yaw);
- }
-
- function wrapAngle(angle) {
- if (angle >= 360) {
- angle -= 360;
- } else if (angle < 0) {
- angle += 360;
- }
- return angle;
- }
-
+= javascript_include_tag "maps.js"
= javascript_include_tag "/javascripts/applications.js"
diff --git a/public/javascripts/maps.js b/public/javascripts/maps.js
new file mode 100644
index 000000000..a5c549d83
--- /dev/null
+++ b/public/javascripts/maps.js
@@ -0,0 +1,43 @@
+function initialiseMaps(latitude, longitude, address) {
+ var map = new mxn.Mapstraction("map_div","google");
+ point = new mxn.LatLonPoint(latitude, longitude);
+ map.setCenterAndZoom(point,16);
+ map.addControls({ zoom: 'small' });
+ marker = new mxn.Marker(point)
+ marker.setLabel(address);
+ map.addMarker(marker);
+
+ // Can't yet figure out how to make the POV point at the marker
+ var pointToLookAt = new google.maps.LatLng(latitude, longitude);
+ var myPano = new google.maps.StreetViewPanorama(document.getElementById("pano"),
+ {position: pointToLookAt, navigationControl: false, addressControl: false, zoom: 0});
+ google.maps.event.addListener(myPano, 'position_changed', function() {
+ // Orient the camera to face the position we're interested in
+ var angle = computeAngle(pointToLookAt, myPano.getPosition());
+ myPano.setPov({heading:angle, pitch:0, zoom:1});
+ });
+ var panoMarker = new google.maps.Marker({position: pointToLookAt, title: address});
+ panoMarker.setMap(myPano);
+}
+
+function computeAngle(endLatLng, startLatLng) {
+ var DEGREE_PER_RADIAN = 57.2957795;
+ var RADIAN_PER_DEGREE = 0.017453;
+
+ var dlat = endLatLng.lat() - startLatLng.lat();
+ var dlng = endLatLng.lng() - startLatLng.lng();
+ // We multiply dlng with cos(endLat), since the two points are very closeby,
+ // so we assume their cos values are approximately equal.
+ var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
+ * DEGREE_PER_RADIAN;
+ return wrapAngle(yaw);
+}
+
+function wrapAngle(angle) {
+ if (angle >= 360) {
+ angle -= 360;
+ } else if (angle < 0) {
+ angle += 360;
+ }
+ return angle;
+}