Initial commit.

This commit is contained in:
Juho Teperi
2012-10-22 22:48:26 +03:00
commit 86c3fb0537
18 changed files with 1526 additions and 0 deletions

46
client/lib/helpers.js Normal file
View File

@@ -0,0 +1,46 @@
helpers = {
round: function (num, dig) {
return parseFloat(num).toFixed(dig);
},
lat: function (latlng) {
return latlng[0].toFixed(5);
},
lng: function (latlng) {
return latlng[1].toFixed(5);
}
};
var activateInput = function (input) {
input.focus();
input.select();
};
var okCancelEvents = function (selector, callbacks) {
var ok = callbacks.ok || function () {};
var cancel = callbacks.cancel || function () {};
var events = {};
events['keyup '+selector+', keydown '+selector+', focusout '+selector] =
function (evt) {
if (evt.type === "keydown" && evt.which === 27) {
// escape = cancel
cancel.call(this, evt);
} else if (evt.type === "keyup" && evt.which === 13 ||
evt.type === "focusout") {
// blur/return/enter = ok/submit if non-empty
var value = String(evt.target.value || "");
if (value)
ok.call(this, value, evt);
else
cancel.call(this, evt);
}
};
return events;
};
// From: https://github.com/tmeasday/meteor-deps-extensions
Meteor.deps.isolate = function(fn) {
var context = new Meteor.deps.Context();
return context.run(fn);
};

180
client/lib/maps.js Normal file
View File

@@ -0,0 +1,180 @@
function maps_loaded() {
window.markers = []; // fuu
var Maps = function () {
function glatlng(latlng) {
return new google.maps.LatLng(latlng[0], latlng[1]);
}
var Line = function (attr) {
attr = attr || {};
var data = new google.maps.Polyline(attr);
return {
clear: function () {
data.setPath([]);
},
add: function (latlng) {
data.getPath().push(glatlng(latlng));
}
};
};
var Markers = function (map) {
var data = [];
return {
clear: function () {
for (var i = data.length - 1; i >= 0; --i) {
data[i].setMap(null);
}
data.length = 0;
},
add: function (latlng, arg) {
var attr = {
map: map,
position: glatlng(latlng)
};
if (arg.type == 'icon') {
attr['icon'] = 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=' + arg.text + '|FF0000|000000';
}
data.push(new google.maps.Marker(attr));
}
};
};
var Listeners = function (instances) {
var handles = {};
return {
add: function (id, instance, event, cb) {
if (_.has(handles, id)) {
google.maps.event.removeListener(handles[id]);
}
handles[id] = google.maps.event.addListener(instances[instance], event, cb);
},
remove: function (id) {
google.maps.event.removeListener(handles[id]);
}
};
};
var street = new google.maps.StreetViewPanorama(document.getElementById("street"), {
position: glatlng(settings.default_latlng),
pov: settings.default_pov,
panControl: false,
imageDateControl: false,
scrollwheel: false,
zoomControl: false,
addressControl: false
});
var map = new google.maps.Map(document.getElementById("map"), {
center: glatlng(settings.default_latlng),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 15,
mapTypeControl: false,
draggable: false,
streetView: street,
streetViewControl: false,
scrollwheel: false,
zoomControl: false
});
window.map = map;
var bicycling = new google.maps.BicyclingLayer();
bicycling.setMap(map);
var lines = {
'route': new Line({
map: map,
strokeColor: '#51B5FF'
}),
'traveled': new Line({
map: map
})
};
var markers = new Markers(map);
var listeners = new Listeners({
map: map,
street: street
});
return {
lines: lines,
markers: markers,
listeners: listeners,
getLatLng: function () {
return [street.getPosition().lat(), street.getPosition().lng()];
},
mode: function (mode) {
if (mode == 'edit') {
map.setOptions({
scrollwheel: true,
draggable: true,
streetViewControl: true
});
street.setOptions({
clickToGo: true,
linksControl: true
});
} else if (mode == 'sim') {
map.setOptions({
scrollwheel: false,
draggable: false,
streetViewControl: false
});
street.setOptions({
clickToGo: false,
linksControl: false
});
}
},
default_pos: function () {
street.setPosition(glatlng(settings.default_latlng));
street.setPov(settings.default_pov);
},
/*
* Travel to a location.
* Updates streetview.
* Optionally centers the map.
*/
travel: function (point_id, arg) {
arg = arg || {};
_.defaults(arg, {
route: false
});
var point = Points.findOne({_id: point_id});
if (point) {
street.setPosition(glatlng(point.latlng));
map.setCenter(glatlng(point.latlng));
if (point.heading) street.setPov({zoom: 1, pitch: 0, heading: point.heading});
if (arg.route) lines.traveled.add(point.latlng);
}
}
};
};
$(document).ready(function () {
window.maps = new Maps();
init_main();
init_sim();
init_edit();
});
}
window.onload = function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?key=" + settings.maps_key + "&sensor=false&callback=maps_loaded";
document.body.appendChild(script);
};

35
client/lib/settings.js Normal file
View File

@@ -0,0 +1,35 @@
window.settings = {
'default_latlng': [61.501043, 23.763035],
'default_pov': {
heading: 200,
pitch: 0,
zoom: 1
},
'debug': false,
'maps_key': 'AIzaSyDtGhiAnSdg9TaGZC_daNcQe43BS8Ws7Iw',
'staticmaps_key': 'AIzaSyDtGhiAnSdg9TaGZC_daNcQe43BS8Ws7Iw'
};
window.c = function () {
return Math.PI * localStorage.diameter * 2.54 / 100;
};
if (_.has(localStorage, 'diameter') && !_.isNumber(localStorage.diameter)) {
delete localStorage.diameter;
}
if (_.has(localStorage, 'multiplier') && !_.isNumber(localStorage.multiplier)) {
delete localStorage.multiplier;
}
_.defaults(localStorage, {
diameter: 28,
multiplier: 2.5
});
window.debug = function () {
if (this.console && settings.debug) {
console.log(Array.prototype.slice.call(arguments));
}
};