mirror of
https://github.com/Ekokumppanit/Bicyclesim.git
synced 2026-03-05 22:54:41 +00:00
Initial commit.
This commit is contained in:
46
client/lib/helpers.js
Normal file
46
client/lib/helpers.js
Normal 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
180
client/lib/maps.js
Normal 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
35
client/lib/settings.js
Normal 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));
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user