From 0bd864751ae1dd4756542d2869edd4ba4a05ee42 Mon Sep 17 00:00:00 2001 From: Saman Bemel-Benrud Date: Mon, 4 Feb 2013 19:58:28 -0500 Subject: [PATCH 01/38] new background icon. --- img/source/sprite.svg | 173 +++++------------------------------------- img/sprite.png | Bin 14084 -> 13761 bytes 2 files changed, 21 insertions(+), 152 deletions(-) diff --git a/img/source/sprite.svg b/img/source/sprite.svg index 64f682c3d..a8c29982b 100644 --- a/img/source/sprite.svg +++ b/img/source/sprite.svg @@ -7,7 +7,6 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="420" @@ -39,12 +38,12 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.5" - inkscape:cx="279.87773" - inkscape:cy="136.54467" + inkscape:zoom="1" + inkscape:cx="304.46947" + inkscape:cy="116.03146" inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="true" + inkscape:current-layer="layer12" + showgrid="false" inkscape:window-width="1280" inkscape:window-height="700" inkscape:window-x="48" @@ -254,137 +253,6 @@ id="g11041" style="fill:#ffffff;fill-opacity:1;display:inline" /> - - - - - - - - - - - - fix misalignment - - - - - RESET - - - + + + + diff --git a/img/sprite.png b/img/sprite.png index f14b74ac9f6a58c5728374dcb880a75fe7e9cb49..02aadf2a38265d2b23b22afe2961255769ef2a05 100644 GIT binary patch literal 13761 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%0Dt<^zknM6K!s$2` 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 E0T3gT6aWAK literal 14084 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 Date: Tue, 12 Feb 2013 23:18:45 +0100 Subject: [PATCH 02/38] Update locale/da.js Working on more danish translation - not finish yet --- locale/da.js | 78 ++++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/locale/da.js b/locale/da.js index 217f597f6..347a58962 100644 --- a/locale/da.js +++ b/locale/da.js @@ -34,27 +34,27 @@ locale.da = { operations: { add: { annotation: { - point: "Added a point.", - vertex: "Added a node to a way." + point: "Tilføjede et punkt.", + vertex: "Tilføjede en node til en vej." } }, start: { annotation: { - line: "Started a line.", - area: "Started an area." + line: "Startede en linje.", + area: "Startede et område." } }, - 'continue': { + 'Forsæt': { annotation: { - line: "Continued a line.", - area: "Continued an area." + line: "Forsatte en linje.", + area: "Forsatte et område." } }, cancel_draw: { - annotation: "Cancelled drawing." + annotation: "Annulleret indtegning." }, change_tags: { - annotation: "Changed tags." + annotation: "Ændret tags." }, circularize: { title: "Circularize", @@ -74,17 +74,17 @@ locale.da = { area: "Squared the corners of an area." } }, - 'delete': { - title: "Delete", - description: "Remove this from the map.", + 'slet': { + title: "Slet", + description: "Fjern dette fra kortet.", key: "⌫", annotation: { - point: "Deleted a point.", - vertex: "Deleted a node from a way.", - line: "Deleted a line.", - area: "Deleted an area.", - relation: "Deleted a relation.", - multiple: "Deleted {n} objects." + point: "Slettede et punkt.", + vertex: "Slettede en node fra en vej.", + line: "Slettede en linje.", + area: "Slettede et område.", + relation: "Sletede en relation.", + multiple: "Slettede {n} objekter." } }, connect: { @@ -108,14 +108,14 @@ locale.da = { annotation: "Merged {n} lines." }, move: { - title: "Move", - description: "Move this to a different location.", + title: "Flyt", + description: "Flyt dette til anden lokation.", key: "M", annotation: { - point: "Moved a point.", - vertex: "Moved a node in a way.", - line: "Moved a line.", - area: "Moved an area." + point: "Flyttede et punktMoved.", + vertex: "Flyttede en node i en vej.", + line: "Flyttede en linje.", + area: "Flyttede et område." } }, reverse: { @@ -125,10 +125,10 @@ locale.da = { annotation: "Reversed a line." }, split: { - title: "Split", - description: "Split this into two ways at this point.", + title: "Del op", + description: "Del op i to vej ved dette punkt.", key: "X", - annotation: "Split a way." + annotation: "Del op en vej." } }, @@ -140,17 +140,17 @@ locale.da = { deprecated_tags: "Deprecated tags: {tags}" }, - save: "Save", - unsaved_changes: "You have unsaved changes", - save_help: "Save changes to OpenStreetMap, making them visible to other users", - no_changes: "You don't have any changes to save.", - save_error: "An error occurred while trying to save", - uploading_changes: "Uploading changes to OpenStreetMap.", - just_edited: "You Just Edited OpenStreetMap!", - okay: "Okay", + save: "Gem", + unsaved_changes: "Du har ændringer der ikke er gemt endnu", + save_help: "Gem ændringer til OpenStreetMap gør dem synlige for andre brugere", + no_changes: "Du har ingen ændringer til at gemme endnu.", + save_error: "Der skete en fejl da du prøvede at gemme", + uploading_changes: "Gemmer nu ændringer til OpenStreetMap.", + just_edited: "Du har lige rettede i OpenStreetMap!", + okay: "Ok", - "zoom-in": "Zoom ind", - "zoom-out": "Zoom ud", + "zoom-ind": "Zoom ind", + "zoom-ud": "Zoom ud", nothing_to_undo: "Nothing to undo.", nothing_to_redo: "Nothing to redo.", @@ -158,8 +158,8 @@ locale.da = { browser_notice: "This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 9 and above. Please upgrade your browser or use Potlatch 2 to edit the map.", inspector: { - no_documentation_combination: "This is no documentation available for this tag combination", - no_documentation_key: "This is no documentation available for this key", + no_documentation_combination: "Der er ingen dokumentation for denne tag kombination", + no_documentation_key: "Der er ingen dokumenation tilgængelig for denne nøgle", new_tag: "Nyt Tag" }, From 334f963f3cc57cb4f583072431960dc956f69ddd Mon Sep 17 00:00:00 2001 From: Saman Bemel-Benrud Date: Tue, 12 Feb 2013 17:31:16 -0500 Subject: [PATCH 03/38] fix change count, closes #638 --- css/app.css | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/css/app.css b/css/app.css index 2d0b91bc4..29f5b82b5 100644 --- a/css/app.css +++ b/css/app.css @@ -19,6 +19,7 @@ body { } .limiter { + position: relative; max-width: 1200px; } @@ -185,7 +186,8 @@ ul.toggle-list li a { border-top: 1px solid white; display:block; border-top: 1px solid rgba(0, 0, 0, .5); - text-wrap:no-wrap; + white-space:nowrap; + text-overflow:ellipsis; overflow:hidden; } ul.toggle-list li a:hover { background-color: #ececec;} @@ -352,8 +354,7 @@ button.save .count { button.save.has-count .count { display: block; position: absolute; - top: 0; - bottom: 0; + top: 5px; background: rgba(255, 255, 255, .5); color: #333; padding: 10px; From 3f19a293aae2929a15390d1cabbe6cff87bd01b5 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 14:04:39 -0800 Subject: [PATCH 04/38] Make selection less laggy --- js/id/behavior/select.js | 61 ++-------------------------------------- js/id/modes/select.js | 7 ++++- 2 files changed, 9 insertions(+), 59 deletions(-) diff --git a/js/id/behavior/select.js b/js/id/behavior/select.js index 7369af97c..c0b942520 100644 --- a/js/id/behavior/select.js +++ b/js/id/behavior/select.js @@ -1,13 +1,6 @@ iD.behavior.Select = function(context) { - var behavior = function(selection) { - - var timeout = null, - // the position of the first mousedown - pos = null; - - function click(event) { - d3.event = event; + function click() { var datum = d3.event.target.__data__; if (datum instanceof iD.Entity) { if (d3.event.shiftKey) { @@ -20,59 +13,11 @@ iD.behavior.Select = function(context) { } } - function mousedown() { - var datum = d3.event.target.__data__; - pos = [d3.event.clientX, d3.event.clientY]; - if (datum instanceof iD.Entity || (datum && datum.type === 'midpoint')) { - selection - .on('mousemove.select', mousemove) - .on('touchmove.select', mousemove); - - // we've seen a mousedown within 400ms of this one, so ignore - // both because they will be a double click - if (timeout !== null) { - window.clearTimeout(timeout); - selection.on('mousemove.select', null); - timeout = null; - } else { - // queue the click handler to fire in 400ms if no other clicks - // are detected - timeout = window.setTimeout((function(event) { - return function() { - click(event); - timeout = null; - selection.on('mousemove.select', null); - }; - // save the event for the click handler - })(d3.event), 200); - } - } - } - - // allow mousemoves to cancel the click - function mousemove() { - if (iD.geo.dist([d3.event.clientX, d3.event.clientY], pos) > 4) { - window.clearTimeout(timeout); - timeout = null; - } - } - - function mouseup() { - selection.on('mousemove.select', null); - if (pos && d3.event.clientX === pos[0] && d3.event.clientY === pos[1] && - !(d3.event.target.__data__ instanceof iD.Entity)) { - context.enter(iD.modes.Browse(context)); - } - } - - selection - .on('mousedown.select', mousedown) - .on('mouseup.select', mouseup) - .on('touchstart.select', mousedown); + selection.on('click.select', click); }; behavior.off = function(selection) { - selection.on('mousedown.select', null); + selection.on('click.select', null); }; return behavior; diff --git a/js/id/modes/select.js b/js/id/modes/select.js index 9b12c8134..db2b5f238 100644 --- a/js/id/modes/select.js +++ b/js/id/modes/select.js @@ -6,6 +6,7 @@ iD.modes.Select = function(context, selection, initial) { var inspector = iD.ui.inspector().initial(!!initial), keybinding = d3.keybinding('select'), + radialTime = null, behaviors = [ iD.behavior.Hover(), iD.behavior.Select(context), @@ -174,7 +175,9 @@ iD.modes.Select = function(context, selection, initial) { loc = entity.loc; } - context.surface().call(radialMenu, context.projection(loc)); + radialTime = window.setTimeout(function() { + context.surface().call(radialMenu, context.projection(loc)); + }, 300); } }; @@ -183,6 +186,8 @@ iD.modes.Select = function(context, selection, initial) { changeTags(singular(), inspector.tags()); } + if (radialTime) window.clearTimeout(radialTime); + context.container() .select('.inspector-wrap') .style('display', 'none') From 419aa088e33a865b87fb07cdb943528121072554 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 14:10:17 -0800 Subject: [PATCH 05/38] RadialMenu#center --- js/id/modes/select.js | 8 ++++---- js/id/ui/radial_menu.js | 11 +++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/js/id/modes/select.js b/js/id/modes/select.js index db2b5f238..f1a35d225 100644 --- a/js/id/modes/select.js +++ b/js/id/modes/select.js @@ -169,14 +169,14 @@ iD.modes.Select = function(context, selection, initial) { radialMenu = iD.ui.RadialMenu(operations); if (d3.event && !initial) { - var loc = context.map().mouseCoordinates(); - if (entity && entity.type === 'node') { - loc = entity.loc; + radialMenu.center(context.projection(entity.loc)); + } else { + radialMenu.center(d3.mouse(context.surface().node())); } radialTime = window.setTimeout(function() { - context.surface().call(radialMenu, context.projection(loc)); + context.surface().call(radialMenu); }, 300); } }; diff --git a/js/id/ui/radial_menu.js b/js/id/ui/radial_menu.js index 106a48196..e718cfe51 100644 --- a/js/id/ui/radial_menu.js +++ b/js/id/ui/radial_menu.js @@ -1,7 +1,8 @@ iD.ui.RadialMenu = function(operations) { - var menu; + var menu, + center = [0, 0]; - var radialMenu = function(selection, center) { + var radialMenu = function(selection) { if (!operations.length) return; @@ -94,5 +95,11 @@ iD.ui.RadialMenu = function(operations) { } }; + radialMenu.center = function(_) { + if (!arguments.length) return center; + center = _; + return radialMenu; + }; + return radialMenu; }; From 0dbdd7c79766658353a2374933bbfd3a423f057b Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 14:20:07 -0800 Subject: [PATCH 06/38] Shift-click deselects a selected entity --- js/id/behavior/select.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/js/id/behavior/select.js b/js/id/behavior/select.js index c0b942520..f3d52a71c 100644 --- a/js/id/behavior/select.js +++ b/js/id/behavior/select.js @@ -2,14 +2,20 @@ iD.behavior.Select = function(context) { var behavior = function(selection) { function click() { var datum = d3.event.target.__data__; - if (datum instanceof iD.Entity) { - if (d3.event.shiftKey) { - context.enter(iD.modes.Select(context, context.selection().concat([datum.id]))); - } else { - context.enter(iD.modes.Select(context, [datum.id])); - } - } else if (!d3.event.shiftKey) { + if (!(datum instanceof iD.Entity) && !d3.event.shiftKey) { context.enter(iD.modes.Browse(context)); + + } else if (!d3.event.shiftKey) { + context.enter(iD.modes.Select(context, [datum.id])); + + } else if (context.selection().indexOf(datum.id) >= 0) { + var selection = _.without(context.selection(), datum.id); + context.enter(selection.length ? + iD.modes.Select(context, selection) : + iD.modes.Browse(context)); + + } else { + context.enter(iD.modes.Select(context, context.selection().concat([datum.id]))); } } From 89fe4bff09695b0113e4380fb3b85b6f39e73c29 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 14:28:58 -0800 Subject: [PATCH 07/38] Only add vertex when double-clicking the selected entity Previously double-clicking would add a vertex to any way, as long as anything was selected. --- js/id/behavior/select.js | 4 +++- js/id/modes/select.js | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/js/id/behavior/select.js b/js/id/behavior/select.js index f3d52a71c..6b60b2da0 100644 --- a/js/id/behavior/select.js +++ b/js/id/behavior/select.js @@ -6,7 +6,9 @@ iD.behavior.Select = function(context) { context.enter(iD.modes.Browse(context)); } else if (!d3.event.shiftKey) { - context.enter(iD.modes.Select(context, [datum.id])); + // Avoid re-entering Select mode with same entity. + if (context.selection().length !== 1 || context.selection()[0] !== datum.id) + context.enter(iD.modes.Select(context, [datum.id])); } else if (context.selection().indexOf(datum.id) >= 0) { var selection = _.without(context.selection(), datum.id); diff --git a/js/id/modes/select.js b/js/id/modes/select.js index f1a35d225..c17a02ca1 100644 --- a/js/id/modes/select.js +++ b/js/id/modes/select.js @@ -6,7 +6,7 @@ iD.modes.Select = function(context, selection, initial) { var inspector = iD.ui.inspector().initial(!!initial), keybinding = d3.keybinding('select'), - radialTime = null, + timeout = null, behaviors = [ iD.behavior.Hover(), iD.behavior.Select(context), @@ -161,24 +161,27 @@ iD.modes.Select = function(context, selection, initial) { .call(keybinding); context.surface() - .on('dblclick.select', dblclick) .selectAll("*") .filter(selected) .classed('selected', true); radialMenu = iD.ui.RadialMenu(operations); + var showMenu = d3.event && !initial; - if (d3.event && !initial) { + if (showMenu) { if (entity && entity.type === 'node') { radialMenu.center(context.projection(entity.loc)); } else { radialMenu.center(d3.mouse(context.surface().node())); } - - radialTime = window.setTimeout(function() { - context.surface().call(radialMenu); - }, 300); } + + timeout = window.setTimeout(function() { + if (showMenu) context.surface().call(radialMenu); + + context.surface() + .on('dblclick.select', dblclick) + }, 300); }; mode.exit = function() { @@ -186,7 +189,7 @@ iD.modes.Select = function(context, selection, initial) { changeTags(singular(), inspector.tags()); } - if (radialTime) window.clearTimeout(radialTime); + if (timeout) window.clearTimeout(timeout); context.container() .select('.inspector-wrap') From 6bebb9197c9280103ff880d71b67e8df81f28631 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 14:58:54 -0800 Subject: [PATCH 08/38] 200ms --- js/id/modes/select.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/id/modes/select.js b/js/id/modes/select.js index c17a02ca1..ad1571d20 100644 --- a/js/id/modes/select.js +++ b/js/id/modes/select.js @@ -181,7 +181,7 @@ iD.modes.Select = function(context, selection, initial) { context.surface() .on('dblclick.select', dblclick) - }, 300); + }, 200); }; mode.exit = function() { From 3cce5b28dd2771240de3e5da26ba02e8651f3377 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 15:22:38 -0800 Subject: [PATCH 09/38] Fix, expand iD.behavior.Select tests --- js/id/behavior/select.js | 5 +++-- test/spec/behavior/select.js | 41 +++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/js/id/behavior/select.js b/js/id/behavior/select.js index 6b60b2da0..162535764 100644 --- a/js/id/behavior/select.js +++ b/js/id/behavior/select.js @@ -2,8 +2,9 @@ iD.behavior.Select = function(context) { var behavior = function(selection) { function click() { var datum = d3.event.target.__data__; - if (!(datum instanceof iD.Entity) && !d3.event.shiftKey) { - context.enter(iD.modes.Browse(context)); + if (!(datum instanceof iD.Entity)) { + if (!d3.event.shiftKey) + context.enter(iD.modes.Browse(context)); } else if (!d3.event.shiftKey) { // Avoid re-entering Select mode with same entity. diff --git a/test/spec/behavior/select.js b/test/spec/behavior/select.js index 5e9bf9ea3..ecbb7e7b4 100644 --- a/test/spec/behavior/select.js +++ b/test/spec/behavior/select.js @@ -20,6 +20,8 @@ describe("iD.behavior.Select", function() { .enter().append('circle') .attr('class', function(d) { return d.id; }); + context.enter(iD.modes.Browse(context)); + behavior = iD.behavior.Select(context); context.install(behavior); }); @@ -30,32 +32,33 @@ describe("iD.behavior.Select", function() { container.remove(); }); - specify("click on entity selects the entity", function(done) { - happen.mousedown(context.surface().select('.' + a.id).node()); - window.setTimeout(function() { - expect(context.selection()).to.eql([a.id]); - done(); - }, 600); + specify("click on entity selects the entity", function() { + happen.click(context.surface().select('.' + a.id).node()); + expect(context.selection()).to.eql([a.id]); }); - specify("click on empty space clears the selection", function(done) { + specify("click on empty space clears the selection", function() { context.enter(iD.modes.Select(context, [a.id])); happen.click(context.surface().node()); - happen.mousedown(context.surface().node()); - happen.mouseup(context.surface().node()); - window.setTimeout(function() { - expect(context.selection()).to.eql([]); - done(); - }, 600); + expect(context.mode().id).to.eql('browse'); }); - specify("shift-click on entity adds the entity to the selection", function(done) { + specify("shift-click on unselected entity adds it to the selection", function() { context.enter(iD.modes.Select(context, [a.id])); - happen.mousedown(context.surface().select('.' + b.id).node(), {shiftKey: true}); - window.setTimeout(function() { - expect(context.selection()).to.eql([a.id, b.id]); - done(); - }, 600); + happen.click(context.surface().select('.' + b.id).node(), {shiftKey: true}); + expect(context.selection()).to.eql([a.id, b.id]); + }); + + specify("shift-click on selected entity removes it from the selection", function() { + context.enter(iD.modes.Select(context, [a.id, b.id])); + happen.click(context.surface().select('.' + b.id).node(), {shiftKey: true}); + expect(context.selection()).to.eql([a.id]); + }); + + specify("shift-click on last selected entity clears the selection", function() { + context.enter(iD.modes.Select(context, [a.id])); + happen.click(context.surface().select('.' + a.id).node(), {shiftKey: true}); + expect(context.mode().id).to.eql('browse'); }); specify("shift-click on empty space leaves the selection unchanged", function() { From f071e9cf189e0e657fa7d302174d4f082d6bc6d1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 15:28:14 -0800 Subject: [PATCH 10/38] Fix da translation --- locale/da.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/da.js b/locale/da.js index 347a58962..342273223 100644 --- a/locale/da.js +++ b/locale/da.js @@ -44,7 +44,7 @@ locale.da = { area: "Startede et område." } }, - 'Forsæt': { + 'continue': { annotation: { line: "Forsatte en linje.", area: "Forsatte et område." @@ -74,7 +74,7 @@ locale.da = { area: "Squared the corners of an area." } }, - 'slet': { + 'delete': { title: "Slet", description: "Fjern dette fra kortet.", key: "⌫", @@ -149,8 +149,8 @@ locale.da = { just_edited: "Du har lige rettede i OpenStreetMap!", okay: "Ok", - "zoom-ind": "Zoom ind", - "zoom-ud": "Zoom ud", + "zoom-in": "Zoom ind", + "zoom-out": "Zoom ud", nothing_to_undo: "Nothing to undo.", nothing_to_redo: "Nothing to redo.", From dc2dbbe183dcb327a08488a9bd3854fe4e68e086 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 15:45:12 -0800 Subject: [PATCH 11/38] Extract iD.ui.Zoom, add tooltips with key hint --- index.html | 1 + js/id/id.js | 2 ++ js/id/ui.js | 21 +++------------------ js/id/ui/zoom.js | 40 ++++++++++++++++++++++++++++++++++++++++ locale/da.js | 8 +++++--- locale/de.js | 8 +++++--- locale/en.js | 8 +++++--- locale/es.js | 8 +++++--- locale/fr.js | 8 +++++--- locale/ja.js | 8 +++++--- locale/lv.js | 8 +++++--- locale/tr.js | 8 +++++--- 12 files changed, 86 insertions(+), 42 deletions(-) create mode 100644 js/id/ui/zoom.js diff --git a/index.html b/index.html index 4ea9d9721..009ee4133 100644 --- a/index.html +++ b/index.html @@ -82,6 +82,7 @@ + diff --git a/js/id/id.js b/js/id/id.js index f0747ad02..5db609593 100644 --- a/js/id/id.js +++ b/js/id/id.js @@ -85,6 +85,8 @@ window.iD = function () { context.projection = map.projection; context.tail = map.tail; context.redraw = map.redraw; + context.zoomIn = map.zoomIn; + context.zoomOut = map.zoomOut; context.container = function(_) { if (!arguments.length) return container; diff --git a/js/id/ui.js b/js/id/ui.js index 535c825eb..7ae2c9e28 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -37,20 +37,9 @@ iD.ui = function(context) { .attr('class', 'button-wrap col1') .call(iD.ui.Save(context)); - var zoom = container.append('div') + container.append('div') .attr('class', 'zoombuttons map-control') - .selectAll('button') - .data([['zoom-in', '+', map.zoomIn, t('zoom-in')], ['zoom-out', '-', map.zoomOut, t('zoom-out')]]) - .enter() - .append('button') - .attr('tabindex', -1) - .attr('class', function(d) { return d[0]; }) - .attr('title', function(d) { return d[3]; }) - .on('click.editor', function(d) { return d[2](); }) - .append('span') - .attr('class', function(d) { - return d[0] + ' icon'; - }); + .call(iD.ui.Zoom(context)); if (navigator.geolocation) { container.append('div') @@ -139,11 +128,7 @@ iD.ui = function(context) { .on('←', pan([pa, 0])) .on('↑', pan([0, pa])) .on('→', pan([-pa, 0])) - .on('↓', pan([0, -pa])) - .on('⇧=', function() { map.zoomIn(); }) - .on('+', function() { map.zoomIn(); }) - .on('-', function() { map.zoomOut(); }) - .on('dash', function() { map.zoomOut(); }); + .on('↓', pan([0, -pa])); d3.select(document) .call(keybinding); diff --git a/js/id/ui/zoom.js b/js/id/ui/zoom.js new file mode 100644 index 000000000..823bc120f --- /dev/null +++ b/js/id/ui/zoom.js @@ -0,0 +1,40 @@ +iD.ui.Zoom = function(context) { + var zooms = [{ + id: 'zoom-in', + title: t('zoom.in'), + action: context.zoomIn, + key: '+' + }, { + id: 'zoom-out', + title: t('zoom.out'), + action: context.zoomOut, + key: '-' + }]; + + return function(selection) { + var button = selection.selectAll('button') + .data(zooms) + .enter().append('button') + .attr('tabindex', -1) + .attr('class', function(d) { return d.id; }) + .on('click.editor', function(d) { d.action(); }) + .call(bootstrap.tooltip() + .placement('right') + .html(true) + .title(function(d) { + return iD.ui.tooltipHtml(d.title, d.key); + })); + + button.append('span') + .attr('class', function(d) { return d.id + ' icon'; }); + + var keybinding = d3.keybinding('zoom') + .on('+', function() { context.zoomIn(); }) + .on('-', function() { context.zoomOut(); }) + .on('⇧=', function() { context.zoomIn(); }) + .on('dash', function() { context.zoomOut(); }); + + d3.select(document) + .call(keybinding); + } +}; diff --git a/locale/da.js b/locale/da.js index 342273223..29e23c6f2 100644 --- a/locale/da.js +++ b/locale/da.js @@ -149,9 +149,6 @@ locale.da = { just_edited: "Du har lige rettede i OpenStreetMap!", okay: "Ok", - "zoom-in": "Zoom ind", - "zoom-out": "Zoom ud", - nothing_to_undo: "Nothing to undo.", nothing_to_redo: "Nothing to redo.", @@ -197,5 +194,10 @@ locale.da = { source_switch: { live: "live", dev: "dev" + }, + + zoom: { + in: "Zoom ind", + out: "Zoom ud" } }; diff --git a/locale/de.js b/locale/de.js index 543eaab2d..f1f3ef850 100644 --- a/locale/de.js +++ b/locale/de.js @@ -145,9 +145,6 @@ locale.de = { just_edited: "Sie haben gerade OpenStreetMap editiert!", okay: "OK", - "zoom-in": "Hineinzoomen", - "zoom-out": "Herauszoomen", - nothing_to_undo: "Nichts zum Rückgängigmachen.", nothing_to_redo: "Nichts zum Wiederherstellen.", @@ -193,5 +190,10 @@ locale.de = { source_switch: { live: "live", dev: "dev" + }, + + zoom: { + in: "Hineinzoomen", + out: "Herauszoomen" } }; diff --git a/locale/en.js b/locale/en.js index 007c8e5be..501f36a37 100644 --- a/locale/en.js +++ b/locale/en.js @@ -145,9 +145,6 @@ locale.en = { just_edited: "You Just Edited OpenStreetMap!", okay: "Okay", - "zoom-in": "Zoom In", - "zoom-out": "Zoom Out", - nothing_to_undo: "Nothing to undo.", nothing_to_redo: "Nothing to redo.", @@ -193,5 +190,10 @@ locale.en = { source_switch: { live: "live", dev: "dev" + }, + + zoom: { + in: "Zoom In", + out: "Zoom Out" } }; diff --git a/locale/es.js b/locale/es.js index 4bb5f3959..0468405b5 100644 --- a/locale/es.js +++ b/locale/es.js @@ -145,9 +145,6 @@ locale.es = { just_edited: "Acabas de editar OpenStreetMap!", //"You Just Edited OpenStreetMap!", okay: "OK", //"Okay", - "zoom-in": "Aumentar", // "Zoom In", - "zoom-out": "Alejar", //"Zoom Out", - nothing_to_undo: "Nada para deshacer", //"Nothing to undo.", nothing_to_redo: "Nada para rehacer", //"Nothing to redo.", @@ -193,5 +190,10 @@ locale.es = { source_switch: { live: "en vivo", //"live", dev: "dev" + }, + + zoom: { + in: "Aumentar", // "Zoom In", + out: "Alejar" //"Zoom Out", } }; diff --git a/locale/fr.js b/locale/fr.js index adf4a2d26..4530924a0 100644 --- a/locale/fr.js +++ b/locale/fr.js @@ -145,9 +145,6 @@ locale.fr = { just_edited: "Vous venez de participer à OpenStreetMap!", okay: "Okay", - "zoom-in": "Zoomer", - "zoom-out": "Dézoomer", - nothing_to_undo: "Rien à annuler.", nothing_to_redo: "Rien à refaire.", @@ -193,5 +190,10 @@ locale.fr = { source_switch: { live: "live", dev: "dev" + }, + + zoom: { + in: "Zoomer", + out: "Dézoomer" } }; diff --git a/locale/ja.js b/locale/ja.js index b002f54bf..ada737bd1 100644 --- a/locale/ja.js +++ b/locale/ja.js @@ -145,9 +145,6 @@ locale.ja = { just_edited: "OpenStreetMap編集完了!", okay: "OK", - "zoom-in": "ズームイン", - "zoom-out": "ズームアウト", - nothing_to_undo: "やり直す変更点がありません", nothing_to_redo: "やり直した変更点がありません", @@ -193,5 +190,10 @@ locale.ja = { source_switch: { live: "本番サーバ", dev: "開発サーバ" + }, + + zoom: { + in: "ズームイン", + out: "ズームアウト" } }; diff --git a/locale/lv.js b/locale/lv.js index 1d55450f8..fd8be7cfe 100644 --- a/locale/lv.js +++ b/locale/lv.js @@ -145,9 +145,6 @@ locale.lv = { just_edited: "Jūs nupat rediģējāt OpenStreetMap", okay: "Labi", - "zoom-in": "Pietuvināt", - "zoom-out": "Attālināt", - nothing_to_undo: "Nav nekā, ko atcelt", nothing_to_redo: "Nav nekā, ko atsaukt", @@ -193,5 +190,10 @@ locale.lv = { source_switch: { live: "live", dev: "dev" + }, + + zoom: { + in: "Pietuvināt", + out: "Attālināt" } }; diff --git a/locale/tr.js b/locale/tr.js index d14f08ecb..a9b3e4b47 100644 --- a/locale/tr.js +++ b/locale/tr.js @@ -145,9 +145,6 @@ locale.tr = { just_edited: "Şu an OpenStreetMap'de bir değişiklik yaptınız!", okay: "Tamam", - "zoom-in": "Yaklaş", - "zoom-out": "Uzaklaş", - nothing_to_undo: "Geri alınacak birşey yok.", nothing_to_redo: "Tekrar yapılacak birşey yok.", @@ -193,5 +190,10 @@ locale.tr = { source_switch: { live: "canlı", dev: "geliştirme" + }, + + zoom: { + in: "Yaklaş", + out: "Uzaklaş" } }; From b9860f222fdbfab04f77313db7e66673a5d209f1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 15:52:17 -0800 Subject: [PATCH 12/38] Cleanup; consistent tooltips on remaining buttons --- css/app.css | 4 ++-- js/id/ui.js | 19 ++++++++++--------- js/id/ui/geocoder.js | 10 +++++++--- js/id/ui/geolocate.js | 25 ++++++++++++++----------- js/id/ui/layerswitcher.js | 9 ++++++--- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/css/app.css b/css/app.css index 29f5b82b5..9f9e54c01 100644 --- a/css/app.css +++ b/css/app.css @@ -849,13 +849,13 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} margin: 4px; } -.geocode-control div { +.geocode-control div.content { top: 50px; width: 340px; margin: 4px; padding: 5px; } -.geocode-control div span { +.geocode-control div.content span { display: inline-block; border-bottom: 1px solid #333; } diff --git a/js/id/ui.js b/js/id/ui.js index 7ae2c9e28..e1daad3a1 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -38,20 +38,21 @@ iD.ui = function(context) { .call(iD.ui.Save(context)); container.append('div') - .attr('class', 'zoombuttons map-control') + .attr('class', 'map-control zoombuttons') .call(iD.ui.Zoom(context)); - if (navigator.geolocation) { - container.append('div') - .call(iD.ui.geolocate(map)); - } + container.append('div') + .attr('class', 'map-control geocode-control') + .call(iD.ui.Geocoder(context)); - container.append('div').attr('class', 'geocode-control map-control') - .call(iD.ui.geocoder(context)); - - container.append('div').attr('class', 'map-control layerswitcher-control') + container.append('div') + .attr('class', 'map-control layerswitcher-control') .call(iD.ui.layerswitcher(context)); + container.append('div') + .attr('class', 'map-control geolocate-control') + .call(iD.ui.Geolocate(map)); + container.append('div') .style('display', 'none') .attr('class', 'inspector-wrap fr col5'); diff --git a/js/id/ui/geocoder.js b/js/id/ui/geocoder.js index 7b79c2158..d0479e61d 100644 --- a/js/id/ui/geocoder.js +++ b/js/id/ui/geocoder.js @@ -1,4 +1,4 @@ -iD.ui.geocoder = function(context) { +iD.ui.Geocoder = function(context) { function resultExtent(bounds) { return new iD.geo.Extent( [parseFloat(bounds[3]), parseFloat(bounds[0])], @@ -75,8 +75,12 @@ iD.ui.geocoder = function(context) { var button = selection.append('button') .attr('tabindex', -1) .attr('title', t('geocoder.title')) - .html('') - .on('click', toggle); + .on('click', toggle) + .call(bootstrap.tooltip() + .placement('right')); + + button.append('span') + .attr('class', 'icon geocode'); var gcForm = selection.append('form'); diff --git a/js/id/ui/geolocate.js b/js/id/ui/geolocate.js index 14b060e8a..5356039dd 100644 --- a/js/id/ui/geolocate.js +++ b/js/id/ui/geolocate.js @@ -1,4 +1,8 @@ -iD.ui.geolocate = function(map) { +iD.ui.Geolocate = function(map) { + function click() { + navigator.geolocation.getCurrentPosition( + success, error); + } function success(position) { map.center([position.coords.longitude, position.coords.latitude]); @@ -7,17 +11,16 @@ iD.ui.geolocate = function(map) { function error() { } return function(selection) { - selection - .attr('class', 'geolocate-control map-control') - .append('button') + if (!navigator.geolocation) return; + + var button = selection.append('button') .attr('tabindex', -1) .attr('title', 'Show My Location') - .on('click', function() { - navigator.geolocation.getCurrentPosition( - success, error); - }) - .append('span') - .attr('class','icon geolocate'); - }; + .on('click', click) + .call(bootstrap.tooltip() + .placement('right')); + button.append('span') + .attr('class', 'icon geolocate'); + }; }; diff --git a/js/id/ui/layerswitcher.js b/js/id/ui/layerswitcher.js index 9ae4f3fbe..60fd674e0 100644 --- a/js/id/ui/layerswitcher.js +++ b/js/id/ui/layerswitcher.js @@ -23,10 +23,13 @@ iD.ui.layerswitcher = function(context) { .attr('tabindex', -1) .attr('class', 'fillD') .attr('title', t('layerswitcher.description')) - .html("") - .on('click.layerswitcher-toggle', toggle); + .on('click.layerswitcher-toggle', toggle) + .call(bootstrap.tooltip() + .placement('right')); + + button.append('span') + .attr('class', 'layers icon'); - function show() { setVisible(true); } function hide() { setVisible(false); } function toggle() { setVisible(content.classed('hide')); } From 8d0225e9389c9cf81e145676c7be5af9018ed541 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 16:11:22 -0800 Subject: [PATCH 13/38] i18n for geolocate --- js/id/ui/geolocate.js | 2 +- locale/en.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/js/id/ui/geolocate.js b/js/id/ui/geolocate.js index 5356039dd..d1d3f3772 100644 --- a/js/id/ui/geolocate.js +++ b/js/id/ui/geolocate.js @@ -15,7 +15,7 @@ iD.ui.Geolocate = function(map) { var button = selection.append('button') .attr('tabindex', -1) - .attr('title', 'Show My Location') + .attr('title', t('geolocate.title')) .on('click', click) .call(bootstrap.tooltip() .placement('right')); diff --git a/locale/en.js b/locale/en.js index 501f36a37..7581b5fcb 100644 --- a/locale/en.js +++ b/locale/en.js @@ -168,6 +168,10 @@ locale.en = { no_results: "Couldn't locate a place named '{name}'" }, + geolocate: { + title: "Show My Location" + }, + description: "Description", logout: "logout", From 1c5a894f1e37bb5ebbeb66eaf2938df678610d0b Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 16:16:52 -0800 Subject: [PATCH 14/38] Add to translation README --- locale/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/locale/README.md b/locale/README.md index b1610b311..0feb1f631 100644 --- a/locale/README.md +++ b/locale/README.md @@ -22,6 +22,10 @@ Let's look at an example line from `en.js`: no_results: "Couldn't locate a place named '{name}'" ``` +`no_results` is the translation _key_, and should not be translated. +The text to the right of the colon, `"Couldn't locate a place named '{name}'"`, +is the string to be translated. + The word in brackets, `{name}`, should **not** be translated into a new language: it's replaced with a place name when iD presents the text. So a French translation would look like @@ -30,6 +34,15 @@ a French translation would look like no_results: "Impossible de localiser l'endroit nommé '{name}'" ``` +For technical reasons, a few translation keys are quoted. For example: + +``` +'delete': "Delete" +``` + +Only translate the value to the right of the colon, not the quoted key on +the left. + ## License Contributions to translations are under the same liberal From 7da3ef791f479721bb33f022194548aaa7c4f63b Mon Sep 17 00:00:00 2001 From: Saman Bemel-Benrud Date: Tue, 12 Feb 2013 19:17:00 -0500 Subject: [PATCH 15/38] style and layout refinements to layer switcher. --- css/app.css | 23 +++++++++-------------- js/id/ui/layerswitcher.js | 13 +++++++------ 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/css/app.css b/css/app.css index 29f5b82b5..3593628d7 100644 --- a/css/app.css +++ b/css/app.css @@ -225,7 +225,7 @@ ul.link-list li:last-child { .fillD { background:rgba(0,0,0,.8); - color: #a9a9a9; + color: #6C6C6C; } @@ -660,10 +660,11 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .map-overlay { - width: 150px; - position:absolute; - left:40px; - top:0; + right: 75%; + max-width: 260px; + min-width: 210px; + position: fixed; + left: 40px; display: block; border-radius: 4px; } @@ -689,10 +690,6 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} top:190px; } -.layerswitcher-control .map-overlay { - width:250px; -} - .nudge-container { margin-top: 10px; } @@ -702,10 +699,8 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} font-size:10px; padding:0 5px 3px 5px; background: white; - border:0; text-transform: uppercase; font-weight: bold; - } .layerswitcher-control .adjustments button:hover { @@ -742,9 +737,9 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} .layerswitcher-control .nudge { text-indent: -9999px; overflow: hidden; - width:20px; + width:16.6666%; border-radius: 0; - margin-right:1px; + border-right: 1px solid rgba(0, 0, 0, .5); position: relative; } @@ -787,7 +782,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .layerswitcher-control .reset { - width: 45px; + width: 33.3333%; border-radius: 0 4px 4px 0; } diff --git a/js/id/ui/layerswitcher.js b/js/id/ui/layerswitcher.js index 9ae4f3fbe..312605f54 100644 --- a/js/id/ui/layerswitcher.js +++ b/js/id/ui/layerswitcher.js @@ -133,7 +133,7 @@ iD.ui.layerswitcher = function(context) { return d.data.name; }); layerLinks.exit().remove(); - layerLinks.enter() + var LayerInner = layerLinks.enter() .append('li') .append('a') .attr('data-original-title', function(d) { @@ -141,18 +141,19 @@ iD.ui.layerswitcher = function(context) { }) .attr('href', '#') .attr('class', 'layer') - .text(function(d) { - return d.data.name; - }) .each(function(d) { // only set tooltips for layers with tooltips if (d.data.description) { d3.select(this).call(bootstrap.tooltip().placement('right')); } }) - .on('click.set-source', clickSetSource) - .insert('span') + .on('click.set-source', clickSetSource); + LayerInner.insert('span') .attr('class','icon toggle'); + LayerInner.insert('span').text(function(d) { + return d.data.name; + }); + selectLayer(context.background().source()); } From 5c9832e2ef5a28f89d9a364b5608fc9d9e16fc6e Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 16:18:55 -0800 Subject: [PATCH 16/38] Fix test --- test/spec/ui/geocoder.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec/ui/geocoder.js b/test/spec/ui/geocoder.js index 54a7e571c..91e107ee2 100644 --- a/test/spec/ui/geocoder.js +++ b/test/spec/ui/geocoder.js @@ -1,6 +1,6 @@ -describe("iD.ui.geocoder", function () { +describe("iD.ui.Geocoder", function () { it('can be instantiated', function () { - var geocoder = iD.ui.geocoder(); + var geocoder = iD.ui.Geocoder(); expect(geocoder).to.be.ok; }); }); From 50e01150a7379b91867747e3c3eb77c16f0137c8 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 16:25:39 -0800 Subject: [PATCH 17/38] Fix global leak --- js/id/ui/tag_reference.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index cdb22b505..6b7b9fb9f 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -19,7 +19,7 @@ iD.ui.tagReference = function(selection) { header.append('span') .text(g('title')); - referenceBody = selection.append('div') + var referenceBody = selection.append('div') .attr('class','modal-section fillL2'); referenceBody From 1e60b0b7fa7c2057cc7f22478fe2e71f16aada3a Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 16:28:02 -0800 Subject: [PATCH 18/38] iD constructors are camel case --- js/id/behavior/lasso.js | 2 +- js/id/modes/select.js | 2 +- js/id/ui.js | 6 +++--- js/id/ui/commit.js | 2 +- js/id/ui/contributors.js | 2 +- js/id/ui/geocoder.js | 2 +- js/id/ui/inspector.js | 4 ++-- js/id/ui/lasso.js | 6 +++--- js/id/ui/layerswitcher.js | 4 ++-- js/id/ui/save.js | 4 ++-- js/id/ui/success.js | 2 +- js/id/ui/toggle.js | 2 +- js/id/ui/userpanel.js | 2 +- test/spec/ui/inspector.js | 4 ++-- 14 files changed, 22 insertions(+), 22 deletions(-) diff --git a/js/id/behavior/lasso.js b/js/id/behavior/lasso.js index 0a26f311d..6196cbf2e 100644 --- a/js/id/behavior/lasso.js +++ b/js/id/behavior/lasso.js @@ -12,7 +12,7 @@ iD.behavior.Lasso = function(context) { pos = [d3.event.clientX, d3.event.clientY]; - lasso = iD.ui.lasso().a(d3.mouse(context.surface().node())); + lasso = iD.ui.Lasso().a(d3.mouse(context.surface().node())); context.surface().call(lasso); diff --git a/js/id/modes/select.js b/js/id/modes/select.js index ad1571d20..ac6ad4943 100644 --- a/js/id/modes/select.js +++ b/js/id/modes/select.js @@ -4,7 +4,7 @@ iD.modes.Select = function(context, selection, initial) { button: 'browse' }; - var inspector = iD.ui.inspector().initial(!!initial), + var inspector = iD.ui.Inspector().initial(!!initial), keybinding = d3.keybinding('select'), timeout = null, behaviors = [ diff --git a/js/id/ui.js b/js/id/ui.js index e1daad3a1..48e5682bf 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -47,7 +47,7 @@ iD.ui = function(context) { container.append('div') .attr('class', 'map-control layerswitcher-control') - .call(iD.ui.layerswitcher(context)); + .call(iD.ui.LayerSwitcher(context)); container.append('div') .attr('class', 'map-control geolocate-control') @@ -103,7 +103,7 @@ iD.ui = function(context) { linkList.append('li') .attr('id', 'user-list') - .call(iD.ui.contributors(context)); + .call(iD.ui.Contributors(context)); window.onbeforeunload = function() { history.save(); @@ -142,7 +142,7 @@ iD.ui = function(context) { map.centerZoom([-77.02271, 38.90085], 20); } - userContainer.call(iD.ui.userpanel(connection) + userContainer.call(iD.ui.UserPanel(connection) .on('logout.editor', connection.logout) .on('login.editor', connection.authenticate)); diff --git a/js/id/ui/commit.js b/js/id/ui/commit.js index 8d724a732..6708ece49 100644 --- a/js/id/ui/commit.js +++ b/js/id/ui/commit.js @@ -1,4 +1,4 @@ -iD.ui.commit = function(context) { +iD.ui.Commit = function(context) { var event = d3.dispatch('cancel', 'save', 'fix'); function zipSame(d) { diff --git a/js/id/ui/contributors.js b/js/id/ui/contributors.js index 596c576ad..2389f266a 100644 --- a/js/id/ui/contributors.js +++ b/js/id/ui/contributors.js @@ -1,4 +1,4 @@ -iD.ui.contributors = function(context) { +iD.ui.Contributors = function(context) { function update(selection) { var users = {}, limit = 3, diff --git a/js/id/ui/geocoder.js b/js/id/ui/geocoder.js index d0479e61d..cc0ce205c 100644 --- a/js/id/ui/geocoder.js +++ b/js/id/ui/geocoder.js @@ -64,7 +64,7 @@ iD.ui.Geocoder = function(context) { function setVisible(show) { if (show !== shown) { button.classed('active', show); - gcForm.call(iD.ui.toggle(show)); + gcForm.call(iD.ui.Toggle(show)); if (!show) resultsList.classed('hide', !show); if (show) inputNode.node().focus(); else inputNode.node().blur(); diff --git a/js/id/ui/inspector.js b/js/id/ui/inspector.js index 836f73cff..173594101 100644 --- a/js/id/ui/inspector.js +++ b/js/id/ui/inspector.js @@ -1,4 +1,4 @@ -iD.ui.inspector = function() { +iD.ui.Inspector = function() { var event = d3.dispatch('changeTags', 'close'), taginfo = iD.taginfo(), initial = false, @@ -43,7 +43,7 @@ iD.ui.inspector = function() { .attr('class', 'inspector-buttons pad1 fillD') .call(drawButtons); - inspector.call(iD.ui.toggle(true)); + inspector.call(iD.ui.Toggle(true)); } function drawHead(selection) { diff --git a/js/id/ui/lasso.js b/js/id/ui/lasso.js index 511df2a7e..4644364c3 100644 --- a/js/id/ui/lasso.js +++ b/js/id/ui/lasso.js @@ -1,4 +1,4 @@ -iD.ui.lasso = function() { +iD.ui.Lasso = function() { var center, box, group, @@ -13,7 +13,7 @@ iD.ui.lasso = function() { box = group.append('rect') .attr('class', 'lasso-box'); - group.call(iD.ui.toggle(true)); + group.call(iD.ui.Toggle(true)); } @@ -50,7 +50,7 @@ iD.ui.lasso = function() { lasso.close = function(selection) { if (group) { - group.call(iD.ui.toggle(false, function() { + group.call(iD.ui.Toggle(false, function() { d3.select(this).remove(); })); } diff --git a/js/id/ui/layerswitcher.js b/js/id/ui/layerswitcher.js index 60fd674e0..6724715e0 100644 --- a/js/id/ui/layerswitcher.js +++ b/js/id/ui/layerswitcher.js @@ -1,4 +1,4 @@ -iD.ui.layerswitcher = function(context) { +iD.ui.LayerSwitcher = function(context) { var event = d3.dispatch('cancel', 'save'), opacities = [1, 0.5, 0]; @@ -36,7 +36,7 @@ iD.ui.layerswitcher = function(context) { function setVisible(show) { if (show !== shown) { button.classed('active', show); - content.call(iD.ui.toggle(show)); + content.call(iD.ui.Toggle(show)); shown = show; } } diff --git a/js/id/ui/save.js b/js/id/ui/save.js index b8f9d619a..b4eed1dd0 100644 --- a/js/id/ui/save.js +++ b/js/id/ui/save.js @@ -17,7 +17,7 @@ iD.ui.Save = function(context) { modal.select('.content') .classed('commit-modal', true) .datum(changes) - .call(iD.ui.commit(context) + .call(iD.ui.Commit(context) .on('cancel', function() { modal.remove(); }) @@ -60,7 +60,7 @@ iD.ui.Save = function(context) { id: changeset_id, comment: e.comment }) - .call(iD.ui.success(connection) + .call(iD.ui.Success(connection) .on('cancel', function() { modal.remove(); })); diff --git a/js/id/ui/success.js b/js/id/ui/success.js index fffa7b6ab..17a577fb3 100644 --- a/js/id/ui/success.js +++ b/js/id/ui/success.js @@ -1,4 +1,4 @@ -iD.ui.success = function(connection) { +iD.ui.Success = function(connection) { var event = d3.dispatch('cancel', 'save'); function success(selection) { diff --git a/js/id/ui/toggle.js b/js/id/ui/toggle.js index 3a7500023..c3c299905 100644 --- a/js/id/ui/toggle.js +++ b/js/id/ui/toggle.js @@ -2,7 +2,7 @@ // hide class, which sets display=none, and a d3 transition for opacity. // this will cause blinking when called repeatedly, so check that the // value actually changes between calls. -iD.ui.toggle = function(show, callback) { +iD.ui.Toggle = function(show, callback) { return function(selection) { selection.style('opacity', show ? 0 : 1) .classed('hide', false) diff --git a/js/id/ui/userpanel.js b/js/id/ui/userpanel.js index fda2fc463..3dab2a5bd 100644 --- a/js/id/ui/userpanel.js +++ b/js/id/ui/userpanel.js @@ -1,4 +1,4 @@ -iD.ui.userpanel = function(connection) { +iD.ui.UserPanel = function(connection) { var event = d3.dispatch('logout', 'login'); function user(selection) { diff --git a/test/spec/ui/inspector.js b/test/spec/ui/inspector.js index e92604a7a..17160ddb4 100644 --- a/test/spec/ui/inspector.js +++ b/test/spec/ui/inspector.js @@ -1,10 +1,10 @@ -describe("iD.ui.inspector", function () { +describe("iD.ui.Inspector", function () { var inspector, element, tags = {highway: 'residential'}, entity, graph, context; function render() { - inspector = iD.ui.inspector().context(context); + inspector = iD.ui.Inspector().context(context); element = d3.select('body') .append('div') .attr('id', 'inspector-wrap') From 902ae8026709fdb9467a87a8764b521c44584781 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 16:51:31 -0800 Subject: [PATCH 19/38] Include all locale files --- Makefile | 4 ++-- index.html | 11 ++++++----- {locale => js/lib}/locale.js | 0 3 files changed, 8 insertions(+), 7 deletions(-) rename {locale => js/lib}/locale.js (100%) diff --git a/Makefile b/Makefile index 826337109..bb6844399 100644 --- a/Makefile +++ b/Makefile @@ -52,8 +52,8 @@ all: \ js/id/ui/*.js \ js/id/validate.js \ js/id/end.js \ - locale/locale.js \ - locale/en.js + js/lib/locale.js \ + locale/*.js iD.js: Makefile @rm -f $@ diff --git a/index.html b/index.html index 009ee4133..e79c178e4 100644 --- a/index.html +++ b/index.html @@ -147,14 +147,15 @@ - - - - + + + + + + - diff --git a/locale/locale.js b/js/lib/locale.js similarity index 100% rename from locale/locale.js rename to js/lib/locale.js From 211431bdb87287808328490d57ae04f72eced161 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 16:58:44 -0800 Subject: [PATCH 20/38] Fix "Browse" button in non-English locales --- css/app.css | 2 +- js/id/ui/modes.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/css/app.css b/css/app.css index 9f9e54c01..765c58f1f 100644 --- a/css/app.css +++ b/css/app.css @@ -327,7 +327,7 @@ button.centered { border-radius:0 4px 4px 0; } -button.Browse .label { display: none;} +button.browse .label { display: none;} button.action { background: #7092ff; diff --git a/js/id/ui/modes.js b/js/id/ui/modes.js index b382ab295..d3db0074a 100644 --- a/js/id/ui/modes.js +++ b/js/id/ui/modes.js @@ -11,7 +11,7 @@ iD.ui.Modes = function(context) { buttons.enter().append('button') .attr('tabindex', -1) - .attr('class', function(mode) { return mode.title + ' add-button col3'; }) + .attr('class', function(mode) { return mode.id + ' add-button col3'; }) .on('click.mode-buttons', function(mode) { context.enter(mode); }) .call(bootstrap.tooltip() .placement('bottom') From 5ee554be0d0585152eac58b9726fbb3df065b6ba Mon Sep 17 00:00:00 2001 From: Saman Bemel-Benrud Date: Tue, 12 Feb 2013 20:19:23 -0500 Subject: [PATCH 21/38] styling geocoder. --- css/app.css | 48 ++++++++++++++++++++------------------------- js/id/ui/restore.js | 17 ++++++++-------- 2 files changed, 30 insertions(+), 35 deletions(-) diff --git a/css/app.css b/css/app.css index 3593628d7..f42fbaf26 100644 --- a/css/app.css +++ b/css/app.css @@ -23,7 +23,7 @@ body { max-width: 1200px; } -div, textarea, input, span, ul, li, ol, a, button { +div, textarea, input, form, span, ul, li, ol, a, button { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; @@ -121,7 +121,7 @@ input[type=text]:focus { } input[type=text] { - padding:4px 10px; + padding:5px 10px; height:30px; resize: none; } @@ -182,10 +182,9 @@ ul li { list-style: none;} ul.toggle-list li a { font-weight: bold; color: #333; - padding: 10px; - border-top: 1px solid white; + padding: 5px 10px; display:block; - border-top: 1px solid rgba(0, 0, 0, .5); + border-top: 1px solid #ccc; white-space:nowrap; text-overflow:ellipsis; overflow:hidden; @@ -268,10 +267,6 @@ button:hover { background-color: #ececec; } -button.col3:hover { - background: #bde5aa; -} - button.active { cursor:url(../img/cursor-pointing.png) 6 1, auto; } @@ -282,7 +277,7 @@ button.disabled { } button.active:not([disabled]):not(.disabled) { - background: #6bc641; + background: #7092ff; } button.minor { @@ -656,7 +651,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .map-control > button.active:hover { - background: #6bc641; + background: #7092ff; } .map-overlay { @@ -816,8 +811,8 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} .layerswitcher-control li:hover .select-box, .layerswitcher-control li.selected .select-box { - border: 2px solid #6bc641; - background: rgba(107, 198, 65, .5); + border: 2px solid #7092ff; + background: rgba(89, 123, 231, .5); opacity: .5; } .layerswitcher-control li.selected:hover .select-box, @@ -834,25 +829,29 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} /* Geocoder */ -.geocode-control { +.geocode-control, .geocode-control form { top:150px; } +.geocode-control form { + padding: 4px; +} + .geocode-control input { - width: 140px; - border: 1px solid #ccc; - margin: 4px; + width: 100%; } .geocode-control div { - top: 50px; - width: 340px; - margin: 4px; - padding: 5px; + z-index: 100; + top: 190px; + max-height: 300px; + overflow-y: auto; } + .geocode-control div span { display: inline-block; border-bottom: 1px solid #333; + padding: 5px 10px; } /* Geolocator */ @@ -1146,11 +1145,6 @@ div.typeahead a:first-child { padding: 20px; } -.modal-section .buttons { - padding-top: 10px; - width: 100%; -} - .modal-section img.wiki-image { max-width: 100%; max-height: 300px; @@ -1214,7 +1208,7 @@ a.success-action { } .notice .zoom-to:hover { - background: #bde5aa; + background: #d8e1ff; } .notice .zoom-to .icon { diff --git a/js/id/ui/restore.js b/js/id/ui/restore.js index 3df275d89..aaadae950 100644 --- a/js/id/ui/restore.js +++ b/js/id/ui/restore.js @@ -4,16 +4,17 @@ iD.ui.restore = function(selection, history) { modal.select('.modal') .attr('class', 'modal-splash modal'); - var introModal = modal.select('.content') - .append('div') - .attr('class', 'modal-section fillL') - .text('You have unsaved changes from a previous editing session. Do you wish to restore these changes?'); + var introModal = modal.select('.content'); - buttons = introModal - .append('div') - .attr('class', 'buttons cf') + introModal.append('div') + .attr('class', 'modal-section fillL') + .append('h3').text('You have unsaved changes from a previous editing session. Do you wish to restore these changes?'); + var buttonWrap = introModal.append('div') + .attr('class', 'modal-section fillD cf col12'); + + buttons = buttonWrap .append('div') - .attr('class', 'button-wrap joined col4'); + .attr('class', 'button-wrap joined col6'); buttons.append('button') .attr('class', 'save action button col6') From c3a06c681a6c0534f024dceb45c275d871c72c65 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 17:21:52 -0800 Subject: [PATCH 22/38] Translate/cleanup iD.ui.Commit --- js/id/ui/commit.js | 96 ++++++++++++++++++++++++---------------------- locale/en.js | 12 ++++++ 2 files changed, 63 insertions(+), 45 deletions(-) diff --git a/js/id/ui/commit.js b/js/id/ui/commit.js index 6708ece49..da6fe5c02 100644 --- a/js/id/ui/commit.js +++ b/js/id/ui/commit.js @@ -31,47 +31,44 @@ iD.ui.Commit = function(context) { header = selection.append('div').attr('class', 'header modal-section fillL'), body = selection.append('div').attr('class', 'body'); - header.append('h2').text('Save Changes'); + header.append('h2') + .text(t('commit.title')); - // Comment Box - var comment_section = body.append('div').attr('class','modal-section fillD'); - var commentField = comment_section.append('textarea') + var commentSection = body.append('div') + .attr('class', 'modal-section fillD'); + + var commentField = commentSection.append('textarea') .attr('class', 'changeset-comment') - .attr('placeholder', 'Brief Description of your contributions') + .attr('placeholder', t('commit.description_placeholder')) .property('value', context.storage('comment') || ''); commentField.node().select(); - var commit_info = - comment_section - .append('p') - .attr('class','commit-info'); + var userLink = d3.select(document.createElement('div')); - commit_info.append('span').text('The changes you upload as '); - - var user_link = commit_info.append('a') - .attr('class','user-info') - .text(user.display_name) - .attr('href', connection.url() + '/user/' + user.display_name) - .attr('target', '_blank'); - - commit_info.append('span').text(' will be visible on all maps that use OpenStreetMap data:'); + userLink.append('a') + .attr('class','user-info') + .text(user.display_name) + .attr('href', connection.url() + '/user/' + user.display_name) + .attr('target', '_blank'); if (user.image_url) { - user_link - .append('img') - .attr('src', user.image_url) - .attr('class', 'icon icon-pre-text user-icon'); + userLink.append('img') + .attr('src', user.image_url) + .attr('class', 'icon icon-pre-text user-icon'); } - // Confirm / Cancel Buttons - var buttonwrap = comment_section.append('div') - .attr('class', 'buttons cf') - .append('div') - .attr('class', 'button-wrap joined col4'); + commentSection.append('p') + .attr('class', 'commit-info') + .html(t('commit.upload_explanation', {user: userLink.html()})); - var savebutton = buttonwrap - .append('button') + // Confirm / Cancel Buttons + var buttonWrap = commentSection.append('div') + .attr('class', 'buttons cf') + .append('div') + .attr('class', 'button-wrap joined col4'); + + var saveButton = buttonWrap.append('button') .attr('class', 'save action col6 button') .on('click.save', function() { var comment = commentField.node().value; @@ -80,62 +77,71 @@ iD.ui.Commit = function(context) { comment: comment }); }); - savebutton.append('span').attr('class','label').text('Save'); - var cancelbutton = buttonwrap.append('button') + saveButton.append('span') + .attr('class', 'label') + .text(t('commit.save')); + + var cancelButton = buttonWrap.append('button') .attr('class', 'cancel col6 button') .on('click.cancel', function() { event.cancel(); }); - cancelbutton.append('span').attr('class','label').text('Cancel'); + + cancelButton.append('span') + .attr('class', 'label') + .text(t('commit.cancel')); var warnings = body.selectAll('div.warning-section') .data(iD.validate(changes, context.graph())) .enter() - .append('div').attr('class', 'modal-section warning-section fillL'); + .append('div') + .attr('class', 'modal-section warning-section fillL'); warnings.append('h3') - .text('Warnings'); + .text(t('commit.warnings')); - var warning_li = warnings.append('ul') + var warningLi = warnings.append('ul') .attr('class', 'changeset-list') .selectAll('li') .data(function(d) { return d; }) .enter() .append('li'); - warning_li.append('button') + warningLi.append('button') .attr('class', 'minor') .on('click', event.fix) .append('span') .attr('class', 'icon warning'); - warning_li.append('strong').text(function(d) { + warningLi.append('strong').text(function(d) { return d.message; }); var section = body.selectAll('div.commit-section') .data(['modified', 'deleted', 'created'].filter(changesLength)) .enter() - .append('div').attr('class', 'commit-section modal-section fillL2'); + .append('div') + .attr('class', 'commit-section modal-section fillL2'); - section.append('h3').text(function(d) { - return d.charAt(0).toUpperCase() + d.slice(1); - }) + section.append('h3') + .text(function(d) { return t('commit.' + d); }) .append('small') .attr('class', 'count') .text(changesLength); var li = section.append('ul') - .attr('class','changeset-list') + .attr('class', 'changeset-list') .selectAll('li') .data(function(d) { return zipSame(changes[d]); }) .enter() .append('li'); - li.append('strong').text(function(d) { - return (d.count > 1) ? d.type + 's ' : d.type + ' '; - }); + li.append('strong') + .text(function(d) { + return (d.count > 1) ? d.type + 's ' : d.type + ' '; + }); + li.append('span') .text(function(d) { return d.name; }) .attr('title', function(d) { return d.tagText; }); diff --git a/locale/en.js b/locale/en.js index 7581b5fcb..3902fb20e 100644 --- a/locale/en.js +++ b/locale/en.js @@ -186,6 +186,18 @@ locale.en = { reset: "reset" }, + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + contributors: { list: "Viewing contributions by {users}", truncated_list: "Viewing contributions by {users} and {count} others" From 6bbea0784abd6bd639092cf2be626a30438ab68c Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 17:31:59 -0800 Subject: [PATCH 23/38] Fix locale includes --- test/index.html | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/index.html b/test/index.html index d9640c687..dcea8e28c 100644 --- a/test/index.html +++ b/test/index.html @@ -136,14 +136,15 @@ - - - - + + + + + + - From 5f0bef89e1b4039e2f57809706289dd68874c72f Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 17:38:55 -0800 Subject: [PATCH 24/38] Sync translations --- locale/da.js | 28 ++++++++++++++++++++-------- locale/de.js | 16 ++++++++++++++++ locale/es.js | 16 ++++++++++++++++ locale/fr.js | 16 ++++++++++++++++ locale/ja.js | 16 ++++++++++++++++ locale/lv.js | 16 ++++++++++++++++ locale/tr.js | 16 ++++++++++++++++ test/spec/translation.js | 3 ++- 8 files changed, 118 insertions(+), 9 deletions(-) diff --git a/locale/da.js b/locale/da.js index 29e23c6f2..770b7681e 100644 --- a/locale/da.js +++ b/locale/da.js @@ -3,25 +3,21 @@ locale.da = { add_area: { title: "Område", description: "Tilføj parker, bygninger, søer, eller andre områder til kortet.", - tail: "Klik på kortet for at indtegne et område fx en park, sø eller bygning.", - key: "A" + tail: "Klik på kortet for at indtegne et område fx en park, sø eller bygning." }, add_line: { title: "Linje", description: "Linjer kan være veje, gader eller stier selv kanaler kan være linjer.", - tail: "Klik på koret for at indtegne en vej, sti eller rute.", - key: "L" + tail: "Klik på koret for at indtegne en vej, sti eller rute." }, add_point: { title: "Punkt", description: "Restauranter, mindesmærker og postkasser er punkter.", - tail: "Klik på kortet for at tilføje et punkt.", - key: "P" + tail: "Klik på kortet for at tilføje et punkt." }, browse: { title: "Browse", - description: "Træk rundt og zoom på kortet.", - key: "B" + description: "Træk rundt og zoom på kortet." }, draw_area: { tail: "Klik her for at tilføje punkter til dit område. Click the first point to finish the area." @@ -172,6 +168,10 @@ locale.da = { no_results: "Kunne ikke finde '{name}'" }, + geolocate: { + title: "Show My Location" + }, + description: "Description", logout: "log ud", @@ -186,6 +186,18 @@ locale.da = { reset: "nulstill" }, + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + contributors: { list: "Vis bidrag fra {users}", truncated_list: "Vis bidrag fra {users} og {count} andre" diff --git a/locale/de.js b/locale/de.js index f1f3ef850..0a74f78f6 100644 --- a/locale/de.js +++ b/locale/de.js @@ -168,12 +168,28 @@ locale.de = { no_results: "Der Ort '{name}' konnte nicht gefunden werden" }, + geolocate: { + title: "Show My Location" + }, + description: "Beschreibung", report_a_bug: "Programmfehler melden", logout: "Abmelden", + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + contributors: { list: "Diese Kartenansicht enthält Beiträge von:", truncated_list: "Diese Kartenansicht enthält Beiträge von: {users} und {count} Anderen" diff --git a/locale/es.js b/locale/es.js index 0468405b5..1de8aa06c 100644 --- a/locale/es.js +++ b/locale/es.js @@ -168,6 +168,10 @@ locale.es = { no_results: "No se pudo encontrar el lugar llamado '{name}'" //"Couldn't locate a place named '{name}'" }, + geolocate: { + title: "Show My Location" + }, + description: "Descripción", //"Description", logout: "cerrar sesión", //"logout", @@ -182,6 +186,18 @@ locale.es = { reset: "reiniciar" //"reset" }, + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + contributors: { list: "Viendo las contribuciones de usuarios {users}", //"Viewing contributions by {users}", truncated_list: "Viendo las contribuciones de {users} y {count} más" //"Viewing contributions by {users} and {count} others" diff --git a/locale/fr.js b/locale/fr.js index 4530924a0..02a23b7db 100644 --- a/locale/fr.js +++ b/locale/fr.js @@ -168,6 +168,10 @@ locale.fr = { no_results: "Impossible de localiser l'endroit nommé '{name}'" }, + geolocate: { + title: "Show My Location" + }, + description: "Déscription", logout: "Déconnexion", @@ -179,6 +183,18 @@ locale.fr = { truncated_list: "Consulter les contributions de {users} et {count} les autres" }, + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + layerswitcher: { title: "Fond de carte", description: "Paramètres du fond de carte", diff --git a/locale/ja.js b/locale/ja.js index ada737bd1..d08e0a976 100644 --- a/locale/ja.js +++ b/locale/ja.js @@ -168,6 +168,10 @@ locale.ja = { no_results: "'{name}' という名称の地点が見つかりません" }, + geolocate: { + title: "Show My Location" + }, + description: "説明", logout: "ログアウト", @@ -182,6 +186,18 @@ locale.ja = { reset: "設定リセット" }, + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + contributors: { list: "{users} による編集履歴を確認", truncated_list: "{users} とその他 {count} 人による編集履歴を表示" diff --git a/locale/lv.js b/locale/lv.js index fd8be7cfe..9ca9fd440 100644 --- a/locale/lv.js +++ b/locale/lv.js @@ -168,6 +168,10 @@ locale.lv = { no_results: "Nevar atrast vietu '{name}'" }, + geolocate: { + title: "Show My Location" + }, + description: "Apraksts", logout: "atslēgties", @@ -182,6 +186,18 @@ locale.lv = { reset: "Pārstatīt" }, + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + contributors: { list: "{users} papildinājumi redzami", truncated_list: "{users} un {count} citu papildinājumi redzami" diff --git a/locale/tr.js b/locale/tr.js index a9b3e4b47..3b0602658 100644 --- a/locale/tr.js +++ b/locale/tr.js @@ -168,6 +168,10 @@ locale.tr = { no_results: "'{name}' ismindeki yer bulunamadı" }, + geolocate: { + title: "Show My Location" + }, + description: "Açıklama", logout: "Çıkış", @@ -182,6 +186,18 @@ locale.tr = { reset: "Sıfırla" }, + commit: { + title: "Save Changes", + description_placeholder: "Brief description of your contributions", + upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", + save: "Save", + cancel: "Cancel", + warnings: "Warnings", + modified: "Modified", + deleted: "Deleted", + created: "Created" + }, + contributors: { list: "{users} tarafından yapılan katkılar görünmektedir", truncated_list: "{users} ve diğer {count} tarafından yapılan katkılar görünmektedir" diff --git a/test/spec/translation.js b/test/spec/translation.js index 963f59fe0..41f2e07df 100644 --- a/test/spec/translation.js +++ b/test/spec/translation.js @@ -27,7 +27,8 @@ describe('translations', function() { var allkeys = _.flatten(_.values(languageKeys)); _.forEach(languageKeys, function(l, k) { - expect(_.difference(allkeys, l)).to.eql([]); + var diff = _.difference(allkeys, l).join(", "); + expect(diff).to.equal(""); }); }); From d92d87ebf5b9516b969991f05f6bf4affd3615a3 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 19:55:09 -0800 Subject: [PATCH 25/38] Organize translations --- js/id/ui.js | 2 +- js/id/ui/inspector.js | 4 +- js/id/ui/save.js | 8 ++-- js/id/ui/tag_reference.js | 2 +- locale/da.js | 80 ++++++++++++++++---------------- locale/de.js | 82 ++++++++++++++++----------------- locale/en.js | 96 +++++++++++++++++++-------------------- locale/es.js | 96 +++++++++++++++++++-------------------- locale/fr.js | 90 ++++++++++++++++++------------------ locale/ja.js | 96 +++++++++++++++++++-------------------- locale/lv.js | 96 +++++++++++++++++++-------------------- locale/tr.js | 96 +++++++++++++++++++-------------------- 12 files changed, 366 insertions(+), 382 deletions(-) diff --git a/js/id/ui.js b/js/id/ui.js index 48e5682bf..4e6ec4c24 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -107,7 +107,7 @@ iD.ui = function(context) { window.onbeforeunload = function() { history.save(); - if (history.hasChanges()) return t('unsaved_changes'); + if (history.hasChanges()) return t('save.unsaved_changes'); }; d3.select(window).on('resize.editor', function() { diff --git a/js/id/ui/inspector.js b/js/id/ui/inspector.js index 173594101..1b1c78be6 100644 --- a/js/id/ui/inspector.js +++ b/js/id/ui/inspector.js @@ -22,7 +22,7 @@ iD.ui.Inspector = function() { .attr('class', 'inspector-inner tag-wrap fillL2'); inspectorwrap.append('h4') - .text(t('edit_tags')); + .text(t('inspector.edit_tags')); tagList = inspectorwrap.append('ul'); @@ -65,7 +65,7 @@ iD.ui.Inspector = function() { .attr('class', 'apply action') .on('click', apply); - inspectorButton.append('span').attr('class','label').text(t('okay')); + inspectorButton.append('span').attr('class','label').text(t('inspector.okay')); var minorButtons = selection.append('div').attr('class','minor-buttons fl'); diff --git a/js/id/ui/save.js b/js/id/ui/save.js index b4eed1dd0..8b0ef57ce 100644 --- a/js/id/ui/save.js +++ b/js/id/ui/save.js @@ -30,7 +30,7 @@ iD.ui.Save = function(context) { context.container().select('.shaded') .remove(); - var loading = iD.ui.loading(context.container(), t('uploading_changes'), true); + var loading = iD.ui.loading(context.container(), t('save.uploading'), true); connection.putChangeset( history.changes(), @@ -44,7 +44,7 @@ iD.ui.Save = function(context) { var desc = iD.ui.confirm() .select('.description'); desc.append('h2') - .text(t('save_error')); + .text(t('save.error')); desc.append('p').text(err.responseText); } else { success(e, changeset_id); @@ -81,11 +81,11 @@ iD.ui.Save = function(context) { .call(bootstrap.tooltip() .placement('bottom') .html(true) - .title(iD.ui.tooltipHtml(t('save_help'), key))); + .title(iD.ui.tooltipHtml(t('save.help'), key))); button.append('span') .attr('class', 'label') - .text(t('save')); + .text(t('save.title')); button.append('span') .attr('class', 'count'); diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index 6b7b9fb9f..dc583b932 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -24,7 +24,7 @@ iD.ui.tagReference = function(selection) { referenceBody .append('h5') - .text(t('description')); + .text(t('tag_reference.description')); if (selection.datum().image) { referenceBody diff --git a/locale/da.js b/locale/da.js index 770b7681e..17b75c340 100644 --- a/locale/da.js +++ b/locale/da.js @@ -128,54 +128,14 @@ locale.da = { } }, - validations: { - untagged_point: "Untagged point which is not part of a line or area", - untagged_line: "Untagged line", - untagged_area: "Untagged area", - tag_suggests_area: "The tag {tag} suggests line should be area, but it is not an area", - deprecated_tags: "Deprecated tags: {tags}" - }, - - save: "Gem", - unsaved_changes: "Du har ændringer der ikke er gemt endnu", - save_help: "Gem ændringer til OpenStreetMap gør dem synlige for andre brugere", - no_changes: "Du har ingen ændringer til at gemme endnu.", - save_error: "Der skete en fejl da du prøvede at gemme", - uploading_changes: "Gemmer nu ændringer til OpenStreetMap.", - just_edited: "Du har lige rettede i OpenStreetMap!", - okay: "Ok", - nothing_to_undo: "Nothing to undo.", nothing_to_redo: "Nothing to redo.", + just_edited: "Du har lige rettede i OpenStreetMap!", browser_notice: "This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 9 and above. Please upgrade your browser or use Potlatch 2 to edit the map.", - - inspector: { - no_documentation_combination: "Der er ingen dokumentation for denne tag kombination", - no_documentation_key: "Der er ingen dokumenation tilgængelig for denne nøgle", - new_tag: "Nyt Tag" - }, - view_on_osm: "Vis på OSM", - zoom_in_edit: "zoom ind for at rette kortet", - - edit_tags: "Ret tags", - - geocoder: { - title: "Find et sted", - placeholder: "find et sted", - no_results: "Kunne ikke finde '{name}'" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "Description", - logout: "log ud", - report_a_bug: "report a bug", layerswitcher: { @@ -203,13 +163,51 @@ locale.da = { truncated_list: "Vis bidrag fra {users} og {count} andre" }, + geocoder: { + title: "Find et sted", + placeholder: "find et sted", + no_results: "Kunne ikke finde '{name}'" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "Der er ingen dokumentation for denne tag kombination", + no_documentation_key: "Der er ingen dokumenation tilgængelig for denne nøgle", + new_tag: "Nyt Tag", + edit_tags: "Ret tags", + okay: "Ok" + }, + + save: { + title: "Gem", + help: "Gem ændringer til OpenStreetMap gør dem synlige for andre brugere", + error: "Der skete en fejl da du prøvede at gemme", + uploading: "Gemmer nu ændringer til OpenStreetMap.", + unsaved_changes: "Du har ændringer der ikke er gemt endnu", + }, + source_switch: { live: "live", dev: "dev" }, + tag_reference: { + description: "Description" + }, + zoom: { in: "Zoom ind", out: "Zoom ud" + }, + + validations: { + untagged_point: "Untagged point which is not part of a line or area", + untagged_line: "Untagged line", + untagged_area: "Untagged area", + tag_suggests_area: "The tag {tag} suggests line should be area, but it is not an area", + deprecated_tags: "Deprecated tags: {tags}" } }; diff --git a/locale/de.js b/locale/de.js index 0a74f78f6..60f4c6155 100644 --- a/locale/de.js +++ b/locale/de.js @@ -128,55 +128,15 @@ locale.de = { } }, - validations: { - untagged_point: "Punkt ohne Attribute, der kein Teil einer Linie oder Fläche ist", - untagged_line: "Linie ohne Attribute", - untagged_area: "Fläche ohne Attribute", - tag_suggests_area: "Das Attribut {tag} suggeriert eine Fläche, ist aber keine Fläche", - deprecated_tags: "Veralterte Attribute: {tags}" - }, - - save: "Speichern", - unsaved_changes: "Ungespeicherte Änderugen vorhanden", - save_help: "Speichere Änderungen auf OpenStreetMap, um diese für andere Nutzer sichtbar zu machen", - no_changes: "Keine Änderungen zum Speichern vorhanden.", - save_error: "Beim Speichern ist ein Fehler aufgetreten", - uploading_changes: "Änderungen werden zu OpenStreetMap hochgeladen.", - just_edited: "Sie haben gerade OpenStreetMap editiert!", - okay: "OK", - nothing_to_undo: "Nichts zum Rückgängigmachen.", nothing_to_redo: "Nichts zum Wiederherstellen.", + just_edited: "Sie haben gerade OpenStreetMap editiert!", browser_notice: "Dieser Editor wird von Firefox, Chrome, Safari, Opera, und Internet Explorer (Version 9 und höher) unterstzützt. Bitte aktualisieren Sie Ihren Browser oder nutzen Sie Potlatch 2, um die Karte zu modifizieren.", - - inspector: { - no_documentation_combination: "Für dieses Attribut ist keine Dokumentation verfügbar.", - no_documentation_key: "Für dises Schlüsselwort ist keine Dokumentation verfügbar", - new_tag: "Neues Attribut" - }, - view_on_osm: "Auf OSM anschauen", - zoom_in_edit: "Hineinzoomen, um die Karte zu bearbeiten", - - edit_tags: "Attribute bearbeiten", - - geocoder: { - title: "Suche einen Ort", - placeholder: "suche einen Ort", - no_results: "Der Ort '{name}' konnte nicht gefunden werden" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "Beschreibung", - - report_a_bug: "Programmfehler melden", - logout: "Abmelden", + report_a_bug: "Programmfehler melden", commit: { title: "Save Changes", @@ -195,6 +155,24 @@ locale.de = { truncated_list: "Diese Kartenansicht enthält Beiträge von: {users} und {count} Anderen" }, + geocoder: { + title: "Suche einen Ort", + placeholder: "suche einen Ort", + no_results: "Der Ort '{name}' konnte nicht gefunden werden" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "Für dieses Attribut ist keine Dokumentation verfügbar.", + no_documentation_key: "Für dises Schlüsselwort ist keine Dokumentation verfügbar", + new_tag: "Neues Attribut", + edit_tags: "Attribute bearbeiten", + okay: "OK" + }, + layerswitcher: { title: "Hintergrund", description: "Hintergrundeinstellungen", @@ -203,11 +181,31 @@ locale.de = { reset: "Zurücksetzen" }, + save: { + title: "Speichern", + help: "Speichere Änderungen auf OpenStreetMap, um diese für andere Nutzer sichtbar zu machen", + error: "Beim Speichern ist ein Fehler aufgetreten", + uploading: "Änderungen werden zu OpenStreetMap hochgeladen.", + unsaved_changes: "Ungespeicherte Änderugen vorhanden", + }, + source_switch: { live: "live", dev: "dev" }, + tag_reference: { + description: "Beschreibung" + }, + + validations: { + untagged_point: "Punkt ohne Attribute, der kein Teil einer Linie oder Fläche ist", + untagged_line: "Linie ohne Attribute", + untagged_area: "Fläche ohne Attribute", + tag_suggests_area: "Das Attribut {tag} suggeriert eine Fläche, ist aber keine Fläche", + deprecated_tags: "Veralterte Attribute: {tags}" + }, + zoom: { in: "Hineinzoomen", out: "Herauszoomen" diff --git a/locale/en.js b/locale/en.js index 3902fb20e..9060f7b66 100644 --- a/locale/en.js +++ b/locale/en.js @@ -128,64 +128,16 @@ locale.en = { } }, - validations: { - untagged_point: "Untagged point which is not part of a line or area", - untagged_line: "Untagged line", - untagged_area: "Untagged area", - tag_suggests_area: "The tag {tag} suggests line should be area, but it is not an area", - deprecated_tags: "Deprecated tags: {tags}" - }, - - save: "Save", - unsaved_changes: "You have unsaved changes", - save_help: "Save changes to OpenStreetMap, making them visible to other users", - no_changes: "You don't have any changes to save.", - save_error: "An error occurred while trying to save", - uploading_changes: "Uploading changes to OpenStreetMap.", - just_edited: "You Just Edited OpenStreetMap!", - okay: "Okay", - nothing_to_undo: "Nothing to undo.", nothing_to_redo: "Nothing to redo.", + just_edited: "You Just Edited OpenStreetMap!", browser_notice: "This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 9 and above. Please upgrade your browser or use Potlatch 2 to edit the map.", - - inspector: { - no_documentation_combination: "There is no documentation available for this tag combination", - no_documentation_key: "There is no documentation available for this key", - new_tag: "New Tag" - }, - view_on_osm: "View on OSM", - zoom_in_edit: "zoom in to edit the map", - - edit_tags: "Edit tags", - - geocoder: { - title: "Find A Place", - placeholder: "find a place", - no_results: "Couldn't locate a place named '{name}'" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "Description", - logout: "logout", - report_a_bug: "report a bug", - layerswitcher: { - title: "Background", - description: "Background Settings", - percent_brightness: "{opacity}% brightness", - fix_misalignment: "Fix misalignment", - reset: "reset" - }, - commit: { title: "Save Changes", description_placeholder: "Brief description of your contributions", @@ -203,11 +155,57 @@ locale.en = { truncated_list: "Viewing contributions by {users} and {count} others" }, + geocoder: { + title: "Find A Place", + placeholder: "find a place", + no_results: "Couldn't locate a place named '{name}'" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "There is no documentation available for this tag combination", + no_documentation_key: "There is no documentation available for this key", + new_tag: "New Tag", + edit_tags: "Edit tags", + okay: "Okay" + }, + + layerswitcher: { + title: "Background", + description: "Background Settings", + percent_brightness: "{opacity}% brightness", + fix_misalignment: "Fix misalignment", + reset: "reset" + }, + + save: { + title: "Save", + help: "Save changes to OpenStreetMap, making them visible to other users", + error: "An error occurred while trying to save", + uploading: "Uploading changes to OpenStreetMap.", + unsaved_changes: "You have unsaved changes" + }, + source_switch: { live: "live", dev: "dev" }, + tag_reference: { + description: 'Description' + }, + + validations: { + untagged_point: "Untagged point which is not part of a line or area", + untagged_line: "Untagged line", + untagged_area: "Untagged area", + tag_suggests_area: "The tag {tag} suggests line should be area, but it is not an area", + deprecated_tags: "Deprecated tags: {tags}" + }, + zoom: { in: "Zoom In", out: "Zoom Out" diff --git a/locale/es.js b/locale/es.js index 1de8aa06c..c440429db 100644 --- a/locale/es.js +++ b/locale/es.js @@ -128,64 +128,16 @@ locale.es = { } }, - validations: { - untagged_point: "Punto sin etiquetar que no es parte de una línea ni zona.", //"Untagged point which is not part of a line or area", - untagged_line: "Línea sin etiquetar", //"Untagged line", - untagged_area: "Zona sin etiquetar", //"Untagged area", - tag_suggests_area: "La etiqueta {tag} sugiere que esta línea debería ser una zona, pero no lo es.", //"The tag {tag} suggests line should be area, but it is not an area", - deprecated_tags: "Etiquetas obsoletas: {tags}" //"Deprecated tags: {tags}" - }, - - save: "Guardar", //"Save", - unsaved_changes: "Tienes cambios sin guardar", //"You have unsaved changes", - save_help: "Guardar los cambios en OpenStreetMap haciéndolos visibles a otros usuarios", //"Save changes to OpenStreetMap, making them visible to other users", - no_changes: "No tienes cambios sin guardar", //"You don't have any changes to save.", - save_error: "Ha ocurrido un error tratando de guardar", //"An error occurred while trying to save", - uploading_changes: "Subiendo cambios a OpenStreetMap", //"Uploading changes to OpenStreetMap.", - just_edited: "Acabas de editar OpenStreetMap!", //"You Just Edited OpenStreetMap!", - okay: "OK", //"Okay", - nothing_to_undo: "Nada para deshacer", //"Nothing to undo.", nothing_to_redo: "Nada para rehacer", //"Nothing to redo.", + just_edited: "Acabas de editar OpenStreetMap!", //"You Just Edited OpenStreetMap!", browser_notice: "Este editor soporta Firefox, Chrome, Safari, Opera e Internet Explorer 9 o superior. Por favor actualiza tu navegador o utiliza Potlatch 2 para editar el mapa.", //"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 9 and above. Please upgrade your browser or use Potlatch 2 to edit the map.", - - inspector: { - no_documentation_combination: "No hay documentación disponible para esta combinación de etiquetas", //"This is no documentation available for this tag combination", - no_documentation_key: "No hay documentación disponible para esta tecla", //"This is no documentation available for this key", - new_tag: "Nueve etiqueta" //"New Tag" - }, - view_on_osm: "Ver en OSM", //"View on OSM", - zoom_in_edit: "acercar para editar el mapa", //"zoom in to edit the map", - - edit_tags: "Editar etiquetas", //"Edit tags", - - geocoder: { - title: "Encontrar un lugar", //"Find A Place", - placeholder: "encontrar un lugar", //"find a place", - no_results: "No se pudo encontrar el lugar llamado '{name}'" //"Couldn't locate a place named '{name}'" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "Descripción", //"Description", - logout: "cerrar sesión", //"logout", - report_a_bug: "reportar un error", //"report a bug", - layerswitcher: { - title: "Fondo", //"Background", - description: "Configuración de fondo", //"Background Settings", - percent_brightness: "{opacity}% brillo", //"{opacity}% brightness", - fix_misalignment: "Arreglar alineamiento", //"Fix misalignment", - reset: "reiniciar" //"reset" - }, - commit: { title: "Save Changes", description_placeholder: "Brief description of your contributions", @@ -203,11 +155,57 @@ locale.es = { truncated_list: "Viendo las contribuciones de {users} y {count} más" //"Viewing contributions by {users} and {count} others" }, + geocoder: { + title: "Encontrar un lugar", //"Find A Place", + placeholder: "encontrar un lugar", //"find a place", + no_results: "No se pudo encontrar el lugar llamado '{name}'" //"Couldn't locate a place named '{name}'" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "No hay documentación disponible para esta combinación de etiquetas", //"This is no documentation available for this tag combination", + no_documentation_key: "No hay documentación disponible para esta tecla", //"This is no documentation available for this key", + new_tag: "Nueve etiqueta", //"New Tag" + edit_tags: "Editar etiquetas", //"Edit tags", + okay: "OK" //"Okay", + }, + + layerswitcher: { + title: "Fondo", //"Background", + description: "Configuración de fondo", //"Background Settings", + percent_brightness: "{opacity}% brillo", //"{opacity}% brightness", + fix_misalignment: "Arreglar alineamiento", //"Fix misalignment", + reset: "reiniciar" //"reset" + }, + + save: { + title: "Guardar", //"Save", + help: "Guardar los cambios en OpenStreetMap haciéndolos visibles a otros usuarios", //"Save changes to OpenStreetMap, making them visible to other users", + error: "Ha ocurrido un error tratando de guardar", //"An error occurred while trying to save", + uploading: "Subiendo cambios a OpenStreetMap", //"Uploading changes to OpenStreetMap.", + unsaved_changes: "Tienes cambios sin guardar" //"You have unsaved changes", + }, + source_switch: { live: "en vivo", //"live", dev: "dev" }, + tag_reference: { + description: "Descripción" //"Description", + }, + + validations: { + untagged_point: "Punto sin etiquetar que no es parte de una línea ni zona.", //"Untagged point which is not part of a line or area", + untagged_line: "Línea sin etiquetar", //"Untagged line", + untagged_area: "Zona sin etiquetar", //"Untagged area", + tag_suggests_area: "La etiqueta {tag} sugiere que esta línea debería ser una zona, pero no lo es.", //"The tag {tag} suggests line should be area, but it is not an area", + deprecated_tags: "Etiquetas obsoletas: {tags}" //"Deprecated tags: {tags}" + }, + zoom: { in: "Aumentar", // "Zoom In", out: "Alejar" //"Zoom Out", diff --git a/locale/fr.js b/locale/fr.js index 02a23b7db..d6c36189a 100644 --- a/locale/fr.js +++ b/locale/fr.js @@ -128,61 +128,16 @@ locale.fr = { } }, - validations: { - untagged_point: "Point sans aucun tag ne faisant partie ni d'une ligne, ni d'un polygone", - untagged_line: "Ligne sans aucun tag", - untagged_area: "Polygone sans aucun tag", - tag_suggests_area: "Ce tag {tag} suppose que cette ligne devrait être un polygone, or ce n'est pas le cas", - deprecated_tags: "Tags obsolètes : {tags}" - }, - - save: "Sauvegarder", - unsaved_changes: "Vous avez des modifications non enregistrées", - save_help: "Envoie des modifications au serveyr OpenStreetMap afin qu'elles soient visibles par les autres contributeurs.", - no_changes: "Vous n'avez aucune modification à enregistrer.", - save_error: "Une erreur est survenue lors de l'enregistrement des données", - uploading_changes: "Envoie des modifications vers OpenStreetMap.", - just_edited: "Vous venez de participer à OpenStreetMap!", - okay: "Okay", - nothing_to_undo: "Rien à annuler.", nothing_to_redo: "Rien à refaire.", + just_edited: "Vous venez de participer à OpenStreetMap!", browser_notice: "Les navigateurs supportés par cet éditeur sont : Firefox, Chrome, Safari, Opera et Internet Explorer (version 9 et supérieures). Pour éditer la carte, veuillez mettre à jour votre navigateur ou utiliser Potlatch 2.", - - inspector: { - no_documentation_combination: "Aucune documentation n'est disponible pour cette combinaison de tag", - no_documentation_key: "Aucune documentation n'est disponible pour cette clé", - new_tag: "Nouveau tag" - }, - view_on_osm: "Consulter dans OSM", - zoom_in_edit: "Zoomer pour modifier la carte", - - edit_tags: "Editer les tags", - - geocoder: { - title: "Trouver un emplacement", - placeholder: "Trouver un endroit", - no_results: "Impossible de localiser l'endroit nommé '{name}'" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "Déscription", - logout: "Déconnexion", - report_a_bug: "Signaler un bug", - contributors: { - list: "Consulter les contributions de {users}", - truncated_list: "Consulter les contributions de {users} et {count} les autres" - }, - commit: { title: "Save Changes", description_placeholder: "Brief description of your contributions", @@ -195,6 +150,29 @@ locale.fr = { created: "Created" }, + contributors: { + list: "Consulter les contributions de {users}", + truncated_list: "Consulter les contributions de {users} et {count} les autres" + }, + + geocoder: { + title: "Trouver un emplacement", + placeholder: "Trouver un endroit", + no_results: "Impossible de localiser l'endroit nommé '{name}'" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "Aucune documentation n'est disponible pour cette combinaison de tag", + no_documentation_key: "Aucune documentation n'est disponible pour cette clé", + new_tag: "Nouveau tag", + edit_tags: "Editer les tags", + okay: "Okay" + }, + layerswitcher: { title: "Fond de carte", description: "Paramètres du fond de carte", @@ -203,11 +181,31 @@ locale.fr = { reset: "reset" }, + save: { + title: "Sauvegarder", + help: "Envoie des modifications au serveyr OpenStreetMap afin qu'elles soient visibles par les autres contributeurs.", + error: "Une erreur est survenue lors de l'enregistrement des données", + uploading: "Envoie des modifications vers OpenStreetMap.", + unsaved_changes: "Vous avez des modifications non enregistrées" + }, + source_switch: { live: "live", dev: "dev" }, + tag_reference: { + description: "Déscription" + }, + + validations: { + untagged_point: "Point sans aucun tag ne faisant partie ni d'une ligne, ni d'un polygone", + untagged_line: "Ligne sans aucun tag", + untagged_area: "Polygone sans aucun tag", + tag_suggests_area: "Ce tag {tag} suppose que cette ligne devrait être un polygone, or ce n'est pas le cas", + deprecated_tags: "Tags obsolètes : {tags}" + }, + zoom: { in: "Zoomer", out: "Dézoomer" diff --git a/locale/ja.js b/locale/ja.js index d08e0a976..61b76ace5 100644 --- a/locale/ja.js +++ b/locale/ja.js @@ -128,64 +128,16 @@ locale.ja = { } }, - validations: { - untagged_point: "ポイントにタグが付与されておらず、ラインやエリアの一部でもありません", - untagged_line: "ラインにタグが付与されていません", - untagged_area: "エリアにタグが付与されていません", - tag_suggests_area: "ラインに {tag} タグが付与されています。エリアで描かれるべきです", - deprecated_tags: "タグの重複: {tags}" - }, - - save: "Save", - unsaved_changes: "変更が保存されていません", - save_help: "変更点をOpenStreetMapに保存し、他ユーザが確認できるようにします", - no_changes: "変更点がありません", - save_error: "データ保存中にエラーが発生しました", - uploading_changes: "変更点をOpenStreetMapへアップロードしています", - just_edited: "OpenStreetMap編集完了!", - okay: "OK", - nothing_to_undo: "やり直す変更点がありません", nothing_to_redo: "やり直した変更点がありません", + just_edited: "OpenStreetMap編集完了!", browser_notice: "このエディタは Firefox, Chrome, Safari, Opera, および Internet Explorer 9 以上をサポートしています。ブラウザのバージョンを更新するか、Potlatch 2を使用して編集してください", - - inspector: { - no_documentation_combination: "このタグの組み合わせに関する説明文はありません", - no_documentation_key: "このキーに対する説明文はありません", - new_tag: "新規タグ" - }, - view_on_osm: "OSMで確認", - zoom_in_edit: "編集するにはさらに地図を拡大してください", - - edit_tags: "タグを編集", - - geocoder: { - title: "特定地点を検索", - placeholder: "地点を検索", - no_results: "'{name}' という名称の地点が見つかりません" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "説明", - logout: "ログアウト", - report_a_bug: "バグを報告", - layerswitcher: { - title: "背景画像", - description: "背景画像設定", - percent_brightness: "{opacity}% 輝度", - fix_misalignment: "背景画像を移動", - reset: "設定リセット" - }, - commit: { title: "Save Changes", description_placeholder: "Brief description of your contributions", @@ -203,11 +155,57 @@ locale.ja = { truncated_list: "{users} とその他 {count} 人による編集履歴を表示" }, + geocoder: { + title: "特定地点を検索", + placeholder: "地点を検索", + no_results: "'{name}' という名称の地点が見つかりません" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "このタグの組み合わせに関する説明文はありません", + no_documentation_key: "このキーに対する説明文はありません", + new_tag: "新規タグ", + edit_tags: "タグを編集", + okay: "OK" + }, + + layerswitcher: { + title: "背景画像", + description: "背景画像設定", + percent_brightness: "{opacity}% 輝度", + fix_misalignment: "背景画像を移動", + reset: "設定リセット" + }, + + save: { + title: "Save", + help: "変更点をOpenStreetMapに保存し、他ユーザが確認できるようにします", + error: "データ保存中にエラーが発生しました", + uploading: "変更点をOpenStreetMapへアップロードしています", + unsaved_changes: "変更が保存されていません" + }, + source_switch: { live: "本番サーバ", dev: "開発サーバ" }, + tag_reference: { + description: "説明" + }, + + validations: { + untagged_point: "ポイントにタグが付与されておらず、ラインやエリアの一部でもありません", + untagged_line: "ラインにタグが付与されていません", + untagged_area: "エリアにタグが付与されていません", + tag_suggests_area: "ラインに {tag} タグが付与されています。エリアで描かれるべきです", + deprecated_tags: "タグの重複: {tags}" + }, + zoom: { in: "ズームイン", out: "ズームアウト" diff --git a/locale/lv.js b/locale/lv.js index 9ca9fd440..3a799c2a9 100644 --- a/locale/lv.js +++ b/locale/lv.js @@ -128,64 +128,16 @@ locale.lv = { } }, - validations: { - untagged_point: "Neapzīmēts punkts", - untagged_line: "Neapzīmēta līnija", - untagged_area: "Neapzīmēts apgabals", - tag_suggests_area: "Apzīmējums {tag} parasti tiek lietots apgabaliem, bet objekts nav apgabals", - deprecated_tags: "Novecojuši apzīmējumi: {tags}" - }, - - save: "Saglabāt", - unsaved_changes: "Jums ir nesaglabātas izmaiņas", - save_help: "Saglabā izmaiņas, padarot tās redzamas citiem", - no_changes: "Jums nav izmaiņu, ko saglabāt", - save_error: "Kļūda. Nevarēja saglabāt maiņas", - uploading_changes: "Augšupielādē", - just_edited: "Jūs nupat rediģējāt OpenStreetMap", - okay: "Labi", - nothing_to_undo: "Nav nekā, ko atcelt", nothing_to_redo: "Nav nekā, ko atsaukt", + just_edited: "Jūs nupat rediģējāt OpenStreetMap", browser_notice: "Šis redaktors tiek atbalstīts ar Firefox, Chrome, Safari, Opera, un Internet Explorer 9 un jaunāku. Lūdzu, atjauniniet savu pārlūkprogrammu vai izmantojiet Potlatch 2 to kartes rediģēšanai", - - inspector: { - no_documentation_combination: "Šai apzīmējumu kombinācijai nav piejama dokumetācija", - no_documentation_key: "There is no documentation available for this key", - new_tag: "Jauns apzīmējums" - }, - view_on_osm: "Apskatīt OSM lapu", - zoom_in_edit: "pietuviniet, lai rediģētu karti", - - edit_tags: "Rediģēt apzīmējumus", - - geocoder: { - title: "Atrast vietu", - placeholder: "meklē vietu", - no_results: "Nevar atrast vietu '{name}'" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "Apraksts", - logout: "atslēgties", - report_a_bug: "ziņot par kļūdu", - layerswitcher: { - title: "Fons", - description: "Fona iestatījumi", - percent_brightness: "{opacity}% gaišums", - fix_misalignment: "Labot fona nolīdzināšanu", - reset: "Pārstatīt" - }, - commit: { title: "Save Changes", description_placeholder: "Brief description of your contributions", @@ -203,11 +155,57 @@ locale.lv = { truncated_list: "{users} un {count} citu papildinājumi redzami" }, + geocoder: { + title: "Atrast vietu", + placeholder: "meklē vietu", + no_results: "Nevar atrast vietu '{name}'" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "Šai apzīmējumu kombinācijai nav piejama dokumetācija", + no_documentation_key: "There is no documentation available for this key", + new_tag: "Jauns apzīmējums", + edit_tags: "Rediģēt apzīmējumus", + okay: "Labi" + }, + + layerswitcher: { + title: "Fons", + description: "Fona iestatījumi", + percent_brightness: "{opacity}% gaišums", + fix_misalignment: "Labot fona nolīdzināšanu", + reset: "Pārstatīt" + }, + + save: { + title: "Saglabāt", + help: "Saglabā izmaiņas, padarot tās redzamas citiem", + error: "Kļūda. Nevarēja saglabāt maiņas", + uploading: "Augšupielādē", + unsaved_changes: "Jums ir nesaglabātas izmaiņas" + }, + source_switch: { live: "live", dev: "dev" }, + tag_reference: { + description: "Apraksts" + }, + + validations: { + untagged_point: "Neapzīmēts punkts", + untagged_line: "Neapzīmēta līnija", + untagged_area: "Neapzīmēts apgabals", + tag_suggests_area: "Apzīmējums {tag} parasti tiek lietots apgabaliem, bet objekts nav apgabals", + deprecated_tags: "Novecojuši apzīmējumi: {tags}" + }, + zoom: { in: "Pietuvināt", out: "Attālināt" diff --git a/locale/tr.js b/locale/tr.js index 3b0602658..f212ca373 100644 --- a/locale/tr.js +++ b/locale/tr.js @@ -128,64 +128,16 @@ locale.tr = { } }, - validations: { - untagged_point: "Herhangi bir çizgi ya da alana bağlantısı olmayan ve etiketlenmemiş bir nokta.", - untagged_line: "Etiketlenmemiş çizgi", - untagged_area: "Etiketlenmemiş alan", - tag_suggests_area: "{tag} etiketi buranın alan olmasını tavsiye ediyor ama alan değil.", - deprecated_tags: "Kullanımdan kaldırılmış etiket : {tags}" - }, - - save: "Kaydet", - unsaved_changes: "Kaydedilmemiş değişiklikleriniz var", - save_help: "Diğer kullanıcıların yaptığınız değişiklikleri görmesi için OpenStreetMap'e kaydediniz", - no_changes: "Kaydedecek hiçbir değişikliğiniz yok", - save_error: "Kaydederken bir hata oluştu", - uploading_changes: "Değişiklikleriniz OpenStreetMap'e gönderiliyor.", - just_edited: "Şu an OpenStreetMap'de bir değişiklik yaptınız!", - okay: "Tamam", - nothing_to_undo: "Geri alınacak birşey yok.", nothing_to_redo: "Tekrar yapılacak birşey yok.", + just_edited: "Şu an OpenStreetMap'de bir değişiklik yaptınız!", browser_notice: "Bu editör sadece Firefox, Chrome, Safari, Opera ile Internet Explorer 9 ve üstü tarayıcılarda çalışmaktadır. Lütfen tarayınıcı güncelleyin ya da Potlatch 2'yi kullanarak haritada güncelleme yapınız.", - - inspector: { - no_documentation_combination: "Bu etiket kombinasyonu için dökümantasyon bulunmamaktadır.", - no_documentation_key: "Bu anahtar için dökümantasyon bulunmamaktadır.", - new_tag: "Yeni Etiket" - }, - view_on_osm: "OSM üstünde Gör", - zoom_in_edit: "Güncelleme yapmak için haritada yakınlaşmalısınız", - - edit_tags: "Etiketleri güncelle", - - geocoder: { - title: "Bir Yer Bul", - placeholder: "bir yer bul", - no_results: "'{name}' ismindeki yer bulunamadı" - }, - - geolocate: { - title: "Show My Location" - }, - - description: "Açıklama", - logout: "Çıkış", - report_a_bug: "Hata rapor et", - layerswitcher: { - title: "Arkaplan", - description: "Arkaplan Ayarları", - percent_brightness: "{opacity}% parlaklık", - fix_misalignment: "Yanlış hizalamayı düzelt", - reset: "Sıfırla" - }, - commit: { title: "Save Changes", description_placeholder: "Brief description of your contributions", @@ -203,11 +155,57 @@ locale.tr = { truncated_list: "{users} ve diğer {count} tarafından yapılan katkılar görünmektedir" }, + geocoder: { + title: "Bir Yer Bul", + placeholder: "bir yer bul", + no_results: "'{name}' ismindeki yer bulunamadı" + }, + + geolocate: { + title: "Show My Location" + }, + + inspector: { + no_documentation_combination: "Bu etiket kombinasyonu için dökümantasyon bulunmamaktadır.", + no_documentation_key: "Bu anahtar için dökümantasyon bulunmamaktadır.", + new_tag: "Yeni Etiket", + edit_tags: "Etiketleri güncelle", + okay: "Tamam" + }, + + layerswitcher: { + title: "Arkaplan", + description: "Arkaplan Ayarları", + percent_brightness: "{opacity}% parlaklık", + fix_misalignment: "Yanlış hizalamayı düzelt", + reset: "Sıfırla" + }, + + save: { + title: "Kaydet", + help: "Diğer kullanıcıların yaptığınız değişiklikleri görmesi için OpenStreetMap'e kaydediniz", + error: "Kaydederken bir hata oluştu", + uploading: "Değişiklikleriniz OpenStreetMap'e gönderiliyor.", + unsaved_changes: "Kaydedilmemiş değişiklikleriniz var" + }, + source_switch: { live: "canlı", dev: "geliştirme" }, + tag_reference: { + description: "Açıklama" + }, + + validations: { + untagged_point: "Herhangi bir çizgi ya da alana bağlantısı olmayan ve etiketlenmemiş bir nokta.", + untagged_line: "Etiketlenmemiş çizgi", + untagged_area: "Etiketlenmemiş alan", + tag_suggests_area: "{tag} etiketi buranın alan olmasını tavsiye ediyor ama alan değil.", + deprecated_tags: "Kullanımdan kaldırılmış etiket : {tags}" + }, + zoom: { in: "Yaklaş", out: "Uzaklaş" From 8882023e5b6029e335a3c32e9a51a14b75d9e6d1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 19:59:32 -0800 Subject: [PATCH 26/38] tag_reference translations --- js/id/ui/tag_reference.js | 5 +++-- locale/da.js | 4 +++- locale/de.js | 4 +++- locale/en.js | 4 +++- locale/es.js | 4 +++- locale/fr.js | 4 +++- locale/ja.js | 4 +++- locale/lv.js | 4 +++- locale/tr.js | 4 +++- 9 files changed, 27 insertions(+), 10 deletions(-) diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index dc583b932..8a8ea2041 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -11,7 +11,7 @@ iD.ui.tagReference = function(selection) { .enter() .append('span') .attr('title', function(d) { - return 'used with ' + d; + return t('tag_reference.used_with', {type: d}); }) .attr('class', function(d) { return 'icon big icon-pre-text big-' + d; @@ -36,6 +36,7 @@ iD.ui.tagReference = function(selection) { referenceBody .append('p') .text(g('description')); + referenceBody .append('a') .attr('target', '_blank') @@ -43,7 +44,7 @@ iD.ui.tagReference = function(selection) { return 'http://wiki.openstreetmap.org/wiki/' + d.title; }) .text(function(d) { - return d.title + ' on wiki.osm.org'; + return t('tag_reference.on_wiki', {tag: d.title}); }); }); }; diff --git a/locale/da.js b/locale/da.js index 17b75c340..199cc2f5d 100644 --- a/locale/da.js +++ b/locale/da.js @@ -195,7 +195,9 @@ locale.da = { }, tag_reference: { - description: "Description" + description: "Description", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, zoom: { diff --git a/locale/de.js b/locale/de.js index 60f4c6155..71d94c9f3 100644 --- a/locale/de.js +++ b/locale/de.js @@ -195,7 +195,9 @@ locale.de = { }, tag_reference: { - description: "Beschreibung" + description: "Beschreibung", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, validations: { diff --git a/locale/en.js b/locale/en.js index 9060f7b66..7e3534f71 100644 --- a/locale/en.js +++ b/locale/en.js @@ -195,7 +195,9 @@ locale.en = { }, tag_reference: { - description: 'Description' + description: "Description", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, validations: { diff --git a/locale/es.js b/locale/es.js index c440429db..e82e4c465 100644 --- a/locale/es.js +++ b/locale/es.js @@ -195,7 +195,9 @@ locale.es = { }, tag_reference: { - description: "Descripción" //"Description", + description: "Descripción", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, validations: { diff --git a/locale/fr.js b/locale/fr.js index d6c36189a..da6e54cf3 100644 --- a/locale/fr.js +++ b/locale/fr.js @@ -195,7 +195,9 @@ locale.fr = { }, tag_reference: { - description: "Déscription" + description: "Déscription", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, validations: { diff --git a/locale/ja.js b/locale/ja.js index 61b76ace5..fa4297828 100644 --- a/locale/ja.js +++ b/locale/ja.js @@ -195,7 +195,9 @@ locale.ja = { }, tag_reference: { - description: "説明" + description: "説明", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, validations: { diff --git a/locale/lv.js b/locale/lv.js index 3a799c2a9..60f9136ff 100644 --- a/locale/lv.js +++ b/locale/lv.js @@ -195,7 +195,9 @@ locale.lv = { }, tag_reference: { - description: "Apraksts" + description: "Apraksts", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, validations: { diff --git a/locale/tr.js b/locale/tr.js index f212ca373..1274cf221 100644 --- a/locale/tr.js +++ b/locale/tr.js @@ -195,7 +195,9 @@ locale.tr = { }, tag_reference: { - description: "Açıklama" + description: "Açıklama", + on_wiki: "{tag} on wiki.osm.org", + used_with: "used with {type}" }, validations: { From 6d3d00e78d70deedac194361431818b3cd7165af Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:02:35 -0800 Subject: [PATCH 27/38] inspector translation --- js/id/ui/inspector.js | 37 ++++++++++++++++++++++--------------- locale/da.js | 3 ++- locale/de.js | 3 ++- locale/en.js | 3 ++- locale/es.js | 3 ++- locale/fr.js | 3 ++- locale/ja.js | 3 ++- locale/lv.js | 3 ++- locale/tr.js | 3 ++- 9 files changed, 38 insertions(+), 23 deletions(-) diff --git a/js/id/ui/inspector.js b/js/id/ui/inspector.js index 1b1c78be6..bc15cdbb4 100644 --- a/js/id/ui/inspector.js +++ b/js/id/ui/inspector.js @@ -27,15 +27,19 @@ iD.ui.Inspector = function() { tagList = inspectorwrap.append('ul'); var newTag = inspectorwrap.append('button') - .attr('class', 'add-tag'); + .attr('class', 'add-tag'); - newTag.on('click', function() { - addTag(); - focusNewKey(); - }); + newTag.on('click', function () { + addTag(); + focusNewKey(); + }); - newTag.append('span').attr('class', 'icon icon-pre-text plus'); - newTag.append('span').attr('class','label').text(t('inspector.new_tag')); + newTag.append('span') + .attr('class', 'icon icon-pre-text plus'); + + newTag.append('span') + .attr('class', 'label') + .text(t('inspector.new_tag')); drawTags(entity.tags); @@ -62,17 +66,20 @@ iD.ui.Inspector = function() { var entity = selection.datum(); var inspectorButton = selection.append('button') - .attr('class', 'apply action') - .on('click', apply); + .attr('class', 'apply action') + .on('click', apply); - inspectorButton.append('span').attr('class','label').text(t('inspector.okay')); + inspectorButton.append('span') + .attr('class','label') + .text(t('inspector.okay')); - var minorButtons = selection.append('div').attr('class','minor-buttons fl'); + var minorButtons = selection.append('div') + .attr('class','minor-buttons fl'); - minorButtons.append('a') - .attr('href', 'http://www.openstreetmap.org/browse/' + entity.type + '/' + entity.osmId()) - .attr('target', '_blank') - .text('View on OSM'); + minorButtons.append('a') + .attr('href', 'http://www.openstreetmap.org/browse/' + entity.type + '/' + entity.osmId()) + .attr('target', '_blank') + .text(t('inspector.view_on_osm')); } function drawTags(tags) { diff --git a/locale/da.js b/locale/da.js index 199cc2f5d..6f7e85d0b 100644 --- a/locale/da.js +++ b/locale/da.js @@ -178,7 +178,8 @@ locale.da = { no_documentation_key: "Der er ingen dokumenation tilgængelig for denne nøgle", new_tag: "Nyt Tag", edit_tags: "Ret tags", - okay: "Ok" + okay: "Ok", + view_on_osm: "View on OSM" }, save: { diff --git a/locale/de.js b/locale/de.js index 71d94c9f3..5291fb3aa 100644 --- a/locale/de.js +++ b/locale/de.js @@ -170,7 +170,8 @@ locale.de = { no_documentation_key: "Für dises Schlüsselwort ist keine Dokumentation verfügbar", new_tag: "Neues Attribut", edit_tags: "Attribute bearbeiten", - okay: "OK" + okay: "OK", + view_on_osm: "View on OSM" }, layerswitcher: { diff --git a/locale/en.js b/locale/en.js index 7e3534f71..015e4193c 100644 --- a/locale/en.js +++ b/locale/en.js @@ -170,7 +170,8 @@ locale.en = { no_documentation_key: "There is no documentation available for this key", new_tag: "New Tag", edit_tags: "Edit tags", - okay: "Okay" + okay: "Okay", + view_on_osm: "View on OSM" }, layerswitcher: { diff --git a/locale/es.js b/locale/es.js index e82e4c465..adc2150c9 100644 --- a/locale/es.js +++ b/locale/es.js @@ -170,7 +170,8 @@ locale.es = { no_documentation_key: "No hay documentación disponible para esta tecla", //"This is no documentation available for this key", new_tag: "Nueve etiqueta", //"New Tag" edit_tags: "Editar etiquetas", //"Edit tags", - okay: "OK" //"Okay", + okay: "OK", + view_on_osm: "View on OSM" }, layerswitcher: { diff --git a/locale/fr.js b/locale/fr.js index da6e54cf3..f0ddce52c 100644 --- a/locale/fr.js +++ b/locale/fr.js @@ -170,7 +170,8 @@ locale.fr = { no_documentation_key: "Aucune documentation n'est disponible pour cette clé", new_tag: "Nouveau tag", edit_tags: "Editer les tags", - okay: "Okay" + okay: "Okay", + view_on_osm: "View on OSM" }, layerswitcher: { diff --git a/locale/ja.js b/locale/ja.js index fa4297828..f2c1839a5 100644 --- a/locale/ja.js +++ b/locale/ja.js @@ -170,7 +170,8 @@ locale.ja = { no_documentation_key: "このキーに対する説明文はありません", new_tag: "新規タグ", edit_tags: "タグを編集", - okay: "OK" + okay: "OK", + view_on_osm: "View on OSM" }, layerswitcher: { diff --git a/locale/lv.js b/locale/lv.js index 60f9136ff..36d93c4aa 100644 --- a/locale/lv.js +++ b/locale/lv.js @@ -170,7 +170,8 @@ locale.lv = { no_documentation_key: "There is no documentation available for this key", new_tag: "Jauns apzīmējums", edit_tags: "Rediģēt apzīmējumus", - okay: "Labi" + okay: "Labi", + view_on_osm: "View on OSM" }, layerswitcher: { diff --git a/locale/tr.js b/locale/tr.js index 1274cf221..a26542333 100644 --- a/locale/tr.js +++ b/locale/tr.js @@ -170,7 +170,8 @@ locale.tr = { no_documentation_key: "Bu anahtar için dökümantasyon bulunmamaktadır.", new_tag: "Yeni Etiket", edit_tags: "Etiketleri güncelle", - okay: "Tamam" + okay: "Tamam", + view_on_osm: "View on OSM" }, layerswitcher: { From 0578d645bc1079a4a71dc8e47791bfc5d7b65ccc Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:05:51 -0800 Subject: [PATCH 28/38] restore translation --- js/id/ui/restore.js | 22 ++++++++++++---------- locale/da.js | 6 ++++++ locale/de.js | 6 ++++++ locale/en.js | 6 ++++++ locale/es.js | 6 ++++++ locale/fr.js | 6 ++++++ locale/ja.js | 6 ++++++ locale/lv.js | 6 ++++++ locale/tr.js | 6 ++++++ 9 files changed, 60 insertions(+), 10 deletions(-) diff --git a/js/id/ui/restore.js b/js/id/ui/restore.js index aaadae950..2fd8d9de9 100644 --- a/js/id/ui/restore.js +++ b/js/id/ui/restore.js @@ -6,19 +6,21 @@ iD.ui.restore = function(selection, history) { var introModal = modal.select('.content'); - introModal.append('div') - .attr('class', 'modal-section fillL') - .append('h3').text('You have unsaved changes from a previous editing session. Do you wish to restore these changes?'); - var buttonWrap = introModal.append('div') - .attr('class', 'modal-section fillD cf col12'); + introModal.append('div') + .attr('class', 'modal-section fillL') + .append('h3') + .text(t('restore.description')); - buttons = buttonWrap - .append('div') - .attr('class', 'button-wrap joined col6'); + var buttonWrap = introModal.append('div') + .attr('class', 'modal-section fillD cf col12'); + + var buttons = buttonWrap + .append('div') + .attr('class', 'button-wrap joined col6'); buttons.append('button') .attr('class', 'save action button col6') - .text('Restore') + .text(t('restore.restore')) .on('click', function() { history.load(); modal.remove(); @@ -26,7 +28,7 @@ iD.ui.restore = function(selection, history) { buttons.append('button') .attr('class', 'cancel button col6') - .text('Reset') + .text(t('restore.reset')) .on('click', function() { modal.remove(); }); diff --git a/locale/da.js b/locale/da.js index 6f7e85d0b..1e983c3de 100644 --- a/locale/da.js +++ b/locale/da.js @@ -182,6 +182,12 @@ locale.da = { view_on_osm: "View on OSM" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Gem", help: "Gem ændringer til OpenStreetMap gør dem synlige for andre brugere", diff --git a/locale/de.js b/locale/de.js index 5291fb3aa..31f919a73 100644 --- a/locale/de.js +++ b/locale/de.js @@ -182,6 +182,12 @@ locale.de = { reset: "Zurücksetzen" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Speichern", help: "Speichere Änderungen auf OpenStreetMap, um diese für andere Nutzer sichtbar zu machen", diff --git a/locale/en.js b/locale/en.js index 015e4193c..b5ea93202 100644 --- a/locale/en.js +++ b/locale/en.js @@ -182,6 +182,12 @@ locale.en = { reset: "reset" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Save", help: "Save changes to OpenStreetMap, making them visible to other users", diff --git a/locale/es.js b/locale/es.js index adc2150c9..2e3eebcdd 100644 --- a/locale/es.js +++ b/locale/es.js @@ -182,6 +182,12 @@ locale.es = { reset: "reiniciar" //"reset" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Guardar", //"Save", help: "Guardar los cambios en OpenStreetMap haciéndolos visibles a otros usuarios", //"Save changes to OpenStreetMap, making them visible to other users", diff --git a/locale/fr.js b/locale/fr.js index f0ddce52c..61ffcf675 100644 --- a/locale/fr.js +++ b/locale/fr.js @@ -182,6 +182,12 @@ locale.fr = { reset: "reset" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Sauvegarder", help: "Envoie des modifications au serveyr OpenStreetMap afin qu'elles soient visibles par les autres contributeurs.", diff --git a/locale/ja.js b/locale/ja.js index f2c1839a5..0fd8c5229 100644 --- a/locale/ja.js +++ b/locale/ja.js @@ -182,6 +182,12 @@ locale.ja = { reset: "設定リセット" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Save", help: "変更点をOpenStreetMapに保存し、他ユーザが確認できるようにします", diff --git a/locale/lv.js b/locale/lv.js index 36d93c4aa..58d05e4a4 100644 --- a/locale/lv.js +++ b/locale/lv.js @@ -182,6 +182,12 @@ locale.lv = { reset: "Pārstatīt" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Saglabāt", help: "Saglabā izmaiņas, padarot tās redzamas citiem", diff --git a/locale/tr.js b/locale/tr.js index a26542333..566ee10d2 100644 --- a/locale/tr.js +++ b/locale/tr.js @@ -182,6 +182,12 @@ locale.tr = { reset: "Sıfırla" }, + restore: { + description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + restore: "Restore", + reset: "Reset" + }, + save: { title: "Kaydet", help: "Diğer kullanıcıların yaptığınız değişiklikleri görmesi için OpenStreetMap'e kaydediniz", From 02ed91096a1041f1c713057a154cab76367d1ef1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:08:36 -0800 Subject: [PATCH 29/38] Follow ui pattern --- js/id/ui.js | 3 ++- js/id/ui/restore.js | 58 ++++++++++++++++++++++----------------------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/js/id/ui.js b/js/id/ui.js index 4e6ec4c24..628a46d4a 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -154,7 +154,8 @@ iD.ui = function(context) { } if (history.lock() && history.restorableChanges()) { - iD.ui.restore(context.container(), history); + context.container() + .call(iD.ui.Restore(context)) } }; diff --git a/js/id/ui/restore.js b/js/id/ui/restore.js index 2fd8d9de9..518bf1ddd 100644 --- a/js/id/ui/restore.js +++ b/js/id/ui/restore.js @@ -1,37 +1,37 @@ -iD.ui.restore = function(selection, history) { - var modal = iD.ui.modal(selection); +iD.ui.Restore = function(context) { + return function(selection) { + var modal = iD.ui.modal(selection); - modal.select('.modal') - .attr('class', 'modal-splash modal'); + modal.select('.modal') + .attr('class', 'modal-splash modal'); - var introModal = modal.select('.content'); + var introModal = modal.select('.content'); - introModal.append('div') - .attr('class', 'modal-section fillL') - .append('h3') - .text(t('restore.description')); + introModal.append('div') + .attr('class', 'modal-section fillL') + .append('h3') + .text(t('restore.description')); - var buttonWrap = introModal.append('div') - .attr('class', 'modal-section fillD cf col12'); + var buttonWrap = introModal.append('div') + .attr('class', 'modal-section fillD cf col12'); - var buttons = buttonWrap - .append('div') - .attr('class', 'button-wrap joined col6'); + var buttons = buttonWrap + .append('div') + .attr('class', 'button-wrap joined col6'); - buttons.append('button') - .attr('class', 'save action button col6') - .text(t('restore.restore')) - .on('click', function() { - history.load(); - modal.remove(); - }); + buttons.append('button') + .attr('class', 'save action button col6') + .text(t('restore.restore')) + .on('click', function() { + context.history().load(); + modal.remove(); + }); - buttons.append('button') - .attr('class', 'cancel button col6') - .text(t('restore.reset')) - .on('click', function() { - modal.remove(); - }); - - return modal; + buttons.append('button') + .attr('class', 'cancel button col6') + .text(t('restore.reset')) + .on('click', function() { + modal.remove(); + }); + } }; From 806de963dbbac723d5c20cf5368eb2b289064650 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:16:53 -0800 Subject: [PATCH 30/38] Cleanup, translate Splash --- js/id/ui.js | 6 ++---- js/id/ui/splash.js | 41 ++++++++++++++++++++++++++--------------- locale/da.js | 5 +++++ locale/de.js | 5 +++++ locale/en.js | 5 +++++ locale/es.js | 5 +++++ locale/fr.js | 5 +++++ locale/ja.js | 5 +++++ locale/lv.js | 5 +++++ locale/tr.js | 5 +++++ 10 files changed, 68 insertions(+), 19 deletions(-) diff --git a/js/id/ui.js b/js/id/ui.js index 628a46d4a..15fb55c09 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -148,10 +148,8 @@ iD.ui = function(context) { context.enter(iD.modes.Browse(context)); - if (!context.storage('sawSplash')) { - iD.ui.splash(context.container()); - context.storage('sawSplash', true); - } + context.container() + .call(iD.ui.Splash(context)); if (history.lock() && history.restorableChanges()) { context.container() diff --git a/js/id/ui/splash.js b/js/id/ui/splash.js index bfcbf3e05..c0e79261c 100644 --- a/js/id/ui/splash.js +++ b/js/id/ui/splash.js @@ -1,21 +1,32 @@ -iD.ui.splash = function(selection) { - var modal = iD.ui.modal(selection); +iD.ui.Splash = function(context) { + return function(selection) { + if (context.storage('sawSplash')) + return; - modal.select('.modal') - .attr('class', 'modal-splash modal'); + context.storage('sawSplash', true); - var introModal = modal.select('.content') - .append('div') - .attr('class', 'modal-section fillL'); + var modal = iD.ui.modal(selection); - introModal.append('div') - .attr('class','logo'); + modal.select('.modal') + .attr('class', 'modal-splash modal'); - introModal.append('div') - .html("

