diff --git a/css/80_app.css b/css/80_app.css index 041f1340f..6b4e4005c 100644 --- a/css/80_app.css +++ b/css/80_app.css @@ -3595,10 +3595,11 @@ img.tile-debug { /* Success Modal ------------------------------------------------------- */ .save-success p { - padding: 15px 15px 0 15px; + padding: 15px 20px 0 20px; } -.save-success a.details { - padding-left: 15px; +.save-success .details { + margin: 0px 5px; + white-space: nowrap; } .save-success .button { padding-top: 15px; diff --git a/data/core.yaml b/data/core.yaml index 178db1db2..3ff0eb9ba 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -529,6 +529,8 @@ en: success: edited_osm: "Edited OSM!" just_edited: "You just edited OpenStreetMap!" + thank_you: "Thank you for improving the map." + thank_you_location: "Thank you for improving the map around {where}." view_on_osm: "View on OSM" facebook: "Share on Facebook" twitter: "Share on Twitter" diff --git a/dist/locales/en.json b/dist/locales/en.json index 563a6eb16..eb92d2b49 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -646,6 +646,8 @@ "success": { "edited_osm": "Edited OSM!", "just_edited": "You just edited OpenStreetMap!", + "thank_you": "Thank you for improving the map.", + "thank_you_location": "Thank you for improving the map around {where}.", "view_on_osm": "View on OSM", "facebook": "Share on Facebook", "twitter": "Share on Twitter", diff --git a/modules/modes/save.js b/modules/modes/save.js index d8f14addb..5a98d03ab 100644 --- a/modules/modes/save.js +++ b/modules/modes/save.js @@ -28,6 +28,8 @@ import { modeSelect } from './index'; +import { services } from '../services'; + import { uiConflicts, uiConfirm, @@ -66,6 +68,7 @@ export function modeSave(context) { var _conflicts = []; var _errors = []; var _origChanges; + var _location; function cancel(selectedID) { @@ -305,6 +308,7 @@ export function modeSave(context) { var history = context.history(); var changes = history.changes(actionDiscardTags(history.difference())); if (changes.modified.length || changes.created.length || changes.deleted.length) { + loadLocation(); // so it is ready when we display the save screen osm.putChangeset(changeset, changes, uploadCallback); } else { // changes were insignificant or reverted by user d3_select('.inspector-wrap *').remove(); @@ -468,6 +472,7 @@ export function modeSave(context) { var ui = uiSuccess(context) .changeset(changeset) + .location(_location) .on('cancel', function() { context.ui().sidebar.hide(); }); context.enter(modeBrowse(context).sidebar(ui)); @@ -486,6 +491,27 @@ export function modeSave(context) { } + // Reverse geocode current map location so we can display a message on + // the success screen like "Thank you for editing around city, state." + function loadLocation() { + _location = null; + if (!services.geocoder) return; + + services.geocoder.reverse(context.map().center(), function(err, result) { + if (err || !result || !result.address) return; + + var parts = []; + var addr = result.address; + var city = addr && (addr.suburb || addr.city || addr.county); + if (city) parts.push(city); + var region = addr && (addr.state || addr.country); + if (region) parts.push(region); + + _location = parts.join(', '); + }); + } + + mode.enter = function() { function done() { context.ui().sidebar.show(commit); diff --git a/modules/ui/success.js b/modules/ui/success.js index eb12d7f3d..2f5372971 100644 --- a/modules/ui/success.js +++ b/modules/ui/success.js @@ -1,6 +1,7 @@ import { dispatch as d3_dispatch } from 'd3-dispatch'; import { select as d3_select } from 'd3-selection'; +import whichPolygon from 'which-polygon'; import { t } from '../util/locale'; import { tooltip } from '../util/tooltip'; import { svgIcon } from '../svg'; @@ -8,8 +9,9 @@ import { utilRebind } from '../util/rebind'; export function uiSuccess(context) { - var dispatch = d3_dispatch('cancel'), - changeset; + var dispatch = d3_dispatch('cancel'); + var _changeset; + var _location; function success(selection) { @@ -33,22 +35,26 @@ export function uiSuccess(context) { body .append('p') - .html(t('success.help_html')); + .append('strong') + .append('em') + .html(t('success.thank_you' + (_location ? '_location' : ''), { where: _location })); - body + var detailLink = body + .append('p') + .html(t('success.help_html')) .append('a') .attr('class', 'details') .attr('target', '_blank') .attr('tabindex', -1) - .call(svgIcon('#icon-out-link', 'inline')) .attr('href', t('success.help_link_url')) + .call(svgIcon('#icon-out-link', 'inline')) .append('span') .text(t('success.help_link_text')); var osm = context.connection(); if (!osm) return; - var changesetURL = osm.changesetURL(changeset.id); + var changesetURL = osm.changesetURL(_changeset.id); var viewOnOsm = body .append('a') @@ -66,7 +72,13 @@ export function uiSuccess(context) { .append('div') .text(t('success.view_on_osm')); - var message = (changeset.tags.comment || t('success.edited_osm')).substring(0, 130) + + body + .call(showShareLinks, changesetURL); + } + + + function showShareLinks(selection, changesetURL) { + var message = (_changeset.tags.comment || t('success.edited_osm')).substring(0, 130) + ' ' + changesetURL; var sharing = [ @@ -75,7 +87,7 @@ export function uiSuccess(context) { { key: 'google', value: 'https://plus.google.com/share?url=' + encodeURIComponent(changesetURL) } ]; - body.selectAll('.button.social') + selection.selectAll('.button.social') .data(sharing) .enter() .append('a') @@ -84,14 +96,27 @@ export function uiSuccess(context) { .attr('href', function(d) { return d.value; }) .call(tooltip() .title(function(d) { return t('success.' + d.key); }) - .placement('bottom')) + .placement('bottom') + ) .each(function(d) { d3_select(this).call(svgIcon('#logo-' + d.key, 'social')); }); } + function showCommunities(selection) { + + } + + success.changeset = function(_) { - if (!arguments.length) return changeset; - changeset = _; + if (!arguments.length) return _changeset; + _changeset = _; + return success; + }; + + + success.location = function(_) { + if (!arguments.length) return _location; + _location = _; return success; }; diff --git a/package.json b/package.json index 7ab950f56..79ec8deb0 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "node-diff3": "1.0.0", "osm-auth": "1.0.2", "rbush": "2.0.2", + "which-polygon": "2.2.0", "wmf-sitematrix": "0.1.4" }, "devDependencies": {