From 52e9259108950be4165fb4cf8175496c6649a246 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 20 Mar 2013 17:02:24 -0700 Subject: [PATCH 01/69] Show Bing logo (#1095) --- img/bing.png | Bin 2065 -> 0 bytes img/bing_maps.png | Bin 0 -> 4960 bytes js/id/ui/attribution.js | 15 +++++++++------ 3 files changed, 9 insertions(+), 6 deletions(-) delete mode 100644 img/bing.png create mode 100644 img/bing_maps.png diff --git a/img/bing.png b/img/bing.png deleted file mode 100644 index a5a5c38dd6ecbdb779f57f08e506a82f15d4932d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2065 zcmV+s2=4cZP)jkO7iV5`B{bNS1sTr>l~npx+@;p3*+%EkIoq3RwdkIslj^B2qFw zdOizK0diRQRuL0dWJV8v&43wF2=^EO3rMa)LdH+BCIKE&MovaD64FVIf{2P_MZ@3< zk_^Oz_>e8osp?R`ls8mx!7>`V)<3163r5uVuA$mI+^{5PG~1wc(T8Zs47Otb5G!mo zvWQp147G#sESr?&h=l1s-`dM9H>Wb^{82$xRgqzGMTKc>X^GJZKgS7PQaTfmi*im} zuvc2_w=(Af5j93mb8X(t>Z)w!aLr~N`MTd|8}g{QSUl3wSlV^6!){DZQCsH8bXr}q z4^CY#K6}Yg%n}xSj6@kIFtc-ObFpbuBkRV z-O~Zh7u~}ZDC=tfB<2L$x~ACw&YtFx8DBWL^)F}g`WzmC#P)UNlPygpw)(0Z#|`In z_PI-rn!o?onmy}}2zqW@xsa9Trw4v}Z_$~>g@$wRs81;+^6-6S?BK4oopAd-0IeU$ zGHBJ0-(TqfjJ|cer)mEuSB#%`+)Od0Yf|<;y=wkjgkH<@p=8y?Q1I33&l8Ke~LBa(oPPMlLD?7C<8S&;md~-GCqHibDHdXsNNI zMR5J&l#Pj25|?ez!-m~H;eOAyT0amOBzfJ0%Ovy1CpJ_%A%BFu=Po&!b?`P3dA7&ufumPtVmOFla<>)d`7o8~DD|p&p4gSJN5tcCPV5;kw$(AHNDP(TcldJ3 z>5D_FH`fSf@Q4uSo^^I+54WYx06Bq)C!pL!E!yr|w;t%Xx8zY+oK2I32JgQEr+}#SZRlWRQ;mGD=J|mJ%w=g>T<(iS0VnzUjN( z@r=Fy`o0w0oL6E_^OoeMPrE#R9X2m0tJqgqO^MO_w-*|F%Jb6asMo9`PjKHHxMiGPFf-}alb06^vP1dJWMV`im7u1;1dOdJ<4ef{v| zGz`PmS5LE#|9pSuvT~D-&J&D^F1`kY{73h08f@(L zm@3+#Pqya$(4RQBCUQZPtX8K#3o_sJ!~#Y*I*{X7xS zNL?-2A0UK9A_-v@rz;x61S8YRP=w3Fu!24_Kn9y8QpuwA6H2p~GeQ_E;h+dui<1yi z5v2bDa1X9T=*7~!t+{NJhSXV-F|WX{vVfF=LNp&xz57u6ZkV!H<2x9m!kbnt97#z| z3i?7(O^0R740)`fxol$Jj{4(}S6|VDA>`(-O-4>(iaiad^(u>f>Yg``Ty4H+bD902 vs4}6kx}V&zs23V$CruT7m^z|&eimQ=1{zwxm7VxX00000NkvXXu0mjf#!l)o diff --git a/img/bing_maps.png b/img/bing_maps.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc4b1dfa3751d3121c5a0258c636f6730408224 GIT binary patch literal 4960 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 eiTq#XPX7%r;sQdx<|{-10000b&;= literal 0 HcmV?d00001 diff --git a/js/id/ui/attribution.js b/js/id/ui/attribution.js index ec98a84b8..c986206c6 100644 --- a/js/id/ui/attribution.js +++ b/js/id/ui/attribution.js @@ -9,16 +9,19 @@ iD.ui.Attribution = function(context) { if (!d) return; - var desc = t('imagery.provided_by', { - source: (d.data.sourcetag || d.data.name) - }); + var source = d.data.sourcetag || d.data.name; + + if (d.data.logo) { + source = '' + } + + var desc = t('imagery.provided_by', {source: source}); if (d.data.terms_url) { provided_by.append('a') - .attr('href', (d.data.terms_url || '')) + .attr('href', d.data.terms_url) .attr('target', '_blank') - .classed('disabled', !d.data.terms_url) - .text(desc); + .html(desc); } else { provided_by.text(desc); } From d4b923bd70014e89485f051ddb83fab62c14becc Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 20 Mar 2013 17:52:47 -0700 Subject: [PATCH 02/69] WIP on Bing copyright notices (#1096) --- js/id/renderer/background_source.js | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/js/id/renderer/background_source.js b/js/id/renderer/background_source.js index 3ddc76477..14e15852f 100644 --- a/js/id/renderer/background_source.js +++ b/js/id/renderer/background_source.js @@ -33,6 +33,43 @@ iD.BackgroundSource.template = function(data) { return generator; }; +iD.BackgroundSource.Bing = function(data) { + var bing = iD.BackgroundSource.template(data), + url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/0,0?zl=1&mapVersion=v1&key=Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU&include=ImageryProviders&output=xml"; + + var providers; + + d3.json(url, function(err, json) { + if (json) { + providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { + return { + attribution: provider.attribution, + areas: provider.areas.map(function(area) { + return { + zoom: [area.zoomMin, area.zoomMax], + extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) + } + }) + }; + }); + } + }); + + bing.copyrightNotices = function(zoom, extent) { + return providers.filter(function(provider) { + return _.any(provider.areas, function(area) { + return extent.intersects(area.extent) && + area.zoom[0] <= zoom && + area.zoom[1] >= zoom; + }) + }).map(function(provider) { + return provider.attribution; + }).join(', '); + }; + + return bing; +}; + iD.BackgroundSource.Custom = function() { var template = window.prompt('Enter a tile template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.'); if (!template) return null; From 235cb52d264b58d942d67e26294e64b03eb0a876 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 21 Mar 2013 11:39:33 -0700 Subject: [PATCH 03/69] Bing API supports JSONP --- Makefile | 1 + index.html | 1 + js/id/renderer/background_source.js | 36 ++++++++++++++--------------- js/lib/d3.jsonp.js | 25 ++++++++++++++++++++ test/index.html | 1 + 5 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 js/lib/d3.jsonp.js diff --git a/Makefile b/Makefile index f99342a98..4ba02a7b0 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ data/data.js: $(DATA_FILES) js/lib/d3.v3.js \ js/lib/d3.combobox.js \ js/lib/d3.geo.tile.js \ + js/lib/d3.jsonp.js \ js/lib/d3.keybinding.js \ js/lib/d3.one.js \ js/lib/d3.size.js \ diff --git a/index.html b/index.html index 5b928ea28..d0fbab9d8 100644 --- a/index.html +++ b/index.html @@ -23,6 +23,7 @@ + diff --git a/js/id/renderer/background_source.js b/js/id/renderer/background_source.js index 14e15852f..fc644e3ff 100644 --- a/js/id/renderer/background_source.js +++ b/js/id/renderer/background_source.js @@ -34,29 +34,29 @@ iD.BackgroundSource.template = function(data) { }; iD.BackgroundSource.Bing = function(data) { + // http://msdn.microsoft.com/en-us/library/ff701716.aspx + // http://msdn.microsoft.com/en-us/library/ff701701.aspx + var bing = iD.BackgroundSource.template(data), - url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/0,0?zl=1&mapVersion=v1&key=Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU&include=ImageryProviders&output=xml"; + key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM + url = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key + '&jsonp={callback}'; - var providers; - - d3.json(url, function(err, json) { - if (json) { - providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { - return { - attribution: provider.attribution, - areas: provider.areas.map(function(area) { - return { - zoom: [area.zoomMin, area.zoomMax], - extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) - } - }) - }; - }); - } + d3.jsonp(url, function(json) { + bing.providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { + return { + attribution: provider.attribution, + areas: provider.coverageAreas.map(function(area) { + return { + zoom: [area.zoomMin, area.zoomMax], + extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) + } + }) + }; + }); }); bing.copyrightNotices = function(zoom, extent) { - return providers.filter(function(provider) { + return bing.providers.filter(function(provider) { return _.any(provider.areas, function(area) { return extent.intersects(area.extent) && area.zoom[0] <= zoom && diff --git a/js/lib/d3.jsonp.js b/js/lib/d3.jsonp.js new file mode 100644 index 000000000..e0cd4a80e --- /dev/null +++ b/js/lib/d3.jsonp.js @@ -0,0 +1,25 @@ +d3.jsonp = function (url, callback) { + function rand() { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + c = '', i = -1; + while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52)); + return c; + } + + function create(url) { + var e = url.match(/callback=d3.jsonp.(\w+)/), + c = e ? e[1] : rand(); + d3.jsonp[c] = function(data) { + callback(data); + delete d3.jsonp[c]; + script.remove(); + }; + return 'd3.jsonp.' + c; + } + + var cb = create(url), + script = d3.select('head') + .append('script') + .attr('type', 'text/javascript') + .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb)); +}; diff --git a/test/index.html b/test/index.html index c6c1f11c7..b08719039 100644 --- a/test/index.html +++ b/test/index.html @@ -26,6 +26,7 @@ + From e01d2e611ff26fa448177b7382010a89fd4965b5 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 21 Mar 2013 12:23:57 -0700 Subject: [PATCH 04/69] Display Bing copyrights --- js/id/id.js | 8 +++++++- js/id/renderer/background.js | 5 ++++- js/id/renderer/background_source.js | 12 ++++++++---- js/id/ui.js | 1 - js/id/ui/attribution.js | 26 ++++++++++++++++++++++---- js/id/ui/background.js | 16 +++++----------- 6 files changed, 46 insertions(+), 22 deletions(-) diff --git a/js/id/id.js b/js/id/id.js index d6696ca02..8048175e9 100644 --- a/js/id/id.js +++ b/js/id/id.js @@ -102,7 +102,13 @@ window.iD = function () { context.zoomOut = map.zoomOut; /* Background */ - var backgroundSources = iD.data.imagery.map(iD.BackgroundSource.template); + var backgroundSources = iD.data.imagery.map(function(source) { + if (source.sourcetag === 'Bing') { + return iD.BackgroundSource.Bing(source, context.background().dispatch); + } else { + return iD.BackgroundSource.template(source); + } + }); backgroundSources.push(iD.BackgroundSource.Custom); context.backgroundSources = function() { diff --git a/js/id/renderer/background.js b/js/id/renderer/background.js index 9fe8a7378..83ffc31a8 100644 --- a/js/id/renderer/background.js +++ b/js/id/renderer/background.js @@ -168,14 +168,17 @@ iD.Background = function() { } } + background.dispatch = d3.dispatch('change'); + background.source = function(_) { if (!arguments.length) return source; source = _; cache = {}; tile.scaleExtent((source.data && source.data.scaleExtent) || [1, 20]); setHash(source); + background.dispatch.change(); return background; }; - return background; + return d3.rebind(background, background.dispatch, 'on'); }; diff --git a/js/id/renderer/background_source.js b/js/id/renderer/background_source.js index fc644e3ff..d0d3f1197 100644 --- a/js/id/renderer/background_source.js +++ b/js/id/renderer/background_source.js @@ -29,20 +29,22 @@ iD.BackgroundSource.template = function(data) { } generator.data = data; + generator.copyrightNotices = function() {}; return generator; }; -iD.BackgroundSource.Bing = function(data) { +iD.BackgroundSource.Bing = function(data, dispatch) { // http://msdn.microsoft.com/en-us/library/ff701716.aspx // http://msdn.microsoft.com/en-us/library/ff701701.aspx var bing = iD.BackgroundSource.template(data), key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM - url = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key + '&jsonp={callback}'; + url = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key + '&jsonp={callback}', + providers = []; d3.jsonp(url, function(json) { - bing.providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { + providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { return { attribution: provider.attribution, areas: provider.coverageAreas.map(function(area) { @@ -53,10 +55,12 @@ iD.BackgroundSource.Bing = function(data) { }) }; }); + dispatch.change(); }); bing.copyrightNotices = function(zoom, extent) { - return bing.providers.filter(function(provider) { + zoom = Math.min(zoom, 21); + return providers.filter(function(provider) { return _.any(provider.areas, function(area) { return extent.intersects(area.extent) && area.zoom[0] <= zoom && diff --git a/js/id/ui.js b/js/id/ui.js index 9ecefa26b..b9e73fabd 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -100,7 +100,6 @@ iD.ui = function(context) { linkList.append('li') .attr('class', 'attribution') .attr('tabindex', -1) - .data([context.background().source()]) .call(iD.ui.Attribution(context)); linkList.append('li') diff --git a/js/id/ui/attribution.js b/js/id/ui/attribution.js index c986206c6..4cc50b48c 100644 --- a/js/id/ui/attribution.js +++ b/js/id/ui/attribution.js @@ -1,6 +1,8 @@ iD.ui.Attribution = function(context) { - return function attribution(selection) { - var d = selection.data()[0]; + var selection; + + function update() { + var d = context.background().source(); var provided_by = selection .html('') @@ -10,13 +12,11 @@ iD.ui.Attribution = function(context) { if (!d) return; var source = d.data.sourcetag || d.data.name; - if (d.data.logo) { source = '' } var desc = t('imagery.provided_by', {source: source}); - if (d.data.terms_url) { provided_by.append('a') .attr('href', d.data.terms_url) @@ -25,5 +25,23 @@ iD.ui.Attribution = function(context) { } else { provided_by.text(desc); } + + var copyright = d.copyrightNotices(context.map().zoom(), context.map().extent()); + if (copyright) { + provided_by.append('span') + .text(copyright); + } + } + + return function(select) { + selection = select; + + context.background() + .on('change.attribution', update); + + context.map() + .on('move.attribution', _.throttle(update, 400)); + + update(); }; }; diff --git a/js/id/ui/background.js b/js/id/ui/background.js index b97ff1274..2e92ba0c0 100644 --- a/js/id/ui/background.js +++ b/js/id/ui/background.js @@ -1,6 +1,5 @@ iD.ui.Background = function(context) { - var event = d3.dispatch('cancel', 'save'), - key = 'b', + var key = 'b', opacities = [1, 0.5, 0], directions = [ ['left', [1, 0]], @@ -57,16 +56,11 @@ iD.ui.Background = function(context) { } } - function selectLayer(d) { + function selectLayer() { content.selectAll('a.layer') .classed('selected', function(d) { return d.data.name === context.background().source().data.name; }); - - context.container() - .select('.attribution') - .data([d]) - .call(iD.ui.Attribution(context)); } function clickSetSource(d) { @@ -85,7 +79,7 @@ iD.ui.Background = function(context) { .imagery_used(d.data.sourcetag || d.data.name); } context.redraw(); - selectLayer(d); + selectLayer(); } function clickGpx(d) { @@ -139,7 +133,7 @@ iD.ui.Background = function(context) { layerLinks.exit() .remove(); - selectLayer(context.background().source()); + selectLayer(); } function clickNudge(d) { @@ -289,5 +283,5 @@ iD.ui.Background = function(context) { .call(keybinding); } - return d3.rebind(background, event, 'on'); + return background; }; From 9f17a7ce34e11cf4a2d048c9d87c6d6a975c82fd Mon Sep 17 00:00:00 2001 From: saman bb Date: Fri, 22 Mar 2013 12:38:29 -0400 Subject: [PATCH 05/69] basic fox for restore modal. --- js/id/ui/restore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/id/ui/restore.js b/js/id/ui/restore.js index 72ffa76d8..a7554c88d 100644 --- a/js/id/ui/restore.js +++ b/js/id/ui/restore.js @@ -6,7 +6,7 @@ iD.ui.Restore = function(context) { var modal = iD.ui.modal(selection); modal.select('.modal') - .attr('class', 'modal-splash modal'); + .attr('class', 'modal-splash modal fillL'); var introModal = modal.select('.content'); From b921ce434879d0d6d649232c599d29c3da75c4b1 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Fri, 22 Mar 2013 13:09:18 -0400 Subject: [PATCH 06/69] Add initial inline docs, build script for doc.json --- build.js | 91 +++++++++++++++++++++++++++++--------------- data/doc.json | 10 +++++ data/doc/building.md | 43 +++++++++++++++++++++ data/doc/road.md | 53 ++++++++++++++++++++++++++ package.json | 3 ++ 5 files changed, 170 insertions(+), 30 deletions(-) create mode 100644 data/doc.json create mode 100644 data/doc/building.md create mode 100644 data/doc/road.md diff --git a/build.js b/build.js index eae01db09..c772ca5dc 100644 --- a/build.js +++ b/build.js @@ -2,13 +2,18 @@ var fs = require('fs'), path = require('path'), glob = require('glob'), YAML = require('js-yaml'), + marked = require('marked'), _ = require('./js/lib/lodash'), jsonschema = require('jsonschema'), fieldSchema = require('./data/presets/schema/field.json'), presetSchema = require('./data/presets/schema/preset.json'); +function readtxt(f) { + return fs.readFileSync(f, 'utf8'); +} + function read(f) { - return JSON.parse(fs.readFileSync(f)); + return JSON.parse(readtxt(f)); } function r(f) { @@ -19,6 +24,10 @@ function rp(f) { return r('presets/' + f); } +function stringify(o) { + return JSON.stringify(o, null, 4); +} + function validate(file, instance, schema) { var result = jsonschema.validate(instance, schema); if (result.length) { @@ -39,58 +48,80 @@ var translations = { presets: {} }; -var fields = {}; -glob.sync(__dirname + '/data/presets/fields/*.json').forEach(function(file) { - var field = read(file), - id = path.basename(file, '.json'); +function generateDocumentation() { + var docs = []; + glob.sync(__dirname + '/data/doc/*.md').forEach(function(file) { + var text = readtxt(file), + title = text.split('\n')[0] + .replace('#', '').trim(); + docs.push({ + text: marked(text), + title: title + }); + }); + fs.writeFileSync('data/doc.json', stringify(docs)); +} - validate(file, field, fieldSchema); +function generateFields() { + var fields = {}; + glob.sync(__dirname + '/data/presets/fields/*.json').forEach(function(file) { + var field = read(file), + id = path.basename(file, '.json'); - translations.fields[id] = {label: field.label}; - if (field.strings) { - for (var i in field.strings) { - translations.fields[id][i] = field.strings[i]; + validate(file, field, fieldSchema); + + translations.fields[id] = {label: field.label}; + if (field.strings) { + for (var i in field.strings) { + translations.fields[id][i] = field.strings[i]; + } } - } - fields[id] = field; -}); -fs.writeFileSync('data/presets/fields.json', JSON.stringify(fields, null, 4)); + fields[id] = field; + }); + fs.writeFileSync('data/presets/fields.json', stringify(fields)); +} -var presets = {}; -glob.sync(__dirname + '/data/presets/presets/**/*.json').forEach(function(file) { - var preset = read(file), - id = file.match(/presets\/presets\/([^.]*)\.json/)[1]; +function generatePresets() { + var presets = {}; + glob.sync(__dirname + '/data/presets/presets/**/*.json').forEach(function(file) { + var preset = read(file), + id = file.match(/presets\/presets\/([^.]*)\.json/)[1]; - validate(file, preset, presetSchema); + validate(file, preset, presetSchema); - translations.presets[id] = { - name: preset.name, - terms: (preset.terms || []).join(',') - }; + translations.presets[id] = { + name: preset.name, + terms: (preset.terms || []).join(',') + }; - presets[id] = preset; -}); -fs.writeFileSync('data/presets/presets.json', JSON.stringify(presets, null, 4)); + presets[id] = preset; + }); + fs.writeFileSync('data/presets/presets.json', stringify(presets)); + fs.writeFileSync('data/presets.yaml', YAML.dump({en: {presets: translations}})); +} -fs.writeFileSync('data/presets.yaml', YAML.dump({en: {presets: translations}})); +generateDocumentation(); +generateFields(); +generatePresets(); -fs.writeFileSync('data/data.js', 'iD.data = ' + JSON.stringify({ +fs.writeFileSync('data/data.js', 'iD.data = ' + stringify({ deprecated: r('deprecated.json'), discarded: r('discarded.json'), keys: r('keys.json'), imagery: r('imagery.json'), + docs: r('doc.json'), presets: { presets: rp('presets.json'), defaults: rp('defaults.json'), categories: rp('categories.json'), fields: rp('fields.json') } -}, null, 4) + ';'); +}) + ';'); // Push changes from data/core.yaml into data/locales.js var core = YAML.load(fs.readFileSync('data/core.yaml', 'utf8')); var presets = YAML.load(fs.readFileSync('data/presets.yaml', 'utf8')); var en = _.merge(core, presets); -var out = 'locale.en = ' + JSON.stringify(en.en, null, 4) + ';'; +var out = 'locale.en = ' + stringify(en.en) + ';'; fs.writeFileSync('data/locales.js', fs.readFileSync('data/locales.js', 'utf8').replace(/locale.en =[^;]*;/, out)); diff --git a/data/doc.json b/data/doc.json new file mode 100644 index 000000000..87e2724f5 --- /dev/null +++ b/data/doc.json @@ -0,0 +1,10 @@ +[ + { + "text": "

Mapping Buildings

\n

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", + "title": "Mapping Buildings" + }, + { + "text": "

Mapping Roads

\n

You can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.

\n

Selecting

\n

Click on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.

\n

Modifying

\n

Often you'll see roads that aren't aligned to the imagery behind them\nor a GPS track.

\n

First click on the road you want to change. This will highlight it and show\n'control points along it' that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a point, and one will be added.

\n

If the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.

\n

You can also click the 'Move' tool or type M to move the entire road at\none time, and then click again to save that movement.

\n

Deleting

\n

If a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n

Creating

\n

Found somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the key '2' to start drawing\na line.

\n

Click on the start of the road on the map to start drawing. If the road\nconnects to another road, first, click on the place where they connect.

\n

Then click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. When you're done drawing the road, double-click\nor press 'Return' or 'Enter' on your keyboard.

\n", + "title": "Mapping Roads" + } +] \ No newline at end of file diff --git a/data/doc/building.md b/data/doc/building.md new file mode 100644 index 000000000..4afad5d74 --- /dev/null +++ b/data/doc/building.md @@ -0,0 +1,43 @@ +# Mapping Buildings + +OpenStreetMap is the world's largest database of buildings. You can create +and improve this database. + +## Selecting + +You can select a building by clicking on its border. This will highlight the +building and open a small tools menu and a sidebar showing more information +about the building. + +## Modifying + +Sometimes buildings are incorrectly placed or have incorrect tags. + +To move an entire building, select it, then click the 'Move' tool. Move your +mouse to shift the building, and click when it's correctly placed. + +To fix the specific shape of a building, click and drag the points that form +its border into better places. + +## Creating + +One of the main questions around adding buildings to the map is that +OpenStreetMap records buildings both as shapes and points. The rule of thumb +is to _map a building as a shape whenever possible_, and map companies, homes, +amenities, and other things that operate out of buildings as points placed +within the building shape. + +Start drawing a building as a shape by clicking the 'Area' button in the top +left of the interface, and end it either by pressing 'Return' on your keyboard +or clicking on the first point drawn to close the shape. + +## Deleting + +If a building is entirely incorrect - you can see that it doesn't exist in satellite +imagery and ideally have confirmed locally that it's not present - you can delete +it, which removes it from the map. Be cautious when deleting features - +like any other edit, the results are seen by everyone and satellite imagery +is often out of date, so the road could simply be newly built. + +You can delete a building by clicking on it to select it, then clicking the +trash can icon or pressing the 'Delete' key. diff --git a/data/doc/road.md b/data/doc/road.md new file mode 100644 index 000000000..b73f534a5 --- /dev/null +++ b/data/doc/road.md @@ -0,0 +1,53 @@ +# Mapping Roads + +You can create, fix, and delete roads with this editor. Roads can be all +kinds: paths, highways, trails, cycleways, and more - any often-crossed +segment should be mappable. + +## Selecting + +Click on a road to select it. An outline should become visible, along +with a small tools menu on the map and a sidebar showing more information +about the road. + +### Modifying + +Often you'll see roads that aren't aligned to the imagery behind them +or a GPS track. + +First click on the road you want to change. This will highlight it and show +'control points along it' that you can drag to better locations. If +you want to add new control points for more detail, double-click a part +of the road without a point, and one will be added. + +If the road connects to another road, but doesn't properly connect on +the map, you can drag one of its control points onto the other road in +order to join them. Having roads connect is important for the map +and essential for providing driving directions. + +You can also click the 'Move' tool or type `M` to move the entire road at +one time, and then click again to save that movement. + +## Deleting + +If a road is entirely incorrect - you can see that it doesn't exist in satellite +imagery and ideally have confirmed locally that it's not present - you can delete +it, which removes it from the map. Be cautious when deleting features - +like any other edit, the results are seen by everyone and satellite imagery +is often out of date, so the road could simply be newly built. + +You can delete a road by clicking on it to select it, then clicking the +trash can icon or pressing the 'Delete' key. + +## Creating + +Found somewhere there should be a road but there isn't? Click the 'Line' +icon in the top-left of the editor or press the key '2' to start drawing +a line. + +Click on the start of the road on the map to start drawing. If the road +connects to another road, first, click on the place where they connect. + +Then click on points along the road so that it follows the right path, according +to satellite imagery or GPS. When you're done drawing the road, double-click +or press 'Return' or 'Enter' on your keyboard. diff --git a/package.json b/package.json index 4cd2317a8..6d8d7ba81 100644 --- a/package.json +++ b/package.json @@ -29,5 +29,8 @@ }, "engines": { "node": "~0.8.20" + }, + "dependencies": { + "marked": "~0.2.8" } } From 64bec11fb93c21b1af052ef6136dde0137bc0149 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Fri, 22 Mar 2013 13:40:30 -0400 Subject: [PATCH 07/69] Initial help ui --- build.js | 2 +- css/app.css | 22 ++++++++++++ data/data_dev.js | 6 ++-- data/doc.json | 4 +-- data/locales.js | 3 -- index.html | 1 + js/id/ui.js | 8 +++++ js/id/ui/help.js | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 128 insertions(+), 8 deletions(-) create mode 100644 js/id/ui/help.js diff --git a/build.js b/build.js index c772ca5dc..8c35372ea 100644 --- a/build.js +++ b/build.js @@ -55,7 +55,7 @@ function generateDocumentation() { title = text.split('\n')[0] .replace('#', '').trim(); docs.push({ - text: marked(text), + html: marked(text), title: title }); }); diff --git a/css/app.css b/css/app.css index 1db4c0e90..5af7924da 100644 --- a/css/app.css +++ b/css/app.css @@ -1523,10 +1523,32 @@ div.combobox { } .geolocate-control button { +} + +/* Help */ + +.help-control { + top:270px; +} + +.help-control button { border-radius: 0 0 4px 0; border-bottom: 0; } +.help-wrap { + background:#fff; + position: absolute; + height: 100%; + top:60px; + padding-left:50px; + padding-top:20px; + padding-right:20px; + padding-bottom:60px; + left: 0; + overflow-y: scroll; +} + /* Map ------------------------------------------------------- */ diff --git a/data/data_dev.js b/data/data_dev.js index 3445f943a..6968c7d6a 100644 --- a/data/data_dev.js +++ b/data/data_dev.js @@ -12,7 +12,8 @@ iD.data = { path + 'data/presets/presets.json', path + 'data/presets/defaults.json', path + 'data/presets/categories.json', - path + 'data/presets/fields.json'], d3.json, function (err, data) { + path + 'data/presets/fields.json', + path + 'data/doc.json'], d3.json, function (err, data) { iD.data = { deprecated: data[0], @@ -24,7 +25,8 @@ iD.data = { defaults: data[5], categories: data[6], fields: data[7] - } + }, + doc: data[8] }; callback(); diff --git a/data/doc.json b/data/doc.json index 87e2724f5..ae8813702 100644 --- a/data/doc.json +++ b/data/doc.json @@ -1,10 +1,10 @@ [ { - "text": "

Mapping Buildings

\n

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", + "html": "

Mapping Buildings

\n

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", "title": "Mapping Buildings" }, { - "text": "

Mapping Roads

\n

You can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.

\n

Selecting

\n

Click on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.

\n

Modifying

\n

Often you'll see roads that aren't aligned to the imagery behind them\nor a GPS track.

\n

First click on the road you want to change. This will highlight it and show\n'control points along it' that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a point, and one will be added.

\n

If the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.

\n

You can also click the 'Move' tool or type M to move the entire road at\none time, and then click again to save that movement.

\n

Deleting

\n

If a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n

Creating

\n

Found somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the key '2' to start drawing\na line.

\n

Click on the start of the road on the map to start drawing. If the road\nconnects to another road, first, click on the place where they connect.

\n

Then click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. When you're done drawing the road, double-click\nor press 'Return' or 'Enter' on your keyboard.

\n", + "html": "

Mapping Roads

\n

You can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.

\n

Selecting

\n

Click on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.

\n

Modifying

\n

Often you'll see roads that aren't aligned to the imagery behind them\nor a GPS track.

\n

First click on the road you want to change. This will highlight it and show\n'control points along it' that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a point, and one will be added.

\n

If the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.

\n

You can also click the 'Move' tool or type M to move the entire road at\none time, and then click again to save that movement.

\n

Deleting

\n

If a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n

Creating

\n

Found somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the key '2' to start drawing\na line.

\n

Click on the start of the road on the map to start drawing. If the road\nconnects to another road, first, click on the place where they connect.

\n

Then click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. When you're done drawing the road, double-click\nor press 'Return' or 'Enter' on your keyboard.

\n", "title": "Mapping Roads" } ] \ No newline at end of file diff --git a/data/locales.js b/data/locales.js index 4be144f8e..8da92772c 100644 --- a/data/locales.js +++ b/data/locales.js @@ -172,10 +172,7 @@ locale.en = { "no_documentation_key": "There is no documentation available for this key", "show_more": "Show More", "new_tag": "New tag", - "edit_tags": "Edit tags", - "okay": "Okay", "view_on_osm": "View on OSM", - "name": "Name", "editing_feature": "Editing {feature}", "additional": "Additional tags", "choose": "Select feature type", diff --git a/index.html b/index.html index 5b928ea28..1bf9253ac 100644 --- a/index.html +++ b/index.html @@ -71,6 +71,7 @@ + diff --git a/js/id/ui.js b/js/id/ui.js index 9ecefa26b..c33f4257f 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -52,6 +52,10 @@ iD.ui = function(context) { .attr('class', 'spinner') .call(iD.ui.Spinner(context)); + container.append('div') + .style('display', 'none') + .attr('class', 'help-wrap col4'); + container.append('div') .attr('class', 'map-control zoombuttons') .call(iD.ui.Zoom(context)); @@ -68,6 +72,10 @@ iD.ui = function(context) { .attr('class', 'map-control geolocate-control') .call(iD.ui.Geolocate(map)); + container.append('div') + .attr('class', 'map-control help-control') + .call(iD.ui.Help(context)); + container.append('div') .style('display', 'none') .attr('class', 'inspector-wrap fr content col4'); diff --git a/js/id/ui/help.js b/js/id/ui/help.js new file mode 100644 index 000000000..c48c15b77 --- /dev/null +++ b/js/id/ui/help.js @@ -0,0 +1,90 @@ +iD.ui.Help = function(context) { + + var key = 'h'; + + function help(selection) { + + var shown = false; + + function hide() { setVisible(false); } + function toggle() { + if (d3.event) d3.event.preventDefault(); + tooltip.hide(button); + setVisible(!button.classed('active')); + } + + function setVisible(show) { + if (show !== shown) { + button.classed('active', show); + if (!show) return; + + var pane = context.container().select('.help-wrap'); + + pane + .html(''); + + pane.style('display', 'block') + .style('left', '-500px') + .style('opacity', 1) + .transition() + .duration(200) + .style('left', '0px'); + + if (show) { + + pane.append('h4').text(t('help.title')); + + var toc = pane.append('div') + .attr('class', 'toc') + .append('ul'); + + toc + .selectAll('li') + .data(iD.data.doc) + .enter() + .append('li') + .append('a') + .text(function(d) { return d.title; }) + .on('click', function(d) { + doctitle.text(d.title); + console.log(d); + body.html(d.html); + }); + + var doctitle = pane.append('h3').text(t('help.title')); + + var body = pane.append('div') + .attr('class', 'body'); + + selection.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); + } else { + selection.on('mousedown.help-inside', null); + } + } + } + + var tooltip = bootstrap.tooltip() + .placement('right') + .html(true) + .title(iD.ui.tooltipHtml(t('help.title'), key)); + + var button = selection.append('button') + .attr('tabindex', -1) + .on('click', toggle) + .call(tooltip); + + button.append('span') + .attr('class', 'icon help light'); + + context.surface().on('mousedown.help-outside', hide); + context.container().on('mousedown.b.help-outside', hide); + + var keybinding = d3.keybinding('help'); + keybinding.on(key, toggle); + d3.select(document).call(keybinding); + } + + return help; +}; From aef17c1968fe57d35dae66c35849408aa11b32e2 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 11:23:23 -0700 Subject: [PATCH 08/69] Fix duplicate undo entries (fixes #1105) --- js/id/ui/inspector.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/id/ui/inspector.js b/js/id/ui/inspector.js index cef84ca75..de2ed33ae 100644 --- a/js/id/ui/inspector.js +++ b/js/id/ui/inspector.js @@ -2,7 +2,8 @@ iD.ui.Inspector = function(context, entity) { var tagEditor; function changeTags(tags) { - if (!_.isEqual(entity.tags, tags)) { + entity = context.entity(entity.id); + if (entity && !_.isEqual(entity.tags, tags)) { context.perform( iD.actions.ChangeTags(entity.id, tags), t('operations.change_tags.annotation')); From 4ab03064b078b922816c534f1d9584ce99a3b3b1 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Fri, 22 Mar 2013 14:47:29 -0400 Subject: [PATCH 09/69] Add help UI style, help.title translation --- build.js | 2 +- css/app.css | 11 +++++- data/core.yaml | 2 ++ data/doc.json | 4 +-- data/doc/building.md | 8 ++--- data/doc/road.md | 6 ++-- data/locales.js | 3 ++ js/id/ui/help.js | 83 +++++++++++++++++++++++++------------------- 8 files changed, 72 insertions(+), 47 deletions(-) diff --git a/build.js b/build.js index 8c35372ea..537550852 100644 --- a/build.js +++ b/build.js @@ -55,7 +55,7 @@ function generateDocumentation() { title = text.split('\n')[0] .replace('#', '').trim(); docs.push({ - html: marked(text), + html: marked(text.split('\n').slice(1).join('\n')), title: title }); }); diff --git a/css/app.css b/css/app.css index 5af7924da..c7c30f6c5 100644 --- a/css/app.css +++ b/css/app.css @@ -1544,11 +1544,20 @@ div.combobox { padding-left:50px; padding-top:20px; padding-right:20px; - padding-bottom:60px; + padding-bottom:150px; left: 0; overflow-y: scroll; } +.help-wrap .body p { + padding: 0 0 5px 0; +} + +.help-wrap .body p code { + padding:2px 4px; + background:#eee; +} + /* Map ------------------------------------------------------- */ diff --git a/data/core.yaml b/data/core.yaml index 7953cd0e3..e3c6a8d23 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -185,3 +185,5 @@ en: gpx: local_layer: "Local GPX file" drag_drop: "Drag and drop a .gpx file on the page" + help: + title: "Help" diff --git a/data/doc.json b/data/doc.json index ae8813702..689527b80 100644 --- a/data/doc.json +++ b/data/doc.json @@ -1,10 +1,10 @@ [ { - "html": "

Mapping Buildings

\n

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", + "html": "

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", "title": "Mapping Buildings" }, { - "html": "

Mapping Roads

\n

You can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.

\n

Selecting

\n

Click on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.

\n

Modifying

\n

Often you'll see roads that aren't aligned to the imagery behind them\nor a GPS track.

\n

First click on the road you want to change. This will highlight it and show\n'control points along it' that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a point, and one will be added.

\n

If the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.

\n

You can also click the 'Move' tool or type M to move the entire road at\none time, and then click again to save that movement.

\n

Deleting

\n

If a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n

Creating

\n

Found somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the key '2' to start drawing\na line.

\n

Click on the start of the road on the map to start drawing. If the road\nconnects to another road, first, click on the place where they connect.

\n

Then click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. When you're done drawing the road, double-click\nor press 'Return' or 'Enter' on your keyboard.

\n", + "html": "

You can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.

\n

Selecting

\n

Click on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.

\n

Modifying

\n

Often you'll see roads that aren't aligned to the imagery behind them\nor a GPS track.

\n

First click on the road you want to change. This will highlight it and show\n'control points along it' that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a point, and one will be added.

\n

If the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.

\n

You can also click the 'Move' tool or type M to move the entire road at\none time, and then click again to save that movement.

\n

Deleting

\n

If a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n

Creating

\n

Found somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the key '2' to start drawing\na line.

\n

Click on the start of the road on the map to start drawing. If the road\nconnects to another road, first, click on the place where they connect.

\n

Then click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. When you're done drawing the road, double-click\nor press 'Return' or 'Enter' on your keyboard.

\n", "title": "Mapping Roads" } ] \ No newline at end of file diff --git a/data/doc/building.md b/data/doc/building.md index 4afad5d74..8491243bf 100644 --- a/data/doc/building.md +++ b/data/doc/building.md @@ -3,13 +3,13 @@ OpenStreetMap is the world's largest database of buildings. You can create and improve this database. -## Selecting +### Selecting You can select a building by clicking on its border. This will highlight the building and open a small tools menu and a sidebar showing more information about the building. -## Modifying +### Modifying Sometimes buildings are incorrectly placed or have incorrect tags. @@ -19,7 +19,7 @@ mouse to shift the building, and click when it's correctly placed. To fix the specific shape of a building, click and drag the points that form its border into better places. -## Creating +### Creating One of the main questions around adding buildings to the map is that OpenStreetMap records buildings both as shapes and points. The rule of thumb @@ -31,7 +31,7 @@ Start drawing a building as a shape by clicking the 'Area' button in the top left of the interface, and end it either by pressing 'Return' on your keyboard or clicking on the first point drawn to close the shape. -## Deleting +### Deleting If a building is entirely incorrect - you can see that it doesn't exist in satellite imagery and ideally have confirmed locally that it's not present - you can delete diff --git a/data/doc/road.md b/data/doc/road.md index b73f534a5..c366127ad 100644 --- a/data/doc/road.md +++ b/data/doc/road.md @@ -4,7 +4,7 @@ You can create, fix, and delete roads with this editor. Roads can be all kinds: paths, highways, trails, cycleways, and more - any often-crossed segment should be mappable. -## Selecting +### Selecting Click on a road to select it. An outline should become visible, along with a small tools menu on the map and a sidebar showing more information @@ -28,7 +28,7 @@ and essential for providing driving directions. You can also click the 'Move' tool or type `M` to move the entire road at one time, and then click again to save that movement. -## Deleting +### Deleting If a road is entirely incorrect - you can see that it doesn't exist in satellite imagery and ideally have confirmed locally that it's not present - you can delete @@ -39,7 +39,7 @@ is often out of date, so the road could simply be newly built. You can delete a road by clicking on it to select it, then clicking the trash can icon or pressing the 'Delete' key. -## Creating +### Creating Found somewhere there should be a road but there isn't? Click the 'Line' icon in the top-left of the editor or press the key '2' to start drawing diff --git a/data/locales.js b/data/locales.js index 8da92772c..e9907e3d9 100644 --- a/data/locales.js +++ b/data/locales.js @@ -232,6 +232,9 @@ locale.en = { "local_layer": "Local GPX file", "drag_drop": "Drag and drop a .gpx file on the page" }, + "help": { + "title": "Help" + }, "presets": { "fields": { "access": { diff --git a/js/id/ui/help.js b/js/id/ui/help.js index c48c15b77..f4485a298 100644 --- a/js/id/ui/help.js +++ b/js/id/ui/help.js @@ -16,51 +16,62 @@ iD.ui.Help = function(context) { function setVisible(show) { if (show !== shown) { button.classed('active', show); - if (!show) return; + shown = show; - var pane = context.container().select('.help-wrap'); - - pane - .html(''); - - pane.style('display', 'block') - .style('left', '-500px') - .style('opacity', 1) - .transition() - .duration(200) - .style('left', '0px'); + var pane = context.container() + .select('.help-wrap'); if (show) { - pane.append('h4').text(t('help.title')); + pane.style('display', 'block') + .style('left', '-500px') + .transition() + .duration(200) + .style('left', '0px') + .each('end', function() { - var toc = pane.append('div') - .attr('class', 'toc') - .append('ul'); + pane.html(''); - toc - .selectAll('li') - .data(iD.data.doc) - .enter() - .append('li') - .append('a') - .text(function(d) { return d.title; }) - .on('click', function(d) { - doctitle.text(d.title); - console.log(d); - body.html(d.html); + var toc = pane.append('div') + .attr('class', 'toc') + .append('ul'); + + toc + .selectAll('li') + .data(iD.data.doc) + .enter() + .append('li') + .append('a') + .text(function(d) { return d.title; }) + .on('click', function(d) { + doctitle.text(d.title); + body.html(d.html); + }); + + var doctitle = pane.append('h2') + .text(t('help.title')), + body = pane.append('div') + .attr('class', 'body'); + + pane.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); + selection.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); }); - var doctitle = pane.append('h3').text(t('help.title')); - - var body = pane.append('div') - .attr('class', 'body'); - - selection.on('mousedown.help-inside', function() { - return d3.event.stopPropagation(); - }); } else { - selection.on('mousedown.help-inside', null); + + pane.style('left', '0px') + .transition() + .duration(200) + .style('left', '-500px') + .each('end', function() { + d3.select(this).style('display', 'none'); + }); + + pane.on('mousedown.help-inside', null); } } } From 9c9cce5c50693889dbad085f8b7e7b2389e7ba12 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 12:47:54 -0700 Subject: [PATCH 10/69] Inline tag reference in tag list (#256) --- combobox.html | 1 - css/app.css | 6 ++- index.html | 1 - js/id/ui/key_reference.js | 37 -------------- js/id/ui/tag_reference.js | 100 +++++++++++++++++++++----------------- js/id/ui/taglist.js | 86 +++++--------------------------- test/index.html | 1 - 7 files changed, 72 insertions(+), 160 deletions(-) delete mode 100644 js/id/ui/key_reference.js diff --git a/combobox.html b/combobox.html index 72c7ea538..c24384cb9 100644 --- a/combobox.html +++ b/combobox.html @@ -70,7 +70,6 @@ - diff --git a/css/app.css b/css/app.css index 1db4c0e90..567606a01 100644 --- a/css/app.css +++ b/css/app.css @@ -1209,7 +1209,7 @@ div.combobox { .tag-row { width: 100%; position: relative; - height: 30px; + clear: both; } .tag-row input { @@ -1255,6 +1255,10 @@ div.combobox { left: -20px } +.tag-row div.tag-help { + display: hidden; +} + .tag-row:hover input.value, .tag-row:hover input.key { border-radius: 0; diff --git a/index.html b/index.html index 5b928ea28..95c2f9a9c 100644 --- a/index.html +++ b/index.html @@ -79,7 +79,6 @@ - diff --git a/js/id/ui/key_reference.js b/js/id/ui/key_reference.js deleted file mode 100644 index c5e2b206f..000000000 --- a/js/id/ui/key_reference.js +++ /dev/null @@ -1,37 +0,0 @@ -iD.ui.keyReference = function(selection) { - selection.each(function() { - - var selection = d3.select(this), - data = selection.datum(), - header = selection.append('div') - .attr('class','modal-section fillL') - .append('h2'), - body = selection.append('div') - .attr('class', 'modal-section fillL2'); - - header.append('span').attr('class', 'icon big icon-pre-text big-' + data.geometry); - header.append('span').text(data.title); - body.append('h3').text('Common Values'); - - var table = body.append('table') - .attr('class', 'tags'), - thead = table.append('thead'); - - thead.append('th').text('Value'); - thead.append('th').text('Description'); - thead.append('th').text('Count'); - - var rows = table.selectAll('tr') - .data(data.data) - .enter() - .append('tr'); - - var cols = rows.selectAll('td') - .data(function(d) { - return [d.value, d.description || "", d.count]; - }) - .enter() - .append('td') - .text(String); - }); -}; diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index 67ae91b84..d5d919d8b 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -1,50 +1,62 @@ -iD.ui.tagReference = function(selection) { - selection.each(function() { - function g(x) { return function(d) { return d[x]; }; } - var selection = d3.select(this); - var header = selection.append('div') - .attr('class','modal-section fillL header') - .append('h3'); +iD.ui.TagReference = function(entity, tag) { + var taginfo = iD.taginfo(); - header.selectAll('span.icon') - .data(g('types')) - .enter() - .append('span') - .attr('title', function(d) { - return t('tag_reference.used_with', {type: d}); - }) - .attr('class', function(d) { - return 'icon big icon-pre-text big-' + d; + function findLocal(docs) { + var locale = iD.detect().locale.toLowerCase(), + localized; + + localized = _.find(docs, function(d) { + return d.lang.toLowerCase() === locale; + }); + if (localized) return localized; + + // try the non-regional version of a language, like + // 'en' if the language is 'en-US' + if (locale.indexOf('-') !== -1) { + var first = locale.split('-')[0]; + localized = _.find(docs, function(d) { + return d.lang.toLowerCase() === first; }); - header.append('span') - .text(g('title')); - - var referenceBody = selection.append('div') - .attr('class','modal-section fillL2'); - - referenceBody - .append('h4') - .text(t('tag_reference.description')); - - if (selection.datum().image) { - referenceBody - .append('img') - .attr('class', 'wiki-image') - .attr('src', selection.datum().image.image_url); + if (localized) return localized; } - referenceBody - .append('p') - .text(g('description')); + // finally fall back to english + return _.find(docs, function(d) { + return d.lang.toLowerCase() === 'en'; + }); + } - referenceBody - .append('a') - .attr('target', '_blank') - .attr('href', function(d) { - return 'http://wiki.openstreetmap.org/wiki/' + d.title; - }) - .text(function(d) { - return t('tag_reference.on_wiki', {tag: d.title}); - }); - }); + return function(selection) { + selection.html(''); + + taginfo.docs({key: tag.key}, function(err, docs) { + if (!err && docs) { + docs = findLocal(docs); + } + + if (!docs || !docs.description) { + return selection.text(t('inspector.no_documentation_key')); + } + + var referenceBody = selection.append('div') + .attr('class','modal-section fillL2'); + + if (docs.image && docs.image.thumb_url_prefix) { + referenceBody + .append('img') + .attr('class', 'wiki-image') + .attr('src', docs.image.thumb_url_prefix + "100" + docs.image.thumb_url_suffix); + } + + referenceBody + .append('p') + .text(docs.description); + + referenceBody + .append('a') + .attr('target', '_blank') + .attr('href', 'http://wiki.openstreetmap.org/wiki/' + docs.title) + .text(t('inspector.reference')); + }); + } }; diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index 81042d679..f34dbfa26 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -94,89 +94,25 @@ iD.ui.Taglist = function(context, entity) { removeBtn.append('span') .attr('class', 'icon delete'); - function findLocal(docs) { - var locale = iD.detect().locale.toLowerCase(), - localized; - - localized = _.find(docs, function(d) { - return d.lang.toLowerCase() === locale; - }); - if (localized) return localized; - - // try the non-regional version of a language, like - // 'en' if the language is 'en-US' - if (locale.indexOf('-') !== -1) { - var first = locale.split('-')[0]; - localized = _.find(docs, function(d) { - return d.lang.toLowerCase() === first; - }); - if (localized) return localized; - } - - // finally fall back to english - return _.find(docs, function(d) { - return d.lang.toLowerCase() === 'en'; - }); - } - - function keyValueReference(err, docs) { - var local; - if (!err && docs) { - local = findLocal(docs); - } - if (local) { - var types = []; - if (local.on_area) types.push('area'); - if (local.on_node) types.push('point'); - if (local.on_way) types.push('line'); - local.types = types; - iD.ui.modal(context.container()) - .select('.content') - .datum(local) - .call(iD.ui.tagReference); - } else { - iD.ui.flash(context.container()) - .select('.content') - .append('h3') - .text(t('inspector.no_documentation_combination')); - } - } - - function keyReference(err, values, params) { - if (!err && values.length) { - iD.ui.modal(context.container()) - .select('.content') - .datum({ - data: values, - title: 'Key:' + params.key, - geometry: params.geometry - }) - .call(iD.ui.keyReference); - } else { - iD.ui.flash(context.container()) - .select('.content') - .append('h3') - .text(t('inspector.no_documentation_key')); - } - } - var helpBtn = row.append('button') .attr('tabindex', -1) .attr('class', 'tag-help minor') - .on('click', function(d) { - var params = _.extend({}, d, { - geometry: entity.geometry(context.graph()) - }); - if (d.key && d.value) { - taginfo.docs(params, keyValueReference); - } else if (d.key) { - taginfo.values(params, keyReference); - } + .on('click', function(tag) { + row.selectAll('div.tag-help') + .style('display', 'none'); + + d3.select(d3.select(this).node().parentNode) + .select('div.tag-help') + .style('display', 'block') + .call(iD.ui.TagReference(entity, tag)); }); helpBtn.append('span') .attr('class', 'icon inspect'); + row.append('div') + .attr('class', 'tag-help'); + if (initial && tags.length === 1 && tags[0].key === '' && tags[0].value === '') { focusNewKey(); diff --git a/test/index.html b/test/index.html index c6c1f11c7..770d33e21 100644 --- a/test/index.html +++ b/test/index.html @@ -81,7 +81,6 @@ - From 118fe25bf0913183a4573bcde7b2768aa6784563 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Fri, 22 Mar 2013 16:55:11 -0400 Subject: [PATCH 11/69] Add editing, imagery, and help starter pages. --- css/app.css | 37 +++++++++++++++++++++++++++----- data/doc.json | 22 ++++++++++++++++--- data/doc/00-help.md | 13 +++++++++++ data/doc/01-editing-saving.md | 22 +++++++++++++++++++ data/doc/{road.md => 03-road.md} | 2 +- data/doc/04-gps.md | 18 ++++++++++++++++ data/doc/05-imagery.md | 17 +++++++++++++++ data/doc/06-addresses.md | 12 +++++++++++ data/doc/building.md | 2 +- js/id/ui.js | 2 +- js/id/ui/help.js | 26 +++++++++++++++------- 11 files changed, 154 insertions(+), 19 deletions(-) create mode 100644 data/doc/00-help.md create mode 100644 data/doc/01-editing-saving.md rename data/doc/{road.md => 03-road.md} (99%) create mode 100644 data/doc/04-gps.md create mode 100644 data/doc/05-imagery.md create mode 100644 data/doc/06-addresses.md diff --git a/css/app.css b/css/app.css index c7c30f6c5..9387340eb 100644 --- a/css/app.css +++ b/css/app.css @@ -1537,27 +1537,54 @@ div.combobox { } .help-wrap { - background:#fff; + background:#f1f1f1; position: absolute; height: 100%; top:60px; - padding-left:50px; - padding-top:20px; + padding-left:40px; + padding-top:10px; padding-right:20px; padding-bottom:150px; left: 0; overflow-y: scroll; } -.help-wrap .body p { +.help-wrap .left-content { + background: #fff; + margin-right:130px; + border-radius: 4px; + padding:10px; +} + +.help-wrap .left-content .body p { padding: 0 0 5px 0; } -.help-wrap .body p code { +.help-wrap .left-content .body p code { padding:2px 4px; background:#eee; } +.help-wrap .toc { + width:120px; + float:right; +} + +.help-wrap .toc li { + font-weight: bold; + border-bottom: 1px solid #ccc; + padding:2px; +} + +.help-wrap .toc a.selected { + color:#222; +} + +.help-wrap .toc li:last-child { + font-weight: bold; + border: 0; +} + /* Map ------------------------------------------------------- */ diff --git a/data/doc.json b/data/doc.json index 689527b80..73086eddf 100644 --- a/data/doc.json +++ b/data/doc.json @@ -1,10 +1,26 @@ [ { - "html": "

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", - "title": "Mapping Buildings" + "html": "

This is an editor for OpenStreetMap, the\nfree and editable map of the world. You can use it to fix and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.

\n

Edits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need a\nfree OpenStreetMap account.

\n

iD Editor is a collaborative project with source\ncode available on GitHub.

\n", + "title": "Help" }, { "html": "

You can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.

\n

Selecting

\n

Click on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.

\n

Modifying

\n

Often you'll see roads that aren't aligned to the imagery behind them\nor a GPS track.

\n

First click on the road you want to change. This will highlight it and show\n'control points along it' that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a point, and one will be added.

\n

If the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.

\n

You can also click the 'Move' tool or type M to move the entire road at\none time, and then click again to save that movement.

\n

Deleting

\n

If a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n

Creating

\n

Found somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the key '2' to start drawing\na line.

\n

Click on the start of the road on the map to start drawing. If the road\nconnects to another road, first, click on the place where they connect.

\n

Then click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. When you're done drawing the road, double-click\nor press 'Return' or 'Enter' on your keyboard.

\n", - "title": "Mapping Roads" + "title": "Roads" + }, + { + "html": "

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", + "title": "Buildings" + }, + { + "html": "

Addresses are some of the most useful information for the map.

\n

Although addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.

\n

You can add address information to places mapped as building outlines as well\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.

\n", + "title": "Addresses" + }, + { + "html": "

GPS data is the most trusted source of data for OpenStreetMap. This editor\nsupports local traces - .gpx files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.

\n

For information on how to perform a GPS survey, read\nSurveying with a GPS.

\n

To use a GPX track for mapping, drag and drop the GPX file onto the map map\neditor. If it's recognized, it will be added to the map as a bright green\nline. Click on the 'Background Settings' menu on the left side to enable,\ndisable, or zoom to this new GPX-powered layer.

\n

The GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add.

\n", + "title": "GPS" + }, + { + "html": "

Aerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the left.

\n

By default a Bing Maps satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-resolution, high-quality imagery\navailable for smaller geographical coverages.

\n

Imagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side - so if you see many roads shifted from the background,\ndon't immediately go to move them all. You can set an offset for imagery\nby clicking 'Fix alignment' at the bottom of the bottom of the Background\nSettings UI.

\n", + "title": "Imagery" } ] \ No newline at end of file diff --git a/data/doc/00-help.md b/data/doc/00-help.md new file mode 100644 index 000000000..60d1c976f --- /dev/null +++ b/data/doc/00-help.md @@ -0,0 +1,13 @@ +# Help + +This is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the +free and editable map of the world. You can use it to fix and update +data in your area, making an open-source and open-data map of the world +better for everyone. + +Edits that you make on this map will be visible to everyone who uses +OpenStreetMap. In order to make an edit, you'll need a +[free OpenStreetMap account](https://www.openstreetmap.org/user/new). + +[iD Editor](http://ideditor.com/) is a collaborative project with [source +code available on GitHub](https://github.com/systemed/iD). diff --git a/data/doc/01-editing-saving.md b/data/doc/01-editing-saving.md new file mode 100644 index 000000000..b42d52ddc --- /dev/null +++ b/data/doc/01-editing-saving.md @@ -0,0 +1,22 @@ +# Editing & Saving + +This editor is designed to work primarily online, and you're accessing +it through a website right now. + +When you create changes, like editing roads, buildings, and places, these are +stored locally until you save them to the server. Don't worry if you make +a mistake - you can undo changes by clicking the undo button, and redo +changes by clicking the redo button. + +Click 'Save' to finish a group of edits - for instance, if you've completed +an area of town and would like to start on a new area. You'll have a chance +to review what you've done, and the editor supplies helpful suggestions +and warnings if something doesn't seem right about the changes. + +Clicking 'Save' again, on the new dialog, will post the changes +to [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible +to all other users and available for others to build and improve upon. + +If you can't finish your edits in one sitting, you can leave the editor +window and come back (on the same browser and computer), and the +editor application will offer to restore your work. diff --git a/data/doc/road.md b/data/doc/03-road.md similarity index 99% rename from data/doc/road.md rename to data/doc/03-road.md index c366127ad..2f59a46e2 100644 --- a/data/doc/road.md +++ b/data/doc/03-road.md @@ -1,4 +1,4 @@ -# Mapping Roads +# Roads You can create, fix, and delete roads with this editor. Roads can be all kinds: paths, highways, trails, cycleways, and more - any often-crossed diff --git a/data/doc/04-gps.md b/data/doc/04-gps.md new file mode 100644 index 000000000..4bb48f276 --- /dev/null +++ b/data/doc/04-gps.md @@ -0,0 +1,18 @@ +# GPS + +GPS data is the most trusted source of data for OpenStreetMap. This editor +supports local traces - `.gpx` files on your local computer. You can collect +this kind of GPS trace with a number of smartphone applications as well as +personal GPS hardware. + +For information on how to perform a GPS survey, read +[Surveying with a GPS](http://learnosm.org/en/beginner/using-gps/). + +To use a GPX track for mapping, drag and drop the GPX file onto the map map +editor. If it's recognized, it will be added to the map as a bright green +line. Click on the 'Background Settings' menu on the left side to enable, +disable, or zoom to this new GPX-powered layer. + +The GPX track isn't directly uploaded to OpenStreetMap - the best way to +use it is to draw on the map, using it as a guide for the new features that +you add. diff --git a/data/doc/05-imagery.md b/data/doc/05-imagery.md new file mode 100644 index 000000000..71ae7bccd --- /dev/null +++ b/data/doc/05-imagery.md @@ -0,0 +1,17 @@ +# Imagery + +Aerial imagery is an important resource for mapping. A combination of +airplane flyovers, satellite views, and freely-compiled sources are available +in the editor under the 'Background Settings' menu on the left. + +By default a [Bing Maps](http://www.bing.com/maps/) satellite layer is +presented in the editor, but as you pan and zoom the map to new geographical +areas, new sources will become available. Some countries, like the United +States, France, and Denmark have very high-resolution, high-quality imagery +available for smaller geographical coverages. + +Imagery is sometimes offset from the map data because of a mistake on the +imagery provider's side - so if you see many roads shifted from the background, +don't immediately go to move them all. You can set an offset for imagery +by clicking 'Fix alignment' at the bottom of the bottom of the Background +Settings UI. diff --git a/data/doc/06-addresses.md b/data/doc/06-addresses.md new file mode 100644 index 000000000..0250e8cd3 --- /dev/null +++ b/data/doc/06-addresses.md @@ -0,0 +1,12 @@ +# Addresses + +Addresses are some of the most useful information for the map. + +Although addresses are often represented as parts of streets, in OpenStreetMap +they're recorded as attributes of buildings and places along streets. + +You can add address information to places mapped as building outlines as well +as well as those mapped as single points. The optimal source of address +data is from an on-the-ground survey or personal knowledge - as with any +other feature, copying from commercial sources like Google Maps is strictly +forbidden. diff --git a/data/doc/building.md b/data/doc/building.md index 8491243bf..5a634de0d 100644 --- a/data/doc/building.md +++ b/data/doc/building.md @@ -1,4 +1,4 @@ -# Mapping Buildings +# Buildings OpenStreetMap is the world's largest database of buildings. You can create and improve this database. diff --git a/js/id/ui.js b/js/id/ui.js index c33f4257f..71394c34c 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -54,7 +54,7 @@ iD.ui = function(context) { container.append('div') .style('display', 'none') - .attr('class', 'help-wrap col4'); + .attr('class', 'help-wrap col6'); container.append('div') .attr('class', 'map-control zoombuttons') diff --git a/js/id/ui/help.js b/js/id/ui/help.js index f4485a298..72f62d772 100644 --- a/js/id/ui/help.js +++ b/js/id/ui/help.js @@ -36,23 +36,33 @@ iD.ui.Help = function(context) { .attr('class', 'toc') .append('ul'); - toc - .selectAll('li') + function clickHelp(d) { + doctitle.text(d.title); + body.html(d.html); + body.selectAll('a') + .attr('target', '_blank'); + menuItems.classed('selected', function(m) { + return m.title === d.title; + }); + } + + var menuItems = toc.selectAll('li') .data(iD.data.doc) .enter() .append('li') .append('a') .text(function(d) { return d.title; }) - .on('click', function(d) { - doctitle.text(d.title); - body.html(d.html); - }); + .on('click', clickHelp); - var doctitle = pane.append('h2') + var content = pane.append('div') + .attr('class', 'left-content'), + doctitle = content.append('h2') .text(t('help.title')), - body = pane.append('div') + body = content.append('div') .attr('class', 'body'); + clickHelp(iD.data.doc[0]); + pane.on('mousedown.help-inside', function() { return d3.event.stopPropagation(); }); From 1d1bf0bf80f560dfd111a7ccbf63d95db747fc8d Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Fri, 22 Mar 2013 17:20:42 -0400 Subject: [PATCH 12/69] Update sprite, add retina version and icon for documentation. --- css/app.css | 11 ++++ img/source/sprite.svg | 131 +++++++++++++++++++++++------------------- img/sprite.png | Bin 22557 -> 23023 bytes img/sprite2x.png | Bin 0 -> 51327 bytes 4 files changed, 84 insertions(+), 58 deletions(-) create mode 100644 img/sprite2x.png diff --git a/css/app.css b/css/app.css index fdde3e07c..3e846896a 100644 --- a/css/app.css +++ b/css/app.css @@ -493,6 +493,7 @@ button[disabled] .label { .icon.plus { background-position: -240px 0px;} .icon.search { background-position: -280px 0px;} .icon.geocode { background-position: -280px 0px;} +.icon.help { background-position: -460px 0px;} .icon.layers { background-position: -300px 0px;} .icon.avatar { background-position: -320px 0px;} .icon.nearby { background-position: -340px 0px;} @@ -2153,6 +2154,16 @@ a.success-action.twitter:before { @media only screen and (max-height: 840px) { } +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (-o-min-device-pixel-ratio: 3/2), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-device-pixel-ratio: 1.5) { + .icon { + background-image: url(../img/sprite2x.png); + background-size: 500px 320px; + } +} + /* Scrollbars ----------------------------------------------------- */ ::-webkit-scrollbar { diff --git a/img/source/sprite.svg b/img/source/sprite.svg index 32ee46f77..8050c990f 100644 --- a/img/source/sprite.svg +++ b/img/source/sprite.svg @@ -9,13 +9,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="460" + width="500" height="320" id="svg12393" version="1.1" inkscape:version="0.48.2 r9819" sodipodi:docname="sprite.svg" - inkscape:export-filename="/Users/saman/work_repos/iD/img/sprite.png" + inkscape:export-filename="/Users/tmcw/src/iD/img/sprite.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> + inkscape:snap-nodes="true" + inkscape:snap-global="true"> + + @@ -986,7 +995,7 @@ @@ -1508,7 +1517,7 @@ transform="translate(10.000004,-1.9999957)"> @@ -1542,11 +1551,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" + d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" transform="matrix(1.009009,0,0,1.009009,-411.98649,15.371188)" /> @@ -1598,11 +1607,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" + d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,15.371188)" /> @@ -1682,11 +1691,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" + d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,14.371188)" /> @@ -1732,7 +1741,7 @@ transform="translate(10.000004,-1.9999957)"> @@ -1766,11 +1775,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" + d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" transform="matrix(1.009009,0,0,1.009009,-411.98649,15.371188)" /> @@ -1822,11 +1831,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" + d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,15.371188)" /> @@ -1921,11 +1930,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" + d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,14.371188)" /> @@ -1971,7 +1980,7 @@ transform="translate(10.000004,-1.9999957)"> @@ -2005,11 +2014,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" + d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" transform="matrix(1.009009,0,0,1.009009,-411.98649,15.371188)" /> + diff --git a/img/sprite.png b/img/sprite.png index 746c1872529e9b9a9d4df2322e304ff14ca990d7..171433ed27fc6ee056764411e94410fdde8617d0 100644 GIT binary patch literal 23023 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%0A~=EDq&q!=Tu;37DY}X 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 CRle;2 literal 0 HcmV?d00001 From 0ba855ed46fd88e71259e0a84aa758d2f073757f Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 12:58:56 -0700 Subject: [PATCH 13/69] Prefer selection argument to `this` --- js/id/ui/preset/combo.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/id/ui/preset/combo.js b/js/id/ui/preset/combo.js index d1d0fe70e..0f9afba4c 100644 --- a/js/id/ui/preset/combo.js +++ b/js/id/ui/preset/combo.js @@ -6,7 +6,8 @@ iD.ui.preset.combo = function(field) { function combo(selection) { - wrap = this.append('span').attr('class', 'input-wrap-position'); + wrap = selection.append('span') + .attr('class', 'input-wrap-position'); input = wrap.append('input') .attr('type', 'text') From 62879c51737fd5558730bbbac7774ed022f76aae Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 14:25:40 -0700 Subject: [PATCH 14/69] Use a label element rather than positioning hack --- css/app.css | 71 ++++++++++++++------------------- js/id/ui/preset.js | 13 +++--- js/id/ui/preset/address.js | 12 ++++-- js/id/ui/preset/check.js | 6 ++- js/id/ui/preset/combo.js | 12 +++--- js/id/ui/preset/defaultcheck.js | 2 +- js/id/ui/preset/input.js | 1 + js/id/ui/preset/radio.js | 14 +++---- js/id/ui/preset/textarea.js | 1 + 9 files changed, 64 insertions(+), 68 deletions(-) diff --git a/css/app.css b/css/app.css index 3e846896a..15daa67e6 100644 --- a/css/app.css +++ b/css/app.css @@ -147,6 +147,7 @@ input[type=email] { background-color: white; border:1px solid #ccc; padding:5px 10px; + height:30px; width: 100%; border-radius:4px; -webkit-transition: all 100ms; @@ -159,11 +160,6 @@ input:focus { background-color: #F1F1F1; } -input[type=text] { - padding:5px 10px; - height:30px; -} - input.major { width: 100%; padding:5px 10px; @@ -919,51 +915,47 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} background: #eef0ff; } -.preset-field h4 .modified-icon { +.preset-field .modified-icon { opacity: 0.2; display: none; pointer-events: all; } -.preset-field h4 .modified-icon:hover { +.preset-field .modified-icon:hover { opacity: 0.5; } -.preset-field.modified h4 .modified-icon { +.preset-field.modified .modified-icon { display: inline-block; } -.preset-field h4[for*="input-"] { +.preset-field .preset-label { + font-weight: bold; border: 1px solid #cfcfcf; padding: 5px 10px; background: #f6f6f6; - position: absolute; - left: 20px; - right: 20px; + display: block; border-radius: 4px 4px 0 0; - pointer-events: none; - z-index: 2; } -.preset-field h4 + input, -h4 + .input-wrap-position input, -h4 + .preset-input input:first-child { - padding-top: 35px; - height: 60px; +.preset-field > input, +.preset-field > textarea, +.preset-field .preset-input-wrap { + border: 1px solid #CCC; + border-top: 0; + border-radius: 0 0 4px 4px; } -.preset-field h4 + textarea { - padding-top: 35px; - height: 100px; +.preset-field textarea { + height: 65px; } -.preset-field h4[for="input-building:levels"], -.preset-field h4[for="input-ele"], -.preset-field.checkselect h4 { - right: 50%; +.preset-field-levels, +.preset-field-elevation, +.preset-field.checkselect { + width: 60%; } -.preset-field-name h4 + input { - padding-top: 35px; - height: 70px; +.preset-field-name input { + height: 35px; font-size: 18px; font-weight: bold; } @@ -998,7 +990,6 @@ button.preset-add-field { input[type=number] { position: relative; - width: 50%; padding-right: 65px; } @@ -1049,14 +1040,11 @@ input[type=number] { /* preset form checkbox */ -.checkselect label { +.checkselect label:last-of-type { display: block; - padding: 35px 5px 5px 5px; - border-radius: 4px; - margin-right: 50%; + padding: 5px; box-sizing: border-box; color: #999; - border: 1px solid #CCC; } .checkselect label:hover { @@ -1082,11 +1070,8 @@ input[type=number] { .radio-wrap { display: block; - padding: 30px 0 0 0; - border-radius: 4px; box-sizing: border-box; color: #999; - border: 1px solid #CCC; overflow: hidden; } @@ -1108,12 +1093,12 @@ input[type=number] { /* Preset form address */ .preset-field .addr-housename { - border-bottom: none; - border-radius: 4px 4px 0 0; + border: none; } .preset-field .addr-number { width: 20%; + border-left: none; border-right: none; border-bottom: none; border-radius: 0; @@ -1121,11 +1106,15 @@ input[type=number] { .preset-field .addr-street { width: 80%; - border-radius: 0; + border-right: none; border-bottom: none; + border-radius: 0; } .preset-field .addr-city { + border-left: none; + border-right: none; + border-bottom: none; border-radius: 0 0 4px 4px; } diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index f69517842..062a94b8c 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -68,15 +68,16 @@ iD.ui.preset = function(context, entity) { return 'preset-field preset-field-' + field.id + ' fillL inspector-inner col12'; }); - sections.append('h4') - .attr('for', function(d) { return 'input-' + d.key; }) - .text(function(d) { return d.label(); }) + sections.append('label') + .attr('class', 'preset-label') + .attr('for', function(field) { return 'preset-input-' + field.id; }) + .text(function(field) { return field.label(); }) .append('button') .attr('class', 'fr icon undo modified-icon') - .on('click', function(d) { + .on('click', function(field) { var original = context.graph().base().entities[entity.id]; var t = {}; - (d.keys || [d.key]).forEach(function(key) { + (field.keys || [field.key]).forEach(function(key) { t[key] = original ? original.tags[key] : undefined; }); event.change(t); @@ -90,7 +91,7 @@ iD.ui.preset = function(context, entity) { .on('close', event.close) .on('change', event.change); - event.on('setTags.' + field.key || field.type, function (tags) { + event.on('setTags.' + field.id, function(tags) { i.tags(_.clone(tags)); }); diff --git a/js/id/ui/preset/address.js b/js/id/ui/preset/address.js index b3d947fbe..4949f1257 100644 --- a/js/id/ui/preset/address.js +++ b/js/id/ui/preset/address.js @@ -41,15 +41,19 @@ iD.ui.preset.address = function(field, context) { function close() { return iD.behavior.accept().on('accept', event.close); } - housename = selection.append('input') + var wrap = selection.append('div') + .attr('class', 'preset-input-wrap'); + + housename = wrap.append('input') .property('type', 'text') .attr('placeholder', field.t('placeholders.housename')) .attr('class', 'addr-housename') + .attr('id', 'preset-input-' + field.id) .on('blur', change) .on('change', change) .call(close()); - housenumber = selection.append('input') + housenumber = wrap.append('input') .property('type', 'text') .attr('placeholder', field.t('placeholders.number')) .attr('class', 'addr-number') @@ -57,7 +61,7 @@ iD.ui.preset.address = function(field, context) { .on('change', change) .call(close()); - var streetwrap = selection.append('span') + var streetwrap = wrap.append('span') .attr('class', 'input-wrap-position'); street = streetwrap.append('input') @@ -67,7 +71,7 @@ iD.ui.preset.address = function(field, context) { .on('blur', change) .on('change', change); - city = selection.append('input') + city = wrap.append('input') .property('type', 'text') .attr('placeholder', field.t('placeholders.city')) .attr('class', 'addr-city') diff --git a/js/id/ui/preset/check.js b/js/id/ui/preset/check.js index 4c46cda91..ae28dda84 100644 --- a/js/id/ui/preset/check.js +++ b/js/id/ui/preset/check.js @@ -11,11 +11,13 @@ iD.ui.preset.check = function(field) { selection.classed('checkselect', 'true'); - label = selection.append('label'); + label = selection.append('label') + .attr('class', 'preset-input-wrap'); box = label.append('input') .property('indeterminate', true) - .attr('type', 'checkbox'); + .attr('type', 'checkbox') + .attr('id', 'preset-input-' + field.id); text = label.append('span') .text('unknown') diff --git a/js/id/ui/preset/combo.js b/js/id/ui/preset/combo.js index 0f9afba4c..dd53b8cf5 100644 --- a/js/id/ui/preset/combo.js +++ b/js/id/ui/preset/combo.js @@ -1,21 +1,19 @@ iD.ui.preset.combo = function(field) { var event = d3.dispatch('change', 'close'), - wrap, input; function combo(selection) { + var combobox = d3.combobox(); - wrap = selection.append('span') - .attr('class', 'input-wrap-position'); - - input = wrap.append('input') + input = selection.append('input') .attr('type', 'text') + .attr('id', 'preset-input-' + field.id) .on('change', change) .on('blur', change); - var combobox = d3.combobox(); - wrap.call(combobox); + selection + .call(combobox); if (field.options) { options(field.options); diff --git a/js/id/ui/preset/defaultcheck.js b/js/id/ui/preset/defaultcheck.js index 021f0862f..fa5f59a38 100644 --- a/js/id/ui/preset/defaultcheck.js +++ b/js/id/ui/preset/defaultcheck.js @@ -7,7 +7,7 @@ iD.ui.preset.defaultcheck = function(field) { input = selection.append('input') .attr('type', 'checkbox') - .attr('id', 'input-' + field.key) + .attr('id', 'preset-input-' + field.id) .on('change', function() { var t = {}; t[field.key] = input.property('checked') ? field.value || 'yes' : undefined; diff --git a/js/id/ui/preset/input.js b/js/id/ui/preset/input.js index 4ac69f450..35db78e1a 100644 --- a/js/id/ui/preset/input.js +++ b/js/id/ui/preset/input.js @@ -10,6 +10,7 @@ iD.ui.preset.url = function(field) { function i(selection) { input = selection.append('input') .attr('type', field.type) + .attr('id', 'preset-input-' + field.id) .attr('placeholder', field.placeholder || '') .on('blur', change) .on('change', change) diff --git a/js/id/ui/preset/radio.js b/js/id/ui/preset/radio.js index 24036a375..5ab65da70 100644 --- a/js/id/ui/preset/radio.js +++ b/js/id/ui/preset/radio.js @@ -6,18 +6,18 @@ iD.ui.preset.radio = function(field) { function radio(selection) { selection.classed('preset-radio', true); - var buttonwrap = selection.append('div').attr('class','radio-wrap'); + var buttonwrap = selection.append('div') + .attr('class', 'preset-input-wrap radio-wrap'); buttons = buttonwrap.selectAll('button') .data(field.keys || field.options) .enter() .append('button') - .text(function(d) { return field.t('options.' + d, { 'default': d }); }) - .on('click', function() { - buttons.classed('active', false); - d3.select(this).classed('active', true); - change(); - }); + .text(function(d) { return field.t('options.' + d, { 'default': d }); }) + .on('click', function(d) { + buttons.classed('active', function(e) { return d === e; }); + change(); + }); buttonwrap.append('button') .on('click', function() { diff --git a/js/id/ui/preset/textarea.js b/js/id/ui/preset/textarea.js index d27375343..4aad5bccb 100644 --- a/js/id/ui/preset/textarea.js +++ b/js/id/ui/preset/textarea.js @@ -5,6 +5,7 @@ iD.ui.preset.textarea = function(field) { function i(selection) { input = selection.append('textarea') + .attr('id', 'preset-input-' + field.id) .attr('placeholder', field.placeholder || '') .attr('maxlength', 255) .on('blur', change) From 3b09c186b66fc62b3f6a577f5cf8bdadaf91c486 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Fri, 22 Mar 2013 17:56:22 -0400 Subject: [PATCH 15/69] Be specific about retina as not to break the glue-generated sprite. * Warn before switching sources. Fixes #779. * Inline docs keep their place. Fixes #1109 --- css/app.css | 3 +- data/core.yaml | 1 + data/locales.js | 115 +++++++++++++++++++++----------------- js/id/ui/help.js | 100 ++++++++++++++++----------------- js/id/ui/source_switch.js | 3 + 5 files changed, 120 insertions(+), 102 deletions(-) diff --git a/css/app.css b/css/app.css index 3e846896a..f99a5ada9 100644 --- a/css/app.css +++ b/css/app.css @@ -2158,7 +2158,8 @@ a.success-action.twitter:before { only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) { - .icon { + .map-control .icon, + .button-wrap .icon { background-image: url(../img/sprite2x.png); background-size: 500px 320px; } diff --git a/data/core.yaml b/data/core.yaml index e3c6a8d23..d8ef0f31e 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -165,6 +165,7 @@ en: text: "This is development version {version}. For more information see {website} and report bugs at {github}." source_switch: live: live + lose_changes: "You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?" dev: dev tag_reference: description: Description diff --git a/data/locales.js b/data/locales.js index e9907e3d9..75ff86131 100644 --- a/data/locales.js +++ b/data/locales.js @@ -206,6 +206,7 @@ locale.en = { }, "source_switch": { "live": "live", + "lose_changes": "You have unsaved changes. Switching the map server will discard them. Are you sure you want to swith servers?", "dev": "dev" }, "tag_reference": { @@ -1613,10 +1614,7 @@ locale.zh = { "no_documentation_key": "没有关于此键的文档", "show_more": "显示更多", "new_tag": "新建标签", - "edit_tags": "编辑标签", - "okay": "确定", "view_on_osm": "在OSM上查看", - "name": "名称", "editing_feature": "编辑{feature}", "additional": "附加标签", "choose": "选择对象的类型", @@ -2768,10 +2766,8 @@ locale.zh_TW = { "no_documentation_key": "這個鍵值沒有可用的文檔", "show_more": "顯示更多", "new_tag": "新的標籤", - "edit_tags": "編輯標籤", - "okay": "確定", "view_on_osm": "在OSM上顯示", - "name": "名稱", + "editing_feature": "正在編輯 {feature}", "additional": "附加的標籤", "choose": "選擇功能種類", "results": "{search} 的 {n} 個結果", @@ -2826,6 +2822,10 @@ locale.zh_TW = { "imagery": { "provided_by": "影像由 {source} 提供" }, + "gpx": { + "local_layer": "本機GPX檔案", + "drag_drop": "拖放一個.gpx格式的檔案到本頁" + }, "presets": { "fields": { "access": { @@ -3116,10 +3116,12 @@ locale.zh_TW = { "terms": "穆斯林,清真寺" }, "amenity/police": { - "name": "警察局" + "name": "警察局", + "terms": "徽章,警官,警官,警官,警官,男童軍,警官,警官,警官,警官,警官,軍團,警車,偵探,警官,警官,部隊,警官,憲兵,刑警,警官, 法律,執法,警官,警官,警官,警官,警察" }, "amenity/post_box": { - "name": "郵箱" + "name": "郵箱", + "terms": "信箱,信箱,郵箱,郵箱,郵筒,郵箱" }, "amenity/post_office": { "name": "郵政局" @@ -3665,8 +3667,6 @@ locale.da = { "no_documentation_combination": "Der er ingen dokumentation for denne tag kombination", "no_documentation_key": "Der er ingen dokumentation tilgængelig for denne nøgle", "new_tag": "Nyt tag", - "edit_tags": "Ret tags", - "okay": "Ok", "view_on_osm": "Vis på OSM" }, "background": { @@ -3876,10 +3876,7 @@ locale.nl = { "no_documentation_combination": "Voor deze tag is geen documentatie beschikbaar.", "no_documentation_key": "Voor deze sleutel is geen documentatie beschikbaar", "new_tag": "Nieuwe tag", - "edit_tags": "Tags aanpassen", - "okay": "OK", "view_on_osm": "Bekijk op OSM", - "name": "Name", "additional": "Additional tags", "choose": "What are you adding?", "results": "{n} results for {search}" @@ -4102,10 +4099,7 @@ locale.fr = { "no_documentation_key": "Aucune documentation n'est disponible pour cette clé", "show_more": "Plus d'infornations", "new_tag": "Nouveau tag", - "edit_tags": "Editer les tags", - "okay": "Okay", "view_on_osm": "Visualiser sur OSM", - "name": "Nom", "editing_feature": "Édition de {feature}", "additional": "Tags complémentaires", "choose": "Que souhaitez vous ajouter?", @@ -4624,6 +4618,7 @@ locale.de = { "rotate": { "title": "Drehen", "description": "Dieses Objekt um seinen Mittelpunkt drehen.", + "key": "R", "annotation": { "line": "Linie gedreht.", "area": "Fläche gedreht." @@ -4678,13 +4673,13 @@ locale.de = { "no_documentation_key": "Für dises Schlüsselwort ist keine Dokumentation verfügbar", "show_more": "Zeige mehr", "new_tag": "Neues Attribut", - "edit_tags": "Attribute bearbeiten", - "okay": "OK", "view_on_osm": "auf OpenStreetMap ansehen", - "name": "Name", + "editing_feature": "In Bearbeitung {feature}", "additional": "Weitere Merkmale", + "choose": "Eigenschafts-Typ auswählen", "results": "{n} Resultate für {search}", - "reference": "In der OpenSteetMap Wiki anschauen →" + "reference": "In der OpenSteetMap Wiki anschauen →", + "back_tooltip": "Eigenschafts-Typ ändern" }, "background": { "title": "Hintergrund", @@ -4701,6 +4696,7 @@ locale.de = { "save": { "title": "Speichern", "help": "Speichere Änderungen auf OpenStreetMap, um diese für andere Nutzer sichtbar zu machen.", + "no_changes": "Keine zu speichernden Änderungen.", "error": "Beim Speichern ist ein Fehler aufgetreten", "uploading": "Änderungen werden zu OpenStreetMap hochgeladen.", "unsaved_changes": "Ungespeicherte Änderungen vorhanden" @@ -5231,10 +5227,7 @@ locale.it = { "no_documentation_key": "Non c'è documentazione per questa chiave", "show_more": "Mostra di più", "new_tag": "Nuovo Tag", - "edit_tags": "Modifica i tag", - "okay": "Ok", "view_on_osm": "Mostra su OSM", - "name": "Nome", "additional": "Tag aggiuntivi", "choose": "Seleziona il tipo di caratteristica", "results": "{n} risultati per {search}", @@ -6093,7 +6086,6 @@ locale.ja = { "no_documentation_combination": "このタグの組み合わせに関する説明文はありません", "no_documentation_key": "このキーに対する説明文はありません", "new_tag": "新規タグ", - "edit_tags": "タグ編集", "view_on_osm": "詳細情報確認" }, "background": { @@ -6309,10 +6301,7 @@ locale.lv = { "no_documentation_combination": "Šai apzīmējumu kombinācijai nav piejama dokumentācija", "no_documentation_key": "Šai vērtībai nav piejama dokumentācija", "new_tag": "Jauns apzīmējums", - "edit_tags": "Labot apzīmējumus", - "okay": "Labi", "view_on_osm": "Apskatīt OSM", - "name": "Name", "additional": "Papildus apzīmējumi", "choose": "Izvēlieties objekta tipu", "results": "Atrasti {n} rezultāti meklējot {search}", @@ -6662,8 +6651,6 @@ locale.pl = { "no_documentation_combination": "Nie ma dokumentacji dla tej kombinacji tagu.", "no_documentation_key": "Nie ma dokumentacji dla tego klucza", "new_tag": "Nowy tag", - "edit_tags": "Edytuj tagi", - "okay": "Okej", "view_on_osm": "Zobacz w OSM" }, "background": { @@ -6883,10 +6870,7 @@ locale.pt = { "no_documentation_combination": "Não há documentação disponível para esta combinação de tags", "no_documentation_key": "Não há documentação disponível para esta tecla", "new_tag": "Nova tag", - "edit_tags": "Editar tags", - "okay": "OK", "view_on_osm": "Ver em OSM", - "name": "Nome", "additional": "Tags adicionais", "choose": "O que está a adicionar?", "results": "{n} resultados para {search}" @@ -7107,10 +7091,7 @@ locale.ru = { "no_documentation_combination": "Для этой комбинации ключа и значения нет описания", "no_documentation_key": "Для этого ключа описания нет", "new_tag": "Новый тег", - "edit_tags": "Править теги", - "okay": "Готово", "view_on_osm": "Посмотреть в OSM", - "name": "Name", "additional": "Additional tags", "choose": "What are you adding?", "results": "{n} results for {search}", @@ -7325,8 +7306,6 @@ locale.es = { "no_documentation_combination": "No hay documentación disponible para esta combinación de etiquetas", "no_documentation_key": "No hay documentación disponible para esta tecla", "new_tag": "Nueva etiqueta", - "edit_tags": "Editar etiquetas", - "okay": "OK", "view_on_osm": "Ver en OSM" }, "background": { @@ -7546,10 +7525,7 @@ locale.sv = { "no_documentation_combination": "Der er ingen dokumentation for denne tag kombination", "no_documentation_key": "Det finns inget dokumentation för denna nyckel.", "new_tag": "Ny tagg", - "edit_tags": "Redigera taggar", - "okay": "Ok", "view_on_osm": "Visa på OSM", - "name": "Namn", "additional": "Fler taggar", "choose": "Vad lägger du till?", "results": "{n} sökresult för {search}", @@ -7763,10 +7739,7 @@ locale.tr = { "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", "view_on_osm": "OSM üzerinde gör", - "name": "İsim", "additional": "Ekstra etiketler", "choose": "Neyi ekliyorsunuz?", "results": "{n} results for {search}" @@ -7989,10 +7962,7 @@ locale.uk = { "no_documentation_key": "Для цього теґа немає документації", "show_more": "Ще", "new_tag": "Новий теґ", - "edit_tags": "Редагувати теґи", - "okay": "Готово", "view_on_osm": "Подивтись в ОСМ", - "name": "Name", "editing_feature": "Властивості {feature}", "additional": "Додаткові теґи", "choose": "Виберіть тип об’єкту", @@ -8060,7 +8030,7 @@ locale.uk = { "label": "Адреса", "placeholders": { "housename": "Назвабудинку", - "number": "123", + "number": "Номер", "street": "Вулиця", "city": "Місто" } @@ -8092,6 +8062,9 @@ locale.uk = { "capacity": { "label": "Міськість" }, + "collection_times": { + "label": "Час виїмки пошти" + }, "construction": { "label": "Тип" }, @@ -8169,6 +8142,9 @@ locale.uk = { "office": { "label": "Тип" }, + "oneway": { + "label": "Односторонній рух" + }, "opening_hours": { "label": "Години" }, @@ -8304,6 +8280,9 @@ locale.uk = { "amenity/fire_station": { "name": "Пожежна станція" }, + "amenity/fuel": { + "name": "Заправка" + }, "amenity/grave_yard": { "name": "Цвинтар" }, @@ -8767,6 +8746,9 @@ locale.uk = { "shop/butcher": { "name": "М’ясна лавка" }, + "shop/car": { + "name": "Автосалон" + }, "shop/car_parts": { "name": "Автозапчастини" }, @@ -8866,6 +8848,9 @@ locale.uk = { "shop/sports": { "name": "Спорттовари" }, + "shop/stationery": { + "name": "Канцтовари" + }, "shop/supermarket": { "name": "Супермаркет" }, @@ -8878,6 +8863,9 @@ locale.uk = { "shop/tyres": { "name": "Колеса та шини" }, + "shop/vacant": { + "name": "Здається в оренду" + }, "shop/variety_store": { "name": "Універсам" }, @@ -9113,6 +9101,7 @@ locale.vi = { "commit": { "title": "Lưu các Thay đổi", "description_placeholder": "Tóm lược các đóng góp của bạn", + "message_label": "Tóm lược sửa đổi", "upload_explanation": "Các thay đổi bạn thực hiện dưới tên {user} sẽ xuất hiện trên tất cả các bản đồ sử dụng dữ liệu OpenStreetMap.", "save": "Lưu", "cancel": "Hủy bỏ", @@ -9138,10 +9127,7 @@ locale.vi = { "no_documentation_key": "Không có tài liệu về chìa khóa này", "show_more": "Xem thêm", "new_tag": "Thẻ mới", - "edit_tags": "Sửa đổi các thẻ", - "okay": "OK", "view_on_osm": "Xem tại OSM", - "name": "Tên", "editing_feature": "Đang sửa {feature}", "additional": "Các thẻ nâng cao", "choose": "Chọn loại đối tượng", @@ -9310,6 +9296,9 @@ locale.vi = { "maxspeed": { "label": "Tốc độ Tối đa" }, + "name": { + "label": "Tên" + }, "natural": { "label": "Thiên nhiên" }, @@ -9325,6 +9314,9 @@ locale.vi = { "oneway": { "label": "Một chiều" }, + "oneway_yes": { + "label": "Một chiều" + }, "opening_hours": { "label": "Giờ Mở cửa" }, @@ -9625,18 +9617,33 @@ locale.vi = { "highway/motorway": { "name": "Đường Cao tốc" }, + "highway/motorway_link": { + "name": "Nhánh Ra vào Đường Cao tốc", + "terms": "đường nhánh,đoạn nhánh,đường nhánh rẽ,đoạn nhánh rẽ,đường nhánh chuyển đường,nhánh chuyển đường,lối ra vào,lối ra,lối vào,nhánh ra,nhánh vào,đường nối" + }, "highway/path": { "name": "Lối" }, "highway/primary": { "name": "Đường Chính" }, + "highway/primary_link": { + "name": "Nhánh Ra vào Đường Chính", + "terms": "đường nhánh,đoạn nhánh,đường nhánh rẽ,đoạn nhánh rẽ,đường nhánh chuyển đường,nhánh chuyển đường,lối ra vào,lối ra,lối vào,nhánh ra,nhánh vào,đường nối" + }, "highway/residential": { "name": "Ngõ Dân cư" }, + "highway/road": { + "name": "Đường Nói chung" + }, "highway/secondary": { "name": "Đường Lớn" }, + "highway/secondary_link": { + "name": "Nhánh Ra vào Đường Lớn", + "terms": "đường nhánh,đoạn nhánh,đường nhánh rẽ,đoạn nhánh rẽ,đường nhánh chuyển đường,nhánh chuyển đường,lối ra vào,lối ra,lối vào,nhánh ra,nhánh vào,đường nối" + }, "highway/service": { "name": "Ngách" }, @@ -9647,6 +9654,10 @@ locale.vi = { "highway/tertiary": { "name": "Phố" }, + "highway/tertiary_link": { + "name": "Nhánh Ra vào Phố", + "terms": "đường nhánh,đoạn nhánh,đường nhánh rẽ,đoạn nhánh rẽ,đường nhánh chuyển đường,nhánh chuyển đường,lối ra vào,lối ra,lối vào,nhánh ra,nhánh vào,đường nối" + }, "highway/track": { "name": "Đường mòn" }, @@ -9657,6 +9668,10 @@ locale.vi = { "highway/trunk": { "name": "Xa lộ" }, + "highway/trunk_link": { + "name": "Nhánh Ra vào Xa lộ", + "terms": "đường nhánh,đoạn nhánh,đường nhánh rẽ,đoạn nhánh rẽ,đường nhánh chuyển đường,nhánh chuyển đường,lối ra vào,lối ra,lối vào,nhánh ra,nhánh vào,đường nối" + }, "highway/turning_circle": { "name": "Cuối đường Vòng tròn" }, diff --git a/js/id/ui/help.js b/js/id/ui/help.js index 72f62d772..06f4d335f 100644 --- a/js/id/ui/help.js +++ b/js/id/ui/help.js @@ -4,7 +4,44 @@ iD.ui.Help = function(context) { function help(selection) { - var shown = false; + var shown = false, pane; + + function setup() { + pane = context.container() + .select('.help-wrap') + .html(''); + + var toc = pane.append('div') + .attr('class', 'toc') + .append('ul'); + + function clickHelp(d) { + doctitle.text(d.title); + body.html(d.html); + body.selectAll('a') + .attr('target', '_blank'); + menuItems.classed('selected', function(m) { + return m.title === d.title; + }); + } + + var menuItems = toc.selectAll('li') + .data(iD.data.doc) + .enter() + .append('li') + .append('a') + .text(function(d) { return d.title; }) + .on('click', clickHelp); + + var content = pane.append('div') + .attr('class', 'left-content'), + doctitle = content.append('h2') + .text(t('help.title')), + body = content.append('div') + .attr('class', 'body'); + + clickHelp(iD.data.doc[0]); + } function hide() { setVisible(false); } function toggle() { @@ -17,62 +54,22 @@ iD.ui.Help = function(context) { if (show !== shown) { button.classed('active', show); shown = show; - - var pane = context.container() - .select('.help-wrap'); - if (show) { - + function blockClick() { + pane.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); + selection.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); + } pane.style('display', 'block') .style('left', '-500px') .transition() .duration(200) .style('left', '0px') - .each('end', function() { - - pane.html(''); - - var toc = pane.append('div') - .attr('class', 'toc') - .append('ul'); - - function clickHelp(d) { - doctitle.text(d.title); - body.html(d.html); - body.selectAll('a') - .attr('target', '_blank'); - menuItems.classed('selected', function(m) { - return m.title === d.title; - }); - } - - var menuItems = toc.selectAll('li') - .data(iD.data.doc) - .enter() - .append('li') - .append('a') - .text(function(d) { return d.title; }) - .on('click', clickHelp); - - var content = pane.append('div') - .attr('class', 'left-content'), - doctitle = content.append('h2') - .text(t('help.title')), - body = content.append('div') - .attr('class', 'body'); - - clickHelp(iD.data.doc[0]); - - pane.on('mousedown.help-inside', function() { - return d3.event.stopPropagation(); - }); - selection.on('mousedown.help-inside', function() { - return d3.event.stopPropagation(); - }); - }); - + .each('end', blockClick); } else { - pane.style('left', '0px') .transition() .duration(200) @@ -80,7 +77,6 @@ iD.ui.Help = function(context) { .each('end', function() { d3.select(this).style('display', 'none'); }); - pane.on('mousedown.help-inside', null); } } @@ -102,6 +98,8 @@ iD.ui.Help = function(context) { context.surface().on('mousedown.help-outside', hide); context.container().on('mousedown.b.help-outside', hide); + setup(); + var keybinding = d3.keybinding('help'); keybinding.on(key, toggle); d3.select(document).call(keybinding); diff --git a/js/id/ui/source_switch.js b/js/id/ui/source_switch.js index 4f1afe227..8b9e2bd20 100644 --- a/js/id/ui/source_switch.js +++ b/js/id/ui/source_switch.js @@ -2,6 +2,9 @@ iD.ui.SourceSwitch = function(context) { function click() { d3.event.preventDefault(); + if (context.history().hasChanges() && + !window.confirm(t('source_switch.lose_changes'))) return; + var live = d3.select(this).classed('live'); context.connection() From 1632edadaee203a67d9d64fca046643865b3edf6 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Fri, 22 Mar 2013 18:03:43 -0400 Subject: [PATCH 16/69] Add and allow placeholder field item --- data/doc.json | 20 ++++++++++++-------- data/locales.js | 2 +- data/presets/fields.json | 1 + data/presets/fields/website.json | 3 ++- data/presets/schema/field.json | 5 ++++- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/data/doc.json b/data/doc.json index 73086eddf..4f3ee1e77 100644 --- a/data/doc.json +++ b/data/doc.json @@ -3,18 +3,14 @@ "html": "

This is an editor for OpenStreetMap, the\nfree and editable map of the world. You can use it to fix and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.

\n

Edits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need a\nfree OpenStreetMap account.

\n

iD Editor is a collaborative project with source\ncode available on GitHub.

\n", "title": "Help" }, + { + "html": "

This editor is designed to work primarily online, and you're accessing\nit through a website right now.

\n

When you create changes, like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.

\n

Click 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.

\n

Clicking 'Save' again, on the new dialog, will post the changes\nto OpenStreetMap.org, where they are visible\nto all other users and available for others to build and improve upon.

\n

If you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.

\n", + "title": "Editing & Saving" + }, { "html": "

You can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.

\n

Selecting

\n

Click on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.

\n

Modifying

\n

Often you'll see roads that aren't aligned to the imagery behind them\nor a GPS track.

\n

First click on the road you want to change. This will highlight it and show\n'control points along it' that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a point, and one will be added.

\n

If the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.

\n

You can also click the 'Move' tool or type M to move the entire road at\none time, and then click again to save that movement.

\n

Deleting

\n

If a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n

Creating

\n

Found somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the key '2' to start drawing\na line.

\n

Click on the start of the road on the map to start drawing. If the road\nconnects to another road, first, click on the place where they connect.

\n

Then click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. When you're done drawing the road, double-click\nor press 'Return' or 'Enter' on your keyboard.

\n", "title": "Roads" }, - { - "html": "

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", - "title": "Buildings" - }, - { - "html": "

Addresses are some of the most useful information for the map.

\n

Although addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.

\n

You can add address information to places mapped as building outlines as well\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.

\n", - "title": "Addresses" - }, { "html": "

GPS data is the most trusted source of data for OpenStreetMap. This editor\nsupports local traces - .gpx files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.

\n

For information on how to perform a GPS survey, read\nSurveying with a GPS.

\n

To use a GPX track for mapping, drag and drop the GPX file onto the map map\neditor. If it's recognized, it will be added to the map as a bright green\nline. Click on the 'Background Settings' menu on the left side to enable,\ndisable, or zoom to this new GPX-powered layer.

\n

The GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add.

\n", "title": "GPS" @@ -22,5 +18,13 @@ { "html": "

Aerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the left.

\n

By default a Bing Maps satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-resolution, high-quality imagery\navailable for smaller geographical coverages.

\n

Imagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side - so if you see many roads shifted from the background,\ndon't immediately go to move them all. You can set an offset for imagery\nby clicking 'Fix alignment' at the bottom of the bottom of the Background\nSettings UI.

\n", "title": "Imagery" + }, + { + "html": "

Addresses are some of the most useful information for the map.

\n

Although addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.

\n

You can add address information to places mapped as building outlines as well\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.

\n", + "title": "Addresses" + }, + { + "html": "

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", + "title": "Buildings" } ] \ No newline at end of file diff --git a/data/locales.js b/data/locales.js index 75ff86131..20146edcc 100644 --- a/data/locales.js +++ b/data/locales.js @@ -206,7 +206,7 @@ locale.en = { }, "source_switch": { "live": "live", - "lose_changes": "You have unsaved changes. Switching the map server will discard them. Are you sure you want to swith servers?", + "lose_changes": "You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?", "dev": "dev" }, "tag_reference": { diff --git a/data/presets/fields.json b/data/presets/fields.json index bf31d2fe1..841321562 100644 --- a/data/presets/fields.json +++ b/data/presets/fields.json @@ -372,6 +372,7 @@ "key": "website", "type": "url", "icon": "website", + "placeholder": "http://example.com/", "universal": true, "label": "Website" }, diff --git a/data/presets/fields/website.json b/data/presets/fields/website.json index 90e1cd1d1..1fcfaa6cf 100644 --- a/data/presets/fields/website.json +++ b/data/presets/fields/website.json @@ -2,6 +2,7 @@ "key": "website", "type": "url", "icon": "website", + "placeholder": "http://example.com/", "universal": true, "label": "Website" -} \ No newline at end of file +} diff --git a/data/presets/schema/field.json b/data/presets/schema/field.json index f852288c5..253ab79ff 100644 --- a/data/presets/schema/field.json +++ b/data/presets/schema/field.json @@ -59,9 +59,12 @@ "icon": { "type": "string" }, + "placeholder": { + "type": "string" + }, "strings": { "type": "object" } }, "additionalProperties": false -} \ No newline at end of file +} From 13f34e2e495dbd465f9b63965b0d563d8700cb2b Mon Sep 17 00:00:00 2001 From: saman bb Date: Fri, 22 Mar 2013 18:06:58 -0400 Subject: [PATCH 17/69] fix #1110 --- css/app.css | 4 ---- js/id/ui/tag_editor.js | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/css/app.css b/css/app.css index be90b3523..4f356159d 100644 --- a/css/app.css +++ b/css/app.css @@ -982,10 +982,6 @@ button.preset-add-field { padding: 0 10px; } -.view-on-osm { - padding: 20px; -} - /* preset form numbers */ input[type=number] { diff --git a/js/id/ui/tag_editor.js b/js/id/ui/tag_editor.js index 69d29d057..99f0d6f18 100644 --- a/js/id/ui/tag_editor.js +++ b/js/id/ui/tag_editor.js @@ -75,7 +75,7 @@ iD.ui.TagEditor = function(context, entity) { if (!entity.isNew()) { tageditorpreset.append('div') - .attr('class', 'view-on-osm') + .attr('class', 'col12 inspector-inner') .append('a') .attr('href', 'http://www.openstreetmap.org/browse/' + entity.type + '/' + entity.osmId()) .attr('target', '_blank') From 7299ccdcb584826327e13ff01fbece42ab02ceec Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 15:08:24 -0700 Subject: [PATCH 18/69] Inline reference for preset fields (#256) --- js/id/ui/preset.js | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 062a94b8c..2333771c3 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -68,20 +68,33 @@ iD.ui.preset = function(context, entity) { return 'preset-field preset-field-' + field.id + ' fillL inspector-inner col12'; }); - sections.append('label') + var label = sections.append('label') .attr('class', 'preset-label') .attr('for', function(field) { return 'preset-input-' + field.id; }) - .text(function(field) { return field.label(); }) - .append('button') - .attr('class', 'fr icon undo modified-icon') - .on('click', function(field) { - var original = context.graph().base().entities[entity.id]; - var t = {}; - (field.keys || [field.key]).forEach(function(key) { - t[key] = original ? original.tags[key] : undefined; - }); - event.change(t); + .text(function(field) { return field.label(); }); + + label.append('button') + .attr('class', 'fr icon undo modified-icon') + .on('click', function(field) { + var original = context.graph().base().entities[entity.id]; + var t = {}; + (field.keys || [field.key]).forEach(function(key) { + t[key] = original ? original.tags[key] : undefined; }); + event.change(t); + }); + + label.append('button') + .attr('class', 'fr icon inspect') + .on('click', function(field) { + selection.selectAll('div.tag-help') + .style('display', 'none'); + + d3.select(d3.select(this).node().parentNode.parentNode) + .select('div.tag-help') + .style('display', 'block') + .call(iD.ui.TagReference(entity, {key: field.key})); + }); sections.transition() .style('opacity', 1); @@ -101,6 +114,9 @@ iD.ui.preset = function(context, entity) { d3.select(this).call(i); }); + + sections.append('div') + .attr('class', 'tag-help'); } presets.rendered = function() { From d4526e20f2fffadd91714a4e174775ddab8f9892 Mon Sep 17 00:00:00 2001 From: saman bb Date: Fri, 22 Mar 2013 19:07:55 -0400 Subject: [PATCH 19/69] layout fixes. --- css/app.css | 31 +++++++++++++++++++------------ data/core.yaml | 3 ++- data/locales.js | 3 ++- js/id/ui/commit.js | 4 ++-- js/id/ui/preset.js | 2 +- js/id/ui/restore.js | 16 ++++++++++++---- 6 files changed, 38 insertions(+), 21 deletions(-) diff --git a/css/app.css b/css/app.css index 4f356159d..c45e51ab5 100644 --- a/css/app.css +++ b/css/app.css @@ -71,11 +71,9 @@ h4:last-child { margin-bottom: 0;} h3 { font-size: 16px; - line-height: 1.3333; + line-height: 1.25; font-weight: bold; margin-bottom: 10px; - text-overflow: ellipsis; - white-space: nowrap; } h4 { @@ -389,10 +387,10 @@ button.action:hover { background: #597BE7; } -button.delete { +button.cancel { background-color: #ff7070; } -button.delete:hover { +button.cancel:hover { background-color: #ef5454; } @@ -573,11 +571,16 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} .header { border-bottom: 1px solid #ccc; z-index: 2; + height: 60px; position: relative; } .header h3 { + margin-right: 40px; margin-bottom: 0; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } .modal > button, @@ -593,7 +596,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .modal > button { - height: 61px; + height: 59px; z-index: 3; } @@ -636,6 +639,9 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} .inspector-wrap .header button.preset-reset { border-right: 1px solid #CCC; position: relative; +} + +.inspector-wrap .header button.preset-reset { width: 60px; } @@ -669,7 +675,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} .pane:last-child .header h3 { position: absolute; left: 60px; - right: 40px; + right: 0px; } .inspector-toggle { @@ -927,7 +933,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} display: inline-block; } -.preset-field .preset-label { +.form-label { font-weight: bold; border: 1px solid #cfcfcf; padding: 5px 10px; @@ -1004,12 +1010,13 @@ input[type=number] { float: left; height: 100%; width: 50%; - border: 1px solid #CCC; + border-top: 1px solid #CCC; + border-bottom: 1px solid #CCC; border-radius: 0; border-left: 0; } -.spin-control button.descend { +.spin-control button.decrement { border-bottom-right-radius: 4px; } @@ -1846,7 +1853,7 @@ div.typeahead a:first-child { ------------------------------------------------------- */ .modal a.success-action { - height: 180px; + height: 170px; border-bottom: 1px solid #CCC; text-align: center; -webkit-transition: all 200ms; @@ -1868,7 +1875,7 @@ a.success-action:before { height: 100px; width: 100px; margin: auto; - margin-bottom: 20px; + margin-bottom: 10px; background:transparent url(../img/sprite.png) no-repeat 0px -220px; } diff --git a/data/core.yaml b/data/core.yaml index d8ef0f31e..5e27328a4 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -150,7 +150,8 @@ en: fix_misalignment: Fix misalignment reset: reset restore: - description: "You have unsaved changes from a previous editing session. Do you wish to restore these changes?" + heading: You have unsaved changes + description: "Do you wish to restore changes from a previous editing session?" restore: Restore reset: Reset save: diff --git a/data/locales.js b/data/locales.js index 20146edcc..b14eb867b 100644 --- a/data/locales.js +++ b/data/locales.js @@ -188,7 +188,8 @@ locale.en = { "reset": "reset" }, "restore": { - "description": "You have unsaved changes from a previous editing session. Do you wish to restore these changes?", + "heading": "You have unsaved changes", + "description": "Do you wish to restore changes from a previous editing session?", "restore": "Restore", "reset": "Reset" }, diff --git a/js/id/ui/commit.js b/js/id/ui/commit.js index 8bba39cb2..8a787fc7a 100644 --- a/js/id/ui/commit.js +++ b/js/id/ui/commit.js @@ -38,8 +38,8 @@ iD.ui.Commit = function(context) { var commentSection = body.append('div') .attr('class', 'modal-section preset-field'); - commentSection.append('h4') - .attr('for','input-commit-note') + commentSection.append('label') + .attr('class','form-label') .text(t('commit.message_label')); var commentField = commentSection diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 062a94b8c..bb20ff827 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -69,7 +69,7 @@ iD.ui.preset = function(context, entity) { }); sections.append('label') - .attr('class', 'preset-label') + .attr('class', 'form-label') .attr('for', function(field) { return 'preset-input-' + field.id; }) .text(function(field) { return field.label(); }) .append('button') diff --git a/js/id/ui/restore.js b/js/id/ui/restore.js index a7554c88d..b1dd64e33 100644 --- a/js/id/ui/restore.js +++ b/js/id/ui/restore.js @@ -6,21 +6,29 @@ iD.ui.Restore = function(context) { var modal = iD.ui.modal(selection); modal.select('.modal') - .attr('class', 'modal-splash modal fillL'); + .attr('class', 'modal fillL col6'); var introModal = modal.select('.content'); + introModal.attr('class','cf'); + introModal.append('div') .attr('class', 'modal-section header') .append('h3') - .text(t('restore.description')); + .text(t('restore.heading')); + + introModal.append('div') + .attr('class','modal-section') + .append('p') + .text(t('restore.description')); + var buttonWrap = introModal.append('div') - .attr('class', 'modal-section cf col12'); + .attr('class', 'modal-section col12'); var buttons = buttonWrap .append('div') - .attr('class', 'button-wrap joined col6'); + .attr('class', 'button-wrap joined col4'); var restore = buttons.append('button') .attr('class', 'save action button col6') From 25f22bc3f3a437c3c5218e8040af35ee5cc65e25 Mon Sep 17 00:00:00 2001 From: saman bb Date: Fri, 22 Mar 2013 19:17:11 -0400 Subject: [PATCH 20/69] fixed spin button style. --- css/app.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/css/app.css b/css/app.css index c45e51ab5..9633ad552 100644 --- a/css/app.css +++ b/css/app.css @@ -1010,14 +1010,14 @@ input[type=number] { float: left; height: 100%; width: 50%; - border-top: 1px solid #CCC; - border-bottom: 1px solid #CCC; + border-left: 1px solid #CCC; + border-right: 1px solid #CCC; border-radius: 0; border-left: 0; } .spin-control button.decrement { - border-bottom-right-radius: 4px; + border-bottom-right-radius: 3px; } .spin-control button.decrement::after, From 1c3b817b89a37103bcb0551b975c88e862a4c059 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 16:22:18 -0700 Subject: [PATCH 21/69] Autosize both sprites (fixes #1116) --- js/id/svg/surface.js | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/js/id/svg/surface.js b/js/id/svg/surface.js index 15ef0cca3..c37f5d89b 100644 --- a/js/id/svg/surface.js +++ b/js/id/svg/surface.js @@ -5,6 +5,17 @@ iD.svg.Surface = function() { }); } + function autosize(image) { + var img = document.createElement('img'); + img.src = image.attr('xlink:href'); + img.onload = function() { + image.attr({ + width: img.width, + height: img.height + }); + }; + } + function sprites(stylesheetName, selectorRegexp) { var sprites = []; @@ -90,12 +101,9 @@ iD.svg.Surface = function() { .attr('height', function(d) { return d; }); defs.append('image') - .attr({ - id: 'sprite', - width: 460, - height: 320, - 'xlink:href': 'img/sprite.png' - }); + .attr('id', 'sprite') + .attr('xlink:href', 'img/sprite.png') + .call(autosize); defs.selectAll() .data(sprites("app.css", /^\.(icon-operation-[a-z0-9-]+)$/)) @@ -104,20 +112,10 @@ iD.svg.Surface = function() { .attr('transform', function(d) { return "translate(" + d.x + "," + d.y + ")"; }) .attr('xlink:href', '#sprite'); - var image = defs.append('image') - .attr({ - id: 'maki-sprite', - 'xlink:href': 'img/feature-icons.png' - }); - - var img = document.createElement('img'); - img.src = 'img/feature-icons.png'; - img.onload = function() { - image.attr({ - width: img.width, - height: img.height - }); - }; + defs.append('image') + .attr('id', 'maki-sprite') + .attr('xlink:href', 'img/feature-icons.png') + .call(autosize); defs.selectAll() .data(sprites("feature-icons.css", /^\.(feature-[a-z0-9-]+-(12|18))$/)) From c56aa2593002f62596ddf57988bc89f76fa8d268 Mon Sep 17 00:00:00 2001 From: Ian B Date: Sat, 23 Mar 2013 15:56:38 +0100 Subject: [PATCH 22/69] Orthogonalize three-node ways (addresses #1077) --- js/id/actions/orthogonalize.js | 57 ++++++++++++++++++++++--------- js/id/operations/orthogonalize.js | 2 +- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/js/id/actions/orthogonalize.js b/js/id/actions/orthogonalize.js index 41fca79e3..140ad5dce 100644 --- a/js/id/actions/orthogonalize.js +++ b/js/id/actions/orthogonalize.js @@ -6,29 +6,46 @@ iD.actions.Orthogonalize = function(wayId, projection) { var action = function(graph) { var way = graph.entity(wayId), nodes = graph.childNodes(way), - points = nodes.map(function(n) { return projection(n.loc); }), - best, i, j; + points, best, i, j, score, corner; + + corner = {i: 0, dotp: 1}; //corner closest to 90 + + if(nodes.length == 4) { + points = _.uniq(nodes).map(function(n) { return projection(n.loc); }); + } else { + points = nodes.map(function(n) { return projection(n.loc); }); + score = squareness(); + } - var score = squareness(); for (i = 0; i < 1000; i++) { var motions = points.map(stepMap); - for (j = 0; j < motions.length; j++) { - points[j] = addPoints(points[j],motions[j]); - } - var newScore = squareness(); - if (newScore < score) { - best = _.clone(points); - score = newScore; + if(nodes.length == 4) { + points[corner.i] = addPoints(points[corner.i],motions[corner.i]); + score = corner.dotp; + } else { + for (j = 0; j < motions.length; j++) { + points[j] = addPoints(points[j],motions[j]); + } + var newScore = squareness(); + if (newScore < score) { + best = _.clone(points); + score = newScore; + } } if (score < 1.0e-8) { break; } } - points = best; - for (i = 0; i < points.length - 1; i++) { - graph = graph.replace(graph.entity(nodes[i].id) + if(nodes.length == 4) { + graph = graph.replace(graph.entity(nodes[corner.i].id) + .move(projection.invert(points[corner.i]))); + } else { + points = best; + for (i = 0; i < points.length - 1; i++) { + graph = graph.replace(graph.entity(nodes[i].id) .move(projection.invert(points[i]))); + } } return graph; @@ -44,9 +61,17 @@ iD.actions.Orthogonalize = function(wayId, projection) { q = normalizePoint(q, 1.0); var dotp = p[0] * q[0] + p[1] * q[1]; - // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). - if (dotp < -0.707106781186547) { - dotp += 1.0; + + if(nodes.length == 4) { + if( Math.abs(dotp) < corner.dotp){ + corner.i = i; + corner.dotp = Math.abs(dotp); + } + } else { + // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). + if (dotp < -0.707106781186547) { + dotp += 1.0; + } } return normalizePoint(addPoints(p, q), 0.1 * dotp * scale); diff --git a/js/id/operations/orthogonalize.js b/js/id/operations/orthogonalize.js index 482c4ba5b..2e5844398 100644 --- a/js/id/operations/orthogonalize.js +++ b/js/id/operations/orthogonalize.js @@ -10,7 +10,7 @@ iD.operations.Orthogonalize = function(selection, context) { operation.available = function() { return selection.length === 1 && context.entity(entityId).type === 'way' && - _.uniq(context.entity(entityId).nodes).length > 3; + _.uniq(context.entity(entityId).nodes).length > 2; }; operation.enabled = function() { From db2dc79e605230afd0c30fc5000d6920059a0137 Mon Sep 17 00:00:00 2001 From: Ian B Date: Sat, 23 Mar 2013 21:20:05 +0100 Subject: [PATCH 23/69] Refactor Orthogonalize --- js/id/actions/orthogonalize.js | 65 ++++++++++++++++------------------ 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/js/id/actions/orthogonalize.js b/js/id/actions/orthogonalize.js index 140ad5dce..d04317d78 100644 --- a/js/id/actions/orthogonalize.js +++ b/js/id/actions/orthogonalize.js @@ -6,23 +6,27 @@ iD.actions.Orthogonalize = function(wayId, projection) { var action = function(graph) { var way = graph.entity(wayId), nodes = graph.childNodes(way), - points, best, i, j, score, corner; + corner = {i: 0, dotp: 1}, + points, i, j, score, motions; - corner = {i: 0, dotp: 1}; //corner closest to 90 - - if(nodes.length == 4) { + if (nodes.length === 4) { points = _.uniq(nodes).map(function(n) { return projection(n.loc); }); - } else { - points = nodes.map(function(n) { return projection(n.loc); }); - score = squareness(); - } - - for (i = 0; i < 1000; i++) { - var motions = points.map(stepMap); - if(nodes.length == 4) { + for (i = 0; i < 1000; i++) { + motions = points.map(calcMotion); points[corner.i] = addPoints(points[corner.i],motions[corner.i]); score = corner.dotp; - } else { + if (score < 1.0e-8) { + break; + } + } + graph = graph.replace(graph.entity(nodes[corner.i].id) + .move(projection.invert(points[corner.i]))); + } else { + var best; + points = nodes.map(function(n) { return projection(n.loc); }); + score = squareness(); + for (i = 0; i < 1000; i++) { + motions = points.map(calcMotion); for (j = 0; j < motions.length; j++) { points[j] = addPoints(points[j],motions[j]); } @@ -31,26 +35,19 @@ iD.actions.Orthogonalize = function(wayId, projection) { best = _.clone(points); score = newScore; } + if (score < 1.0e-8) { + break; + } } - if (score < 1.0e-8) { - break; - } - } - - if(nodes.length == 4) { - graph = graph.replace(graph.entity(nodes[corner.i].id) - .move(projection.invert(points[corner.i]))); - } else { points = best; for (i = 0; i < points.length - 1; i++) { graph = graph.replace(graph.entity(nodes[i].id) - .move(projection.invert(points[i]))); + .move(projection.invert(points[i]))); } } - return graph; - function stepMap(b, i, array) { + function calcMotion(b, i, array) { var a = array[(i - 1 + array.length) % array.length], c = array[(i + 1) % array.length], p = subtractPoints(a, b), @@ -62,16 +59,16 @@ iD.actions.Orthogonalize = function(wayId, projection) { var dotp = p[0] * q[0] + p[1] * q[1]; - if(nodes.length == 4) { + // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). + if (array.length > 3) { + if (dotp < -0.707106781186547) { + dotp += 1.0; + } + } else { if( Math.abs(dotp) < corner.dotp){ corner.i = i; corner.dotp = Math.abs(dotp); } - } else { - // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). - if (dotp < -0.707106781186547) { - dotp += 1.0; - } } return normalizePoint(addPoints(p, q), 0.1 * dotp * scale); @@ -111,7 +108,7 @@ iD.actions.Orthogonalize = function(wayId, projection) { return [a[0] + b[0], a[1] + b[1]]; } - function normalizePoint(point, thickness) { + function normalizePoint(point, scale) { var vector = [0, 0]; var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]); if (length !== 0) { @@ -119,8 +116,8 @@ iD.actions.Orthogonalize = function(wayId, projection) { vector[1] = point[1] / length; } - vector[0] *= thickness; - vector[1] *= thickness; + vector[0] *= scale; + vector[1] *= scale; return vector; } From 04060f0abb54397402011c3b7442d660847d639d Mon Sep 17 00:00:00 2001 From: Ian B Date: Sat, 23 Mar 2013 21:45:50 +0100 Subject: [PATCH 24/69] Add orthogonalize test spec --- test/index.html | 1 + test/spec/actions/orthogonalize.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 test/spec/actions/orthogonalize.js diff --git a/test/index.html b/test/index.html index 770d33e21..c16e61fb9 100644 --- a/test/index.html +++ b/test/index.html @@ -183,6 +183,7 @@ + diff --git a/test/spec/actions/orthogonalize.js b/test/spec/actions/orthogonalize.js new file mode 100644 index 000000000..690d73140 --- /dev/null +++ b/test/spec/actions/orthogonalize.js @@ -0,0 +1,30 @@ +describe("iD.actions.Orthogonalize", function () { + var projection = d3.geo.mercator(); + + it("orthoganalizes a quad", function () { + var graph = iD.Graph({ + 'a': iD.Node({id: 'a', loc: [0, 0]}), + 'b': iD.Node({id: 'b', loc: [4, 0]}), + 'c': iD.Node({id: 'c', loc: [3, 2]}), + 'd': iD.Node({id: 'd', loc: [0, 2]}), + '-': iD.Way({id: '-', nodes: ['a', 'b', 'c', 'd', 'a']}) + }); + + graph = iD.actions.Orthogonalize('-', projection)(graph); + + expect(graph.entity('-').nodes).to.have.length(5); + }); + + it("orthoganalizes a triangle", function () { + var graph = iD.Graph({ + 'a': iD.Node({id: 'a', loc: [0, 0]}), + 'b': iD.Node({id: 'b', loc: [3, 0]}), + 'c': iD.Node({id: 'c', loc: [2, 2]}), + '-': iD.Way({id: '-', nodes: ['a', 'b', 'c', 'a']}) + }); + + graph = iD.actions.Orthogonalize('-', projection)(graph); + + expect(graph.entity('-').nodes).to.have.length(4); + }); +}); From c633982b8893f943cc5dff3b3bb79955f5aea41f Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 12:31:02 -0400 Subject: [PATCH 25/69] Focus new input fields by default. Fixes #1127 --- js/id/ui/preset.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 20680c56b..73521b140 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -68,7 +68,6 @@ iD.ui.preset = function(context, entity) { return 'preset-field preset-field-' + field.id + ' fillL inspector-inner col12'; }); - var label = sections.append('label') .attr('class', 'form-label') .attr('for', function(field) { return 'preset-input-' + field.id; }) @@ -114,6 +113,9 @@ iD.ui.preset = function(context, entity) { keys = keys.concat(field.key ? [field.key] : field.keys); d3.select(this).call(i); + + var input = d3.select(this).selectAll('input, textarea').node(); + if (input) input.focus(); }); sections.append('div') From ce74818028a243a225b370530d398f0f0ad92bd2 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 12:43:02 -0400 Subject: [PATCH 26/69] Document lasso. Fixes #1115 --- data/doc/01-editing-saving.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/data/doc/01-editing-saving.md b/data/doc/01-editing-saving.md index b42d52ddc..f8f4d027a 100644 --- a/data/doc/01-editing-saving.md +++ b/data/doc/01-editing-saving.md @@ -3,6 +3,18 @@ This editor is designed to work primarily online, and you're accessing it through a website right now. +## Selecting Features + +To select a map feature, like a road or point of interest, simply single-click +on it on the map. This will highlight the selected feature, show a panel of +details, and also show a menu of things you can do with the feature. + +Multiple features can be selected by holding the 'Shift' key, clicking, +and dragging on the map. This will select all features within the box +that's drawn, and you can do certain 'batch operations' on all features. + +## Saving Edits + When you create changes, like editing roads, buildings, and places, these are stored locally until you save them to the server. Don't worry if you make a mistake - you can undo changes by clicking the undo button, and redo From 912f7c73afa5d68763289b2bd2862aa41a25dcf6 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 18:55:34 -0700 Subject: [PATCH 27/69] Remove unused --- js/id/ui/taglist.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index f34dbfa26..fd7b690e2 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -1,7 +1,6 @@ iD.ui.Taglist = function(context, entity) { var event = d3.dispatch('change'), taginfo = iD.taginfo(), - initial = false, collapsebutton, list; @@ -113,11 +112,6 @@ iD.ui.Taglist = function(context, entity) { row.append('div') .attr('class', 'tag-help'); - if (initial && tags.length === 1 && - tags[0].key === '' && tags[0].value === '') { - focusNewKey(); - } - return li; } From 2dcd6b5772c656321c85f19e0c25c32493c0d8bc Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 22 Mar 2013 18:58:27 -0700 Subject: [PATCH 28/69] Simplify --- js/id/ui/taglist.js | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index fd7b690e2..f7ed663b2 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -25,12 +25,8 @@ iD.ui.Taglist = function(context, entity) { .attr('class', 'tag-list'); var newTag = wrap.append('button') - .attr('class', 'add-tag col6'); - - newTag.on('click', function() { - addTag(); - focusNewKey(); - }); + .attr('class', 'add-tag col6') + .on('click', addTag); newTag.append('span') .attr('class', 'icon plus'); @@ -85,15 +81,14 @@ iD.ui.Taglist = function(context, entity) { row.each(bindTypeahead); - var removeBtn = row.append('button') + row.append('button') .attr('tabindex', -1) .attr('class','remove minor') - .on('click', removeTag); - - removeBtn.append('span') + .on('click', removeTag) + .append('span') .attr('class', 'icon delete'); - var helpBtn = row.append('button') + row.append('button') .attr('tabindex', -1) .attr('class', 'tag-help minor') .on('click', function(tag) { @@ -104,9 +99,8 @@ iD.ui.Taglist = function(context, entity) { .select('div.tag-help') .style('display', 'block') .call(iD.ui.TagReference(entity, tag)); - }); - - helpBtn.append('span') + }) + .append('span') .attr('class', 'icon inspect'); row.append('div') @@ -120,7 +114,6 @@ iD.ui.Taglist = function(context, entity) { list.selectAll('li:last-child input.value').node() === this && !d3.event.shiftKey) { addTag(); - focusNewKey(); d3.event.preventDefault(); } } @@ -170,14 +163,11 @@ iD.ui.Taglist = function(context, entity) { })); } - function focusNewKey() { - list.selectAll('li:last-child input.key').node().focus(); - } - function addTag() { var tags = taglist.tags(); tags[''] = ''; drawTags(tags); + list.selectAll('li:last-child input.key').node().focus(); } function removeTag(d) { From 70575a0f2029a4f1732ad8933b19c5b86d2b1985 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 10:15:15 -0700 Subject: [PATCH 29/69] Go to browse mode after disconnecting (fixes #1121) --- js/id/operations/disconnect.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/id/operations/disconnect.js b/js/id/operations/disconnect.js index e64653626..48149bb03 100644 --- a/js/id/operations/disconnect.js +++ b/js/id/operations/disconnect.js @@ -4,6 +4,7 @@ iD.operations.Disconnect = function(selection, context) { var operation = function() { context.perform(action, t('operations.disconnect.annotation')); + context.enter(iD.modes.Browse(context)); }; operation.available = function() { From 197c45353653ae7c9d6f75ec2873aae5d0346be0 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 11:50:53 -0700 Subject: [PATCH 30/69] Focus only new fields (#1127) Previous behavior was clearing the name tag whenever something was selected. --- js/id/ui/preset.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 73521b140..2908a3694 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -44,7 +44,10 @@ iD.ui.preset = function(context, entity) { } function addForm(d) { - draw(formwrap, [d]); + var field = draw(formwrap, [d]); + + var input = field.selectAll('input, textarea').node(); + if (input) input.focus(); d3.select(this) .style('opacity', 1) @@ -113,13 +116,12 @@ iD.ui.preset = function(context, entity) { keys = keys.concat(field.key ? [field.key] : field.keys); d3.select(this).call(i); - - var input = d3.select(this).selectAll('input, textarea').node(); - if (input) input.focus(); }); sections.append('div') .attr('class', 'tag-help'); + + return sections; } presets.rendered = function() { From 65a8320d8dd0d16a84fc8d7475d36151172b5b81 Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 14:53:35 -0400 Subject: [PATCH 31/69] revisions to the preset form layout. --- css/app.css | 80 ++++++++++++++++++++++++----------------- data/core.yaml | 2 +- data/locales.js | 2 +- js/id/ui/preset_grid.js | 4 +-- js/id/ui/tag_editor.js | 27 +++++++------- 5 files changed, 64 insertions(+), 51 deletions(-) diff --git a/css/app.css b/css/app.css index 9633ad552..f7904a811 100644 --- a/css/app.css +++ b/css/app.css @@ -593,6 +593,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} overflow: hidden; position: absolute; right: 0; + top: 0; } .modal > button { @@ -641,16 +642,9 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} position: relative; } -.inspector-wrap .header button.preset-reset { - width: 60px; -} - .inspector-wrap .header button.preset-reset > div { height: 100%; padding: 20px 0; - -webkit-transition: opacity 200ms; - -moz-transition: opacity 200ms; - transition: opacity 200ms; } .inspector-wrap .header button.preset-reset .col12:last-child { @@ -672,12 +666,6 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} padding: 0; } -.pane:last-child .header h3 { - position: absolute; - left: 60px; - right: 0px; -} - .inspector-toggle { color:#fff; width: 100%; @@ -817,23 +805,24 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .subgrid { - width: -webkit-calc(100% - 10px); + width: -webkit-calc(100% + 10px); width: calc(100% - 10px); + width: 100%; + margin-left: -10px; overflow: hidden; } .subgrid .preset-grid { - background: #eee; padding: 10px 0px 0px 10px; + border: 1px solid #CCC; margin-top: 0px; - border: 0; border-radius: 4px; } .subgrid .arrow { border: solid rgba(0, 0, 0, 0); border-width: 10px; - border-bottom-color: #eee; + border-bottom-color: #CCC; width: 0; height: 0; margin-left: 33.3333%; @@ -903,24 +892,49 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} /* preset form basics */ -.preset-field.inspector-inner { +.tag-wrap .preset-icon-wrap { + border-bottom: 1px solid #CCC; +} + +.tag-wrap .preset-icon-wrap::after { + content: ""; + position: absolute; + height: 0; + width: 0; + bottom: 0; + left: 0; + right: 0; + margin: auto; + border: solid rgba(0, 0, 0, 0); + border-width: 10px; + border-bottom-color: #CCC; +} + +.tag-wrap .preset-icon-wrap div { + height: 90px; + width: 33.3333%; + margin: auto; + border-radius: 4px; + border: 1px solid #CCC; + position: relative; +} + +.tag-wrap .preset-icon-wrap .preset-icon { + position: absolute; + top: 30px; + left: 0px; + right: 0px; + margin: auto; +} + +.tag-wrap .preset-icon-wrap .preset-icon.line { + top: 15px; +} + +.preset-field.inspector-inner { padding-bottom: 0; } -.tag-wrap .grid-button-wrap { - padding: 0; - height: 110px; -} - -.tag-wrap .grid-button-wrap .grid-entry { - border-top: 0; - background: #eef0ff; -} - -.tag-wrap .grid-button-wrap .grid-entry .label { - background: #eef0ff; -} - .preset-field .modified-icon { opacity: 0.2; display: none; @@ -997,7 +1011,7 @@ input[type=number] { .spin-control { width: 60px; - height: 30px; + height: 29px; border-left: 1px solid #CCC; display: inline-block; margin-left: -60px; diff --git a/data/core.yaml b/data/core.yaml index 5e27328a4..dc67c4c94 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -107,7 +107,7 @@ en: 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." - view_on_osm: View on OSM + view_on_osm: "View on OSM →"" zoom_in_edit: zoom in to edit the map logout: logout report_a_bug: report a bug diff --git a/data/locales.js b/data/locales.js index b14eb867b..715093c84 100644 --- a/data/locales.js +++ b/data/locales.js @@ -139,7 +139,7 @@ locale.en = { "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.", - "view_on_osm": "View on OSM", + "view_on_osm": "View on OSM →", "zoom_in_edit": "zoom in to edit the map", "logout": "logout", "report_a_bug": "report a bug", diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index 004de7510..1fd0adccd 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -15,7 +15,7 @@ iD.ui.PresetGrid = function(context, entity) { .attr('class', 'header fillL cf'); var message = messagewrap.append('h3') - .attr('class', 'inspector-inner fl') + .attr('class', 'inspector-inner') .text(t('inspector.choose')); if (preset) { @@ -115,7 +115,7 @@ iD.ui.PresetGrid = function(context, entity) { .attr('class', 'arrow'); subgrid.append('div') - .attr('class', 'preset-grid fillL cf fl') + .attr('class', 'preset-grid fillL2 cf fl') .data([d.members.collection]) .call(drawGrid, 1000); diff --git a/js/id/ui/tag_editor.js b/js/id/ui/tag_editor.js index 99f0d6f18..ef948b90e 100644 --- a/js/id/ui/tag_editor.js +++ b/js/id/ui/tag_editor.js @@ -26,26 +26,18 @@ iD.ui.TagEditor = function(context, entity) { var messagewrap = selection.append('div') .attr('class', 'header fillL cf'); - var back = messagewrap.append('button') - .attr('class', 'preset-reset fl ' + geometry) + messagewrap.append('button') + .attr('class', 'preset-reset fl ') .on('click', function() { event.choose(preset); - }); - - var icon = preset.icon || (geometry === 'line' ? 'other-line' : 'marker-stroked'); - - back.append('div') - .attr('class', 'col12') - .append('span') - .attr('class', 'preset-icon icon feature-' + icon); - - back.append('div') - .attr('class', 'col12') + }) .append('span') .attr('class', 'icon back'); + var icon = preset.icon || (geometry === 'line' ? 'other-line' : 'marker-stroked'); + messagewrap.append('h3') - .attr('class', 'inspector-inner fl') + .attr('class', 'inspector-inner') .text(t('inspector.editing_feature', { feature: preset.name() })); messagewrap.append('button') @@ -57,6 +49,13 @@ iD.ui.TagEditor = function(context, entity) { var editorwrap = selection.append('div') .attr('class', 'tag-wrap inspector-body fillL2 inspector-body-' + geometry); + editorwrap.append('div') + .attr('class', 'col12 inspector-inner fillL2 preset-icon-wrap') + .append('div') + .attr('class','fillL') + .append('span') + .attr('class', geometry + ' preset-icon icon feature-' + icon); + presetUI = iD.ui.preset(context, entity) .preset(preset) .on('change', changeTags) From 34b599551828ac5a55d20ecc0f744d1b998e517f Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 15:03:57 -0400 Subject: [PATCH 32/69] renamed preset-field to form-field. --- css/app.css | 34 ++++++++++++++++++---------------- js/id/ui/commit.js | 2 +- js/id/ui/preset.js | 6 +++--- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/css/app.css b/css/app.css index f7904a811..3039c6b97 100644 --- a/css/app.css +++ b/css/app.css @@ -931,19 +931,21 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} top: 15px; } -.preset-field.inspector-inner { +.form-field.inspector-inner { padding-bottom: 0; } -.preset-field .modified-icon { +.form-field .modified-icon { opacity: 0.2; display: none; pointer-events: all; } -.preset-field .modified-icon:hover { + +.form-field .modified-icon:hover { opacity: 0.5; } -.preset-field.modified .modified-icon { + +.form-field.modified .modified-icon { display: inline-block; } @@ -956,25 +958,25 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} border-radius: 4px 4px 0 0; } -.preset-field > input, -.preset-field > textarea, -.preset-field .preset-input-wrap { +.form-field > input, +.form-field > textarea, +.form-field .preset-input-wrap { border: 1px solid #CCC; border-top: 0; border-radius: 0 0 4px 4px; } -.preset-field textarea { +.form-field textarea { height: 65px; } -.preset-field-levels, -.preset-field-elevation, -.preset-field.checkselect { +.form-field-levels, +.form-field-elevation, +.form-field.checkselect { width: 60%; } -.preset-field-name input { +.form-field-name input { height: 35px; font-size: 18px; font-weight: bold; @@ -1109,11 +1111,11 @@ input[type=number] { /* Preset form address */ -.preset-field .addr-housename { +.form-field .addr-housename { border: none; } -.preset-field .addr-number { +.form-field .addr-number { width: 20%; border-left: none; border-right: none; @@ -1121,14 +1123,14 @@ input[type=number] { border-radius: 0; } -.preset-field .addr-street { +.form-field .addr-street { width: 80%; border-right: none; border-bottom: none; border-radius: 0; } -.preset-field .addr-city { +.form-field .addr-city { border-left: none; border-right: none; border-bottom: none; diff --git a/js/id/ui/commit.js b/js/id/ui/commit.js index 8a787fc7a..324ce192f 100644 --- a/js/id/ui/commit.js +++ b/js/id/ui/commit.js @@ -36,7 +36,7 @@ iD.ui.Commit = function(context) { // Comment Section var commentSection = body.append('div') - .attr('class', 'modal-section preset-field'); + .attr('class', 'modal-section form-field'); commentSection.append('label') .attr('class','form-label') diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 2908a3694..f167b77b7 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -62,13 +62,13 @@ iD.ui.preset = function(context, entity) { } function draw(selection, fields) { - var sections = selection.selectAll('div.preset-field') + var sections = selection.selectAll('div.form-field') .data(fields, function(field) { return field.id; }) .enter() .append('div') .style('opacity', 0) .attr('class', function(field) { - return 'preset-field preset-field-' + field.id + ' fillL inspector-inner col12'; + return 'form-field form-field-' + field.id + ' fillL inspector-inner col12'; }); var label = sections.append('label') @@ -146,7 +146,7 @@ iD.ui.preset = function(context, entity) { } }); - formwrap.selectAll('div.preset-field') + formwrap.selectAll('div.form-field') .classed('modified', function(d) { var original = context.graph().base().entities[entity.id]; return _.any(d.keys || [d.key], function(key) { From 5c6398e7732b36513b2272920300b32ffaa87557 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 15:05:30 -0400 Subject: [PATCH 33/69] Position bing logo, add attribution --- css/app.css | 5 +++++ js/id/renderer/background_source.js | 10 ++++++---- js/id/ui/attribution.js | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/css/app.css b/css/app.css index 25ba70bcf..49173df81 100644 --- a/css/app.css +++ b/css/app.css @@ -1564,6 +1564,11 @@ div.combobox { color:#fff; } +.source-image { + height:20px; + vertical-align:top; +} + .user-list a:not(:last-child):after { content: ', '; } diff --git a/js/id/renderer/background_source.js b/js/id/renderer/background_source.js index d0d3f1197..46c93821f 100644 --- a/js/id/renderer/background_source.js +++ b/js/id/renderer/background_source.js @@ -40,7 +40,8 @@ iD.BackgroundSource.Bing = function(data, dispatch) { var bing = iD.BackgroundSource.template(data), key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM - url = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key + '&jsonp={callback}', + url = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + + key + '&jsonp={callback}', providers = []; d3.jsonp(url, function(json) { @@ -51,7 +52,7 @@ iD.BackgroundSource.Bing = function(data, dispatch) { return { zoom: [area.zoomMin, area.zoomMax], extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) - } + }; }) }; }); @@ -65,7 +66,7 @@ iD.BackgroundSource.Bing = function(data, dispatch) { return extent.intersects(area.extent) && area.zoom[0] <= zoom && area.zoom[1] >= zoom; - }) + }); }).map(function(provider) { return provider.attribution; }).join(', '); @@ -75,7 +76,8 @@ iD.BackgroundSource.Bing = function(data, dispatch) { }; iD.BackgroundSource.Custom = function() { - var template = window.prompt('Enter a tile template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.'); + var template = window.prompt('Enter a tile template. ' + + 'Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.'); if (!template) return null; return iD.BackgroundSource.template({ template: template, diff --git a/js/id/ui/attribution.js b/js/id/ui/attribution.js index 4cc50b48c..f06b04972 100644 --- a/js/id/ui/attribution.js +++ b/js/id/ui/attribution.js @@ -13,7 +13,7 @@ iD.ui.Attribution = function(context) { var source = d.data.sourcetag || d.data.name; if (d.data.logo) { - source = '' + source = ''; } var desc = t('imagery.provided_by', {source: source}); From a3d241196714dc68e9b0ec9f3ac79e7d25c5344e Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 10:41:07 -0700 Subject: [PATCH 34/69] Reuse input variable --- js/lib/d3.combobox.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/js/lib/d3.combobox.js b/js/lib/d3.combobox.js index f237c181e..44686cdfd 100644 --- a/js/lib/d3.combobox.js +++ b/js/lib/d3.combobox.js @@ -14,9 +14,11 @@ d3.combobox = function() { var typeahead = function(selection) { var idx = -1; - input = selection.select('input').classed('combobox-input', true); - selection.append('div', selection.select('input')) + input = selection.select('input') + .classed('combobox-input', true); + + selection.append('div', input) .attr('class', 'combobox-carat') .on('mousedown', stop) .on('mousedown', function() { @@ -25,9 +27,7 @@ d3.combobox = function() { }); function updateSize() { - var rect = selection.select('input') - .node() - .getBoundingClientRect(); + var rect = input.node().getBoundingClientRect(); container.style({ 'left': rect.left + 'px', 'width': rect.width + 'px', From 8bbd82832493925f263d06840cc1b86271d416dd Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 11:04:18 -0700 Subject: [PATCH 35/69] Simplify --- js/lib/d3.combobox.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/js/lib/d3.combobox.js b/js/lib/d3.combobox.js index 44686cdfd..2f79a0848 100644 --- a/js/lib/d3.combobox.js +++ b/js/lib/d3.combobox.js @@ -20,8 +20,10 @@ d3.combobox = function() { selection.append('div', input) .attr('class', 'combobox-carat') - .on('mousedown', stop) .on('mousedown', function() { + // prevent the form element from blurring. it blurs + // on mousedown + d3.event.stopPropagation(); d3.event.preventDefault(); mousedown(); }); @@ -35,13 +37,6 @@ d3.combobox = function() { }); } - function stop() { - // prevent the form element from blurring. it blurs - // on mousedown - d3.event.stopPropagation(); - d3.event.preventDefault(); - } - function blur() { // hide the combobox whenever the input element // loses focus From afe5aa788c54d63687f69df5e59deabd180341aa Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 11:43:04 -0700 Subject: [PATCH 36/69] d3.combobox should be called on input element --- js/id/ui/preset/address.js | 5 ++--- js/id/ui/preset/combo.js | 4 +--- js/id/ui/taglist.js | 20 +++++++++----------- js/lib/d3.combobox.js | 34 +++++++++++++++++++--------------- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/js/id/ui/preset/address.js b/js/id/ui/preset/address.js index 4949f1257..3ee7df5aa 100644 --- a/js/id/ui/preset/address.js +++ b/js/id/ui/preset/address.js @@ -69,7 +69,8 @@ iD.ui.preset.address = function(field, context) { .attr('placeholder', field.t('placeholders.street')) .attr('class', 'addr-street') .on('blur', change) - .on('change', change); + .on('change', change) + .call(d3.combobox().data(getStreets())); city = wrap.append('input') .property('type', 'text') @@ -78,8 +79,6 @@ iD.ui.preset.address = function(field, context) { .on('blur', change) .on('change', change) .call(close()); - - streetwrap.call(d3.combobox().data(getStreets())); } function change() { diff --git a/js/id/ui/preset/combo.js b/js/id/ui/preset/combo.js index dd53b8cf5..e60a955f5 100644 --- a/js/id/ui/preset/combo.js +++ b/js/id/ui/preset/combo.js @@ -10,9 +10,7 @@ iD.ui.preset.combo = function(field) { .attr('type', 'text') .attr('id', 'preset-input-' + field.id) .on('change', change) - .on('blur', change); - - selection + .on('blur', change) .call(combobox); if (field.options) { diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index f7ed663b2..a032c5142 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -121,8 +121,8 @@ iD.ui.Taglist = function(context, entity) { function bindTypeahead() { var geometry = entity.geometry(context.graph()), row = d3.select(this), - key = row.selectAll('.key-wrap'), - value = row.selectAll('.input-wrap-position'); + key = row.selectAll('input.key'), + value = row.selectAll('input.value'); function sort(value, data) { var sameletter = [], @@ -137,28 +137,26 @@ iD.ui.Taglist = function(context, entity) { return sameletter.concat(other); } - var keyinput = key.select('input'); key.call(d3.combobox() - .fetcher(function(_, __, callback) { + .fetcher(function(value, __, callback) { taginfo.keys({ debounce: true, geometry: geometry, - query: keyinput.property('value') + query: value }, function(err, data) { - if (!err) callback(sort(keyinput.property('value'), data)); + if (!err) callback(sort(value, data)); }); })); - var valueinput = value.select('input'); value.call(d3.combobox() - .fetcher(function(_, __, callback) { + .fetcher(function(value, __, callback) { taginfo.values({ debounce: true, - key: keyinput.property('value'), + key: key.property('value'), geometry: geometry, - query: valueinput.property('value') + query: value }, function(err, data) { - if (!err) callback(sort(valueinput.property('value'), data)); + if (!err) callback(sort(value, data)); }); })); } diff --git a/js/lib/d3.combobox.js b/js/lib/d3.combobox.js index 2f79a0848..2d42aa08c 100644 --- a/js/lib/d3.combobox.js +++ b/js/lib/d3.combobox.js @@ -1,7 +1,7 @@ d3.combobox = function() { var event = d3.dispatch('accept'), id = d3.combobox.id ++, - container, input, shown = false, data = []; + data = []; var fetcher = function(val, data, cb) { cb(data.filter(function(d) { @@ -12,20 +12,24 @@ d3.combobox = function() { })); }; - var typeahead = function(selection) { - var idx = -1; + var typeahead = function(input) { + var idx = -1, container, shown = false; - input = selection.select('input') - .classed('combobox-input', true); - - selection.append('div', input) - .attr('class', 'combobox-carat') - .on('mousedown', function() { - // prevent the form element from blurring. it blurs - // on mousedown - d3.event.stopPropagation(); - d3.event.preventDefault(); - mousedown(); + input + .classed('combobox-input', true) + .each(function() { + var parent = this.parentNode, + sibling = this.nextSibling; + d3.select(parent) + .insert('div', function() { return sibling; }) + .attr('class', 'combobox-carat') + .on('mousedown', function () { + // prevent the form element from blurring. it blurs + // on mousedown + d3.event.stopPropagation(); + d3.event.preventDefault(); + mousedown(); + }); }); function updateSize() { @@ -205,7 +209,7 @@ d3.combobox = function() { .order(); } - fetcher.apply(selection, [value, data, render]); + fetcher.apply(input, [value, data, render]); } // select the choice given as d From 4222256c78483a5ccb63620a5814f4a5ff1ab72e Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 11:59:02 -0700 Subject: [PATCH 37/69] Remove unnecessary wrapper --- js/id/ui/preset/address.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/js/id/ui/preset/address.js b/js/id/ui/preset/address.js index 3ee7df5aa..e78150923 100644 --- a/js/id/ui/preset/address.js +++ b/js/id/ui/preset/address.js @@ -61,10 +61,7 @@ iD.ui.preset.address = function(field, context) { .on('change', change) .call(close()); - var streetwrap = wrap.append('span') - .attr('class', 'input-wrap-position'); - - street = streetwrap.append('input') + street = wrap.append('input') .property('type', 'text') .attr('placeholder', field.t('placeholders.street')) .attr('class', 'addr-street') From e0c6d50598901d57a5d48b83fa6485406ca6e978 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 12:18:03 -0700 Subject: [PATCH 38/69] Fix YAML --- data/core.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/core.yaml b/data/core.yaml index dc67c4c94..de1a0e20f 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -107,7 +107,7 @@ en: 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." - view_on_osm: "View on OSM →"" + view_on_osm: "View on OSM →" zoom_in_edit: zoom in to edit the map logout: logout report_a_bug: report a bug From 770fe4b9aa1a0a8c1a7f60593c8cd334f0809fbc Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 12:18:43 -0700 Subject: [PATCH 39/69] Update translations --- data/locales.js | 470 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 459 insertions(+), 11 deletions(-) diff --git a/data/locales.js b/data/locales.js index 715093c84..c8f62cf4a 100644 --- a/data/locales.js +++ b/data/locales.js @@ -1590,6 +1590,7 @@ locale.zh = { "commit": { "title": "保存更改", "description_placeholder": "简要说明你的贡献", + "message_label": "提交说明", "upload_explanation": "{user}你上传的更新将会显示在所有使用OpenStreetMap数据的地图上。", "save": "保存", "cancel": "取消", @@ -1784,6 +1785,9 @@ locale.zh = { "maxspeed": { "label": "限速" }, + "name": { + "label": "名称" + }, "natural": { "label": "自然" }, @@ -1799,6 +1803,9 @@ locale.zh = { "oneway": { "label": "单行" }, + "oneway_yes": { + "label": "单行" + }, "opening_hours": { "label": "小时" }, @@ -2014,6 +2021,9 @@ locale.zh = { "barrier/bollard": { "name": "短柱" }, + "barrier/cattle_grid": { + "name": "家畜栅栏" + }, "barrier/city_wall": { "name": "城墙" }, @@ -2054,7 +2064,7 @@ locale.zh = { "name": "公路" }, "highway/bridleway": { - "name": "台阶", + "name": "马道", "terms": "楼梯" }, "highway/bus_stop": { @@ -2073,18 +2083,30 @@ locale.zh = { "highway/motorway": { "name": "高速公路" }, + "highway/motorway_link": { + "name": "高速公路匝道" + }, "highway/path": { "name": "路" }, "highway/primary": { "name": "主要道路" }, + "highway/primary_link": { + "name": "主要道路匝道" + }, "highway/residential": { "name": "住宅区道路" }, + "highway/road": { + "name": "未知道路" + }, "highway/secondary": { "name": "次要道路" }, + "highway/secondary_link": { + "name": "次要道路匝道" + }, "highway/service": { "name": "辅助道路" }, @@ -2095,6 +2117,9 @@ locale.zh = { "highway/tertiary": { "name": "三级道路" }, + "highway/tertiary_link": { + "name": "三级道路匝道" + }, "highway/track": { "name": "小路" }, @@ -2105,6 +2130,9 @@ locale.zh = { "highway/trunk": { "name": "干线道路" }, + "highway/trunk_link": { + "name": "干线道路匝道" + }, "highway/turning_circle": { "name": "环岛" }, @@ -2117,6 +2145,9 @@ locale.zh = { "historic/archaeological_site": { "name": "考古遗址" }, + "historic/boundary_stone": { + "name": "界桩" + }, "historic/castle": { "name": "城堡" }, @@ -2129,6 +2160,9 @@ locale.zh = { "historic/ruins": { "name": "废墟" }, + "historic/wayside_cross": { + "name": "路边的十字架" + }, "historic/wayside_shrine": { "name": "路边的神社" }, @@ -2315,7 +2349,7 @@ locale.zh = { "name": "村庄" }, "power": { - "name": "动力" + "name": "电力设施" }, "power/generator": { "name": "发电厂" @@ -2378,11 +2412,14 @@ locale.zh = { "shop/beverages": { "name": "饮料店" }, + "shop/bicycle": { + "name": "自行车店" + }, "shop/books": { "name": "书店" }, "shop/boutique": { - "name": "精品" + "name": "精品店" }, "shop/butcher": { "name": "肉贩" @@ -2397,7 +2434,7 @@ locale.zh = { "name": "汽车修理店" }, "shop/chemist": { - "name": "化学家" + "name": "药房" }, "shop/clothes": { "name": "服装店" @@ -2424,7 +2461,10 @@ locale.zh = { "name": "干洗店" }, "shop/electronics": { - "name": "鱼贩子" + "name": "家电店" + }, + "shop/fishmonger": { + "name": "鱼贩" }, "shop/florist": { "name": "花店" @@ -2433,7 +2473,7 @@ locale.zh = { "name": "家具店" }, "shop/garden_centre": { - "name": "花园中心" + "name": "花店" }, "shop/gift": { "name": "礼品店" @@ -2451,10 +2491,10 @@ locale.zh = { "name": "音响店" }, "shop/jewelry": { - "name": "珠宝商" + "name": "珠宝店" }, "shop/kiosk": { - "name": "亭" + "name": "报刊亭" }, "shop/laundry": { "name": "洗衣店" @@ -2475,7 +2515,7 @@ locale.zh = { "name": "书报" }, "shop/optician": { - "name": "配镜师" + "name": "眼镜店" }, "shop/outdoor": { "name": "户外店" @@ -2544,7 +2584,7 @@ locale.zh = { "name": "旅馆" }, "tourism/information": { - "name": "信息" + "name": "信息板" }, "tourism/motel": { "name": "汽车旅馆" @@ -6870,11 +6910,14 @@ locale.pt = { "inspector": { "no_documentation_combination": "Não há documentação disponível para esta combinação de tags", "no_documentation_key": "Não há documentação disponível para esta tecla", + "show_more": "Mostrar Mais", "new_tag": "Nova tag", "view_on_osm": "Ver em OSM", + "editing_feature": "Editando {feature}", "additional": "Tags adicionais", "choose": "O que está a adicionar?", - "results": "{n} resultados para {search}" + "results": "{n} resultados para {search}", + "reference": "Ver na Wiki do OpenStreetMap" }, "background": { "title": "Fundo", @@ -6884,6 +6927,7 @@ locale.pt = { "reset": "reiniciar" }, "restore": { + "heading": "Tem alterações por guardar", "description": "Tem alterações por guardar de uma prévia sessão de edição. Deseja restaurar estas alterações?", "restore": "Restaurar", "reset": "Descartar" @@ -6891,6 +6935,7 @@ locale.pt = { "save": { "title": "Guardar", "help": "Guardar alterações no OpenStreetMap, tornando-as visíveis a outros utilizadores.", + "no_changes": "Não há alterações para guardar.", "error": "Um erro ocorreu ao tentar guardar", "uploading": "Enviando alterações para OpenStreetMap.", "unsaved_changes": "Tem alterações por guardar" @@ -6901,6 +6946,7 @@ locale.pt = { }, "source_switch": { "live": "ao vivo", + "lose_changes": "Tem alterações por guardar. Mudando o servidor de mapas irá perdê-las. Tem a certeza que deseja mudar de servidores?", "dev": "dev" }, "tag_reference": { @@ -6919,6 +6965,403 @@ locale.pt = { "zoom": { "in": "Aproximar", "out": "Afastar" + }, + "imagery": { + "provided_by": "Imagens disponibilizadas por {source}" + }, + "gpx": { + "local_layer": "Ficheiro GPX local", + "drag_drop": "Arraste um ficheiro .gpx para a página" + }, + "help": { + "title": "Ajuda" + }, + "presets": { + "fields": { + "access": { + "label": "Acesso" + }, + "address": { + "label": "Morada", + "placeholders": { + "housename": "Nome de casa", + "number": "123", + "street": "Rua", + "city": "Cidade" + } + }, + "aeroway": { + "label": "Tipo" + }, + "amenity": { + "label": "Tipo" + }, + "atm": { + "label": "MB" + }, + "bicycle_parking": { + "label": "Tipo" + }, + "building": { + "label": "Edifício" + }, + "building_area": { + "label": "Edifício" + }, + "building_yes": { + "label": "Edifício" + }, + "capacity": { + "label": "Capacidade" + }, + "construction": { + "label": "Tipo" + }, + "crossing": { + "label": "Tipo" + }, + "cuisine": { + "label": "Cozinha" + }, + "denomination": { + "label": "Denominação" + }, + "denotation": { + "label": "Denotação" + }, + "elevation": { + "label": "Elevação" + }, + "emergency": { + "label": "Emergência" + }, + "entrance": { + "label": "Tipo" + }, + "fax": { + "label": "Fax" + }, + "fee": { + "label": "Tarifa" + }, + "highway": { + "label": "Tipo" + }, + "historic": { + "label": "Tipo" + }, + "internet_access": { + "label": "Acesso à Internet", + "options": { + "wlan": "Wifi" + } + }, + "maxspeed": { + "label": "Limite de Velocidade" + }, + "natural": { + "label": "Natural" + }, + "network": { + "label": "Rede" + }, + "note": { + "label": "Nota" + }, + "office": { + "label": "Tipo" + }, + "oneway": { + "label": "Sentido Único" + }, + "opening_hours": { + "label": "Horas" + }, + "operator": { + "label": "Operador" + }, + "phone": { + "label": "Telefone" + }, + "place": { + "label": "Tipo" + }, + "railway": { + "label": "Tipo" + }, + "religion": { + "label": "Religião", + "options": { + "christian": "Cristão", + "muslim": "Muçulmano", + "buddhist": "Budista", + "jewish": "Judeu" + } + }, + "shelter": { + "label": "Abrigo" + }, + "shop": { + "label": "Tipo" + }, + "source": { + "label": "Fonte" + }, + "sport": { + "label": "Desporto" + }, + "surface": { + "label": "Superfície" + }, + "tourism": { + "label": "Tipo" + }, + "water": { + "label": "Tipo" + }, + "waterway": { + "label": "Tipo" + }, + "website": { + "label": "Website" + }, + "wetland": { + "label": "Tipo" + }, + "wikipedia": { + "label": "Wikipedia" + }, + "wood": { + "label": "Tipo" + } + }, + "presets": { + "aeroway/aerodrome": { + "name": "Aeroporto" + }, + "amenity": { + "name": "Amenidade" + }, + "amenity/bank": { + "name": "Banco" + }, + "amenity/bar": { + "name": "Bar" + }, + "amenity/bench": { + "name": "Banco" + }, + "amenity/bicycle_parking": { + "name": "Parque de Bicicletas" + }, + "amenity/bicycle_rental": { + "name": "Aluguer de Bicicletas" + }, + "amenity/cafe": { + "name": "Café" + }, + "amenity/cinema": { + "name": "Cinema" + }, + "amenity/fire_station": { + "name": "Quartel de Bombeiros" + }, + "amenity/grave_yard": { + "name": "Cemitério" + }, + "amenity/hospital": { + "name": "Hospital" + }, + "amenity/library": { + "name": "Biblioteca" + }, + "amenity/parking": { + "name": "Estacionamento" + }, + "amenity/pharmacy": { + "name": "Farmácia" + }, + "amenity/place_of_worship": { + "name": "Local de Oração" + }, + "amenity/place_of_worship/christian": { + "name": "Igreja" + }, + "amenity/place_of_worship/jewish": { + "name": "Sinagoga" + }, + "amenity/place_of_worship/muslim": { + "name": "Mesquita" + }, + "amenity/police": { + "name": "Polícia" + }, + "amenity/post_box": { + "name": "Caixa de Correio" + }, + "amenity/post_office": { + "name": "Estação de Correios" + }, + "amenity/pub": { + "name": "Bar" + }, + "amenity/restaurant": { + "name": "Restaurante" + }, + "amenity/school": { + "name": "Escola" + }, + "amenity/telephone": { + "name": "Telefone" + }, + "amenity/toilets": { + "name": "Casas de Banho" + }, + "amenity/townhall": { + "name": "Câmara Municipal" + }, + "amenity/university": { + "name": "Universidade" + }, + "building": { + "name": "Edifício" + }, + "entrance": { + "name": "Entrada" + }, + "highway": { + "name": "Autoestrada" + }, + "highway/bus_stop": { + "name": "Paragem de Autocarro" + }, + "highway/crossing": { + "name": "Passadeira" + }, + "highway/cycleway": { + "name": "Ciclovia" + }, + "highway/primary": { + "name": "Estrada Principal" + }, + "highway/residential": { + "name": "Estrada Residencial" + }, + "highway/secondary": { + "name": "Estrada Secundária" + }, + "highway/service": { + "name": "Estrada de Serviço" + }, + "highway/steps": { + "name": "Passos" + }, + "highway/track": { + "name": "Pista" + }, + "landuse/cemetery": { + "name": "Cemitério" + }, + "landuse/commercial": { + "name": "Comercial" + }, + "landuse/construction": { + "name": "Construção" + }, + "landuse/farm": { + "name": "Quinta" + }, + "landuse/farmyard": { + "name": "Quintal" + }, + "landuse/forest": { + "name": "Floresta" + }, + "landuse/grass": { + "name": "Relva" + }, + "landuse/industrial": { + "name": "Industrial" + }, + "leisure/golf_course": { + "name": "Campo de Golf" + }, + "leisure/park": { + "name": "Parque" + }, + "leisure/pitch": { + "name": "Campo de Desporto" + }, + "leisure/pitch/tennis": { + "name": "Campo de Ténis" + }, + "man_made/water_tower": { + "name": "Torre de Água" + }, + "natural": { + "name": "Natural" + }, + "natural/bay": { + "name": "Baía" + }, + "natural/beach": { + "name": "Praia" + }, + "natural/cliff": { + "name": "Penhasco" + }, + "natural/coastline": { + "name": "Linha Costeira" + }, + "natural/water": { + "name": "Água" + }, + "natural/water/lake": { + "name": "Lago" + }, + "place/island": { + "name": "Ilha" + }, + "place/locality": { + "name": "Localidade" + }, + "place/village": { + "name": "Aldeia" + }, + "railway/subway": { + "name": "Metro" + }, + "railway/subway_entrance": { + "name": "Entrada de Metro" + }, + "shop": { + "name": "Loja" + }, + "shop/butcher": { + "name": "Talho" + }, + "shop/supermarket": { + "name": "Supermercado" + }, + "tourism": { + "name": "Turismo" + }, + "tourism/camp_site": { + "name": "Parque de Campismo" + }, + "tourism/hotel": { + "name": "Hotal" + }, + "tourism/museum": { + "name": "Musei" + }, + "waterway/canal": { + "name": "Canal" + }, + "waterway/river": { + "name": "Rio" + } + } } }; locale.ru = { @@ -9144,6 +9587,7 @@ locale.vi = { "reset": "đặt lại" }, "restore": { + "heading": "Bạn có thay đổi chưa lưu", "description": "Bạn có thay đổi chưa lưu từ một phiên làm việc trước đây. Bạn có muốn khôi phục các thay đổi này không?", "restore": "Khôi phục", "reset": "Đặt lại" @@ -9162,6 +9606,7 @@ locale.vi = { }, "source_switch": { "live": "thật", + "lose_changes": "Bạn có các thay đổi chưa lưu. Các thay đổi này sẽ bị mất khi bạn đổi máy chủ bản đồ. Bạn có chắc chắn muốn đổi máy chủ?", "dev": "thử" }, "tag_reference": { @@ -9188,6 +9633,9 @@ locale.vi = { "local_layer": "Tập tin GPX địa phương", "drag_drop": "Kéo thả một tập tin .gpx vào trang" }, + "help": { + "title": "Trợ giúp" + }, "presets": { "fields": { "access": { From 1ce383e17f67e8cf58da2d0904a9c233abd5a075 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 12:21:11 -0700 Subject: [PATCH 40/69] Skip buttons when tabbing --- js/id/ui/preset.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index f167b77b7..6b2eb9de5 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -78,6 +78,7 @@ iD.ui.preset = function(context, entity) { label.append('button') .attr('class', 'fr icon undo modified-icon') + .attr('tabindex', -1) .on('click', function(field) { var original = context.graph().base().entities[entity.id]; var t = {}; @@ -89,6 +90,7 @@ iD.ui.preset = function(context, entity) { label.append('button') .attr('class', 'fr icon inspect') + .attr('tabindex', -1) .on('click', function(field) { selection.selectAll('div.tag-help') .style('display', 'none'); From a7d4090c687478412b766b005ed5d279a6195fdc Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 15:26:59 -0400 Subject: [PATCH 41/69] Remove results from geocoder on hiding. Fixes #1112 --- js/id/ui/geocoder.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/js/id/ui/geocoder.js b/js/id/ui/geocoder.js index d41228ca2..9206ff53c 100644 --- a/js/id/ui/geocoder.js +++ b/js/id/ui/geocoder.js @@ -82,6 +82,10 @@ iD.ui.Geocoder = function(context) { gcForm.call(iD.ui.Toggle(show)); if (!show && !resultsList.classed('hide')) { resultsList.call(iD.ui.Toggle(show)); + // remove results so that they lose focus. if the user has + // tabbed into the list, then they will have focus still, + // even if they're hidden. + resultsList.selectAll('span').remove(); } if (show) inputNode.node().focus(); else inputNode.node().blur(); From 4e8ebf6bc47a6d1e9639ffc9fc079e2b806e3560 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 13:07:58 -0700 Subject: [PATCH 42/69] Use TagReference in preset grid --- js/id/ui/preset_grid.js | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index 1fd0adccd..c7a2b577e 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -203,46 +203,25 @@ iD.ui.PresetGrid = function(context, entity) { .style('max-height', '0px') .style('padding-top', '0px') .style('padding-bottom', '0px') + .style('opacity', '0') .transition() .duration(200) .style('padding-top', '10px') .style('padding-bottom', '20px') - .style('max-height', '200px'); + .style('max-height', '200px') + .style('opacity', '1'); presetinspect.append('h2') .text(d.name()); - var description = presetinspect.append('p'); - var link = presetinspect.append('a'); + var tag = {key: Object.keys(d.tags)[0]}; - var params = {}, - locale = iD.detect().locale.split('-')[0] || 'en'; - - params.key = Object.keys(d.tags)[0]; - if (d.tags[params.key] !== '*') { - params.value = d.tags[params.key]; + if (d.tags[tag.key] !== '*') { + tag.value = d.tags[tag.key]; } - taginfo.docs(params, function(err, data) { - if (err) return description.text(t('inspector.no_documentation_combination')); - var doc = _.find(data, function(d) { return d.lang === locale; }) || - _.find(data, function(d) { return d.lang === 'en'; }); - if (doc) { - description - .text(doc.description); - link - .attr('href', 'http://wiki.openstreetmap.org/wiki/' + - encodeURIComponent(doc.title)) - .text(t('inspector.reference')); - } - }); - - presetinspect.selectAll('*') - .style('opacity','0') - .transition() - .delay(100) - .duration(200) - .style('opacity','1'); + presetinspect.append('div') + .call(iD.ui.TagReference(entity, tag)); } if (selection.node() === grid.node()) { From 6eab86b366fe93005ce9a8f6631aa84a3c808269 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 13:12:21 -0700 Subject: [PATCH 43/69] Use both key and value for grid reference --- js/id/ui/tag_reference.js | 2 +- js/id/ui/taglist.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index d5d919d8b..baba9aed3 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -29,7 +29,7 @@ iD.ui.TagReference = function(entity, tag) { return function(selection) { selection.html(''); - taginfo.docs({key: tag.key}, function(err, docs) { + taginfo.docs(tag, function(err, docs) { if (!err && docs) { docs = findLocal(docs); } diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index a032c5142..a295e9d76 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -98,7 +98,7 @@ iD.ui.Taglist = function(context, entity) { d3.select(d3.select(this).node().parentNode) .select('div.tag-help') .style('display', 'block') - .call(iD.ui.TagReference(entity, tag)); + .call(iD.ui.TagReference(entity, {key: tag.key})); }) .append('span') .attr('class', 'icon inspect'); From 466c70979d47f788b86208123dfe5a4ec8b3bdb7 Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 15:33:13 -0400 Subject: [PATCH 44/69] positioning tweaks. --- css/app.css | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/css/app.css b/css/app.css index 1d193d849..e9fca1da5 100644 --- a/css/app.css +++ b/css/app.css @@ -805,9 +805,9 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .subgrid { - width: -webkit-calc(100% + 10px); - width: calc(100% - 10px); width: 100%; + width: -webkit-calc(100% + 10px); + width: calc(100% + 10px); margin-left: -10px; overflow: hidden; } @@ -913,6 +913,8 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} .tag-wrap .preset-icon-wrap div { height: 90px; width: 33.3333%; + width: -webkit-calc(33.3333% - 10px); + width: calc(33.3333% - 10px); margin: auto; border-radius: 4px; border: 1px solid #CCC; From fbdb03bf2d170da557516fdf9ef8493fbf71b212 Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 16:15:26 -0400 Subject: [PATCH 45/69] basic style pass on documentation pane. --- css/app.css | 61 +++++++++++++++++++--------------------- img/source/sprite.svg | 25 ++++++++-------- img/sprite.png | Bin 23023 -> 22783 bytes js/id/ui.js | 2 +- js/id/ui/help.js | 5 ++-- js/id/ui/preset_grid.js | 2 +- 6 files changed, 47 insertions(+), 48 deletions(-) diff --git a/css/app.css b/css/app.css index e9fca1da5..0e1db9628 100644 --- a/css/app.css +++ b/css/app.css @@ -62,7 +62,7 @@ h2 { font-size: 25px; line-height: 1.25; font-weight: bold; - margin-bottom: 10px; + margin-bottom: 20px; } h3:last-child, @@ -94,8 +94,13 @@ h5 { } p { + font-size: 15px; margin:0; - padding:0; + padding-bottom:20px; +} + +p:last-child { + padding-bottom: 0; } em { @@ -628,10 +633,6 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} top: 120px; } -.inspector-body::-webkit-scrollbar { - background: #fff; -} - .inspector-inner { padding: 20px; position: relative; @@ -1552,28 +1553,14 @@ div.combobox { } .help-wrap { - background:#f1f1f1; position: absolute; - height: 100%; top:60px; - padding-left:40px; - padding-top:10px; - padding-right:20px; - padding-bottom:150px; + bottom: 30px; + padding: 20px 20px 20px 50px; left: 0; overflow-y: scroll; } -.help-wrap .left-content { - background: #fff; - margin-right:130px; - border-radius: 4px; - padding:10px; -} - -.help-wrap .left-content .body p { - padding: 0 0 5px 0; -} .help-wrap .left-content .body p code { padding:2px 4px; @@ -1581,23 +1568,33 @@ div.combobox { } .help-wrap .toc { - width:120px; + /* This is two columns, 41.66666 x .4 = 16.6666 */ + width:40%; float:right; + margin-left: 20px; + margin-bottom: 20px; + padding-left: 5px } -.help-wrap .toc li { +.help-wrap .toc li a { + display: block; font-weight: bold; - border-bottom: 1px solid #ccc; - padding:2px; + border: 1px solid #CCC; + border-bottom: 0px; + padding:2px 5px; } -.help-wrap .toc a.selected { - color:#222; +.help-wrap .toc li a.selected { + background: #eef0ff; } -.help-wrap .toc li:last-child { - font-weight: bold; - border: 0; +.help-wrap .toc li:first-child a { + border-radius: 4px 4px 0 0; +} + +.help-wrap .toc li:last-child a { + border-bottom: 1px solid #CCC; + border-radius: 0 0 4px 4px } /* Map @@ -2186,7 +2183,7 @@ a.success-action.twitter:before { height: 20px; overflow: visible; width: 10px; - background: #EBEBEB; + background: white; border-left: 1px solid #DDD; } ::-webkit-scrollbar-button { diff --git a/img/source/sprite.svg b/img/source/sprite.svg index 8050c990f..5422cdaa1 100644 --- a/img/source/sprite.svg +++ b/img/source/sprite.svg @@ -13,7 +13,7 @@ height="320" id="svg12393" version="1.1" - inkscape:version="0.48.2 r9819" + inkscape:version="0.48.1 r9760" sodipodi:docname="sprite.svg" inkscape:export-filename="/Users/tmcw/src/iD/img/sprite.png" inkscape:export-xdpi="90" @@ -38,12 +38,12 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="27.487791" - inkscape:cx="474.16358" - inkscape:cy="307.60208" + inkscape:zoom="1" + inkscape:cx="473.6954" + inkscape:cy="307.27342" inkscape:document-units="px" inkscape:current-layer="layer12" - showgrid="true" + showgrid="false" inkscape:window-width="1483" inkscape:window-height="804" inkscape:window-x="131" @@ -201,6 +201,10 @@ orientation="1,0" position="460,310" id="guide6106" /> + @@ -210,7 +214,7 @@ image/svg+xml - + @@ -2069,10 +2073,9 @@ inkscape:export-ydpi="90" /> + style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="M 465 4 L 462 6 L 462 16 L 463 17 L 468 17 L 469 18 L 471 18 L 472 17 L 477 17 L 478 16 L 478 6 L 475 4 L 473 4 L 470 6 L 467 4 L 465 4 z M 464 8 L 468 8 L 468 9 L 464 9 L 464 8 z M 472 8 L 476 8 L 476 9 L 472 9 L 472 8.40625 L 472 8 z M 464 10 L 468 10 L 468 11 L 464 11 L 464 10 z M 472 10 L 476 10 L 476 11 L 472 11 L 472 10 z M 464 12 L 468 12 L 468 13 L 464 13 L 464 12 z M 472 12 L 476 12 L 476 13 L 472 13 L 472 12 z " + transform="translate(25,-3.0624999e-6)" + id="path3363" /> diff --git a/img/sprite.png b/img/sprite.png index 171433ed27fc6ee056764411e94410fdde8617d0..675efeb4519f9c669d497da978f35ab6ad6f84dc 100644 GIT binary patch literal 22783 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 X`bXa8$tXY500000NkvXXu0mjf@LPbz literal 23023 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 Date: Mon, 25 Mar 2013 16:16:26 -0400 Subject: [PATCH 46/69] padding tweak. --- css/app.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/app.css b/css/app.css index 0e1db9628..303c26855 100644 --- a/css/app.css +++ b/css/app.css @@ -1581,7 +1581,7 @@ div.combobox { font-weight: bold; border: 1px solid #CCC; border-bottom: 0px; - padding:2px 5px; + padding: 5px; } .help-wrap .toc li a.selected { From 73d78132230393f9c630d2d4484adc91ce52058c Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 16:30:33 -0400 Subject: [PATCH 47/69] condense text for the bottom bar --- data/core.yaml | 6 ++---- data/locales.js | 7 ++----- js/id/ui/attribution.js | 5 ++--- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/data/core.yaml b/data/core.yaml index de1a0e20f..a031ad0b6 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -123,8 +123,8 @@ en: deleted: Deleted created: Created contributors: - list: "Viewing contributions by {users}" - truncated_list: "Viewing contributions by {users} and {count} others" + list: "Contributed by {users}" + truncated_list: "Contributed by {users} and {count} others" geocoder: title: Find a place placeholder: Find a place @@ -182,8 +182,6 @@ en: zoom: in: Zoom In out: Zoom Out - imagery: - provided_by: "Imagery provided by {source}" gpx: local_layer: "Local GPX file" drag_drop: "Drag and drop a .gpx file on the page" diff --git a/data/locales.js b/data/locales.js index c8f62cf4a..cc1170352 100644 --- a/data/locales.js +++ b/data/locales.js @@ -156,8 +156,8 @@ locale.en = { "created": "Created" }, "contributors": { - "list": "Viewing contributions by {users}", - "truncated_list": "Viewing contributions by {users} and {count} others" + "list": "Contributed by {users}", + "truncated_list": "Contributed by {users} and {count} others" }, "geocoder": { "title": "Find a place", @@ -227,9 +227,6 @@ locale.en = { "in": "Zoom In", "out": "Zoom Out" }, - "imagery": { - "provided_by": "Imagery provided by {source}" - }, "gpx": { "local_layer": "Local GPX file", "drag_drop": "Drag and drop a .gpx file on the page" diff --git a/js/id/ui/attribution.js b/js/id/ui/attribution.js index f06b04972..9c4ecb7a7 100644 --- a/js/id/ui/attribution.js +++ b/js/id/ui/attribution.js @@ -16,14 +16,13 @@ iD.ui.Attribution = function(context) { source = ''; } - var desc = t('imagery.provided_by', {source: source}); if (d.data.terms_url) { provided_by.append('a') .attr('href', d.data.terms_url) .attr('target', '_blank') - .html(desc); + .html(source); } else { - provided_by.text(desc); + provided_by.text(source); } var copyright = d.copyrightNotices(context.map().zoom(), context.map().extent()); From e9d1965c59cbe2112ead8e83d5d895c1c9d4f001 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 16:42:26 -0400 Subject: [PATCH 48/69] Imagery provider info as an overlay --- css/app.css | 9 +++++++++ js/id/ui.js | 10 +++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/css/app.css b/css/app.css index 303c26855..7f87dd180 100644 --- a/css/app.css +++ b/css/app.css @@ -1667,6 +1667,15 @@ div.combobox { color:#fff; } +/* Attribution overlay */ +.attribution { + position: absolute; + bottom: 35px; + right:10px; + color:#888; + font-size:10px; +} + .source-image { height:20px; vertical-align:top; diff --git a/js/id/ui.js b/js/id/ui.js index 9aba62ad3..bdf7eb2c5 100644 --- a/js/id/ui.js +++ b/js/id/ui.js @@ -80,6 +80,11 @@ iD.ui = function(context) { .style('display', 'none') .attr('class', 'inspector-wrap fr content col4'); + container.append('idv') + .attr('class', 'attribution') + .attr('tabindex', -1) + .call(iD.ui.Attribution(context)); + var about = container.append('div') .attr('class','col12 about-block fillD'); @@ -105,11 +110,6 @@ iD.ui = function(context) { .attr('href', 'https://help.openstreetmap.org/questions/ask/') .text(t('report_a_bug')); - linkList.append('li') - .attr('class', 'attribution') - .attr('tabindex', -1) - .call(iD.ui.Attribution(context)); - linkList.append('li') .attr('class', 'source-switch') .call(iD.ui.SourceSwitch(context)); From 57ae429be4a64578cd11ad6c211d11a5e7debaf3 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 17:05:29 -0400 Subject: [PATCH 49/69] Add inspector docs --- Makefile | 2 +- data/doc.json | 6 +++++- data/doc/07-inspector.md | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 data/doc/07-inspector.md diff --git a/Makefile b/Makefile index 4ba02a7b0..8b7691e77 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ all: \ iD.js \ iD.min.js -DATA_FILES = $(shell find data -type f -name '*.json') +DATA_FILES = $(shell find data -type f -name '*.json' -o -name '*.md') data/data.js: $(DATA_FILES) node build.js diff --git a/data/doc.json b/data/doc.json index 4f3ee1e77..0ef43986f 100644 --- a/data/doc.json +++ b/data/doc.json @@ -4,7 +4,7 @@ "title": "Help" }, { - "html": "

This editor is designed to work primarily online, and you're accessing\nit through a website right now.

\n

When you create changes, like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.

\n

Click 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.

\n

Clicking 'Save' again, on the new dialog, will post the changes\nto OpenStreetMap.org, where they are visible\nto all other users and available for others to build and improve upon.

\n

If you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.

\n", + "html": "

This editor is designed to work primarily online, and you're accessing\nit through a website right now.

\n

Selecting Features

\n

To select a map feature, like a road or point of interest, simply single-click\non it on the map. This will highlight the selected feature, show a panel of\ndetails, and also show a menu of things you can do with the feature.

\n

Multiple features can be selected by holding the 'Shift' key, clicking,\nand dragging on the map. This will select all features within the box\nthat's drawn, and you can do certain 'batch operations' on all features.

\n

Saving Edits

\n

When you create changes, like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.

\n

Click 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.

\n

Clicking 'Save' again, on the new dialog, will post the changes\nto OpenStreetMap.org, where they are visible\nto all other users and available for others to build and improve upon.

\n

If you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.

\n", "title": "Editing & Saving" }, { @@ -23,6 +23,10 @@ "html": "

Addresses are some of the most useful information for the map.

\n

Although addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.

\n

You can add address information to places mapped as building outlines as well\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.

\n", "title": "Addresses" }, + { + "html": "

The inspector is the user interface element on the right-hand side of the\npage that appears when an element is selected and allows to edit its details.

\n

Selecting a Preset

\n

The inspector has two modes: the first allows you to pick a preset, or\npredetermined selection of forms and tags.

\n

Click the 'i' in the bottom-right-hand corner of a preset option to learn\nmore about it. Click a preset to choose it.

\n

Using Forms and Editing Tags

\n

The second allows you to edit the\nattributes of a map element using those forms and tags.

\n

Below the forms you see, you can click icons to add more easy-to-use forms,\nlike Wikipedia information, wheelchair\naccess, and more.

\n

At the bottom of the inspector, click 'Additional tags' to add arbitrary\nother tags to the element. Taginfo is a\ngreat resource for learn more about popular tag combinations.

\n

Changes you make in the inspector are automatically applied to the map.\nYou can undo them at any time by clicking the Undo button.

\n

Closing the Inspector

\n

You can close the inspector by either clicking the close button in the top-right,\npressing the 'Escape' key, or clicking on the map.

\n", + "title": "Using the Inspector" + }, { "html": "

OpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.

\n

Selecting

\n

You can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.

\n

Modifying

\n

Sometimes buildings are incorrectly placed or have incorrect tags.

\n

To move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.

\n

To fix the specific shape of a building, click and drag the points that form\nits border into better places.

\n

Creating

\n

One of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to map a building as a shape whenever possible, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.

\n

Start drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first point drawn to close the shape.

\n

Deleting

\n

If a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.

\n

You can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.

\n", "title": "Buildings" diff --git a/data/doc/07-inspector.md b/data/doc/07-inspector.md new file mode 100644 index 000000000..687468e72 --- /dev/null +++ b/data/doc/07-inspector.md @@ -0,0 +1,33 @@ +# Using the Inspector + +The inspector is the user interface element on the right-hand side of the +page that appears when an element is selected and allows to edit its details. + +### Selecting a Preset + +The inspector has two modes: the first allows you to pick a preset, or +predetermined selection of forms and tags. + +Click the 'i' in the bottom-right-hand corner of a preset option to learn +more about it. Click a preset to choose it. + +### Using Forms and Editing Tags + +The second allows you to edit the +attributes of a map element using those forms and tags. + +Below the forms you see, you can click icons to add more easy-to-use forms, +like [Wikipedia](http://www.wikipedia.org/) information, wheelchair +access, and more. + +At the bottom of the inspector, click 'Additional tags' to add arbitrary +other tags to the element. [Taginfo](http://taginfo.openstreetmap.org/) is a +great resource for learn more about popular tag combinations. + +Changes you make in the inspector are automatically applied to the map. +You can undo them at any time by clicking the Undo button. + +### Closing the Inspector + +You can close the inspector by either clicking the close button in the top-right, +pressing the 'Escape' key, or clicking on the map. From 79f27c340feeddf5e78cf13e7cc712d746eaf477 Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 16:29:30 -0400 Subject: [PATCH 50/69] more specific cursor selectors. --- css/app.css | 3 +-- css/map.css | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/css/app.css b/css/app.css index 7f87dd180..c98b6d175 100644 --- a/css/app.css +++ b/css/app.css @@ -1544,7 +1544,7 @@ div.combobox { /* Help */ .help-control { - top:270px; + top: 270px; } .help-control button { @@ -1561,7 +1561,6 @@ div.combobox { overflow-y: scroll; } - .help-wrap .left-content .body p code { padding:2px 4px; background:#eee; diff --git a/css/map.css b/css/map.css index 02989ea77..e8032f733 100644 --- a/css/map.css +++ b/css/map.css @@ -856,11 +856,11 @@ text.point { cursor: url(../img/cursor-select-remove.png), pointer; } -.point:active, -.vertex:active, -.line:active, -.area:active, -.midpoint:active, +#map .point:active, +#map .vertex:active, +#map .line:active, +#map .area:active, +#map .midpoint:active, .mode-select .selected { cursor: url(../img/cursor-select-acting.png), pointer; } From 7ebfbe0dbe6c75a95b841d4eab5dab79c2833ace Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 17:18:56 -0400 Subject: [PATCH 51/69] better ref icon. --- img/source/sprite.svg | 36 +++++++++++++++++++++++------------- img/sprite.png | Bin 22783 -> 22721 bytes 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/img/source/sprite.svg b/img/source/sprite.svg index 5422cdaa1..0852ffb8e 100644 --- a/img/source/sprite.svg +++ b/img/source/sprite.svg @@ -15,7 +15,7 @@ version="1.1" inkscape:version="0.48.1 r9760" sodipodi:docname="sprite.svg" - inkscape:export-filename="/Users/tmcw/src/iD/img/sprite.png" + inkscape:export-filename="/Users/saman/work_repos/iD/img/sprite.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> image/svg+xml - +
@@ -227,8 +227,8 @@ @@ -2073,9 +2073,19 @@ inkscape:export-ydpi="90" /> + style="color:#000000;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + d="m 489,-36.000003 0,2 -2,0 0,8 1,1 7,3 7,-3 1,-1 0,-8 -2,0 0,-2 -2,0 -4,3 -4,-3 z" + id="path3363" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccccccccc" /> + + + diff --git a/img/sprite.png b/img/sprite.png index 675efeb4519f9c669d497da978f35ab6ad6f84dc..781926dcb5c8a37a925ce3c0339aed213d70e431 100644 GIT binary patch literal 22721 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 AGXMYp literal 22783 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 X`bXa8$tXY500000NkvXXu0mjf@LPbz From da138a7b6c378690a45f70fe0528291b438b6c65 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 17:19:28 -0400 Subject: [PATCH 52/69] Update docs, fix strict mode --- data/doc.json | 2 +- data/doc/01-editing-saving.md | 4 ++-- js/id/ui/help.js | 17 +++++++++-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/data/doc.json b/data/doc.json index 0ef43986f..b00025eaf 100644 --- a/data/doc.json +++ b/data/doc.json @@ -4,7 +4,7 @@ "title": "Help" }, { - "html": "

This editor is designed to work primarily online, and you're accessing\nit through a website right now.

\n

Selecting Features

\n

To select a map feature, like a road or point of interest, simply single-click\non it on the map. This will highlight the selected feature, show a panel of\ndetails, and also show a menu of things you can do with the feature.

\n

Multiple features can be selected by holding the 'Shift' key, clicking,\nand dragging on the map. This will select all features within the box\nthat's drawn, and you can do certain 'batch operations' on all features.

\n

Saving Edits

\n

When you create changes, like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.

\n

Click 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.

\n

Clicking 'Save' again, on the new dialog, will post the changes\nto OpenStreetMap.org, where they are visible\nto all other users and available for others to build and improve upon.

\n

If you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.

\n", + "html": "

This editor is designed to work primarily online, and you're accessing\nit through a website right now.

\n

Selecting Features

\n

To select a map feature, like a road or point of interest, simply single-click\non it on the map. This will highlight the selected feature, show a panel of\ndetails, and also show a menu of things you can do with the feature.

\n

Multiple features can be selected by holding the 'Shift' key, clicking,\nand dragging on the map. This will select all features within the box\nthat's drawn, and you can do certain 'batch operations' on all features.

\n

Saving Edits

\n

When you create changes, like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.

\n

Click 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.

\n

Clicking 'Save' again, on the new dialog, will post the changes\nto OpenStreetMap.org, where they are visible\nto all other users and available for others to build and improve upon.

\n

If you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.

\n", "title": "Editing & Saving" }, { diff --git a/data/doc/01-editing-saving.md b/data/doc/01-editing-saving.md index f8f4d027a..5f9a8c38a 100644 --- a/data/doc/01-editing-saving.md +++ b/data/doc/01-editing-saving.md @@ -3,7 +3,7 @@ This editor is designed to work primarily online, and you're accessing it through a website right now. -## Selecting Features +### Selecting Features To select a map feature, like a road or point of interest, simply single-click on it on the map. This will highlight the selected feature, show a panel of @@ -13,7 +13,7 @@ Multiple features can be selected by holding the 'Shift' key, clicking, and dragging on the map. This will select all features within the box that's drawn, and you can do certain 'batch operations' on all features. -## Saving Edits +### Saving Edits When you create changes, like editing roads, buildings, and places, these are stored locally until you save them to the server. Don't worry if you make diff --git a/js/id/ui/help.js b/js/id/ui/help.js index 9ec5db702..6a4c1af3f 100644 --- a/js/id/ui/help.js +++ b/js/id/ui/help.js @@ -49,19 +49,20 @@ iD.ui.Help = function(context) { setVisible(!button.classed('active')); } + function blockClick() { + pane.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); + selection.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); + } + function setVisible(show) { if (show !== shown) { button.classed('active', show); shown = show; if (show) { - function blockClick() { - pane.on('mousedown.help-inside', function() { - return d3.event.stopPropagation(); - }); - selection.on('mousedown.help-inside', function() { - return d3.event.stopPropagation(); - }); - } pane.style('display', 'block') .style('left', '-500px') .transition() From b54e7255b629b55b3bc714bc6800dd1ab5343157 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 17:33:53 -0400 Subject: [PATCH 53/69] Fix docs instead of doc in data --- build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.js b/build.js index 537550852..823447871 100644 --- a/build.js +++ b/build.js @@ -110,7 +110,7 @@ fs.writeFileSync('data/data.js', 'iD.data = ' + stringify({ discarded: r('discarded.json'), keys: r('keys.json'), imagery: r('imagery.json'), - docs: r('doc.json'), + doc: r('doc.json'), presets: { presets: rp('presets.json'), defaults: rp('defaults.json'), From 1741d32b2444875340359b327efcff5202505fec Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Mon, 25 Mar 2013 17:53:47 -0400 Subject: [PATCH 54/69] Add documentation howto in CONTRIBUTING.md --- CONTRIBUTING.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 38d58fa61..7c106eb6c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -72,6 +72,21 @@ Transiflex, will automatically detect the change. Use `make` to build the translations with the local changes. `make translate` can be used to pull the latest translations from Transifex. +## Contributing Documentation + +Documentation is maintained as a series of [Markdown](http://daringfireball.net/projects/markdown/) +documents in the `data/doc/` path. The first line of each page of documentation +should be of the form + + # GPS + +This will be used for navigation and as its title in iD. Documentation is +shown in alphabetical order, so most documentation is prefixed with `02-` and +so on in order to keep it in a certain order. + +To add a new page of documentation, simply create a new Markdown file in +`data/doc` in the same format as the rest. + ## Javascript We use the [Airbnb style for Javascript](https://github.com/airbnb/javascript) with From 22463ea78584678e11cbea3d957fd25a21cb65bc Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 18:02:55 -0400 Subject: [PATCH 55/69] starting to work on tag reference + transitions for preset forms. --- css/app.css | 34 ++++++++++++++++++++++++---------- js/id/ui/preset.js | 11 +++++++++-- js/id/ui/preset_grid.js | 2 +- js/id/ui/tag_reference.js | 2 +- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/css/app.css b/css/app.css index c98b6d175..fa9c89059 100644 --- a/css/app.css +++ b/css/app.css @@ -94,9 +94,9 @@ h5 { } p { - font-size: 15px; + font-size: 12px; margin:0; - padding-bottom:20px; + padding:0; } p:last-child { @@ -309,7 +309,6 @@ a.hide { right: 0; } - /* Buttons */ button { @@ -569,7 +568,6 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} border-radius: 0; } - /* Header for modals / panes ------------------------------------------------------- */ @@ -707,12 +705,12 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} background: #ececec; } -.grid-entry:hover .preset-help { +.grid-entry:hover .tag-reference-button { display: block; border-radius: 0; } -.grid-entry .preset-help { +.grid-entry .tag-reference-button { display: none; position: absolute; bottom: 0; @@ -722,7 +720,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} background: rgba(0,0,0,.5); } -.grid-entry .preset-help:hover { +.grid-entry .tag-reference-button:hover { background: rgba(0,0,0,.9); } @@ -817,7 +815,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} padding: 10px 0px 0px 10px; border: 1px solid #CCC; margin-top: 0px; - border-radius: 4px; + border-radius: 8px; } .subgrid .arrow { @@ -934,8 +932,9 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} top: 15px; } -.form-field.inspector-inner { - padding-bottom: 0; +.inspector-preset .form-field { + padding-left: 20px; + padding-right: 20px; } .form-field .modified-icon { @@ -1298,6 +1297,16 @@ div.combobox { display: none; } +/* Tag reference */ + +img.wiki-image { + float: left; + max-width: 33.3333%; + margin-right: 20px; + max-height: 200px; + border-radius: 4px; +} + /* Map Controls */ .map-control { @@ -1561,6 +1570,11 @@ div.combobox { overflow-y: scroll; } +.help-wrap p { + font-size: 15px; + margin-bottom: 20px; +} + .help-wrap .left-content .body p code { padding:2px 4px; background:#eee; diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 6b2eb9de5..cc22a8200 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -68,7 +68,7 @@ iD.ui.preset = function(context, entity) { .append('div') .style('opacity', 0) .attr('class', function(field) { - return 'form-field form-field-' + field.id + ' fillL inspector-inner col12'; + return 'form-field form-field-' + field.id + ' fillL col12'; }); var label = sections.append('label') @@ -102,7 +102,14 @@ iD.ui.preset = function(context, entity) { }); sections.transition() - .style('opacity', 1); + .style('max-height', '0px') + .style('padding-top', '0px') + .style('opacity', '0') + .transition() + .duration(200) + .style('padding-top', '20px') + .style('max-height', '200px') + .style('opacity', '1'); sections.each(function(field) { var i = iD.ui.preset[field.type](field, context) diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index 989b947ff..89c592041 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -270,7 +270,7 @@ iD.ui.PresetGrid = function(context, entity) { }) .append('button') .attr('tabindex', -1) - .attr('class', 'preset-help') + .attr('class', 'tag-reference-button') .on('click', helpClick, selection) .append('span') .attr('class', 'icon inspect'); diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index baba9aed3..aae24195a 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -39,7 +39,7 @@ iD.ui.TagReference = function(entity, tag) { } var referenceBody = selection.append('div') - .attr('class','modal-section fillL2'); + .attr('class','tag-reference-wrap'); if (docs.image && docs.image.thumb_url_prefix) { referenceBody From f6d1abf2bfb2271ccf57f814907fde1737db9da2 Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 19:16:58 -0400 Subject: [PATCH 56/69] more work on tag reference. --- css/app.css | 2 -- js/id/ui/preset.js | 6 ++++-- js/id/ui/tag_editor.js | 2 +- js/id/ui/tag_reference.js | 3 +++ 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/css/app.css b/css/app.css index fa9c89059..0c71c09ad 100644 --- a/css/app.css +++ b/css/app.css @@ -2222,10 +2222,8 @@ a.success-action.twitter:before { } ::-webkit-scrollbar-track:hover { background-color: rgba(0,0,0,.05); - box-shadow: inset 1px 0 0 rgba(0,0,0,.1); } ::-webkit-scrollbar-track:horizontal:hover { - box-shadow: inset 0 1px 0 rgba(0,0,0,.1) } ::-webkit-scrollbar-track:active { background-color: rgba(0,0,0,.05); diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index cc22a8200..20da74569 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -89,7 +89,7 @@ iD.ui.preset = function(context, entity) { }); label.append('button') - .attr('class', 'fr icon inspect') + .attr('class', 'tag-reference-button') .attr('tabindex', -1) .on('click', function(field) { selection.selectAll('div.tag-help') @@ -99,7 +99,9 @@ iD.ui.preset = function(context, entity) { .select('div.tag-help') .style('display', 'block') .call(iD.ui.TagReference(entity, {key: field.key})); - }); + }) + .append('span') + .attr('class', 'icon inspect'); sections.transition() .style('max-height', '0px') diff --git a/js/id/ui/tag_editor.js b/js/id/ui/tag_editor.js index ef948b90e..e6559d784 100644 --- a/js/id/ui/tag_editor.js +++ b/js/id/ui/tag_editor.js @@ -50,7 +50,7 @@ iD.ui.TagEditor = function(context, entity) { .attr('class', 'tag-wrap inspector-body fillL2 inspector-body-' + geometry); editorwrap.append('div') - .attr('class', 'col12 inspector-inner fillL2 preset-icon-wrap') + .attr('class', 'col12 inspector-inner preset-icon-wrap') .append('div') .attr('class','fillL') .append('span') diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index aae24195a..0b20ab112 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -29,6 +29,8 @@ iD.ui.TagReference = function(entity, tag) { return function(selection) { selection.html(''); + selection.attr('class','cf'); + taginfo.docs(tag, function(err, docs) { if (!err && docs) { docs = findLocal(docs); @@ -57,6 +59,7 @@ iD.ui.TagReference = function(entity, tag) { .attr('target', '_blank') .attr('href', 'http://wiki.openstreetmap.org/wiki/' + docs.title) .text(t('inspector.reference')); + }); } }; From e43144c1ae30c1613beb50dd719908acbf9dda9c Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 13:14:43 -0700 Subject: [PATCH 57/69] Use transition remove shorthand --- js/id/ui/preset_grid.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index 89c592041..3d106107e 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -164,10 +164,7 @@ iD.ui.PresetGrid = function(context, entity) { .style('max-height', '0px') .style('padding-top', '0px') .style('padding-bottom', '0px') - .each('end', function() { - shown.remove(); - }); - + .remove(); if (shown.datum() === entity && shown.classed(klass)) return; shownIndex = Array.prototype.indexOf.call(shown.node().parentNode.childNodes, shown.node()); From 43ab6822622da533368822c31b3dfe47a2b4122d Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 16:01:05 -0700 Subject: [PATCH 58/69] Model preset field state with persistent objects --- js/id/ui/preset.js | 282 ++++++++++++++++++-------------- js/id/ui/preset/address.js | 4 + js/id/ui/preset/check.js | 4 + js/id/ui/preset/combo.js | 4 + js/id/ui/preset/defaultcheck.js | 4 + js/id/ui/preset/input.js | 4 + js/id/ui/preset/radio.js | 4 + js/id/ui/preset/textarea.js | 4 + js/id/ui/tag_editor.js | 3 +- 9 files changed, 189 insertions(+), 124 deletions(-) diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 20da74569..c755e0202 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -1,109 +1,104 @@ -iD.ui.preset = function(context, entity) { - var event = d3.dispatch('change', 'setTags', 'close'), - tags, - keys, - preset, +iD.ui.preset = function(context, entity, preset) { + var original = context.graph().base().entities[entity.id], + event = d3.dispatch('change', 'close'), + fields = [], + tags = {}, formwrap, formbuttonwrap; - function presets(selection) { - selection.html(''); + function UIField(field, show) { + field = _.clone(field); - keys = []; - formwrap = selection.append('div'); + field.input = iD.ui.preset[field.type](field, context) + .on('close', event.close) + .on('change', event.change); - var geometry = entity.geometry(context.graph()), - fields = preset.fields.filter(function(f) { - return f.matchGeometry(geometry); + if (field.type === 'address') { + field.input.entity(entity); + } + + field.keys = field.keys || [field.key]; + + field.show = show; + + field.shown = function() { + return field.id === 'name' || field.show || _.any(field.keys, function(key) { return !!tags[key]; }); + }; + + field.modified = function() { + return _.any(field.keys, function(key) { + return original ? tags[key] !== original.tags[key] : tags[key]; }); + }; - fields.unshift(context.presets().field('name')); - - draw(formwrap, fields); - - var wrap = selection.append('div') - .attr('class', 'col12 more-buttons inspector-inner'); - - formbuttonwrap = wrap.append('div') - .attr('class', 'col12 preset-input'); - - formbuttonwrap.selectAll('button') - .data(context.presets().universal().filter(notInForm)) - .enter() - .append('button') - .attr('class', 'preset-add-field') - .on('click', addForm) - .call(bootstrap.tooltip() - .placement('top') - .title(function(d) { return d.label(); })) - .append('span') - .attr('class', function(d) { return 'icon ' + d.icon; }); - - function notInForm(p) { - return preset.fields.indexOf(p) < 0; - } - - function addForm(d) { - var field = draw(formwrap, [d]); - - var input = field.selectAll('input, textarea').node(); - if (input) input.focus(); - - d3.select(this) - .style('opacity', 1) - .transition() - .style('opacity', 0) - .remove(); - - if (!wrap.selectAll('button').node()) { - wrap.remove(); - } - } + return field; } - function draw(selection, fields) { - var sections = selection.selectAll('div.form-field') - .data(fields, function(field) { return field.id; }) - .enter() - .append('div') + fields.push(UIField(context.presets().field('name'))); + + var geometry = entity.geometry(context.graph()); + preset.fields.forEach(function(field) { + if (field.matchGeometry(geometry)) { + fields.push(UIField(field, true)); + } + }); + + context.presets().universal().forEach(function(field) { + if (fields.indexOf(field) < 0) { + fields.push(UIField(field)); + } + }); + + function fieldKey(field) { + return field.id; + } + + function shown() { + return fields.filter(function(field) { return field.shown(); }); + } + + function notShown() { + return fields.filter(function(field) { return !field.shown(); }); + } + + function show(field) { + field.show = true; + render(); + field.input.focus(); + } + + function revert(field) { + var t = {}; + field.keys.forEach(function(key) { + t[key] = original ? original.tags[key] : undefined; + }); + event.change(t); + } + + function toggleReference(field) { + _.forEach(fields, function(other) { + if (other.id === field.id) { + other.showingReference = !other.showingReference; + } else { + other.showingReference = false; + } + }); + + render(); + } + + function render() { + var selection = formwrap.selectAll('.form-field') + .data(shown(), fieldKey); + + var enter = selection.enter() + .insert('div', '.more-buttons') .style('opacity', 0) .attr('class', function(field) { return 'form-field form-field-' + field.id + ' fillL col12'; }); - var label = sections.append('label') - .attr('class', 'form-label') - .attr('for', function(field) { return 'preset-input-' + field.id; }) - .text(function(field) { return field.label(); }); - - label.append('button') - .attr('class', 'fr icon undo modified-icon') - .attr('tabindex', -1) - .on('click', function(field) { - var original = context.graph().base().entities[entity.id]; - var t = {}; - (field.keys || [field.key]).forEach(function(key) { - t[key] = original ? original.tags[key] : undefined; - }); - event.change(t); - }); - - label.append('button') - .attr('class', 'tag-reference-button') - .attr('tabindex', -1) - .on('click', function(field) { - selection.selectAll('div.tag-help') - .style('display', 'none'); - - d3.select(d3.select(this).node().parentNode.parentNode) - .select('div.tag-help') - .style('display', 'block') - .call(iD.ui.TagReference(entity, {key: field.key})); - }) - .append('span') - .attr('class', 'icon inspect'); - - sections.transition() + enter.transition() .style('max-height', '0px') .style('padding-top', '0px') .style('opacity', '0') @@ -113,30 +108,83 @@ iD.ui.preset = function(context, entity) { .style('max-height', '200px') .style('opacity', '1'); - sections.each(function(field) { - var i = iD.ui.preset[field.type](field, context) - .on('close', event.close) - .on('change', event.change); + var label = enter.append('label') + .attr('class', 'form-label') + .attr('for', function(field) { return 'preset-input-' + field.id; }) + .text(function(field) { return field.label(); }); - event.on('setTags.' + field.id, function(tags) { - i.tags(_.clone(tags)); - }); + label.append('button') + .attr('class', 'fr icon undo modified-icon') + .attr('tabindex', -1) + .on('click', revert); - if (field.type === 'address') i.entity(entity); + label.append('button') + .attr('class', 'tag-reference-button') + .attr('tabindex', -1) + .on('click', toggleReference) + .append('span') + .attr('class', 'icon inspect'); - keys = keys.concat(field.key ? [field.key] : field.keys); - - d3.select(this).call(i); + enter.each(function(field) { + d3.select(this).call(field.input); }); - sections.append('div') + enter.append('div') .attr('class', 'tag-help'); - return sections; + selection + .classed('modified', function(field) { + return field.modified(); + }); + + selection.selectAll('.tag-help') + .style('display', function(field) { + return field.showingReference ? 'block' : 'none'; + }) + .each(function(field) { + if (field.showingReference) { + d3.select(this) + .call(iD.ui.TagReference(entity, {key: field.key})); + } + }); + + selection.exit() + .remove(); + + var addFields = formbuttonwrap.selectAll('.preset-add-field') + .data(notShown(), fieldKey); + + addFields.enter() + .append('button') + .attr('class', 'preset-add-field') + .on('click', show) + .call(bootstrap.tooltip() + .placement('top') + .title(function(d) { return d.label(); })) + .append('span') + .attr('class', function(d) { return 'icon ' + d.icon; }); + + addFields.exit() + .transition() + .style('opacity', 0) + .remove(); + + return selection; + } + + function presets(selection) { + selection.html(''); + + formwrap = selection; + + formbuttonwrap = selection.append('div') + .attr('class', 'col12 more-buttons inspector-inner'); + + render(); } presets.rendered = function() { - return keys; + return _.flatten(shown().map(function(field) { return field.keys; })); }; presets.preset = function(_) { @@ -145,27 +193,17 @@ iD.ui.preset = function(context, entity) { return presets; }; - presets.change = function(t) { - tags = t; + presets.change = function(_) { + tags = _; - function haveKey(k) { return k && !!tags[k]; } - - formbuttonwrap.selectAll('button').each(function(p) { - if (haveKey(p.key) || _.any(p.keys, haveKey)) { - draw(formwrap, [p]); - d3.select(this).remove(); + fields.forEach(function(field) { + if (field.shown()) { + field.input.tags(_); } }); - formwrap.selectAll('div.form-field') - .classed('modified', function(d) { - var original = context.graph().base().entities[entity.id]; - return _.any(d.keys || [d.key], function(key) { - return original ? tags[key] !== original.tags[key] : tags[key]; - }); - }); + render(); - event.setTags(tags); return presets; }; diff --git a/js/id/ui/preset/address.js b/js/id/ui/preset/address.js index e78150923..0abf3efc3 100644 --- a/js/id/ui/preset/address.js +++ b/js/id/ui/preset/address.js @@ -101,5 +101,9 @@ iD.ui.preset.address = function(field, context) { return address; }; + address.focus = function() { + housename.node().focus(); + }; + return d3.rebind(address, event, 'on'); }; diff --git a/js/id/ui/preset/check.js b/js/id/ui/preset/check.js index ae28dda84..19f9031d0 100644 --- a/js/id/ui/preset/check.js +++ b/js/id/ui/preset/check.js @@ -40,5 +40,9 @@ iD.ui.preset.check = function(field) { label.classed('set', !!value); }; + check.focus = function() { + box.node().focus(); + }; + return d3.rebind(check, event, 'on'); }; diff --git a/js/id/ui/preset/combo.js b/js/id/ui/preset/combo.js index e60a955f5..6ac73195d 100644 --- a/js/id/ui/preset/combo.js +++ b/js/id/ui/preset/combo.js @@ -48,5 +48,9 @@ iD.ui.preset.combo = function(field) { input.property('value', tags[field.key] || ''); }; + combo.focus = function() { + input.node().focus(); + }; + return d3.rebind(combo, event, 'on'); }; diff --git a/js/id/ui/preset/defaultcheck.js b/js/id/ui/preset/defaultcheck.js index fa5f59a38..cf3c5d589 100644 --- a/js/id/ui/preset/defaultcheck.js +++ b/js/id/ui/preset/defaultcheck.js @@ -19,5 +19,9 @@ iD.ui.preset.defaultcheck = function(field) { input.property('checked', !!tags[field.key] && tags[field.key] !== 'no'); }; + check.focus = function() { + input.node().focus(); + }; + return d3.rebind(check, event, 'on'); }; diff --git a/js/id/ui/preset/input.js b/js/id/ui/preset/input.js index 35db78e1a..7111f8fdc 100644 --- a/js/id/ui/preset/input.js +++ b/js/id/ui/preset/input.js @@ -52,5 +52,9 @@ iD.ui.preset.url = function(field) { input.property('value', tags[field.key] || ''); }; + i.focus = function() { + input.node().focus(); + }; + return d3.rebind(i, event, 'on'); }; diff --git a/js/id/ui/preset/radio.js b/js/id/ui/preset/radio.js index 5ab65da70..6f8171ec6 100644 --- a/js/id/ui/preset/radio.js +++ b/js/id/ui/preset/radio.js @@ -52,5 +52,9 @@ iD.ui.preset.radio = function(field) { }); }; + radio.focus = function() { + buttons.node().focus(); + }; + return d3.rebind(radio, event, 'on'); }; diff --git a/js/id/ui/preset/textarea.js b/js/id/ui/preset/textarea.js index 4aad5bccb..03986358b 100644 --- a/js/id/ui/preset/textarea.js +++ b/js/id/ui/preset/textarea.js @@ -23,5 +23,9 @@ iD.ui.preset.textarea = function(field) { input.text(tags[field.key] || ''); }; + i.focus = function() { + input.node().focus(); + }; + return d3.rebind(i, event, 'on'); }; diff --git a/js/id/ui/tag_editor.js b/js/id/ui/tag_editor.js index e6559d784..cab261199 100644 --- a/js/id/ui/tag_editor.js +++ b/js/id/ui/tag_editor.js @@ -56,8 +56,7 @@ iD.ui.TagEditor = function(context, entity) { .append('span') .attr('class', geometry + ' preset-icon icon feature-' + icon); - presetUI = iD.ui.preset(context, entity) - .preset(preset) + presetUI = iD.ui.preset(context, entity, preset) .on('change', changeTags) .on('close', event.close); From a37dd7e9c6e1f6108d41c1c215a510703e9c5049 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 16:23:27 -0700 Subject: [PATCH 59/69] Don't overwrite existing class --- 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 0b20ab112..8d6b132a1 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -29,7 +29,7 @@ iD.ui.TagReference = function(entity, tag) { return function(selection) { selection.html(''); - selection.attr('class','cf'); + selection.classed('cf', true); taginfo.docs(tag, function(err, docs) { if (!err && docs) { From bc7b5908baa8ca751bdad596a816b847789a00b6 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 25 Mar 2013 17:00:36 -0700 Subject: [PATCH 60/69] Code style --- js/id/actions/orthogonalize.js | 14 +++++++----- js/id/ui/preset_grid.js | 40 ++++++++++++++++------------------ 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/js/id/actions/orthogonalize.js b/js/id/actions/orthogonalize.js index d04317d78..9b12714f0 100644 --- a/js/id/actions/orthogonalize.js +++ b/js/id/actions/orthogonalize.js @@ -11,6 +11,7 @@ iD.actions.Orthogonalize = function(wayId, projection) { if (nodes.length === 4) { points = _.uniq(nodes).map(function(n) { return projection(n.loc); }); + for (i = 0; i < 1000; i++) { motions = points.map(calcMotion); points[corner.i] = addPoints(points[corner.i],motions[corner.i]); @@ -19,12 +20,14 @@ iD.actions.Orthogonalize = function(wayId, projection) { break; } } + graph = graph.replace(graph.entity(nodes[corner.i].id) .move(projection.invert(points[corner.i]))); } else { var best; points = nodes.map(function(n) { return projection(n.loc); }); score = squareness(); + for (i = 0; i < 1000; i++) { motions = points.map(calcMotion); for (j = 0; j < motions.length; j++) { @@ -39,12 +42,15 @@ iD.actions.Orthogonalize = function(wayId, projection) { break; } } + points = best; + for (i = 0; i < points.length - 1; i++) { graph = graph.replace(graph.entity(nodes[i].id) .move(projection.invert(points[i]))); } } + return graph; function calcMotion(b, i, array) { @@ -64,11 +70,9 @@ iD.actions.Orthogonalize = function(wayId, projection) { if (dotp < -0.707106781186547) { dotp += 1.0; } - } else { - if( Math.abs(dotp) < corner.dotp){ - corner.i = i; - corner.dotp = Math.abs(dotp); - } + } else if (Math.abs(dotp) < corner.dotp) { + corner.i = i; + corner.dotp = Math.abs(dotp); } return normalizePoint(addPoints(p, q), 0.1 * dotp * scale); diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index 3d106107e..eb83c3a8b 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -1,9 +1,8 @@ iD.ui.PresetGrid = function(context, entity) { var event = d3.dispatch('choose', 'close'), - default_limit = 9, - currently_drawn = 9, - presets, - taginfo = iD.taginfo(); + defaultLimit = 9, + currentlyDrawn = 9, + presets; function presetgrid(selection, preset) { @@ -39,14 +38,14 @@ iD.ui.PresetGrid = function(context, entity) { .attr('class', 'preset-grid fillL cf') .data([context.presets().defaults(entity, 36).collection]); - var show_more = gridwrap.append('button') + var showMore = gridwrap.append('button') .attr('class', 'fillL show-more') .text(t('inspector.show_more')) .on('click', function() { - grid.call(drawGrid, (currently_drawn += default_limit)); + grid.call(drawGrid, (currentlyDrawn += defaultLimit)); }); - grid.call(drawGrid, default_limit); + grid.call(drawGrid, defaultLimit); var searchwrap = selection.append('div') .attr('class', 'preset-grid-search-wrap inspector-inner'); @@ -76,7 +75,7 @@ iD.ui.PresetGrid = function(context, entity) { if (d3.event.keyCode === 13 && value.length) { choose(grid.selectAll('.grid-entry:first-child').datum()); } else { - currently_drawn = default_limit; + currentlyDrawn = defaultLimit; grid.classed('filtered', value.length); if (value.length) { var results = presets.search(value); @@ -85,10 +84,10 @@ iD.ui.PresetGrid = function(context, entity) { search: value })); grid.data([results.collection]) - .call(drawGrid, default_limit); + .call(drawGrid, defaultLimit); } else { grid.data([context.presets().defaults(entity, 36).collection]) - .call(drawGrid, default_limit); + .call(drawGrid, defaultLimit); } } } @@ -222,7 +221,7 @@ iD.ui.PresetGrid = function(context, entity) { } if (selection.node() === grid.node()) { - show_more + showMore .style('display', (selection.data()[0].length > limit) ? 'block' : 'none'); } @@ -232,20 +231,21 @@ iD.ui.PresetGrid = function(context, entity) { .selectAll('div.grid-entry-wrap') .data(function(d) { return d.slice(0, limit); }, name); - entries.exit().remove(); + entries.exit() + .remove(); var entered = entries.enter() .append('div') .attr('class','grid-button-wrap col4 grid-entry-wrap') .classed('category', function(d) { return !!d.members; }) .classed('current', function(d) { return d === preset; }) - .append('button') - .attr('class', 'grid-entry') - .on('click', choose); + .append('button') + .attr('class', 'grid-entry') + .on('click', choose); entered.style('opacity', 0) - .transition() - .style('opacity', 1); + .transition() + .style('opacity', 1); entered.append('div') .attr('class', presetClass); @@ -262,15 +262,13 @@ iD.ui.PresetGrid = function(context, entity) { .attr('class','label') .text(name); - entered.filter(function(d) { - return !d.members; - }) + entered.filter(function(d) { return !d.members; }) .append('button') .attr('tabindex', -1) .attr('class', 'tag-reference-button') .on('click', helpClick, selection) .append('span') - .attr('class', 'icon inspect'); + .attr('class', 'icon inspect'); entries.order(); } From 93e0080174367e8a8a15d51602c6148e87438411 Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 20:50:54 -0400 Subject: [PATCH 61/69] cleanup inspector icon styles. --- css/app.css | 84 ++++++++++++++++++++++------------------ img/source/sprite.svg | 53 ++++++++++++++++++------- img/sprite.png | Bin 22721 -> 22943 bytes js/id/ui/preset.js | 14 ++++--- js/id/ui/preset_grid.js | 2 +- js/id/ui/taglist.js | 2 +- 6 files changed, 97 insertions(+), 58 deletions(-) diff --git a/css/app.css b/css/app.css index 0c71c09ad..82dac0161 100644 --- a/css/app.css +++ b/css/app.css @@ -491,7 +491,6 @@ button[disabled] .label { .icon.plus { background-position: -240px 0px;} .icon.search { background-position: -280px 0px;} .icon.geocode { background-position: -280px 0px;} -.icon.help { background-position: -460px 0px;} .icon.layers { background-position: -300px 0px;} .icon.avatar { background-position: -320px 0px;} .icon.nearby { background-position: -340px 0px;} @@ -499,8 +498,11 @@ button[disabled] .label { .icon.warning { background-position: -380px 0px;} .icon.back { background-position: -420px 0px;} .icon.forward { background-position: -440px 0px;} +.icon.help { background-position: -460px 0px;} +.icon.inspect.light { background-position: -220px -20px;} .icon.geocode.light { background-position: -280px -20px;} +.icon.help.light { background-position: -460px -20px;} .fillD .icon.avatar { background-position: -320px -20px;} .fillD .icon.nearby { background-position: -340px -20px;} @@ -512,7 +514,6 @@ button[disabled] .icon.add-area { background-position: -60px -40px;} button.disabled .icon.undo { background-position: -80px -40px;} button.disabled .icon.redo { background-position: -100px -40px;} button[disabled] .apply.icon { background-position: -120px -40px;} -button[disabled] .save.icon { background-position: -140px -40px;} button[disabled] .close.icon { background-position: -160px -40px;} button[disabled] .delete.icon { background-position: -180px -40px;} button[disabled] .icon.remove { background-position: -200px -40px;} @@ -705,25 +706,6 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} background: #ececec; } -.grid-entry:hover .tag-reference-button { - display: block; - border-radius: 0; -} - -.grid-entry .tag-reference-button { - display: none; - position: absolute; - bottom: 0; - right: 0; - height: 30px; - width: 30px; - background: rgba(0,0,0,.5); -} - -.grid-entry .tag-reference-button:hover { - background: rgba(0,0,0,.9); -} - .grid-entry > .icon { position: absolute; top: 30px;left: 0px; right: 0px; @@ -852,6 +834,25 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} color: #222; } +.grid-entry:hover .tag-reference-button { + opacity: 1; + border-radius: 0; +} + +.grid-entry .tag-reference-button { + opacity: 0; + position: absolute; + bottom: 0; + right: 0; + width: 20px; + height: 30px; + background: rgba(0,0,0,.5); +} + +.grid-entry .tag-reference-button:hover { + background: rgba(0,0,0,.9); +} + /* Preset icon colors */ .inspector-body-line .icon.feature-marker-stroked { @@ -910,7 +911,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .tag-wrap .preset-icon-wrap div { - height: 90px; + height: 80px; width: 33.3333%; width: -webkit-calc(33.3333% - 10px); width: calc(33.3333% - 10px); @@ -937,29 +938,38 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} padding-right: 20px; } -.form-field .modified-icon { - opacity: 0.2; - display: none; - pointer-events: all; -} - -.form-field .modified-icon:hover { - opacity: 0.5; -} - -.form-field.modified .modified-icon { - display: inline-block; -} - .form-label { + position: relative; font-weight: bold; border: 1px solid #cfcfcf; - padding: 5px 10px; + padding: 5px 0px 5px 10px; background: #f6f6f6; display: block; border-radius: 4px 4px 0 0; } +.form-label button { + pointer-events: all; + height: 29px; + margin-top: -5px; + border-left: 1px solid #CCC; + border-radius: 0; + opacity: .5; +} + +.form-label .modified-icon { + border-right: 0; + opacity: 0; +} + +.modified .form-label .modified-icon { + opacity: .5; +} + +.form-label button.tag-reference-button { + border-top-right-radius: 3px; +} + .form-field > input, .form-field > textarea, .form-field .preset-input-wrap { diff --git a/img/source/sprite.svg b/img/source/sprite.svg index 0852ffb8e..51dfac05e 100644 --- a/img/source/sprite.svg +++ b/img/source/sprite.svg @@ -38,9 +38,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="7.858048" - inkscape:cx="497.26876" - inkscape:cy="307.47415" + inkscape:zoom="11.079848" + inkscape:cx="223.17822" + inkscape:cy="307.03685" inkscape:document-units="px" inkscape:current-layer="layer12" showgrid="true" @@ -53,7 +53,7 @@ fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" - showguides="false" + showguides="true" inkscape:guide-bbox="true" inkscape:snap-bbox="true" inkscape:snap-nodes="true" @@ -364,14 +364,9 @@ id="path3769" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccc" /> - + transform="translate(0,50)" + style="fill:#1a1a1a;fill-opacity:1"> + + + + + + + diff --git a/img/sprite.png b/img/sprite.png index 781926dcb5c8a37a925ce3c0339aed213d70e431..a82be2edf867ee3a297a3f55d8562c5e63d133ae 100644 GIT binary patch literal 22943 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 XSZ%~Sx{8Eo00000NkvXXu0mjfH66=r literal 22721 zcmdSBcQjnl`!B4EXi=hz)40grFUMs zuC`uaD-RnSFc>Ug@8akQvU0N#aP_duJdkC=!FhnAs`x_BH*0SpAdq&w_2PI)v=Ij{ z|9+#Auyw=(CF8IiD!GiwSp&z~iSX%P_v6nz;@;*fnauUQFD*`aUv|8CT{Fqc=}=o+ z%dgBVYaT~;N?RUo{VM(okZg749yrG? zXOr;}$CJV&9fw2P^=2Hkr-eyr^$^~RaLq@ zvCQBABcmAv@Bw)NUS3Ql22+9-$W$|7_!_FN#n`5KaR2`Oc>HG)5+QQMkNd*kJfS6` zYibktqR6p~mBqr-Mb+zE7A_r^<`Psm?QkV%?~)uXVKIjauIqitW{uKXZw@fpA#H~| zzl8>G{&Jwa7g>F#t%$vRe6S3XbZG=-ggLzY{MWsiu26Jv3Ui>^KF{pg8Yxhwr>93yuyAmI89)Z!-rlYHIyxRdqv1j@Q?eQ#FxcYc zp!pD*X`im33K2E{T1HKU{?HjoZq_%ieSRQ2e9VB9BIS|UW4dxU;^ z_3o#a%Ws}=9#B&>$xV)z=tem&G@Vhl*N^cBK1VDzdGE3pX=O|EnJ_YeG@j62TC{EM ztv99_Gk77kuqAQ3+?o)fl8P++RI#YP))gA0px_PtC$!Ra)zwJvB@as?A^5eQpPk+2 z?)Nua)6c2}@Su3}l(KkaLp5bKHZ~J3?F+=yJq(`iMn*=pi0cJQ?A^+y^78!;AULy} zoLo;*Qj*hrrBx@dv$Hd}zP6T?uuMQeAlT*<=tt2f2SQ6PEgz>(5XFSC=HvFDCK=sfEz|c!?`aI=P#)mTguAHmX{(Z*}i>RNyAas0y-?}<#)QJd;L}Ntu6~q z67#bU5>&c;Er{hTfkw)^$px5eOt(`$O87SvzOgOlzS4#7Jh$jHcW(IQ%NIzrY;sxF z_cto@?eWpF_XT6Y0aYzLyu8Yv|FOG6^H$cY|1!{+*Sna3zIx)NNxHvJj{c~$c0r(O zzzEWEad4Prd3N{?u*ppZ&_N9L0Oc8H&-nT7_)F^RIkg(sJ>kHVfx}djVWfruRKqy3 zWqsgO{XwRmO;>q(8wKPTE7*1A?8?K>pUsq4WKNKECkr3qIVFaFL$TNQqXp>H5aOcl zGV@le&d8yQ`5R$NZ=n0XjgF2w#tMUQ6xa61nZ?u6YOE}0BgvVyDBr;uCBv>vBwsA> zZf%;8$&$0s+s#$ClY|~lel~r|%gao1MIkBOByfJM@uv+HvZAy!4&1;=wcyD}AQ9Yo z=%bhyl|4bFbAV438JAX;ua}ZicgmY5UctX28f%YyJ7kShc124{nmexSar&#UYeZX0 z+Z(Bo7?pc)T*Wotxw@MSt@5e5{WdO=jfS39!CoH=7=%%Dyo&EoX(BQBT>T#Wp|9ow z#&5sQH4Aic?R5Qv^aMO=va6{B)o|#Fc^^ziP@f(I5w=y*)z#HM{p+*Ph!!UopgO|miYRU_3?IEQDcE^BU5ug9z4GANt69i-aS!Z#H z;Ph+Kq;aRQQ?%F`P5xBjd>=UejqdY5-I1lkgR$l=7wv?p#tV$Hu_R!7JnY+UV`vhJ z()m?8>*-1>g?kBGsUT%{_v7`Fb5&}1K_Ia=3OW1eXAkKHu0y+(j>ISQ0BPGg=~s&~ zHzu1|W)@OQ2uaV}meFDH%=PO_JoM|V2UuL8I}JpeFHd>$$hiO6c~m?TqLNZoJYbM; znb!ls-{tk2Q5PQ4CCDhQ{otG##5w4aLddA<_~9I=6-*<%La@&^Bo$(3a_EU!y@p5X zoZIeLQwOe=)Hq|hBPgVwn9!5>B?{%CPEVgT2^N2R`JFg_mzRep#ea+u^eglL_)|y- z7v4}A+TG2}%)A+$pKqD0DqGwTc4cZ?AwbehmYbk*a)Vl5JTwngsa+^7DX~X>efa8E z=z30&PqSq7Z~BBEeveh^pK!JPTz?fwR?=6~81(le$vTHeq20vLmko(2~Q+unEkXy-ke=K?XZfuyH%&MDR&zncq-x=Ip# zeHwIQ2EW`oj4Dd7Gk`El9C%UrF)^eUyn@gs6a$Wm{xqd0w5o?44FIh=?qr1pV#R1- zuA`s9)ArOG!0Mp(hp@Cw6BCpABI&f~z^}2-%+m>wroPu_Q}u^!H&_coHps%p^*8O2 zz{UPdffrwW-EOW?H#@r(ZO{en;9lt@qm)_(hCR0WnYw-E>$P-J_i$Uiws_-c?w)n^ z`Wbop?dtSR<1J_J*$BJqe)%|0av@6JyWG);JMbQR;~VZH<}4;#k|Q~Azyl7C;#_YM zjh&qxe^Lf6j)5E-{`QOG)gHf8z=g&8jA`FB9+YJJOS1E#bq5P^K99#@4Q3zrwKur0 zZZLzGLY=%U)or7Ni>&4w+>xGvSy?mud4QKP9a~(4mgncM1O)rgC3xaE&0$-IPALP- zZz_S4>HsVzI?X}Ji%Xp9pOui+ShCf6toQxi*x2xd2&;Sev4G&;ZV&J%jA8;yAV&WVXvs%sDvi3(T~8_kB)tGni`g!IJ-L^V%pp?n^XJdr>fbR?=<8SRk)60g z*8jeibBMfBG~nu=iqiiv^-zFJ(Zqrh?*M0ZK9_j;)WagnYG(8nQLCfjFlB{uvf7w` zdv$ennPc-ev`g%g{G2y#A%}*|gr{e_Q;0YuB@Q-ocJeg`m4&A8?oqF?qEX2zF&H|#_f6ZG-(LgZG z&fRdst7X^tksk-t6DQYORo1pTUPbXGaqYnpAKxlW&{ZYZ)Srh@z@&@ zNA@79;^pnlQAaM|*3Af$Fz{8F3g^l717h+| zFQ=;P#^(R3aC&6N2LZjJqpcnPF6E57zv{J(j_A;aq?dM%m5%8>qm(m0h1C&mt*m!8 zbLSSioTPyWaaG1nAg0}Cn-yODhd-qMwM-%)Qf{FY^qQvi+yvGDS|4M1lv`F7);B@v zXQKqya8GXUcM-)r0YSh?>QzIi7|B|sb@sn}f49Y`_gQf^3OHC9^S?mUO?;&AbUXrx z10-ceU|W)>IXOAqu(S#$(7C6C^LN39Ll$YTEp-|2!4>Xy?5il~kgtrEsNYx2rqy|i zBzf`M$YA%Q4r0UEx@%ftR&G&-D2icgqe<1n7NnN$JS#Qxg=lvxa!`i-U5Yo+*Awj1 zQ0KWYJ4lQo#}p&zcRbbw(zvKCgyP}h5y8PPNnd!RzYF7NOYCph)*+m32j#4K@AQF{ zB@O?EX6J$Z-h5l~zSp|im6#-$Xyr&KMIpB{Ab|)}p#BVxSL6@{g1q1al{NK&fq}LU zE-ui!H~g$O%f$6bt*8dAMLp+(R){lVxy_v&y!bWsfizY9dE>^0)7 zpB4Y6*aXR|iUt`UzH$mZoud-ySt08GNfvHfRTH+Tpsn2Q_SG5pWACEmY3t6)gC(U* z9P;*JcWKw!Zq>037fem2_=J+_*KNbZq9D`)7y+~;heCrHaQHXIDQDgJ`T3Lq{{A_H z_Ywr-0q3P;X$%IVPWj;LIWBgR)1={k<3Pw*2aHL$FjwM+J486%D8>6_Ms*jtiYogc z_1#aRIH0-iJn!Z4_zP&$)u+%qKf4il~Idakv zebtK$(DRyGRXx|Ng;OUWzWgHsqsyBG7OvjYQzcY1#QacUKF>0djNSj!FGPh_hhvgU zAMXerxK}4vP$k@uyA7tdSbRR$uB*s>_PH-fMcQV8nXV!*m5@rxKvA6Qf=s+=4rvD4 z(xEAah~b{I^ADm--YKdntuauQ&?PwMJnKFX+6~6rkPwF7$SLO_z@Y2q5)c zqzoI|=QV(NP;`d5=7E-oVS+_P&HpleCN z0Lk;?N{mIh zCXr>-kad3pB%3aH~W8*&~QPQT0bTR*~52z2T?=){m zq_{^$&p*{VioO4=;yslS6*s&4lpXbWXFjgnrg{|@>NRR}k2d+Lz@1Ip4H{1rX4HPx z<+@Wp@BCszC(ir9Q4Qu&TT(l2cj&3$VW%IS9!JlrEFlkz5TddfajZHDcZ<(0`QAPx z+lC2(IHVE8(>$I=!?ZBl3lirHjGEny@qee0;l=j72}hFRf_qSR7uKk7v;EuR ztFNKh1J2Lqn~jFHfd7mC5)@Q{x#VLvyw`TN*KD8&<>W|I{LxX3t+zMNW_iL`PFjAQY!KKVjvpB?&F;6`dW)1|hYUtNsKr}&_j!?zqIi_O;PPc&uym-k(8 z1Zc(EJRRpeU`!wGo5^XEz!t{0IXci#G45V5QBZO8l^XTbu=^MyhjYjph+XN6 z+@YoOL4se5LK2#T^_l!$r&fL-zwPG|i~g{)gI(h7fFDaDOB$$JT;os?OWI1Y?z2v! ztWx>V!(qb$*?Ydk3?Gp~pG0z}9=#pOKrgpDN)8>6pU~Fn#SfF6L=RX=W}9k3s z-YFpbYaQaU?X=NIzIpR#CV;WkpkUjfS-)eyt2GL!S2Sw+x$&cRyeNwKOLqDjR?OwXJY6VPbym8J-_TS^gIxGv)ExG4vw#| z$Vk=sT|eQVjuytvWjZu97q+|09I5wH_RgiGk-~q1ZIqpU`2NTl{(6`;_|lYqh%>9F ziJ}v2@kL++WoZf*nblNy8gcTv5Xqn)YPgX5X8=2b(3L9^|HZT99#LdS(nWOY==M9m zZPW9{b3V5Xm5#L<+GWSH_>0B|!ek$|Os?cGI(R{o+hXQpDfvNal%yH%xzQGy@w`ld z?V@NC)sL$XuS32%E}pN>cUb3^wSPUp>1%c;{2c$E5+dAsJJ&NLlEx|i_lgq{l>I zMKl){+C!dU{`lV98kW7i{9sqqRocY)K-EV}9%mG~LoEu*Y}b@lJ5 zcQonP6jLoj!>=~dO<_Xr=xbiLH}JX;yqk!z&-<~Qe)Dlig)G9c~Ga3lIn;8M9K=q}11Sq?=QM%Aua6b5 zj|U8hwmRGe;@?>S_B<9n#~eAG<5>Zvg}`u@wan;NiL(Pl4BL(^w5Q#vWN2KvEMS&S48~STWsVW zM+D}pmwELk?qyy5IL4$~Ut-BmA7`U@5bAq&6S+N$53&1435XBw4vVE-jCS&7S;nVc zD3t!exkgb?Y(_!{v=NK>=@I`nd37}~Kh=757#A8nX63*!c+sUZRA=aZfF?_N$mL*p zXAG>M6_r-v^~oI@cX!=&OD`+nK-68Ds-io6egEka*pDxj=RpZx6A;c6p5tB0dI5a* zFPsn04T0mkp+x`f@VPsb^vzF*Fp=b2MGtYoTHy`#c8`&qST*twur$@@j|U^(y0JD%EV@f8K0^Y=Kx)T!zE$%t zgc$pT!zWZW60aENky~U*Yq%)k0j?yag47}d(r8JQY9^t3rBplbBkltEQa8s*XtRR{ zysjn!$d4?S7%p=Hpt!!~ii@h;ZIZu2KQs<;^^OJV5Z>g`6T{MUvXtSGcu5j8W1-(+ zX*L|A>9J%Blb=F5)9a;&2@_D)A}|7qot$eLwkholMH{tzgy7X>?{Q9UtREjS4lM1s zoh7U1%WEa}htd-ax`G_8n}u!x(q9(Xy+mlZ8QQk&>?G1GKGJltcS!X_gdr8z6vAR* zX*ZpX4UPX8JnfoZEL<;2v7{}t5mS*AC&Yi!eVZ2UIdUvN`09iC9gl|vCy$KCgUBj# zg*Tp4eGWS6UGtT>u!2a@+2w~ECgyVC1B|+M%spMG6{BM)`qN&p7@n} z4y(dowZNY0XgH0eF|^j$1ZZ5qTU#zRGfH-7CelgdE2 zQ3T>^3&j_(a32{E_Ks_YupLMEjZ2~~7~LyQ+qR6>cUApW9Xj-Jhw6n#pzd+Yn!6H1 z8l#H+e}pbQfrXXjt;-KWsG_&cQWO$tG5=aeNKL5hsS*O*p`MYA+eG0b@>BaAt#>RoRz*pD{=f_`2-b ziQe@SBl1?lO^4Gl&YP;tFl5ip=7@jKFg+YWjJ*^1(eq5Yd%=h7Uc*xa4O|)j5D$ee zD;HlO2v(V23$EjK7HNB26q)lpS-7ZMTXR7-K(%l{F1RR;FtWL#`S@5;nO$=h>bS!} zU0$w;EcFOM{f@xVTyv4Oun*b*7|EYBLHnAC<*WC<9v=+B2N^W9t_zjaW>uXXzzB=J}98mOExLNlWq@# zrHvKv#tI`Ks)iKP&lBTUll{yUcsZyfh7@q3n%1Aj)PqDA36LLfO1?mWbsVmJ3J|>2 z_uzZLA*kD406L{iRVrHnCVii?adqeGv78qO9=sQPADb2Jr1?ktzI8=8izOk$b?M=7M*>89{!=Hb#%wO#I;{5 zxg23LjB%lKR$O~Ev}2z$r7LIOhPy}H!q2fUAD3GGtW|_$qj8C7A}Vyky-v(Om>-pH z@{jAnkShY?gaHnnEHr@GqzoOI(Y z$0!Jb=C73NiSiFyS{*LUS7;TpMfH1q;a3EE^@Y~_T0-&X_P&n>0`(O>J9{7qX>lz)WR%hC;P)R5!wTFF z8rgBOXsUyXGr0=GnBWET4>J3Ow|+?3Yd#8C%r(ai>`vU^r#cQuNTGQuJ+mGJX|Bi5 zGCa-kmv`7cHWm|Ut;k)+5)ZA^93?Y@1|J0rfxl&Bm2SzLdMEUt51Syf|qo_h{B zG0q-0%$0*dX6vHy{2VK#PhTt6;m6}1J0#)BZWO6LnYAY4dqCPDt0lPe90_rr~49P6$cWbMJbyl_Jd_BzE(cbXl|Y0|#OrZsGnUgEywd znTy&MKdkYl23JoLFNn2p5T86PZtSxT-?3JSx9=OgqNfsu0Ym`f-(Y#5;%sxcgL7}SqRJn0amXmGX>)j_Mqg_Eqm4J_E}*m6)%XF8v)SxTe8i@ec-7XlokM0k&9LniIc918e1*b< zCIN8C3V6ju(;=ev=PLIT>>$D`P^@F98S}Bi|6s*X8%Fo-f=KP*w40MZO;lucvk)HL z{q&c8JEf0I}A zzhG4cUYU=9;uJ?+y}sP=pj>`d9YXL!ZogEyDSP>Ogx?FHUTGC(5RY31j1q@v*()t( zHX8XnEKHov2P3kGA{D+NtS_?iJL%#y(DINT*{~pi% zFX7$)?L%682GDC9P*}%v;>x#*@_lw455ViA$O+^Cu^b}otw7=3WE%*huzBwO1%*|QbsmJqHhKq5 z@gq=F>`i~6-uKM;+1bmVzBP4q@^>}ps7`8e5>1SaeRvJk)zx9^efm&;D1L#dKlD=& zv}r3}eWe>GcYkls)LchLM1*M>9CU%JZQ;R|D}SUb1x-=ei$%#Vk=7&n^R6%Zh9@R! z3u|gl6{*l|UPv+6o;#G?$IGodQCrmEB#BHt8#>^)xKyO8W!csd5iqsB6R6;F6ROmv z5bvINfLkJ}W?}2KroG92YAay3AfJo^UTZ zK+$8w!M~&|2m`LlH@-YQbjb<%7o00C-1HleI~ZjJxTkM@aC8hf|N4qzTLz(dC_h%S zl5V1`oj&``YSG@&_*es7l&&kdP;vEDQ1P|_h#)ZX#4yJ=1liC@@o#Pu)2F-3yC~;@ zyb9{~yg@@T2hIJtAy{-Ku+{w5@cT2GF(ppA)3#ixe8Uc z*W%|qk!TkLG+TwU>IzWF1Y7Tnm-xvcN_2~%V1UsED1F5gR|Hg!dvgw0X7s+kJd3vo z*spEF6Sw(3oj&cgUps|$xIJ56U++4wg61it7UCG4V?LwwY&+keaTN)laVHOHCE0o-V*Vk6ojfO`pk=zI;<74>tsseaCCBlv^8HEh8TUYN~ z#LlTd;*G!g3u?;=Qkxt?eX+3!KqePYhSZ+?`*Wx%U*}}9@purPu_;dG>hHH2Hm03% z6qPv$$8KVfxi?n>o4|;b>K1DS9Y#Nj`-ee8FLz2iEkdr(@Z+U6(iBX+C-jXJEG((D z1_Eh>?)fLigDPWBJdELC3J=l(81*|=_=xUbQ6bLlUfA|^M7 zwpDY&BP zi3C~O?FrWw6fP{S7nVjf^H0JbnmN_dfviX9UXSmNAw;k`dPB^0Z7pza zGPpfaqP*-Kaz1hy_=2uu&YaLyZ>E7kP5HpU=G^G$-)j`Y;&`XDf+89jbT(lag$TL1 zz7JrIl$6DikR|okL2!clg$Q)vzuHJtpk?ny8HuIY) z#MHH3rw0CTPq~4|rw`sYKQNva3du!LNOK@w1PypHM;;;< zUntMlR$5{IR;+IzTi3p+zpJwDy#f>+k4{*}Er3=mFDxu5^BGlHV;`rQeoI6yGpz}6Bl4nuxxjATIw|fhmjFuh%WSp(`#4E@(Rh^aB_Pa{% zLNY6)Y;8TEcYQjMyu82twi3`$8X1A_T^o%}*m(s7Z@x#DsRFmz@VR~%#WETIbu>24 zZFKA9uV?e@wc%%^lX3pffS4JY`)seByn@~{OD#p3O;y>VKgHN00{iZxF@d=)_BP#S zq|6)Id_&ip%m9d3_^l^PGZVm z`T4+w|AC&dx9Dj=M#d)Nv**5;40_G#yJ8<@kd-h>Kygx$BL$dEB&(<`{P;OxC2wbo=-cI#0>hL+!>7qzYm<|c z%H0Kk!MwGsivC(bm^ME;T4mB`Y-}tdVEFrF0?En%xP1OSw_Nu zh5?sdgp!>v$w(F6Zk8qS_+HZum%7@7 zm0{5nj`nVuZWbBv%#rrqsl3&z0!EH6l5M1 zvA4GvxqXd^R^%8eH2E5HkZ+x9#z&|{+!Pi?KF@t*hx1XXHdSi9wDHr?3%7f2FTPcM zwmCERgaYaV8(3O8EG?G_v|~G%<#*AS%-eh`A}uQ@c*Mt1jGGKdEq?@1s6AazrAm-9 zh}WY=qRHDSh16itLA1PlFYj^VPD z{0nvzT+Jb{p|Na@mNhaqzU&lpoOH^R^0e&*1Zo!eT%Z5ND_R%Y7_|{_DWUpNcKJz{ z)+)5aoz`z&QGR;KjRVF@u`xoJ*1Ih52HzD0w0zrj&Np<^wsYqpWfpD0pK`B9sqTKt zk$~|5!cc#fJV0CVR&kai;a`2rc3*#g58eIy*92)%o-r$8b9MB( zOd~t%xjvpm&;WmLL{q@q<0o3f!DWq&=r7j0G`;JD%5?ia>RkJ#Um6$~-Y*^Kb+9ZI z_50=*#UXGu89P;%6!LO|m5?&=2vaFwfr8-OB2(b(x}jQ0=n9dS%EDew{>Hkqh#<+E zoW&ZBs(yau(STp+PVwM44i7UxgxdNlisG6?h;AD9BY1E6I0jH_>_;1J$w{XYK4HJN z522HA18lN(ysAt&><`Dudqcyi8IJed#_Sbj?tRk%SwGg*-8+_xA9D`|WYruhaZ>vo z{F;*_U)sDGEVB0Fesshb%4TJx;YXcQAlBGQPuVhkPCF^@6IJqmQr+=O^`8HL4JOCEnQX}Brs zm*igf%TuUVq(gKH2vPHE`3`rjZ}pdb_iy4wh4-4a5%wo0X}6jck8Wr9YX+~ekR!@A zj7_HS#t=tUdsUgiTpg;{P)hH$Q|Lk5_^Xk8h-PZ0^wFo^41+}ETWTd&y{hD_&z;x^ ziUb-W++zf7t8;_s<~yEjTah109~ptqTu^!ow$qCla|P<*&hfvsy{z6tj7G-CPm=+| z3aNH(9;qsO@%_yQ_k1qYZ2z69dAvm?H|N^66D7x!c9&N_Th3?fa(964U~_>;HI~?5wv!F=QGgdoO8;Qs|Iu=QttK8H(jgEg+GK04GIH*v}$q_w)G z4+foqM<(EO8 zCEETCJy~428MLu@@!baoJ6c|VB4&8a#kP)ZCsd2d=W?N2b8h<}(@{{*z#zEwaGF{i z_N>gL{x_B7Sdpd-;0YRvi|sg$EZPBqy&Rymypgc_`%$pR)*yh<>Z8)ggRPiMd40hX zz`@6+*kt2+;S~ds&U}(n5Jzn)6~!n>?!zVDjI+a1sS8L$lT}AI%G8?~^uC_EuZw5p zVV>Dic!o)dn)fj9N^Pf;?$du%nHxT7po`x;0ju@-oz$1vusZy3)%*Zwd>(EUf8+5N znqqTJ@Ps~rG$S)J_pGSo=TAwXW`c6~{oHwcTQK@E-f6BeYUp0}8`cle~CiW|mpS3K$^%Pw%idM$?5#_o9LB^#T>}R*Iu3sU7-E3y<{;EHR7iNjH z#r20V6F?oEpv?Oym%YV*3lyfves#1>mE{3gZB5c4OQdT zc*aI2WNbXPeZ8%;+;@z@le_Yj;_qnZZ-$MvCj4@pv*_nO>o==!nxkA9(;mX?g+>1I zgy|blQSzfH7uAxZ0A6bRc?vR=4V8CL$?rVN!f^7eyA)7X@%5?yXDL$8XWeBw<93nq zGWP%5Bo_DVQ5TK2h6pUn#MIPuVra()4M&XmO$zIg5%J@73YH<+spB3@eCGJg3 zO{G$@N}v8dKR*|ot#hu*ZnH5G0mQI3i+?~ppFB6<_PsvX+pdbIN?0(EJ?^3b{5~mP z|K%~DnI?{B5YGQ_akLCL*1Fhu`OBZ1`}K%}N@omrowK0)e$CjPHSvcJA1Xr$ySuxm zQc_bX7lAae{Q7*3GL%x`>T9`4{Vb3ZvH}g7!i}*T%E^A#_U4H-In%Qb9RSf2upcY2 zDCv8$);swx;Suh1l?|!mWZ9nzfIWzdSHNC00TYHFh<8+xyMkwDXI7RED?bcoNm=D$ z=1mL?&d&h)B<=}6|A2qGw2X`&AU0Q+1!`_qfmTTg?h?OIdphCjL%O9cd;C$~)bwia zXt`5C6d;YPB8VyDnst?xiAxPD7NO2_b!~u3nmzT&PoUak=54`i&0KNkSwOTO*)>qn z+L}F4YFH0s66pI&4T>-1Xzv;UI=_Hhz#OCJdnaUVXehj&Jv_7SB*-83uu$mdkIe2E z`g%dLrqks8xq5bqd*S{;K|zPia(06(7Pb4AmzQyZA?W@H4=Q*8@Z4yCKxuIVnsuz; z1Y{5apB4_jo21lQ0^Ob~b@J~~6gitLLw^;}PMf2p4q%YeMn`q{`riWwEPiVVospF6 zSjPS;I?mpZj-PJ}irBr!-vV_7jNvv$KoyeEhv5fA0 zHiLo_?mC?Jf^=grTju&#X^7BT#D2Fd<}a_Q)XjV7@q|&}YH4+Y2lhYb0xMh7N`GTJ zz5*Gs7W=agZ>mnny`;!Da9pqv9{%@$=a!mc9?tb$`K$^6qc1?rb>e)9i3z~>b$u_< zPERjWzgP?eGVrQ0b_Kx365orueE5*2XKEU_Ut>QOsfYx~zV~x=&Mm0LfZOfX-T(*W z8vF{lONIAg{UH}%@3UY;P=#5gWye>PLZk)4lQ`8ZkZVY;Ig8(9(WXBI>~}D;Zt8QK zes!56<9h>ocl${|Fp8Re^Q1;O7_f4^hug7}ur$w}cy3K{)}du@V%E z6Z-I9`W0?N+3J=1awenBa~nA_sg({Byn8!58!%>97GQ3(R0Q7se8*PoEHG2_AH9Y= z@vtaf{L_#&IH>g+!tfU83e)@CsuMu{o-1xEuyRe|i^K7^&UubOK2WmGdG(-LIT&!u zg)}?E<*8D&Y6Xj^WB@aiydpdiRIs4MZtJ227RU5AJ4L3USAwMDF(Es z-DAv+fIOBW{@fM?&|=h@qJbA~`JJ=xS=jamT#V>|Y?%bPv$wZ5FtlJ7e_MTWA4z6 z(?6bFs#gx=TB%_GF3k3y5}g9!!W7U9aYuk^p03NTN?~(8@sX)(rQ_~(WDmYrE)xd9 zEa$`v3k$uxyt)QTYiepF+5qghmqlXdBkFs!GzE-K?QTc`@_?oPvOImQMAdkB3x(0=FSY5$n}Gt0fD(Xpo&zc_EV8Uoz_Nl@O?^FJI2?Zg zWcz%cAAkPswo^I6o#%iHV*tU0yO&@A$drQ&ErPsz^1iv)!qWx`>CG4=eww6o13SGC z#xX{{(SZp=i-nPe1=jy*LD9w8KC{Mibs<&$XFK~#1p9-7gA4wNb9I__c6P3n7Onng zKEPFKS928LDJpJ--!5l66Z<1q`C@1Il(Juet+L+sptqv6xf#>si)>QnNT_8GxjOca zp%-*fu(U`6cXZEt^oYdC9VotzV;T6DP#|^QK-0J$X9I6udQUM;PbX+Tk3H^Tx2UHd z+Fg8WVWA+BO6-P=4-r&+S~zYFs@HM{Jj5a}@Kff&==H@Ci`6qNl-9Mw-1!P8S`b)< zK~9b4t-$>cuC6s0jiKk^GAmlwmq_O95)1JDY;sxP z_0!q60#?Kgk}0?n<5N=>fUYEqe@5UdGu+iJz5pn|6)d8(V{G5q-R*amp2{X!d;j~4 zBFmC(vbY?0vPI|kP`1K&ZGB)ip0knshpYj1N{T<~0%yiUi~qYg`>UG(3IG;X2M9Vv z*fug6jw1vsqfXH0I2lg2%Rw95-1j`37#@D(Fz3S>YGX7}Z8xNKm6XwH`s!8ZAC4-5 zb_UP&y_xFVesFq{&Q2nSd9h?QfFu2}!V);IsQ0D>IHt1vHqzS&E?W)Fe)S|aonTc) zd)NY;oB+!xXdgNFMIRFrGbDL^IwrAEZQ7_~VR1w4_5-uqf9vCTa@T4ZP)DcgZeD4rW2Eqg-Vz>2!#ODE`t$8qK4B?$f^)1>juL*D%L`KE z2U>7Gd-jZlpCcX*Bv%>_OdNBdJ#H}Ip)F4R;AMRi0DGI%SFwQCWFo4-_@UYvGY1f# z&Q2dbNY(+?;||nD{?3vEW{G;LK+wOcGUBkrRDKg5G|)YMo-J^EqWC9>7n~!y{dn>e z&s5NXX1Bj*`h>&#xqa3ENa@F)@87@spYP3pyXQi-M+?_sX|F->CMnO2tgYXrK-yUW zODnb=$_c6p$Wj2*_I1u7!GPn9#R0;BekJStXuW}Knfk{aQWxvHfdvp@L;uWqd=_N@ zY9syen*xTeh@R(nu(V%?%a0;2e*(@+TmbOPb161*AV{OtOqETDhMTtB2ch@_8ZA&8 z!zsRE)}3mTdYvMXEpM89eW}sQ|+Xxt&WVYuCxQ_Hfq{g8l+7j*N_CY^RSE zj#iNxUMX$?ij(JCa!(TFsZcqM;?=x`dTggefM&%=5(PhuBSKmOu6FL7g+&PEkr^2A zz%z;d*&%WmBuH>2OS%x`YKYT=Z;0>NvI`MTZBiw#{EPH6+sB$NZ;Haj_h|tnM~}%k z4KRq(JXZ|f)LatJhLW|g%t4qmnHMCeKyXz+^1-Qk5*eMvQn^PsP`57>8l5!)80WSb zan`0l>n;#S@+hrA(!8M2|8&#G2XE2WJ~lSCJ7+TMQ9&3`m7sUCRsLN$sz^zuUFoso zYyPKCjV6H5t=W|WD3f$GnzU0~!vn#++n<2P0$^#M+RZpb%ZB6U$Qa#>%R3?n00P+ z=gbL$wwS9se9F(?YP&g@O_`dMWQq?gj(T?jOP0E$Gc$fb&K{nJCfd8IoBHD{v*+^> zqXmr0Ux`Iu5Yj4&wJx5!S3ZW0zp6+hU8IiznY|?+e4L>rj)TL%b^Ct-P6l7+h5_SM z5Gx#yBNrT3lBB}}Zb1zje*X8=%*;$Qlv~c84%R}U9O54J#|ko2ZonR818J-TQgX;` z4f3MzYOEs;aC46r0O3LoRNRUvB*WK$YL)DOt+$IzjnVL25gWDY=)l3mHBa3ljmGDS zJfSZLerDUP1}d$2wKIVJ9{fr@9)}n72*Fw^0aD@@sbEVb?-&S}U|)vj)}Yjq-K=(4 z>lL%h2Kxfcr8`i6?>B7~WwvyHYSfeAOf0l=#5b-FL~U*=tr6uBw6_K= ztEc#%<=%axr+3PXx-j%VC_qss7y8ZA_BlLH^j!+gc0B+?Y3MZNdL&>2&5iA??(iHkUVWfc|NMndAS zn$IfSpL_DbOrY5-wqad$WyJ&F#?=P+e1J^}fZ&fuo&_T#E)LDIQ2Y~bx>Ca`Oj6Dc z+tI>)3k0Ud!0LN>aq(vG(mY^&HxNx=0`bWB?9zfa((SNSP$*V$$-2KP2SCm??#1y6 zmw|bl5U)*7ZELDqg@(lPb7$jR0NBjP$;kl$?B#vS0%5M<@roSd%NoES*p;VJQ&O-E z0LThdN`DygVLvqMqay&gPLmXG9ygz$Ah|kcge_#o3WBD4gTGhf9Pk0Cdqx4FLK|)t z?GFgxZm!0ns@H~}2TH2fA({c(JdF8wwugSQ$hO1`U^QB_Hma^NpSsiHp9x>D?$-d z28k$c>xpq;vNU`+ejK6GlAxqbV18XjIP+XNFs})z1oJEi=9jTeguXZz-p*pBm`11Z zad$w$nM+Ql`E@U7>EV)L?ZlNuNU|pIU`#42gr`*Pug|m2z3(46E`6VMsN4AUT+Ew= zAdpy+@+VmXrWE*r%DN27D${2`Cpff!kzlSfFwHNl_I|Ltb4*)HSD1zlVsMtQ&z)`h|AdF76`XY-k8h8!^_@ zWZ>M1));7ZpWff7>hbYE_wE!YY>HblYH`=nFSL9Kt-#sDx4>5$ed=_VzkSNF6dh2d zDCYgH-M+o>`TcE)!$Z6rqF`cK;6^?68wI8ZZe6fGzD+2q>&DL4$kXvnOu~>nqQ zGo-QiH*+q3u%s3;UQkum)G-AKI8y@yLFf>Ai2JDO>$+$=%AwRxY~X~2#1x-J&tw43 zmjt-zOZ{J=SpKCBEU%Vj1-|m*Cc8r|6{KetlO-2F`HO1_A@0mh%sd@YXG)m!FifX4{(BGUeKxXo#{yzay60Pk^DW!5QRX`sMY$7`~ zsBGH~e6F^dHSspq)G-eD1Mt~?EmfZ;;MCe`-pod3HFeAbP6xhGTTOR1^6YPJ|AiZI zYUR1q0-T)ay?5t2_zF(P%vqjIn}PAQ)$Gb~`IJ&B>yid^fSNjP$Eo2CG-uaV$8SBT zspHc)ouiA&>`SrKk=>K32 z&hW@Dk~)~b5AiP$l~QVN;dc!7uX0)n|8@eiYpdyq-B44*4Y=QA5>L^4T}>T#xD)pbI5l-l0DhM5awM@0IH|UJ&s$10 zbqsTdJ1V8rUcpyDudQY?PLJ_?>HrqU+fY--7jSwk4|K->^8@Zvkz)Hrz@s&Fai^@! zx9cJB1x$Z=7x+qTH7`V0)YMU0Q^%<_bu7i1R7t1yRZ8tOQg(`qs;T2toLRZ@rLMMm zk9*0{p>?m3{n_7g=6_}V~uY^?j>oxjn)Z956V}_TRz4?`)`) zQn7-5=?8x1d6v{CSbsYHAMrYn48nOxj2}U#dM(Decm1?Gj4vO)%D}yMp3FaRCM?>k zChbv5DF`0WzmtO551Qc{paKUc>3}zAfJc zQA(+F_zvhbbsPp9mBX?mvZl70f5s`#{=l($C{MPG_c_^2x&a;F0N|mTI-YlD{Od1! z+ikwJ^}t*nBg<|FPSKjVQfhDKE1=iZQ4E}ue^f*5oSX)!a zPipFN7Ia55FnhPhvVkjVtNHiZYI^cr7^RfTl;0Zq$v9us`H(1}_h%Dwu6)+5(I)dM z*&Qyp5AY-4?V397uBl^67V`!em*xC&VJFUGXcG;ER7$D6j^BWu&so?a3D)}^_BD_h zU~IAkwbgXtjFZl`!8miQ|Nr*xJ=n^sjN|whHP8(2glMLuR9^C0S?Xvif@WUxo}(y( zqmD~mHjZX0MXBYbWv*p@XtgC ziX50jEOD0fd?Q*eu62S|tJoBHt;RJs0_Ty5d1RwpqsUg$XU@MRRQBg(Q@}*8kFDo1U^Xx( zdc9C-2JZ~ZtmjQ?JW43o;-Ui(5lLIsgdXi(-ZrOLDv6uvwbKl1V3LcRVXF1q42;e= zo=OG~dJuH)L$Jhp<^uDh*Me@pe}{4>be(-JB5kME487+UpALKl&?6Z;H3I$yhpwxQjvLFMgo|IIs)3?)A9)EPb?{F{87 zT{wM$61s@AooYpKhXL#66-X78I-9)!6^rFs(foQYc813YJ?wj~T1aw59s?{Ql8I^w zy~tv??s_HkXm9p&1;mntxz)ZHwQJqa`juPOoZ)6dm$~<{4z5jUhAtv)r(!~n&g$ML z=UC#z^&WpR*C?{FxYEHhJ?swLM`+o4j`g9!-x>ZEeXZ6WcIizCT}0YWTv6O8%F~Z~ z{h0ULA))^x!8MD3p};WUD&VSUTi9ISc|s$Y(+Hj4BpEHai%8q)mC&Q5-BJ06QqhgT zuVTJ-H*i^wv1H-i1lKI8@ZQGJtJRJvErVs$QHUra(kdz~x$g~Zk#ih9bpfY3!znSH z;&6tii9fid6?_6rPH^30SqIX`ENHN$t%yjeRZ8e(D27`NxF^AN6Elt@OVgc6^elH; z=8^O*4;CGOh)5PzN$63}?!ya;rMuNg))DPiT6a(OH3_eq1$1T^NFS5r2SpK)ma|Gi zkG6w7QBW*Boos#e7O&3mHgH2u@ucbB&M-B}h0gE^=%~+>EGO(35D{rRm6qJIID5Mh zUjp_|aNSs1@34&v>%9JoOrq#}9&x7S{;!CLBvL7%-v)e`cOWsw)VjbKmH-#$5KCGn zC!L*t${C&nreqXPU!vu95oue!61p>V0(TS;OC<+dpXk)C>nYEpf@(Sm$B{N-9BTL4 ztR&k6MMPRsTQaX*@RAPWiSCaKCSL#&hRp!o1c<;a?4SJ9uaAC{Z_1q&okCDgYulZwglMD85ShD z*m}NCsMsHvX;ksLfODL|XEC_-Y(>~pJv58)+sv)ba9q(rh=^pV+6*1aQyd53)V1+R zFOIf`?FPJ@Sw!*P0`|))nFBb(3&2iZC1yQCfh)4jY}jNx%YX-fE1fAvk8tZ*3pf}!fY3U(FDLh@&TwGS zL5PUtp=Lq{u%2gtt+NlOs-}~9ch=J%I0!h3@GN>uYCnPic!$tJbTV*n)LF0Az4`$b znBfeMHym{DaYq8{0dEpkF8UFQ>$-KLlfU^i&mts%ZvYzdM{)8HVh1GhlN7d?I1oj{# z@e#ll^~4^zz!@%U;B&F8=W4?D+n3EFv&N7)p*tT^yFwc4> z0u!C#r5BnpO0zW{i@# zi1bzU&d_HP`lC1NKH!iBlKEM{)eYWr1)&Mdc*0h-fxy3j%^Do98T&>@y{683Ja9%9 zW0%}`XBb^{5F#Q)Nn8|XJzt~1WFBee2-1FpV@GcxG+~)ZG0FTDLYvr3ID;YK`SES! zN%XiuMEbaTmXA+L;eO2|bAV@3hyh^T=v9P?X`PK;#Tme2Lgjxcw(@0YG2#EzdqoE# zB2uJ8Gj!`&9XO%Mdo`QPA-#lNlof=oahY<470z%mFbuc}>O07$g>(T&I#b9IxgsK^ zl61*^e_%)x_qm_ulR3_?fN~w@TCWagcqOl!Im7GG7OrgxO>VMY8OYn&&SdxaLPVsM zBu(heEVthe9NcU&2e6*8z&g#2Q=kb&+|(JKcZQ>ZT?l*hTYaSi;A&^Mw&);4M9Lz` z@u?dT8p`x!%c;8LZaupYny=JjIw6@iJsXXZ`Oljjrv#pM zhV62R%?b{Z!uh&$^0VPBbh@%#c(}Y&tAYeq<@5K zmX-piI#Z6nLlKd(icRR&GXOZQjdl$sBSjhO?f5z@ET9(Q5}n|N2(b1^gNq=L}1W4n{r$&)qo8NXR;59e%*nPz`sd4N4pm38Q?@` z>Mq0-5$W^d62OVn-pZt8UfV6s)ZIsYd+QlTNYI^xR=52L$$LXuXNy@qJ^`)*E{^+Q zMnpua>$Ppodinu#fi0_iF3n{AQ{b1)j#EkJ1gnTv=tuhNoxwPLsq z;0H?Pi8Ngd7d272&3YyQV}SF3FE=}G!5#v}Izva%fryB-lU0`7qjS$+q;dzbG?V!S zz$FcS{54=r!ZYQvdIi|g89LJ(G%AYQ2N(q$4y={t_!)YeuowR(XLzdUU_?aPQKe_- z{Ry4KP6kE*tFv;M{exz2*kCgM2)KjLacu@+W#Pam#servb@wVUX5FIHde#AsA|&_S zv%FV>RsatGHv)I4*iA$vTeW(*Zwed+j87?<{{*SYE%)8Qv-2{#eg2!r#GgU?*Te5pe(u2nX{_2c|p2n+3%oBGTv7JP$oBbtLme zgyq=@&hT`d_xKJWu^$7hQ+JTbEdu^Xh_O^l$k7VR4#2M6Uc)lD)l$N4h-V1T#iut@ z1SldR&B-O9CrIX9z!bu4d`bg*w|m}iE#QZQCHe1>PRFz^;2y$ke2OzHOJU4hSkDH) zw+OozHthD=pvRxr0X_i!*X{LQ^y^!|bHKCF>m_ISB-d|5L_}g`p3tr5e8PU}N}eVp z@msR$cWymH3D22F(O8A}v#g9!OUNQ3Qc9U7^q6Gc3EWCpuAYk%5ZoJ3fPhLu&> z6M#u+6ak8eh~y>f8T$5wXV{aS;nmD;)CB9<4%ipC%NbrSIvx=bkw)ZJhbP*AeHlTzqA|lcTl+Z;)MB2dr0ovy0Ox)~P;Q#;t07*qoM6N<$f`f5x AGXMYp diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index c755e0202..076a35d4a 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -113,18 +113,22 @@ iD.ui.preset = function(context, entity, preset) { .attr('for', function(field) { return 'preset-input-' + field.id; }) .text(function(field) { return field.label(); }); - label.append('button') - .attr('class', 'fr icon undo modified-icon') - .attr('tabindex', -1) - .on('click', revert); + label.append('button') - .attr('class', 'tag-reference-button') + .attr('class', 'tag-reference-button fr') .attr('tabindex', -1) .on('click', toggleReference) .append('span') .attr('class', 'icon inspect'); + label.append('button') + .attr('class', 'fr modified-icon') + .attr('tabindex', -1) + .on('click', revert) + .append('div') + .attr('class','icon undo'); + enter.each(function(field) { d3.select(this).call(field.input); }); diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index 3d106107e..b0986c19c 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -270,7 +270,7 @@ iD.ui.PresetGrid = function(context, entity) { .attr('class', 'tag-reference-button') .on('click', helpClick, selection) .append('span') - .attr('class', 'icon inspect'); + .attr('class', 'icon inspect light'); entries.order(); } diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index a295e9d76..c0a3bcfab 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -101,7 +101,7 @@ iD.ui.Taglist = function(context, entity) { .call(iD.ui.TagReference(entity, {key: tag.key})); }) .append('span') - .attr('class', 'icon inspect'); + .attr('class', 'icon inspect light'); row.append('div') .attr('class', 'tag-help'); From 6f04e541b108bfd2cd83754e4b8521fd706fc1a3 Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 20:52:02 -0400 Subject: [PATCH 62/69] resolve conflict --- css/app.css | 84 ++++++++++++++++++++++------------------ img/source/sprite.svg | 53 ++++++++++++++++++------- img/sprite.png | Bin 22721 -> 22943 bytes js/id/ui/preset.js | 14 ++++--- js/id/ui/preset_grid.js | 2 +- js/id/ui/taglist.js | 2 +- 6 files changed, 97 insertions(+), 58 deletions(-) diff --git a/css/app.css b/css/app.css index 0c71c09ad..82dac0161 100644 --- a/css/app.css +++ b/css/app.css @@ -491,7 +491,6 @@ button[disabled] .label { .icon.plus { background-position: -240px 0px;} .icon.search { background-position: -280px 0px;} .icon.geocode { background-position: -280px 0px;} -.icon.help { background-position: -460px 0px;} .icon.layers { background-position: -300px 0px;} .icon.avatar { background-position: -320px 0px;} .icon.nearby { background-position: -340px 0px;} @@ -499,8 +498,11 @@ button[disabled] .label { .icon.warning { background-position: -380px 0px;} .icon.back { background-position: -420px 0px;} .icon.forward { background-position: -440px 0px;} +.icon.help { background-position: -460px 0px;} +.icon.inspect.light { background-position: -220px -20px;} .icon.geocode.light { background-position: -280px -20px;} +.icon.help.light { background-position: -460px -20px;} .fillD .icon.avatar { background-position: -320px -20px;} .fillD .icon.nearby { background-position: -340px -20px;} @@ -512,7 +514,6 @@ button[disabled] .icon.add-area { background-position: -60px -40px;} button.disabled .icon.undo { background-position: -80px -40px;} button.disabled .icon.redo { background-position: -100px -40px;} button[disabled] .apply.icon { background-position: -120px -40px;} -button[disabled] .save.icon { background-position: -140px -40px;} button[disabled] .close.icon { background-position: -160px -40px;} button[disabled] .delete.icon { background-position: -180px -40px;} button[disabled] .icon.remove { background-position: -200px -40px;} @@ -705,25 +706,6 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} background: #ececec; } -.grid-entry:hover .tag-reference-button { - display: block; - border-radius: 0; -} - -.grid-entry .tag-reference-button { - display: none; - position: absolute; - bottom: 0; - right: 0; - height: 30px; - width: 30px; - background: rgba(0,0,0,.5); -} - -.grid-entry .tag-reference-button:hover { - background: rgba(0,0,0,.9); -} - .grid-entry > .icon { position: absolute; top: 30px;left: 0px; right: 0px; @@ -852,6 +834,25 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} color: #222; } +.grid-entry:hover .tag-reference-button { + opacity: 1; + border-radius: 0; +} + +.grid-entry .tag-reference-button { + opacity: 0; + position: absolute; + bottom: 0; + right: 0; + width: 20px; + height: 30px; + background: rgba(0,0,0,.5); +} + +.grid-entry .tag-reference-button:hover { + background: rgba(0,0,0,.9); +} + /* Preset icon colors */ .inspector-body-line .icon.feature-marker-stroked { @@ -910,7 +911,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} } .tag-wrap .preset-icon-wrap div { - height: 90px; + height: 80px; width: 33.3333%; width: -webkit-calc(33.3333% - 10px); width: calc(33.3333% - 10px); @@ -937,29 +938,38 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} padding-right: 20px; } -.form-field .modified-icon { - opacity: 0.2; - display: none; - pointer-events: all; -} - -.form-field .modified-icon:hover { - opacity: 0.5; -} - -.form-field.modified .modified-icon { - display: inline-block; -} - .form-label { + position: relative; font-weight: bold; border: 1px solid #cfcfcf; - padding: 5px 10px; + padding: 5px 0px 5px 10px; background: #f6f6f6; display: block; border-radius: 4px 4px 0 0; } +.form-label button { + pointer-events: all; + height: 29px; + margin-top: -5px; + border-left: 1px solid #CCC; + border-radius: 0; + opacity: .5; +} + +.form-label .modified-icon { + border-right: 0; + opacity: 0; +} + +.modified .form-label .modified-icon { + opacity: .5; +} + +.form-label button.tag-reference-button { + border-top-right-radius: 3px; +} + .form-field > input, .form-field > textarea, .form-field .preset-input-wrap { diff --git a/img/source/sprite.svg b/img/source/sprite.svg index 0852ffb8e..51dfac05e 100644 --- a/img/source/sprite.svg +++ b/img/source/sprite.svg @@ -38,9 +38,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="7.858048" - inkscape:cx="497.26876" - inkscape:cy="307.47415" + inkscape:zoom="11.079848" + inkscape:cx="223.17822" + inkscape:cy="307.03685" inkscape:document-units="px" inkscape:current-layer="layer12" showgrid="true" @@ -53,7 +53,7 @@ fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" - showguides="false" + showguides="true" inkscape:guide-bbox="true" inkscape:snap-bbox="true" inkscape:snap-nodes="true" @@ -364,14 +364,9 @@ id="path3769" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccc" /> - + transform="translate(0,50)" + style="fill:#1a1a1a;fill-opacity:1"> + + + + + + + diff --git a/img/sprite.png b/img/sprite.png index 781926dcb5c8a37a925ce3c0339aed213d70e431..a82be2edf867ee3a297a3f55d8562c5e63d133ae 100644 GIT binary patch literal 22943 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 XSZ%~Sx{8Eo00000NkvXXu0mjfH66=r literal 22721 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 AGXMYp diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index c755e0202..076a35d4a 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -113,18 +113,22 @@ iD.ui.preset = function(context, entity, preset) { .attr('for', function(field) { return 'preset-input-' + field.id; }) .text(function(field) { return field.label(); }); - label.append('button') - .attr('class', 'fr icon undo modified-icon') - .attr('tabindex', -1) - .on('click', revert); + label.append('button') - .attr('class', 'tag-reference-button') + .attr('class', 'tag-reference-button fr') .attr('tabindex', -1) .on('click', toggleReference) .append('span') .attr('class', 'icon inspect'); + label.append('button') + .attr('class', 'fr modified-icon') + .attr('tabindex', -1) + .on('click', revert) + .append('div') + .attr('class','icon undo'); + enter.each(function(field) { d3.select(this).call(field.input); }); diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index eb83c3a8b..c1d73a3a4 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -268,7 +268,7 @@ iD.ui.PresetGrid = function(context, entity) { .attr('class', 'tag-reference-button') .on('click', helpClick, selection) .append('span') - .attr('class', 'icon inspect'); + .attr('class', 'icon inspect light'); entries.order(); } diff --git a/js/id/ui/taglist.js b/js/id/ui/taglist.js index a295e9d76..c0a3bcfab 100644 --- a/js/id/ui/taglist.js +++ b/js/id/ui/taglist.js @@ -101,7 +101,7 @@ iD.ui.Taglist = function(context, entity) { .call(iD.ui.TagReference(entity, {key: tag.key})); }) .append('span') - .attr('class', 'icon inspect'); + .attr('class', 'icon inspect light'); row.append('div') .attr('class', 'tag-help'); From ffaea10ca44cbd84759155dcc60939d5709ca5fb Mon Sep 17 00:00:00 2001 From: saman bb Date: Mon, 25 Mar 2013 21:34:40 -0400 Subject: [PATCH 63/69] sketchy version of reference animation. --- css/app.css | 5 ++++- js/id/ui/preset.js | 22 +++++++++++++++++++--- js/id/ui/tag_reference.js | 1 - 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/css/app.css b/css/app.css index 82dac0161..79921ba30 100644 --- a/css/app.css +++ b/css/app.css @@ -1249,7 +1249,6 @@ div.combobox { border-right: 1px solid #CCC; } - .tag-row:first-child input.key { border-top: 1px solid #CCC; border-top-left-radius: 4px; @@ -1309,6 +1308,10 @@ div.combobox { /* Tag reference */ +.tag-help { + overflow: hidden; +} + img.wiki-image { float: left; max-width: 33.3333%; diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 076a35d4a..2afb1c1f8 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -143,13 +143,29 @@ iD.ui.preset = function(context, entity, preset) { selection.selectAll('.tag-help') .style('display', function(field) { - return field.showingReference ? 'block' : 'none'; + return field.showingReference ? 'block' : 'block'; }) .each(function(field) { if (field.showingReference) { d3.select(this) - .call(iD.ui.TagReference(entity, {key: field.key})); - } + .call(iD.ui.TagReference(entity, {key: field.key})) + .style('max-height', '0px') + .style('padding-top', '0px') + .style('opacity', '0') + .transition() + .duration(200) + .style('padding-top', '20px') + .style('max-height', '200px') + .style('opacity', '1'); + } else { + d3.select(this) + .call(iD.ui.TagReference(entity, {key: field.key})) + .transition() + .duration(200) + .style('max-height', '0px') + .style('padding-top', '0px') + .style('opacity', '0'); + } }); selection.exit() diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index 8d6b132a1..b2c90dbf4 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -59,7 +59,6 @@ iD.ui.TagReference = function(entity, tag) { .attr('target', '_blank') .attr('href', 'http://wiki.openstreetmap.org/wiki/' + docs.title) .text(t('inspector.reference')); - }); } }; From 14f1d85e1e468504241bfd9f2312cfd89f62d610 Mon Sep 17 00:00:00 2001 From: saman bb Date: Tue, 26 Mar 2013 02:01:48 -0400 Subject: [PATCH 64/69] style tweak to backgrounds/ --- css/app.css | 5 +++++ js/id/ui/preset_grid.js | 2 +- js/id/ui/tag_editor.js | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/css/app.css b/css/app.css index 79921ba30..93ce61591 100644 --- a/css/app.css +++ b/css/app.css @@ -257,6 +257,11 @@ ul.link-list li:last-child { color: #333; } +.fillL3 { + background: #f1f1f1; + color: #333; +} + .fillD { background:rgba(0,0,0,.8); color: #6C6C6C; diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js index c1d73a3a4..41e8330fb 100644 --- a/js/id/ui/preset_grid.js +++ b/js/id/ui/preset_grid.js @@ -114,7 +114,7 @@ iD.ui.PresetGrid = function(context, entity) { .attr('class', 'arrow'); subgrid.append('div') - .attr('class', 'preset-grid fillL2 cf fl') + .attr('class', 'preset-grid fillL3 cf fl') .data([d.members.collection]) .call(drawGrid, 1000); diff --git a/js/id/ui/tag_editor.js b/js/id/ui/tag_editor.js index cab261199..a0e942de0 100644 --- a/js/id/ui/tag_editor.js +++ b/js/id/ui/tag_editor.js @@ -50,7 +50,7 @@ iD.ui.TagEditor = function(context, entity) { .attr('class', 'tag-wrap inspector-body fillL2 inspector-body-' + geometry); editorwrap.append('div') - .attr('class', 'col12 inspector-inner preset-icon-wrap') + .attr('class', 'col12 inspector-inner preset-icon-wrap fillL3') .append('div') .attr('class','fillL') .append('span') From 93104c268f81bd93fe59807b79cded107dfb9fa8 Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Tue, 26 Mar 2013 12:20:51 -0400 Subject: [PATCH 65/69] Fix jshint errors --- js/id/svg/vertices.js | 4 ++-- js/id/ui/spinner.js | 2 +- js/id/ui/tag_reference.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/js/id/svg/vertices.js b/js/id/svg/vertices.js index 0418f63af..2e0982a00 100644 --- a/js/id/svg/vertices.js +++ b/js/id/svg/vertices.js @@ -69,13 +69,13 @@ iD.svg.Vertices = function(projection, context) { groups.select('circle.shadow') .each(center) .attr('r', function(entity) { - return radiuses.shadow[icon(entity) ? 3 : zoom] + return radiuses.shadow[icon(entity) ? 3 : zoom]; }); groups.select('circle.stroke') .each(center) .attr('r', function(entity) { - return radiuses.stroke[icon(entity) ? 3 : zoom] + return radiuses.stroke[icon(entity) ? 3 : zoom]; }); // Each vertex gets either a circle or a use, depending diff --git a/js/id/ui/spinner.js b/js/id/ui/spinner.js index c567dd257..4085d62f7 100644 --- a/js/id/ui/spinner.js +++ b/js/id/ui/spinner.js @@ -15,5 +15,5 @@ iD.ui.Spinner = function(context) { img.transition() .style('opacity', 0); }); - } + }; }; diff --git a/js/id/ui/tag_reference.js b/js/id/ui/tag_reference.js index b2c90dbf4..34780c0d0 100644 --- a/js/id/ui/tag_reference.js +++ b/js/id/ui/tag_reference.js @@ -60,5 +60,5 @@ iD.ui.TagReference = function(entity, tag) { .attr('href', 'http://wiki.openstreetmap.org/wiki/' + docs.title) .text(t('inspector.reference')); }); - } + }; }; From 6f9f7174b2316e5201130f88e11c7a5e1f2203f7 Mon Sep 17 00:00:00 2001 From: Saman Bemel-Benrud Date: Tue, 26 Mar 2013 12:20:59 -0400 Subject: [PATCH 66/69] 2x sprite update. --- img/source/sprite.svg | 114 ++++++++++++++++++++---------------------- img/sprite2x.png | Bin 51327 -> 22943 bytes 2 files changed, 54 insertions(+), 60 deletions(-) diff --git a/img/source/sprite.svg b/img/source/sprite.svg index 51dfac05e..52a403fae 100644 --- a/img/source/sprite.svg +++ b/img/source/sprite.svg @@ -13,7 +13,7 @@ height="320" id="svg12393" version="1.1" - inkscape:version="0.48.1 r9760" + inkscape:version="0.48.2 r9819" sodipodi:docname="sprite.svg" inkscape:export-filename="/Users/saman/work_repos/iD/img/sprite.png" inkscape:export-xdpi="90" @@ -38,12 +38,12 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="11.079848" - inkscape:cx="223.17822" - inkscape:cy="307.03685" + inkscape:zoom="1" + inkscape:cx="319.99979" + inkscape:cy="247.06899" inkscape:document-units="px" inkscape:current-layer="layer12" - showgrid="true" + showgrid="false" inkscape:window-width="1483" inkscape:window-height="804" inkscape:window-x="131" @@ -214,7 +214,7 @@ image/svg+xml - + @@ -994,7 +994,7 @@ @@ -1516,7 +1516,7 @@ transform="translate(10.000004,-1.9999957)"> @@ -1550,11 +1550,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" + d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" transform="matrix(1.009009,0,0,1.009009,-411.98649,15.371188)" /> @@ -1606,11 +1606,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" + d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,15.371188)" /> @@ -1690,11 +1690,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" + d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,14.371188)" /> @@ -1740,7 +1740,7 @@ transform="translate(10.000004,-1.9999957)"> @@ -1774,11 +1774,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" + d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" transform="matrix(1.009009,0,0,1.009009,-411.98649,15.371188)" /> @@ -1830,11 +1830,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" + d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,15.371188)" /> @@ -1929,11 +1929,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" + d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" transform="matrix(1.009009,0,0,1.009009,-410.98649,14.371188)" /> @@ -1979,7 +1979,7 @@ transform="translate(10.000004,-1.9999957)"> @@ -2013,11 +2013,11 @@ sodipodi:cy="-129.34375" sodipodi:rx="3.46875" sodipodi:ry="3.46875" - d="m 106.03125,-129.34375 a 3.46875,3.46875 0 1 1 -6.9375,0 3.46875,3.46875 0 1 1 6.9375,0 z" + d="m 106.03125,-129.34375 c 0,1.91574 -1.55301,3.46875 -3.46875,3.46875 -1.91574,0 -3.46875,-1.55301 -3.46875,-3.46875 0,-1.91574 1.55301,-3.46875 3.46875,-3.46875 1.91574,0 3.46875,1.55301 3.46875,3.46875 z" transform="matrix(1.009009,0,0,1.009009,-411.98649,15.371188)" /> - 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 XSZ%~Sx{8Eo00000NkvXXu0mjfH66=r literal 51327 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 CRle;2 From 0c1583caaf7d65c799b80ae274eb7f785c5c4d5a Mon Sep 17 00:00:00 2001 From: Saman Bemel-Benrud Date: Tue, 26 Mar 2013 12:25:43 -0400 Subject: [PATCH 67/69] copy fix. --- data/core.yaml | 2 +- data/locales.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/core.yaml b/data/core.yaml index a031ad0b6..dc8437ed7 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -136,7 +136,7 @@ en: no_documentation_key: There is no documentation available for this key show_more: Show More new_tag: New tag - view_on_osm: View on OSM + view_on_osm: View on OSM → editing_feature: "Editing {feature}" additional: Additional tags choose: Select feature type diff --git a/data/locales.js b/data/locales.js index cc1170352..6791c09ad 100644 --- a/data/locales.js +++ b/data/locales.js @@ -139,7 +139,7 @@ locale.en = { "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.", - "view_on_osm": "View on OSM →", + "view_on_osm": "View on OSM", "zoom_in_edit": "zoom in to edit the map", "logout": "logout", "report_a_bug": "report a bug", @@ -172,7 +172,7 @@ locale.en = { "no_documentation_key": "There is no documentation available for this key", "show_more": "Show More", "new_tag": "New tag", - "view_on_osm": "View on OSM", + "view_on_osm": "View on OSM →", "editing_feature": "Editing {feature}", "additional": "Additional tags", "choose": "Select feature type", From e0dc20ff5839548cd33776d0a0a2f7730cb9af6f Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Tue, 26 Mar 2013 12:31:55 -0400 Subject: [PATCH 68/69] Revert and inspector buttons should not focus the form. Fixes #1139 --- js/id/ui/preset.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js index 2afb1c1f8..308005835 100644 --- a/js/id/ui/preset.js +++ b/js/id/ui/preset.js @@ -68,6 +68,8 @@ iD.ui.preset = function(context, entity, preset) { } function revert(field) { + d3.event.stopPropagation(); + d3.event.preventDefault(); var t = {}; field.keys.forEach(function(key) { t[key] = original ? original.tags[key] : undefined; @@ -76,6 +78,8 @@ iD.ui.preset = function(context, entity, preset) { } function toggleReference(field) { + d3.event.stopPropagation(); + d3.event.preventDefault(); _.forEach(fields, function(other) { if (other.id === field.id) { other.showingReference = !other.showingReference; @@ -113,8 +117,6 @@ iD.ui.preset = function(context, entity, preset) { .attr('for', function(field) { return 'preset-input-' + field.id; }) .text(function(field) { return field.label(); }); - - label.append('button') .attr('class', 'tag-reference-button fr') .attr('tabindex', -1) @@ -157,14 +159,14 @@ iD.ui.preset = function(context, entity, preset) { .style('padding-top', '20px') .style('max-height', '200px') .style('opacity', '1'); - } else { + } else { d3.select(this) .call(iD.ui.TagReference(entity, {key: field.key})) .transition() .duration(200) .style('max-height', '0px') .style('padding-top', '0px') - .style('opacity', '0'); + .style('opacity', '0'); } }); From 6fd8613a8bf894a1448823b937df8932d566d2eb Mon Sep 17 00:00:00 2001 From: Tom MacWright Date: Tue, 26 Mar 2013 12:33:50 -0400 Subject: [PATCH 69/69] Trailing whitespace --- css/app.css | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/css/app.css b/css/app.css index 93ce61591..b469ee8e3 100644 --- a/css/app.css +++ b/css/app.css @@ -901,7 +901,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} border-bottom: 1px solid #CCC; } -.tag-wrap .preset-icon-wrap::after { +.tag-wrap .preset-icon-wrap::after { content: ""; position: absolute; height: 0; @@ -915,7 +915,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} border-bottom-color: #CCC; } -.tag-wrap .preset-icon-wrap div { +.tag-wrap .preset-icon-wrap div { height: 80px; width: 33.3333%; width: -webkit-calc(33.3333% - 10px); @@ -926,7 +926,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} position: relative; } -.tag-wrap .preset-icon-wrap .preset-icon { +.tag-wrap .preset-icon-wrap .preset-icon { position: absolute; top: 30px; left: 0px; @@ -934,11 +934,11 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} margin: auto; } -.tag-wrap .preset-icon-wrap .preset-icon.line { +.tag-wrap .preset-icon-wrap .preset-icon.line { top: 15px; } -.inspector-preset .form-field { +.inspector-preset .form-field { padding-left: 20px; padding-right: 20px; } @@ -962,7 +962,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} opacity: .5; } -.form-label .modified-icon { +.form-label .modified-icon { border-right: 0; opacity: 0; } @@ -971,7 +971,7 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;} opacity: .5; } -.form-label button.tag-reference-button { +.form-label button.tag-reference-button { border-top-right-radius: 3px; } @@ -1313,11 +1313,11 @@ div.combobox { /* Tag reference */ -.tag-help { +.tag-help { overflow: hidden; } -img.wiki-image { +img.wiki-image { float: left; max-width: 33.3333%; margin-right: 20px;