diff --git a/client/bicyclesim-meteor.html b/client/bicyclesim-meteor.html index 73ecedf..c1521fb 100644 --- a/client/bicyclesim-meteor.html +++ b/client/bicyclesim-meteor.html @@ -192,6 +192,8 @@ {{#if can_edit}}{{/if}} {{/each}} - {{#if can_edit}}
  • {{/if}} + {{#if can_edit}} +
  • + {{/if}} diff --git a/client/bicyclesim-meteor.styl b/client/bicyclesim-meteor.styl index 6874fe9..66d5c71 100644 --- a/client/bicyclesim-meteor.styl +++ b/client/bicyclesim-meteor.styl @@ -157,16 +157,16 @@ a.thumbnail ol.points margin 0 li - font-size 0.9em + font-size 0.85em border-top 1px solid #ccc padding 2px 0px list-style-position inside - &:first-child, &.new-point + &:first-child, &.actions border-top 0 - &.new-point + &.actions list-style none span.location - font-size 0.8em + font-size 0.85em a.remove float right diff --git a/client/edit.js b/client/edit.js index b6f4095..13e3a9b 100644 --- a/client/edit.js +++ b/client/edit.js @@ -12,6 +12,7 @@ function new_point(latlng) { add_point(latlng, num, true); ++num; $('.sidebar').animate({scrollTop: $('.sidebar-inner').height()}, 'fast'); + Session.set('saved', false); }); } @@ -92,6 +93,10 @@ Template.points.can_edit = function () { return (route && Meteor.user() && route.owner === Meteor.user()._id); }; +Template.points.saved = function () { + return Session.get('saved'); +}; + Template.points.helpers(helpers); Template.points.events({ @@ -101,11 +106,17 @@ Template.points.events({ 'click a.remove': function () { Meteor.call('remove_point', this._id, function () { full_clear_required = true; + Session.set('saved', false); }); }, - 'click .new-point button': function () { + 'click .new-point': function () { new_point(maps.getLatLng()); }, + 'click .save': function () { + Meteor.call('update_route', Session.get('route'), function () { + Session.set('saved', true); + }); + }, 'change #points-autoadd': function (event) { Session.set('points-autoadd', event.currentTarget.checked); } @@ -124,6 +135,7 @@ Meteor.autorun(function () { if (Session.equals('page', 'edit') && Session.get('route')) { debug('sivu tai route vaihtui, route: ' + Session.get('route')); full_clear_required = true; + Session.set('saved', true); Meteor.deps.isolate(function () { var route = Routes.findOne({_id: Session.get('route')}); diff --git a/server/main.js b/server/main.js index 15fccab..854a162 100644 --- a/server/main.js +++ b/server/main.js @@ -41,7 +41,7 @@ Meteor.methods({ var route = Routes.findOne({_id: route_id}); if (!route) return; - var point_id = Points.insert({latlng: latlng, route: route_id, distance: 0, next: null}); + var point_id = Points.insert({latlng: latlng, heading: 0, route: route_id, distance: 0, next: null}); // Add new point after last point. Points.update({route: route_id, next: null, _id: {$ne: point_id}}, {$set: {next: point_id}}); @@ -49,7 +49,15 @@ Meteor.methods({ // If route didn't have any point, update first point, Routes.update({_id: route_id, first: null}, {$set: {first: point_id}}); - update_route(route_id); + // Update distance and heading of previous point + var prev = Points.findOne({next: point_id}); + if (prev) { + heading = computeFinalBearing(prev.latlng, latlng); + distance = computeDistance(prev.latlng, latlng); + Points.update({next: point_id}, {$set: {heading: heading, distance: distance}}); + } + + // update_route(route_id); }, remove_point: function (point_id) { var point = Points.findOne({_id: point_id}); @@ -61,6 +69,9 @@ Meteor.methods({ Points.remove({_id: point_id}); - update_route(point.route); + // update_route(point.route); + }, + update_route: function (route_id) { + update_route(route_id); } });