Welcome to the iD OpenStreetMap editor

" + - "This is development version 0.0.0-alpha1. " + - "For more information see ideditor.com" + - " and report bugs at github.com.systemed/iD.

"); + var introModal = modal.select('.content') + .append('div') + .attr('class', 'modal-section fillL'); - return modal; + introModal.append('div') + .attr('class', 'logo'); + + var div = introModal.append('div'); + + div.append("h2") + .text(t('splash.welcome')); + + div.append("p") + .html(t('splash.text', { + version: iD.version, + website: 'ideditor.com', + github: 'github.com' + })); + } }; diff --git a/locale/da.js b/locale/da.js index 1e983c3de..d42f95c61 100644 --- a/locale/da.js +++ b/locale/da.js @@ -196,6 +196,11 @@ locale.da = { unsaved_changes: "Du har ændringer der ikke er gemt endnu", }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "live", dev: "dev" diff --git a/locale/de.js b/locale/de.js index 31f919a73..8629471be 100644 --- a/locale/de.js +++ b/locale/de.js @@ -196,6 +196,11 @@ locale.de = { unsaved_changes: "Ungespeicherte Änderugen vorhanden", }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "live", dev: "dev" diff --git a/locale/en.js b/locale/en.js index b5ea93202..bd26f932b 100644 --- a/locale/en.js +++ b/locale/en.js @@ -196,6 +196,11 @@ locale.en = { unsaved_changes: "You have unsaved changes" }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "live", dev: "dev" diff --git a/locale/es.js b/locale/es.js index 2e3eebcdd..2d47ecfe6 100644 --- a/locale/es.js +++ b/locale/es.js @@ -196,6 +196,11 @@ locale.es = { unsaved_changes: "Tienes cambios sin guardar" //"You have unsaved changes", }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "en vivo", //"live", dev: "dev" diff --git a/locale/fr.js b/locale/fr.js index 61ffcf675..4716080cc 100644 --- a/locale/fr.js +++ b/locale/fr.js @@ -196,6 +196,11 @@ locale.fr = { unsaved_changes: "Vous avez des modifications non enregistrées" }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "live", dev: "dev" diff --git a/locale/ja.js b/locale/ja.js index 0fd8c5229..3d4abec79 100644 --- a/locale/ja.js +++ b/locale/ja.js @@ -196,6 +196,11 @@ locale.ja = { unsaved_changes: "変更が保存されていません" }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "本番サーバ", dev: "開発サーバ" diff --git a/locale/lv.js b/locale/lv.js index 58d05e4a4..9eb93f387 100644 --- a/locale/lv.js +++ b/locale/lv.js @@ -196,6 +196,11 @@ locale.lv = { unsaved_changes: "Jums ir nesaglabātas izmaiņas" }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "live", dev: "dev" diff --git a/locale/tr.js b/locale/tr.js index 566ee10d2..402d822f1 100644 --- a/locale/tr.js +++ b/locale/tr.js @@ -196,6 +196,11 @@ locale.tr = { unsaved_changes: "Kaydedilmemiş değişiklikleriniz var" }, + splash: { + welcome: "Welcome to the iD OpenStreetMap editor", + text: "This is development version {version}. For more information see {website} and report bugs at {github}." + }, + source_switch: { live: "canlı", dev: "geliştirme" From 8928e757a413681e9dce321bb083c4cf53656227 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:19:36 -0800 Subject: [PATCH 31/38] Simplify --- js/id/ui.js | 9 ++------- js/id/ui/restore.js | 3 +++ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/js/id/ui.js b/js/id/ui.js index 15fb55c09..fe35ccc16 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -149,13 +149,8 @@ iD.ui = function(context) { context.enter(iD.modes.Browse(context)); context.container() - .call(iD.ui.Splash(context)); - - if (history.lock() && history.restorableChanges()) { - context.container() - .call(iD.ui.Restore(context)) - } - + .call(iD.ui.Splash(context)) + .call(iD.ui.Restore(context)); }; }; diff --git a/js/id/ui/restore.js b/js/id/ui/restore.js index 518bf1ddd..d15f80d96 100644 --- a/js/id/ui/restore.js +++ b/js/id/ui/restore.js @@ -1,5 +1,8 @@ iD.ui.Restore = function(context) { return function(selection) { + if (!context.history().lock() || !context.history().restorableChanges()) + return; + var modal = iD.ui.modal(selection); modal.select('.modal') From cfb6f7b1d4e6616b7a5013f126c6e2e47078a751 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:29:16 -0800 Subject: [PATCH 32/38] Cleanup --- js/id/ui.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/js/id/ui.js b/js/id/ui.js index fe35ccc16..3379ef4f1 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -63,17 +63,20 @@ iD.ui = function(context) { var userContainer = about.append('div') .attr('class', 'user-container'); - userContainer - .append('div') - .attr('class', 'hello'); + userContainer.append('div') + .attr('class', 'hello'); + + userContainer.call(iD.ui.UserPanel(connection) + .on('logout.editor', connection.logout) + .on('login.editor', connection.authenticate)); var aboutList = about.append('ul') - .attr('id','about') - .attr('class','link-list'); + .attr('id','about') + .attr('class', 'link-list'); var linkList = aboutList.append('ul') .attr('id','about') - .attr('class','pad1 fillD about-block link-list'); + .attr('class', 'pad1 fillD about-block link-list'); linkList.append('li') .append('a') @@ -142,10 +145,6 @@ iD.ui = function(context) { map.centerZoom([-77.02271, 38.90085], 20); } - userContainer.call(iD.ui.UserPanel(connection) - .on('logout.editor', connection.logout) - .on('login.editor', connection.authenticate)); - context.enter(iD.modes.Browse(context)); context.container() From f98cee40a7a0f34ef1b2a43e5c083fb2ca62d030 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:46:54 -0800 Subject: [PATCH 33/38] Extract iD.ui.Attribution --- index.html | 1 + js/id/ui.js | 12 +++--------- js/id/ui/attribution.js | 10 ++++++++++ 3 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 js/id/ui/attribution.js diff --git a/index.html b/index.html index e79c178e4..6e8661145 100644 --- a/index.html +++ b/index.html @@ -57,6 +57,7 @@ + diff --git a/js/id/ui.js b/js/id/ui.js index 3379ef4f1..328d46b45 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -90,15 +90,9 @@ iD.ui = function(context) { .attr('href', 'http://github.com/systemed/iD/issues') .text(t('report_a_bug')); - var imagery = linkList.append('li') - .attr('id', 'attribution'); - - imagery.append('span') - .text('imagery'); - - imagery - .append('span') - .attr('class', 'provided-by'); + linkList.append('li') + .attr('id', 'attribution') + .call(iD.ui.Attribution(context)); linkList.append('li') .attr('class', 'source-switch') diff --git a/js/id/ui/attribution.js b/js/id/ui/attribution.js new file mode 100644 index 000000000..282833e7e --- /dev/null +++ b/js/id/ui/attribution.js @@ -0,0 +1,10 @@ +iD.ui.Attribution = function(context) { + return function(selection) { + selection.append('span') + .text('imagery'); + + selection + .append('span') + .attr('class', 'provided-by'); + } +}; From 6f6958ad98e618cfddd6b9cf6837c62b01d0fd27 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 20:50:17 -0800 Subject: [PATCH 34/38] Remove redundant ul, id -> class --- css/app.css | 2 +- js/id/ui.js | 12 ++++-------- js/id/ui/layerswitcher.js | 2 +- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/css/app.css b/css/app.css index 0e5651c9a..4cb56f910 100644 --- a/css/app.css +++ b/css/app.css @@ -930,7 +930,7 @@ img.tile { color:#fff; } -#user-list a:not(:last-child):after { +.user-list a:not(:last-child):after { content: ', '; } diff --git a/js/id/ui.js b/js/id/ui.js index 328d46b45..40e700801 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -70,12 +70,8 @@ iD.ui = function(context) { .on('logout.editor', connection.logout) .on('login.editor', connection.authenticate)); - var aboutList = about.append('ul') - .attr('id','about') - .attr('class', 'link-list'); - - var linkList = aboutList.append('ul') - .attr('id','about') + var linkList = about.append('ul') + .attr('id', 'about') .attr('class', 'pad1 fillD about-block link-list'); linkList.append('li') @@ -91,7 +87,7 @@ iD.ui = function(context) { .text(t('report_a_bug')); linkList.append('li') - .attr('id', 'attribution') + .attr('class', 'attribution') .call(iD.ui.Attribution(context)); linkList.append('li') @@ -99,7 +95,7 @@ iD.ui = function(context) { .call(iD.ui.SourceSwitch(context)); linkList.append('li') - .attr('id', 'user-list') + .attr('class', 'user-list') .call(iD.ui.Contributors(context)); window.onbeforeunload = function() { diff --git a/js/id/ui/layerswitcher.js b/js/id/ui/layerswitcher.js index f4d57a422..da800596f 100644 --- a/js/id/ui/layerswitcher.js +++ b/js/id/ui/layerswitcher.js @@ -92,7 +92,7 @@ iD.ui.LayerSwitcher = function(context) { return d === context.background().source(); }); - var provided_by = context.container().select('#attribution .provided-by') + var provided_by = context.container().select('.attribution .provided-by') .html(''); if (d.data.terms_url) { From 4bbed7e9437e52889bad30ea7d801a2cd5f55f6d Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 21:03:34 -0800 Subject: [PATCH 35/38] Cleanup, fix UserPanel --- js/id/connection.js | 2 +- js/id/ui.js | 12 ++---- js/id/ui/userpanel.js | 97 +++++++++++++++++++++---------------------- 3 files changed, 52 insertions(+), 59 deletions(-) diff --git a/js/id/connection.js b/js/id/connection.js index ea90c5591..f15aa80f8 100644 --- a/js/id/connection.js +++ b/js/id/connection.js @@ -228,7 +228,7 @@ iD.Connection = function(context) { if (img && img[0].getAttribute('href')) { image_url = img[0].getAttribute('href'); } - callback(connection.user({ + callback(undefined, connection.user({ display_name: u.attributes.display_name.nodeValue, image_url: image_url, id: u.attributes.id.nodeValue diff --git a/js/id/ui.js b/js/id/ui.js index 40e700801..115199edf 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -60,15 +60,9 @@ iD.ui = function(context) { var about = container.append('div') .attr('class','col12 about-block fillD pad1'); - var userContainer = about.append('div') - .attr('class', 'user-container'); - - userContainer.append('div') - .attr('class', 'hello'); - - userContainer.call(iD.ui.UserPanel(connection) - .on('logout.editor', connection.logout) - .on('login.editor', connection.authenticate)); + about.append('div') + .attr('class', 'user-container') + .call(iD.ui.UserPanel(context)); var linkList = about.append('ul') .attr('id', 'about') diff --git a/js/id/ui/userpanel.js b/js/id/ui/userpanel.js index 3dab2a5bd..f323706ae 100644 --- a/js/id/ui/userpanel.js +++ b/js/id/ui/userpanel.js @@ -1,54 +1,53 @@ -iD.ui.UserPanel = function(connection) { - var event = d3.dispatch('logout', 'login'); +iD.ui.UserPanel = function(context) { + var connection = context.connection(); - function user(selection) { - function update() { - if (connection.authenticated()) { - selection.style('display', 'block'); - connection.userDetails(function(err, user_details) { - - selection.html(''); - - if (err) return; - - // Link - var userLink = selection.append('a') - .attr('href', connection.url() + '/user/' + - user_details.display_name) - .attr('target', '_blank'); - - // Add thumbnail or dont - if (user_details.image_url) { - userLink.append('img') - .attr('class', 'icon icon-pre-text user-icon') - .attr('src', user_details.image_url); - } else { - userLink.append('span') - .attr('class','icon avatar icon-pre-text'); - } - - // Add user name - userLink.append('span') - .attr('class','label') - .text(user_details.display_name); - - selection - .append('a') - .attr('class', 'logout') - .attr('href', '#') - .text(t('logout')) - .on('click.logout', function() { - d3.event.preventDefault(); - event.logout(); - }); - }); - } else { - selection.html('').style('display', 'none'); - } + function update(selection) { + if (!connection.authenticated()) { + selection.html('') + .style('display', 'none'); + return; } - connection.on('auth', update); - update(); + + selection.style('display', 'block'); + + connection.userDetails(function(err, details) { + selection.html(''); + + if (err) return; + + // Link + var userLink = selection.append('a') + .attr('href', connection.url() + '/user/' + details.display_name) + .attr('target', '_blank'); + + // Add thumbnail or dont + if (details.image_url) { + userLink.append('img') + .attr('class', 'icon icon-pre-text user-icon') + .attr('src', details.image_url); + } else { + userLink.append('span') + .attr('class', 'icon avatar icon-pre-text'); + } + + // Add user name + userLink.append('span') + .attr('class', 'label') + .text(details.display_name); + + selection.append('a') + .attr('class', 'logout') + .attr('href', '#') + .text(t('logout')) + .on('click.logout', function() { + d3.event.preventDefault(); + connection.logout(); + }); + }); } - return d3.rebind(user, event, 'on'); + return function(selection) { + connection.on('auth', function() { update(selection); }); + update(selection); + }; }; From a25f2895d078b11f868c73f65ca79c9420bfcb84 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 21:04:59 -0800 Subject: [PATCH 36/38] Rename UserPanel -> Account --- combobox.html | 2 +- css/app.css | 4 ++-- index.html | 2 +- js/id/ui.js | 2 +- js/id/ui/{userpanel.js => account.js} | 2 +- test/index.html | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) rename js/id/ui/{userpanel.js => account.js} (97%) diff --git a/combobox.html b/combobox.html index 63a2c9757..383dbe325 100644 --- a/combobox.html +++ b/combobox.html @@ -61,7 +61,7 @@ - + diff --git a/css/app.css b/css/app.css index 4cb56f910..11e710970 100644 --- a/css/app.css +++ b/css/app.css @@ -936,11 +936,11 @@ img.tile { /* Account Information */ -.user-container { +.account { float: left; } -.user-container .logout { +.account .logout { margin-left:10px; border-left: 1px solid white; padding-left: 10px; diff --git a/index.html b/index.html index 6e8661145..61790eae0 100644 --- a/index.html +++ b/index.html @@ -66,7 +66,7 @@ - + diff --git a/js/id/ui.js b/js/id/ui.js index 115199edf..086cd59a4 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -61,7 +61,7 @@ iD.ui = function(context) { .attr('class','col12 about-block fillD pad1'); about.append('div') - .attr('class', 'user-container') + .attr('class', 'account') .call(iD.ui.UserPanel(context)); var linkList = about.append('ul') diff --git a/js/id/ui/userpanel.js b/js/id/ui/account.js similarity index 97% rename from js/id/ui/userpanel.js rename to js/id/ui/account.js index f323706ae..5e9fe7705 100644 --- a/js/id/ui/userpanel.js +++ b/js/id/ui/account.js @@ -1,4 +1,4 @@ -iD.ui.UserPanel = function(context) { +iD.ui.Account = function(context) { var connection = context.connection(); function update(selection) { diff --git a/test/index.html b/test/index.html index dcea8e28c..05482ab1f 100644 --- a/test/index.html +++ b/test/index.html @@ -63,7 +63,7 @@ - + From 9695a9cafaa275715a11cff443b38c7380e32bc1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 12 Feb 2013 21:11:16 -0800 Subject: [PATCH 37/38] Fix geocode tooltip --- css/app.css | 2 +- js/id/ui.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/css/app.css b/css/app.css index 11e710970..efcdd8b87 100644 --- a/css/app.css +++ b/css/app.css @@ -841,7 +841,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} width: 100%; } -.geocode-control div { +.geocode-control div.content { z-index: 100; top: 190px; max-height: 300px; diff --git a/js/id/ui.js b/js/id/ui.js index 086cd59a4..72712f861 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -62,7 +62,7 @@ iD.ui = function(context) { about.append('div') .attr('class', 'account') - .call(iD.ui.UserPanel(context)); + .call(iD.ui.Account(context)); var linkList = about.append('ul') .attr('id', 'about') From 5d11770e7e95f3d3c317fcbac6b668cf41a6ccf5 Mon Sep 17 00:00:00 2001 From: m0rix Date: Wed, 13 Feb 2013 11:33:34 +0100 Subject: [PATCH 38/38] Update locale/de.js --- locale/de.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/locale/de.js b/locale/de.js index 8629471be..7145dfe2b 100644 --- a/locale/de.js +++ b/locale/de.js @@ -139,15 +139,15 @@ locale.de = { report_a_bug: "Programmfehler melden", commit: { - title: "Save Changes", - description_placeholder: "Brief description of your contributions", - upload_explanation: "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", - save: "Save", - cancel: "Cancel", - warnings: "Warnings", - modified: "Modified", - deleted: "Deleted", - created: "Created" + title: "Änderungen speichern", + description_placeholder: "Eine kurze Beschreibung deiner Beiträge", + upload_explanation: "Änderungen, die du als {user} hochlädst werden sichtbar auf allen Karte, die OpenStreetMap nutzen.", + save: "Speichern", + cancel: "Abbrechen", + warnings: "Warnungen", + modified: "Verändert", + deleted: "Gelöscht", + created: "Erstellt" }, contributors: { @@ -162,7 +162,7 @@ locale.de = { }, geolocate: { - title: "Show My Location" + title: "Zeige meine Position" }, inspector: { @@ -171,7 +171,7 @@ locale.de = { new_tag: "Neues Attribut", edit_tags: "Attribute bearbeiten", okay: "OK", - view_on_osm: "View on OSM" + view_on_osm: "auf OSM ansehen" }, layerswitcher: { @@ -183,9 +183,9 @@ locale.de = { }, restore: { - description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", - restore: "Restore", - reset: "Reset" + description: "Es gibt ungespeicherte Änderungen aus einer vorherigen Sitzung. Möchtest du diese Änderungen wiederherstellen?", + restore: "Wiederherstellen", + reset: "Zurücksetzen" }, save: { @@ -197,8 +197,8 @@ locale.de = { }, splash: { - welcome: "Welcome to the iD OpenStreetMap editor", - text: "This is development version {version}. For more information see {website} and report bugs at {github}." + welcome: "Willkommen beim iD OpenStreetMap editor", + text: "Dies ist eine Entwicklungsversion {version}. Für weitere Informationen besuche {website} und melde Fehler unter {github}." }, source_switch: { @@ -208,8 +208,8 @@ locale.de = { tag_reference: { description: "Beschreibung", - on_wiki: "{tag} on wiki.osm.org", - used_with: "used with {type}" + on_wiki: "{tag} auf wiki.osm.org", + used_with: "benutzt mit {type}" }, validations: {