Update iD, set locale

This commit is contained in:
John Firebaugh 2013-05-03 11:06:16 -07:00
parent cfbb80d2d4
commit 3da2a95cea
29 changed files with 2221 additions and 330 deletions

519
vendor/assets/iD/iD.js vendored
View file

@ -14782,8 +14782,8 @@ if (typeof exports === 'object') {
(function () {
'use strict';
window.iD = function () {
locale.en = iD.data.en;
locale.current('en');
window.locale.en = iD.data.en;
window.locale.current('en');
var context = {},
storage;
@ -14805,7 +14805,13 @@ window.iD = function () {
container,
ui = iD.ui(context),
map = iD.Map(context),
connection = iD.Connection();
connection = iD.Connection(),
locale = iD.detect().locale,
localePath;
if (locale && iD.data.locales.indexOf(locale) === -1) {
locale = locale.split('-')[0];
}
connection.on('load.context', function loadContext(err, result) {
history.merge(result);
@ -14816,20 +14822,21 @@ window.iD = function () {
return context;
};
context.locale = function(_, path) {
locale = _;
localePath = path;
return context;
};
context.ui = function() {
return function(container) {
context.container(container);
var detectedLocale = iD.detect().locale;
if (iD.data.locales.indexOf(detectedLocale) === -1) {
detectedLocale = detectedLocale.split('-')[0];
}
if (detectedLocale !== 'en' && iD.data.locales.indexOf(detectedLocale) !== -1) {
d3.json(context.assetPath() + 'locales/' + detectedLocale + '.json', function(err, result) {
locale[detectedLocale] = result;
locale.current(detectedLocale);
if (locale && locale !== 'en' && iD.data.locales.indexOf(locale) !== -1) {
localePath = localePath || context.assetPath() + 'locales/' + locale + '.json';
d3.json(localePath, function(err, result) {
window.locale[locale] = result;
window.locale.current(locale);
container.call(ui);
});
} else {
@ -15474,6 +15481,56 @@ _.extend(iD.geo.Extent.prototype, {
[this[1][0] + dLon, this[1][1] + dLat]);
}
});
// For fixing up rendering of multipolygons with tags on the outer member.
// https://github.com/systemed/iD/issues/613
iD.geo.isSimpleMultipolygonOuterMember = function(entity, graph) {
if (entity.type !== 'way')
return false;
var parents = graph.parentRelations(entity);
if (parents.length !== 1)
return false;
var parent = parents[0];
if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1)
return false;
var members = parent.members, member;
for (var i = 0; i < members.length; i++) {
member = members[i];
if (member.id === entity.id && member.role && member.role !== 'outer')
return false; // Not outer member
if (member.id !== entity.id && (!member.role || member.role === 'outer'))
return false; // Not a simple multipolygon
}
return parent;
};
iD.geo.simpleMultipolygonOuterMember = function(entity, graph) {
if (entity.type !== 'way')
return false;
var parents = graph.parentRelations(entity);
if (parents.length !== 1)
return false;
var parent = parents[0];
if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1)
return false;
var members = parent.members, member, outerMember;
for (var i = 0; i < members.length; i++) {
member = members[i];
if (!member.role || member.role === 'outer') {
if (outerMember)
return false; // Not a simple multipolygon
outerMember = member;
}
}
return outerMember && graph.hasEntity(outerMember.id);
};
iD.actions = {};
iD.actions.AddEntity = function(way) {
return function(graph) {
@ -17603,9 +17660,13 @@ iD.modes.DragNode = function(context) {
var parentWays = _.pluck(context.graph().parentWays(entity), 'id');
context.enter(
iD.modes.Select(context, parentWays)
.suppressMenu(true));
if (parentWays.length) {
context.enter(
iD.modes.Select(context, parentWays)
.suppressMenu(true));
} else {
context.enter(iD.modes.Browse(context));
}
}
function cancel() {
@ -20074,6 +20135,8 @@ _.extend(iD.Way.prototype, {
isOneWay: function() {
return this.tags.oneway === 'yes' ||
this.tags.oneway === '1' ||
this.tags.oneway === '-1' ||
this.tags.waterway === 'river' ||
this.tags.waterway === 'stream' ||
this.tags.junction === 'roundabout';
@ -20616,6 +20679,7 @@ iD.Map = function(context) {
.on('zoom', zoomPan),
dblclickEnabled = true,
transformStart,
transformed = false,
minzoom = 0,
layers = [
iD.Background().projection(projection),
@ -20661,14 +20725,14 @@ iD.Map = function(context) {
.call(iD.svg.Surface(context));
surface.on('mouseover.vertices', function() {
if (map.editable() && !isTransformed()) {
if (map.editable() && !transformed) {
var hover = d3.event.target.__data__;
surface.call(vertices.drawHover, context.graph(), hover, map.zoom());
}
});
surface.on('mouseout.vertices', function() {
if (map.editable() && !isTransformed()) {
if (map.editable() && !transformed) {
var hover = d3.event.relatedTarget && d3.event.relatedTarget.__data__;
surface.call(vertices.drawHover, context.graph(), hover, map.zoom());
}
@ -20774,20 +20838,17 @@ iD.Map = function(context) {
'translate(' + tX + 'px,' + tY + 'px)' :
'translate3d(' + tX + 'px,' + tY + 'px, 0)');
transformed = true;
supersurface.style(transformProp, transform);
queueRedraw();
dispatch.move(map);
}
function isTransformed() {
var prop = supersurface.style(transformProp);
return prop && prop !== 'none';
}
function resetTransform() {
if (!isTransformed()) return false;
if (!transformed) return false;
supersurface.style(transformProp, '');
transformed = false;
return true;
}
@ -21073,13 +21134,16 @@ iD.svg = {
b,
i = 0,
offset = dt,
segments = [];
segments = [],
coordinates = graph.childNodes(entity).map(function(n) {
return n.loc;
});
if (entity.tags.oneway === '-1') coordinates.reverse();
d3.geo.stream({
type: 'LineString',
coordinates: graph.childNodes(entity).map(function(n) {
return n.loc;
})
coordinates: coordinates
}, projection.stream({
lineStart: function() {},
lineEnd: function() {},
@ -21137,32 +21201,6 @@ iD.svg = {
}
};
iD.svg.Areas = function(projection) {
// For fixing up rendering of multipolygons with tags on the outer member.
// https://github.com/systemed/iD/issues/613
function isSimpleMultipolygonOuterMember(entity, graph) {
if (entity.type !== 'way')
return false;
var parents = graph.parentRelations(entity);
if (parents.length !== 1)
return false;
var parent = parents[0];
if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1)
return false;
var members = parent.members, member;
for (var i = 0; i < members.length; i++) {
member = members[i];
if (member.id === entity.id && member.role && member.role !== 'outer')
return false; // Not outer member
if (member.id !== entity.id && (!member.role || member.role === 'outer'))
return false; // Not a simple multipolygon
}
return parent;
}
// Patterns only work in Firefox when set directly on element
var patterns = {
wetland: 'wetland',
@ -21200,7 +21238,7 @@ iD.svg.Areas = function(projection) {
var entity = entities[i];
if (entity.geometry(graph) !== 'area') continue;
if (multipolygon = isSimpleMultipolygonOuterMember(entity, graph)) {
if (multipolygon = iD.geo.isSimpleMultipolygonOuterMember(entity, graph)) {
areas[multipolygon.id] = {
entity: multipolygon.mergeTags(entity.tags),
area: Math.abs(path.area(entity.asGeoJSON(graph, true)))
@ -21760,33 +21798,6 @@ iD.svg.Lines = function(projection) {
return as - bs;
}
// For fixing up rendering of multipolygons with tags on the outer member.
// https://github.com/systemed/iD/issues/613
function simpleMultipolygonOuterMember(entity, graph) {
if (entity.type !== 'way')
return false;
var parents = graph.parentRelations(entity);
if (parents.length !== 1)
return false;
var parent = parents[0];
if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1)
return false;
var members = parent.members, member, outer;
for (var i = 0; i < members.length; i++) {
member = members[i];
if (!member.role || member.role === 'outer') {
if (outer)
return false; // Not a simple multipolygon
outer = graph.entity(member.id);
}
}
return outer;
}
return function drawLines(surface, graph, entities, filter) {
function drawPaths(group, lines, filter, klass, lineString) {
lines = lines.filter(function(line) {
@ -21823,7 +21834,7 @@ iD.svg.Lines = function(projection) {
for (var i = 0; i < entities.length; i++) {
var entity = entities[i],
outer = simpleMultipolygonOuterMember(entity, graph);
outer = iD.geo.simpleMultipolygonOuterMember(entity, graph);
if (outer) {
lines.push(entity.mergeTags(outer.tags));
} else if (entity.geometry(graph) === 'line') {
@ -21850,6 +21861,7 @@ iD.svg.Lines = function(projection) {
.map(iD.svg.OneWaySegments(projection, graph, 35)));
var oneways = oneway.selectAll('path.oneway')
.filter(filter)
.data(segments, function(d) { return [d.id, d.index]; });
oneways.enter()
@ -24390,8 +24402,6 @@ iD.ui.preset = function(context, entity, preset) {
};
iD.ui.PresetGrid = function(context, entity) {
var event = d3.dispatch('choose', 'close'),
defaultLimit = 9,
currentlyDrawn = 9,
presets,
autofocus = false;
@ -24427,16 +24437,7 @@ iD.ui.PresetGrid = function(context, entity) {
var grid = gridwrap.append('div')
.attr('class', 'preset-grid fillL cf')
.data([context.presets().defaults(entity, 36).collection]);
var showMore = gridwrap.append('button')
.attr('class', 'fillL show-more')
.text(t('inspector.show_more'))
.on('click', function() {
grid.call(drawGrid, (currentlyDrawn += defaultLimit));
});
grid.call(drawGrid, defaultLimit);
.call(drawGrid, context.presets().defaults(entity, 36));
function keydown() {
// hack to let delete shortcut work when search is autofocused
@ -24463,7 +24464,6 @@ iD.ui.PresetGrid = function(context, entity) {
if (d3.event.keyCode === 13 && value.length) {
choose(grid.selectAll('.grid-entry:first-child').datum());
} else {
currentlyDrawn = defaultLimit;
grid.classed('filtered', value.length);
if (value.length) {
var results = presets.search(value);
@ -24471,11 +24471,9 @@ iD.ui.PresetGrid = function(context, entity) {
n: results.collection.length,
search: value
}));
grid.data([results.collection])
.call(drawGrid, defaultLimit);
grid.call(drawGrid, results);
} else {
grid.data([context.presets().defaults(entity, 36).collection])
.call(drawGrid, defaultLimit);
grid.call(drawGrid, context.presets().defaults(entity, 36));
}
}
}
@ -24508,15 +24506,14 @@ iD.ui.PresetGrid = function(context, entity) {
subgrid.append('div')
.attr('class', 'preset-grid fillL3 cf fl')
.data([d.members.collection])
.call(drawGrid, 1000);
.call(drawGrid, d.members);
subgrid.style('max-height', '0px')
.style('padding-bottom', '0px')
.transition()
.duration(300)
.style('padding-bottom', '20px')
.style('max-height', (d.members.collection.length / 3 * 150) + 200 + 'px');
.style('max-height', (d.members.collection.length * 80) + 200 + 'px');
}
// Preset
@ -24526,8 +24523,6 @@ iD.ui.PresetGrid = function(context, entity) {
}
}
function name(d) { return d.name(); }
// Inserts a div inline after the entry for the provided entity
// Used for preset descriptions, and for expanding categories
function insertBox(grid, entity, klass) {
@ -24554,25 +24549,24 @@ iD.ui.PresetGrid = function(context, entity) {
if (d === entity) index = i;
});
var insertIndex = index + 3 - index % 3;
if (insertIndex > shownIndex) insertIndex ++;
if (index >= shownIndex) index++;
var elem = document.createElement('div');
grid.node().insertBefore(elem, grid.node().childNodes[insertIndex]);
grid.node().insertBefore(elem, grid.node().childNodes[index + 1]);
var newbox = d3.select(elem)
.attr('class', 'col12 box-insert ' + klass + ' arrow-' + (index % 3))
.attr('class', 'col12 box-insert ' + klass)
.datum(entity);
return newbox;
}
function drawGrid(selection, limit) {
function drawGrid(grid, presets) {
function helpClick(d) {
d3.event.stopPropagation();
var presetinspect = insertBox(selection, d, 'preset-inspect');
var presetinspect = insertBox(grid, d, 'preset-inspect');
if (!presetinspect) return;
@ -24588,23 +24582,18 @@ iD.ui.PresetGrid = function(context, entity) {
tagReference.show();
}
if (selection.node() === grid.node()) {
showMore
.style('display', (selection.data()[0].length > limit) ? 'block' : 'none');
}
grid.selectAll('.preset-inspect, .subgrid').remove();
selection.selectAll('.preset-inspect, .subgrid').remove();
var entries = selection
.selectAll('div.grid-entry-wrap')
.data(function(d) { return d.slice(0, limit); }, name);
var entries = grid
.selectAll('.grid-entry-wrap')
.data(presets.collection, function(d) { return d.id; });
entries.exit()
.remove();
var entered = entries.enter()
.append('div')
.attr('class','grid-button-wrap col4 grid-entry-wrap')
.attr('class','grid-button-wrap col12 grid-entry-wrap')
.classed('category', function(d) { return !!d.members; })
.classed('current', function(d) { return d === preset; });
@ -24622,15 +24611,15 @@ iD.ui.PresetGrid = function(context, entity) {
var label = buttonInner.append('div')
.attr('class','label')
.text(name);
.text(function(d) { return d.name(); });
entered.filter(function(d) { return !d.members; })
.append('button')
.attr('tabindex', -1)
.attr('class', 'tag-reference-button minor')
.on('click', helpClick, selection)
.on('click', helpClick)
.append('span')
.attr('class', 'icon inspect');
.attr('class', 'icon inspect');
entries.order();
}
@ -29746,11 +29735,59 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"airport",
"aerodrome"
],
"fields": [
"ref",
"iata",
"icao",
"operator"
],
"tags": {
"aeroway": "aerodrome"
},
"name": "Airport"
},
"aeroway/apron": {
"icon": "airport",
"geometry": [
"area"
],
"terms": [
"ramp"
],
"fields": [
"ref",
"surface"
],
"tags": {
"aeroway": "apron"
},
"name": "Apron"
},
"aeroway/gate": {
"icon": "airport",
"geometry": [
"point"
],
"fields": [
"ref"
],
"tags": {
"aeroway": "gate"
},
"name": "Airport gate"
},
"aeroway/hangar": {
"geometry": [
"area"
],
"fields": [
"building_area"
],
"tags": {
"aeroway": "hangar"
},
"name": "Hangar"
},
"aeroway/helipad": {
"icon": "heliport",
"geometry": [
@ -29767,6 +29804,54 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
},
"name": "Helipad"
},
"aeroway/runway": {
"geometry": [
"line",
"area"
],
"terms": [
"landing strip"
],
"fields": [
"ref",
"surface"
],
"tags": {
"aeroway": "runway"
},
"name": "Runway"
},
"aeroway/taxiway": {
"geometry": [
"line"
],
"fields": [
"ref",
"surface"
],
"tags": {
"aeroway": "taxiway"
},
"name": "Taxiway"
},
"aeroway/terminal": {
"geometry": [
"point",
"area"
],
"terms": [
"airport",
"aerodrome"
],
"fields": [
"operator",
"building_area"
],
"tags": {
"aeroway": "terminal"
},
"name": "Airport terminal"
},
"amenity": {
"fields": [
"amenity"
@ -29954,6 +30039,22 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
},
"name": "Cinema"
},
"amenity/college": {
"icon": "college",
"fields": [
"operator",
"address"
],
"geometry": [
"point",
"area"
],
"tags": {
"amenity": "college"
},
"terms": [],
"name": "College"
},
"amenity/courthouse": {
"fields": [
"operator",
@ -30095,6 +30196,28 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
},
"name": "Hospital"
},
"amenity/kindergarten": {
"icon": "school",
"fields": [
"building_area",
"address"
],
"geometry": [
"point",
"vertex",
"area"
],
"terms": [
"preschool",
"nursery",
"childcare",
"playgroup"
],
"tags": {
"amenity": "kindergarten"
},
"name": "Kindergarten"
},
"amenity/library": {
"icon": "library",
"fields": [
@ -30585,7 +30708,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"tags": {
"amenity": "university"
},
"terms": [],
"terms": [
"college"
],
"name": "University"
},
"amenity/waste_basket": {
@ -32091,6 +32216,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
},
"name": "Man Made"
},
"man_made/breakwater": {
"geometry": [
"line",
"area"
],
"tags": {
"man_made": "breakwater"
},
"name": "Breakwater"
},
"man_made/cutline": {
"geometry": [
"line"
],
"tags": {
"man_made": "cutline"
},
"name": "Cut line"
},
"man_made/lighthouse": {
"geometry": [
"point",
@ -32111,6 +32255,19 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
},
"name": "Pier"
},
"man_made/pipeline": {
"geometry": [
"line"
],
"tags": {
"man_made": "pipeline"
},
"fields": [
"location",
"operator"
],
"name": "Pipeline"
},
"man_made/survey_point": {
"icon": "monument",
"geometry": [
@ -32125,6 +32282,19 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
],
"name": "Survey Point"
},
"man_made/tower": {
"geometry": [
"point",
"area"
],
"tags": {
"man_made": "tower"
},
"fields": [
"towertype"
],
"name": "Tower"
},
"man_made/wastewater_plant": {
"icon": "water",
"geometry": [
@ -32153,6 +32323,16 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
},
"name": "Water Tower"
},
"man_made/water_well": {
"geometry": [
"point",
"area"
],
"tags": {
"man_made": "water_well"
},
"name": "Water well"
},
"man_made/water_works": {
"icon": "water",
"geometry": [
@ -34474,6 +34654,16 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"type": "combo",
"label": "Type"
},
"iata": {
"key": "iata",
"type": "text",
"label": "IATA"
},
"icao": {
"key": "icao",
"type": "text",
"label": "ICAO"
},
"incline": {
"key": "incline",
"type": "combo",
@ -34525,6 +34715,11 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"type": "number",
"label": "Levels"
},
"location": {
"key": "location",
"type": "combo",
"label": "Location"
},
"man_made": {
"key": "man_made",
"type": "combo",
@ -34726,6 +34921,11 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"type": "combo",
"label": "Type"
},
"towertype": {
"key": "tower:type",
"type": "combo",
"label": "Tower type"
},
"tracktype": {
"key": "tracktype",
"type": "combo",
@ -46205,14 +46405,15 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"locales": [
"af",
"bs",
"ca",
"zh",
"zh_TW",
"hr",
"cs",
"da",
"nl",
"fr",
"de",
"hu",
"it",
"ja",
"lv",
@ -46691,6 +46892,12 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"historic": {
"label": "Type"
},
"iata": {
"label": "IATA"
},
"icao": {
"label": "ICAO"
},
"incline": {
"label": "Incline"
},
@ -46719,6 +46926,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"levels": {
"label": "Levels"
},
"location": {
"label": "Location"
},
"man_made": {
"label": "Type"
},
@ -46821,6 +47031,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"tourism": {
"label": "Type"
},
"towertype": {
"label": "Tower type"
},
"tracktype": {
"label": "Type"
},
@ -46858,10 +47071,34 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"name": "Airport",
"terms": "airplane,airport,aerodrome"
},
"aeroway/apron": {
"name": "Apron",
"terms": "ramp"
},
"aeroway/gate": {
"name": "Airport gate",
"terms": ""
},
"aeroway/hangar": {
"name": "Hangar",
"terms": ""
},
"aeroway/helipad": {
"name": "Helipad",
"terms": "helicopter,helipad,heliport"
},
"aeroway/runway": {
"name": "Runway",
"terms": "landing strip"
},
"aeroway/taxiway": {
"name": "Taxiway",
"terms": ""
},
"aeroway/terminal": {
"name": "Airport terminal",
"terms": "airport,aerodrome"
},
"amenity": {
"name": "Amenity",
"terms": ""
@ -46898,6 +47135,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"name": "Cinema",
"terms": "big screen,bijou,cine,drive-in,film,flicks,motion pictures,movie house,movie theater,moving pictures,nabes,photoplay,picture show,pictures,playhouse,show,silver screen"
},
"amenity/college": {
"name": "College",
"terms": ""
},
"amenity/courthouse": {
"name": "Courthouse",
"terms": ""
@ -46930,6 +47171,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"name": "Hospital",
"terms": "clinic,emergency room,health service,hospice,infirmary,institution,nursing home,rest home,sanatorium,sanitarium,sick bay,surgery,ward"
},
"amenity/kindergarten": {
"name": "Kindergarten",
"terms": "preschool,nursery,childcare,playgroup"
},
"amenity/library": {
"name": "Library",
"terms": ""
@ -47008,7 +47253,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
},
"amenity/university": {
"name": "University",
"terms": ""
"terms": "college"
},
"amenity/waste_basket": {
"name": "Waste Basket",
@ -47418,6 +47663,14 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"name": "Man Made",
"terms": ""
},
"man_made/breakwater": {
"name": "Breakwater",
"terms": ""
},
"man_made/cutline": {
"name": "Cut line",
"terms": ""
},
"man_made/lighthouse": {
"name": "Lighthouse",
"terms": ""
@ -47426,10 +47679,18 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"name": "Pier",
"terms": ""
},
"man_made/pipeline": {
"name": "Pipeline",
"terms": ""
},
"man_made/survey_point": {
"name": "Survey Point",
"terms": ""
},
"man_made/tower": {
"name": "Tower",
"terms": ""
},
"man_made/wastewater_plant": {
"name": "Wastewater Plant",
"terms": "sewage works,sewage treatment plant,water treatment plant,reclamation plant"
@ -47438,6 +47699,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
"name": "Water Tower",
"terms": ""
},
"man_made/water_well": {
"name": "Water well",
"terms": ""
},
"man_made/water_works": {
"name": "Water Works",
"terms": ""