Update the preset and field documentation

(closes #3319)
This commit is contained in:
Bryan Housel
2016-08-03 18:51:54 -04:00
parent 9b917c1275
commit 7806dfcf6a
2 changed files with 159 additions and 36 deletions
+149 -27
View File
@@ -1,15 +1,15 @@
## Presets
iD uses a simple presets system based on [JSON](http://en.wikipedia.org/wiki/JSON)
preset definitions and simple structure.
iD editor preset and field types are defined in [JSON](http://en.wikipedia.org/wiki/JSON)
files located under the `data/presets` folder of the iD repository.
## Individual Presets
#### Preset Files
Specific presets are located under `data/presets/presets`. They're organized in a
directory hierarchy based on OSM key/value pairs. For example, the preset that matches
Presets are defined in JSON files located under `data/presets/presets`. They're organized in a
directory hierarchy based on OSM key/value pairs. For example, the preset that matches
the tag `leisure=park` is in the file `data/presets/presets/leisure/park.json`.
## Preset Format
#### Preset Schema
A basic preset is of the form:
@@ -23,8 +23,7 @@ A basic preset is of the form:
],
// The geometry types for which this preset is valid.
// options are point, area, line, and vertex.
// vertexes are points that are parts of lines, like the nodes
// in a road
// vertexes are points that are parts of lines, like the nodes in a road
// lines are unclosed ways, and areas are closed ways
"geometry": [
"point", "area"
@@ -47,8 +46,12 @@ A basic preset is of the form:
"name": "Park"
}
```
The complete JSON schema for presets can be found in [`data/presets/schema/preset.json`](data/presets/schema/preset.json)
#### Searchable
#### Preset Properties
##### searchable
Deprecated or generic presets can include the property `"searchable": false`.
This means that they will be recognized by iD when editing existing data,
@@ -60,40 +63,158 @@ By convention, unsearchable presets have filenames that begin with an underscore
## Fields
Fields are, like presets, defined in JSON structures. A typical field is
Fields are reusable form elements that can be associated with presets.
#### Field Files
Fields are defined in JSON files located under `data/presets/fields`.
The field files are typically named according to their associated OSM key.
For example, the field for the tag `access=*` is stored in the file
`data/presets/fields/access.json`. Note that there are exceptions to this rule
for fields that might work differently depending on which preset is active
(`access_simple.json`, `access_toilets.json`).
Some keys in OSM are namespaced using colons (':'). Namespaced fields
are nested in folders according to their tag.
For example, the field for the tag `piste:difficulty=*` is stored in the file
`data/presets/fields/piste/difficulty.json`.
#### Field Schema
```js
{
"key": "access",
"type": "combo"
"key": "cuisine",
"type": "combo",
"label": "Cuisine"
}
```
The complete JSON schema for fields can be found in [`data/presets/schema/field.json`](data/presets/schema/field.json)
#### Field Types
**Text fields**
* `text` - Basic single line text field
* `number` - Text field with up/down buttons for entering numbers (e.g. `width=*`)
* `localized` - Text field with localization abilities (e.g. `name=*`, `name:es=*`, etc.)
* `tel` - Text field for entering phone numbers (localized for editing location)
* `email` - Text field for entering email addresses
* `url` - Text field for entering URLs
* `textarea` - Multi-line text area (e.g. `description=*`)
**Combo/Dropdown fields**
* `combo` - Dropdown field for picking one option out of many (e.g. `surface=*`)
* `typeCombo` - Dropdown field picking a specific type from a generic category key<br/>
(e.g. `waterway=*`. If unset, tag will be `waterway=yes`, but dropdown contains options like `stream`, `ditch`, `river`)
* `multiCombo` - Dropdown field for adding `yes` values to a common multikey<br/>
(e.g. `recycling:*` -> `recycling:glass=yes`, `recycling:paper=yes`, etc.)
* `networkCombo` - Dropdown field that helps users pick a route `network` tag (localized for editing location)
**Checkboxes**
* `check` - 3-state checkbox: `yes`, `no`, unknown (no tag)
* `defaultcheck` - 2-state checkbox where checked produces `yes` and unchecked produces no tag
**Radio Buttons**
* `radio` - Multiple choice radio button field
**Special**
* `access` - Block of dropdowns for defining the `access=*` tags on a highway
* `address` - Block of text and dropdown fields for entering address information (localized for editing location)
* `cycleway` - Block of dropdowns for adding `cycleway:left` and `cycleway:right` tags on a highway
* `maxspeed` - Numeric text field for speed and dropdown for "mph/kph"
* `restrictions` - Graphical field for editing turn restrictions
* `wikipedia` - Block of fields for selecting a wiki language and wikipedia page
#### Field Properties
##### `key`/`keys`
The `key` property names the OSM key that the field will edit.
Compound fields like `address` expect an array of keys in the `keys` property.
##### `universal`
If a field definition contains the property `"universal": true`, this field will
appear in the "Add Field" list for all presets
##### `geometry`
If specified, only show the field for this kind of geometry. Should contain
one of `point`, `vertex`, `line`, `area`.
##### `default`
The default value for the field. For exmaple, the `building_area.json` field
will automatically add the tag `building=yes` to certain presets that are
associated with building features (but only if drawn as a closed area).
```js
{
"key": "building",
"type": "combo",
"default": "yes",
"geometry": "area",
"label": "Building"
}
```
In which `type` is the fields's type. Valid field types are
##### `options`
* textarea
* radio
* combo
* address
* check - a tri-state checkbox: yes, no, or unknown (no tag)
* defaultcheck - a boolean checkbox where checked produces a `*=yes` tag and
unchecked produces no tag
Combo field types can provide dropdown values in an `options` array.
The user can pick from any of the options, or type their own value.
The `key` property names the OSM key that the field will edit. Alternatively, for
compound fields like `address`, you can specify an array of keys in the `keys`
property.
```js
{
"key": "diaper",
"type": "combo",
"label": "Diaper Changing Available",
"options": ["yes", "no", "room", "1", "2", "3", "4", "5"]
}
```
##### `strings`
Combo field types can accept name-value pairs in the `strings` property.
This is helpful when the field has a fixed number of options and you want to be
able to provide a translateable description of each option. When using `strings`,
the user can not type their own value, they must choose one of the given values.
```js
{
"key": "smoothness",
"type": "combo",
"label": "Smoothness",
"placeholder": "Thin Rollers, Wheels, Off-Road...",
"strings": {
"options": {
"excellent": "Thin Rollers: rollerblade, skateboard",
"good": "Thin Wheels: racing bike",
"intermediate": "Wheels: city bike, wheelchair, scooter",
"bad": "Robust Wheels: trekking bike, car, rickshaw",
"very_bad": "High Clearance: light duty off-road vehicle",
"horrible": "Off-Road: heavy duty off-road vehicle",
"very_horrible": "Specialized off-road: tractor, ATV",
"impassable": "Impassable / No wheeled vehicle"
}
}
}
```
If a combo field does not specify `options` or `strings`, the field will fetch
common tag values from the Taginfo service to use as dropdown values.
Each field definition lives in a separate file in `data/presets/fields`. The field
name (used in the preset `fields` property) is the name of the file (minus the `.json`
extension).
## Icons
Preset icons in iD are pulled from the open source map icon set,
[Maki](http://www.mapbox.com/maki/).
The icons are identified in iD by the same name as they are on the Maki home. Use those
The icons are identified in iD by the same name as they are on the Maki home. Use those
names when identifying the icon to be used for a given preset.
## Building
To build presets, all you need to do is run `make`.
@@ -101,6 +222,7 @@ To build presets, all you need to do is run `make`.
This command will take care of running the build script, which packages all presets
into one file: `dist/presets.js`, which is included in the packaged iD.js file.
## Custom Presets
iD supports deployments which use a custom set of presets. You can supply presets via
+10 -9
View File
@@ -54,20 +54,21 @@
"combo",
"cycleway",
"defaultcheck",
"text",
"email",
"lanes",
"localized",
"maxspeed",
"multiCombo",
"networkCombo",
"number",
"tel",
"email",
"url",
"radio",
"textarea",
"localized",
"wikipedia",
"typeCombo",
"restrictions",
"lanes"
"tel",
"textarea",
"text",
"typeCombo",
"url",
"wikipedia"
],
"required": true
},