diff --git a/ACCESSIBILITY.md b/ACCESSIBILITY.md
index b0cdab658..02dfeff39 100644
--- a/ACCESSIBILITY.md
+++ b/ACCESSIBILITY.md
@@ -8,7 +8,7 @@ follow [universal design](https://en.wikipedia.org/wiki/Universal_design) princi
This is a living document that details the usability of iD across a number of dimensions,
with the intent of identifying and addressing problem areas. Since there are always more
-factors to consider, no part of this document should be considered "complete".
+factors to consider, no part of this document should be considered complete.
Symbols used in this document:
@@ -18,7 +18,9 @@ Symbols used in this document:
- โ No appreciable support
- ๐คท Unknown support, none is assumed
-## Browser Compatibility
+
+
+## ๐ Browser Compatibility
As a web app, iD's browser support is fundamental. The user experience should be
as equivalent as possible across the latest versions of all modern browsers on all
@@ -28,16 +30,17 @@ should fallback gracefully without breaking other aspects of the app.
This table covers high-level compatibility, with individual features to be detailed
elsewhere in this document.
-| | | Browser | Notes | Issues |
+| | Icon | Browser | Notes | Issues |
|---|---|---|---|---|
-| โ
| ![chrome logo] | Chrome | |
-| โ
* | ![firefox logo] | Firefox | \*Minor known issues | [#7132] |
-| โ
| ![safari logo] | Safari | |
-| ๐ฉ | ![opera logo] | Opera | |
-| ๐ฉ | ![edge logo] | Edge | |
-| ๐ | ![ie logo] | Internet Explorer | IE has been discontinued, but IE 11 is still maintained. iD polyfills ES6 features on IE 11, with varying success. |
-| ๐ฉ | ๐ | Others | iD should run without issue on any desktop browser implementing modern web standards. |
-| ๐ | ๐ฑ | Mobile browsers | iD has not yet been fully optimized for mobile devices, but some editing is usually possible. |
+| โ
| ![chrome logo] | [Chrome](https://en.wikipedia.org/wiki/Google_Chrome) | |
+| โ
* | ![firefox logo] | [Firefox](https://en.wikipedia.org/wiki/Firefox) | \*Minor known issues | [#7132](https://github.com/openstreetmap/iD/issues/7132) |
+| โ
| ![safari logo] | [Safari](https://en.wikipedia.org/wiki/Safari_(web_browser)) | |
+| ๐ฉ | ![opera logo] | [Opera](https://en.wikipedia.org/wiki/Opera_(web_browser)) | |
+| ๐ฉ | ![edge logo] | [Edge](https://en.wikipedia.org/wiki/Microsoft_Edge) | |
+| ๐ | ![ie logo] | [Internet Explorer](https://en.wikipedia.org/wiki/Internet_Explorer) | IE has been discontinued, but [IE 11 is still maintained](https://docs.microsoft.com/en-us/lifecycle/faq/internet-explorer-microsoft-edge). iD [polyfills](https://en.wikipedia.org/wiki/Polyfill_(programming)) modern web features for IE 11 where possible, but full support should not be expected |
+| โ
| ![webkit logo] | [iOS](https://en.wikipedia.org/wiki/IOS) browsers | All browsers on iOS (e.g. Safari, Chrome, Firefox, Edge) use the [WebKit](https://en.wikipedia.org/wiki/WebKit) engine and should thus have equivalent support |
+| ๐ฉ | ![android logo] | [Android](https://en.wikipedia.org/wiki/Android_(operating_system)) browsers | Browsers on Android can use their own engines, so support may vary, but there are currently no known issues |
+| ๐ฉ | ๐ | Others | iD should run on any browser implementing [modern web standards](https://www.w3.org/standards/). Hardware factors such as screen size may affect usability |
[safari logo]: https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Safari_browser_logo.svg/30px-Safari_browser_logo.svg.png
[opera logo]: https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Opera_browser_logo_2013_vector.svg/30px-Opera_browser_logo_2013_vector.svg.png
@@ -45,10 +48,12 @@ elsewhere in this document.
[firefox logo]: https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Firefox_logo%2C_2019.svg/30px-Firefox_logo%2C_2019.svg.png
[edge logo]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Microsoft_Edge_logo_%282015%E2%80%932019%29.svg/30px-Microsoft_Edge_logo_%282015%E2%80%932019%29.svg.png
[ie logo]: https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Internet_Explorer_10%2B11_logo.svg/30px-Internet_Explorer_10%2B11_logo.svg.png
+[webkit logo]: https://upload.wikimedia.org/wikipedia/en/thumb/b/be/WebKit_logo_(2015).svg/35px-WebKit_logo_(2015).svg.png
+[android logo]: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Android_robot.svg/28px-Android_robot.svg.png
-[#7132]: https://github.com/openstreetmap/iD/issues/7132
+
-## Input Device Support
+## ๐น Interaction Support
iD has traditionally assumed the mapper will be interacting via a mouse and keyboard,
but realistically people want or need to use various other [input devices](https://en.wikipedia.org/wiki/Input_device).
@@ -56,9 +61,45 @@ but realistically people want or need to use various other [input devices](https
iD relies on modern [pointer events](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events) for some interactions, so
some devices may see degraded functionality on older browsers.
-### Setups
+### Input Devices
-The following table lists iD's usability for different setups. A setup is where
+This table details iD's support for specific classes of input devices.
+
+"Full support" for a device means that iD reasonably handles its entire range of input on supported platforms. Though the given device is not necessarily expected to perform all of iD's functions.
+
+It's impractical to ensure every single input device works as expected, so the table only reflects the support status to the best of our knowledge.
+
+| | Icon | Input Device | Notes | Issues |
+|---|---|---|---|---|
+| ๐ฉ | ![apple adb mouse] | Single-button [mouse](https://en.wikipedia.org/wiki/Computer_mouse) | Primary click (e.g. left-click) can be used for all pointer interactions. Long-clicking on map features opens the edit menu |
+| ๐ฉ | ![ibm mouse] | Multi-button mouse | Secondary click (e.g. right-click) can be used on map features to open the edit menu. Middle click, etc., are not needed by iD but are passed through to the browser |
+| ๐ฉ | [![magic mouse]](https://en.wikipedia.org/wiki/Magic_Mouse) | Multi-touch mouse | 2D scrolling in the map is treated as panning, not zooming |
+| ๐ | ![vertical scroll wheel] | Vertical [scroll wheel](https://en.wikipedia.org/wiki/Scroll_wheel) | Should zoom the map in and out | [#5550](https://github.com/openstreetmap/iD/issues/5550) |
+| โ | | Horizontal scroll wheel | Currently does nothing in the map | [#7134](https://github.com/openstreetmap/iD/issues/7134) |
+| ๐คท | [![apple mighty mouse]](https://en.wikipedia.org/wiki/Apple_Mighty_Mouse) | Scroll ball | Works like combined vertical/horizontal scroll wheels |
+| ๐ฉ | ๐ฒ | [Trackball](https://en.wikipedia.org/wiki/Trackball) | |
+| ๐ฉ | ![touchpad] | [Trackpad](https://en.wikipedia.org/wiki/Touchpad) | |
+| ๐ฉ | [![macbook trackpad]](https://en.wikipedia.org/wiki/Magic_Trackpad) | Multi-touch trackpad | Pinch-to-zoom and scroll-to-pan are supported in the map |
+| ๐ฉ | ![pointing stick] | [Pointing stick](https://en.wikipedia.org/wiki/Pointing_stick) | |
+| ๐ฉ | โจ๏ธ | [Keyboard](https://en.wikipedia.org/wiki/Computer_keyboard) | Any keyboard can be used, but certain functionality may require certain keys |
+| ๐คท | | [Touch bar](https://www.imore.com/touch-bar) | Generic, browser-provided controls should be shown |
+| ๐ฉ | | Multi-touch screen | |
+| ๐ฉ | โ๏ธ | [Stylus](https://en.wikipedia.org/wiki/Stylus_(computing)) | Works like a single touch for tapping, dragging, scrolling, etc. |
+| ๐คท | ๐ฒ | [Graphics tablet](https://en.wikipedia.org/wiki/Graphics_tablet) | |
+| ๐คท | ๐ฎ | [Gamepad](https://en.wikipedia.org/wiki/Gamepad) | |
+
+[ibm mouse]: https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/Myszka_IBM.jpg/40px-Myszka_IBM.jpg
+[apple adb mouse]: https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Apple-ADB-mouse.jpg/70px-Apple-ADB-mouse.jpg
+[apple mighty mouse]: https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Apple_Mighty_Mouse_top_viewo.jpg/35px-Apple_Mighty_Mouse_top_viewo.jpg
+[vertical scroll wheel]: https://upload.wikimedia.org/wikipedia/commons/thumb/9/90/Razer_DeathAdder_2013_Edition-mouse_wheel_PNr%C2%B00405.jpg/50px-Razer_DeathAdder_2013_Edition-mouse_wheel_PNr%C2%B00405.jpg
+[magic mouse]: https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Magic_Mouse.jpg/70px-Magic_Mouse.jpg
+[pointing stick]: https://upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Mouse_pointing_stick.jpeg/70px-Mouse_pointing_stick.jpeg
+[touchpad]: https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Touchpad_F3JA.jpg/70px-Touchpad_F3JA.jpg
+[macbook trackpad]: https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/MacBook_Pro%27s_trackpad.JPG/70px-MacBook_Pro%27s_trackpad.JPG
+
+### Input Setups
+
+This table lists iD's usability for different setups. A setup is where
a mapper is using only the device(s) given in the row.
A setup with "full support" offers functionality equivalent to that of the
@@ -66,41 +107,48 @@ highest-functioning setup (generally mouse and keyboard).
Certain functions may be accessed differently on different setups,
such as opening the edit menu via long-pressing instead of right-clicking.
-| | | Input Setup | Notes |
-|---|---|---|---|
+| | Icon | Input Setup | Notes | Issues |
+|---|---|---|---|---|
| โ
| ๐ฑโจ๏ธ | [Mouse](https://en.wikipedia.org/wiki/Computer_mouse) + [keyboard](https://en.wikipedia.org/wiki/Computer_keyboard) | iD's original input paradigm. Any mouse-like device such as a [trackpad](https://en.wikipedia.org/wiki/Touchpad), [trackball](https://en.wikipedia.org/wiki/Trackball), or [pointing stick](https://en.wikipedia.org/wiki/Pointing_stick) is grouped into "mouse" for this table |
-| โ | โจ๏ธ | Keyboard only | Not all elements can necessarily be keyed to. Key traps may exists. Geometry editing isn't possible |
+| โ | โจ๏ธ | Keyboard only | Not all elements can necessarily be keyed to. Key traps may exists. Geometry editing isn't possible | [#7770](https://github.com/openstreetmap/iD/issues/7770) |
| ๐ | ๐ฑ | Mouse only | The primary [mouse button](https://en.wikipedia.org/wiki/Mouse_button) (e.g. left click) alone is sufficient. Multiselection and disabling of node-snapping aren't possible |
-| ๐ | ๐ | [Multi-touch](https://en.wikipedia.org/wiki/Multi-touch) on a [touchscreen](https://en.wikipedia.org/wiki/Touchscreen) | Move and rotate aren't possible |
-| ๐ | โ๏ธ | [Stylus](https://en.wikipedia.org/wiki/Stylus_(computing)) on a touchscreen | Move, rotate, and multiselection aren't possible |
+| ๐ | ๐ | [Multi-touch](https://en.wikipedia.org/wiki/Multi-touch) on a [touchscreen](https://en.wikipedia.org/wiki/Touchscreen) | Moving and rotating selections isn't possible | [#7599](https://github.com/openstreetmap/iD/issues/7599) |
+| ๐ | โ๏ธ | [Stylus](https://en.wikipedia.org/wiki/Stylus_(computing)) on a touchscreen | Moving and rotating selections isn't possible, nor is selecting multiple features |
| ๐คท | โ๏ธ๐ฒ | Stylus on a [graphics tablet](https://en.wikipedia.org/wiki/Graphics_tablet) | |
| ๐คท | ๐ฎ | [Gamepad](https://en.wikipedia.org/wiki/Gamepad) | |
| ๐คท | ๐ฃ | [Voice](https://en.wikipedia.org/wiki/Voice_user_interface) | Tools like [Voice Control on macOS](https://support.apple.com/en-us/HT210539) and [Windows Speech Recognition](https://en.wikipedia.org/wiki/Windows_Speech_Recognition) allow navigating webpages with voice commands to some degree |
| ๐คท | ๐ | [Switch](https://en.wikipedia.org/wiki/Switch_access) | Tools like [Switch Control on macOS](https://support.apple.com/en-us/HT202865) can theoretically replicate mouse and keyboard interactions in most apps |
-### Devices
+
-This table details iD's support for specific classes of input devices.
+## ๐ System Compatibility
-"Full support" for a device means that iD reasonably handles its entire range of input on supported platforms. But unlike the "setups" table above, a given device is not necessarily expected to perform all of iD's functions.
+iD is largely platform-independent, meaning it should work on any system that runs a modern web browser. However, certain hardware and software components can affect iD's usability and functionality.
-It's impractical to ensure every single input device works as expected, so the table only reflects the support status to the best of our knowledge.
+### Display Support
-| | Input Device | Notes | Issues |
-|---|---|---|---|
-| โ
| Single-button mouse | E.g. [Chester Mouse](https://duckduckgo.com/?q=chester+one+button+mouse&iar=images&iax=images&ia=images). Primary click (e.g. left-click) can be used for all pointer interactions. A long-click on map features opens the edit menu |
-| โ
| Multi-button mouse | Secondary click (e.g. right-click) can be used on map features to open the edit menu. Middle click, etc., are not needed by iD but are passed through to the browser |
-| โ
| Multi-touch mouse | E.g. [Magic Mouse](https://en.wikipedia.org/wiki/Magic_Mouse). 2D scrolling in the map is treated as panning, not zooming |
-| ๐ | Vertical [scroll wheel](https://en.wikipedia.org/wiki/Scroll_wheel) | Should zoom the map in and out | [#5550](https://github.com/openstreetmap/iD/issues/5550) |
-| โ | Horizontal scroll wheel | Currently does nothing in the map | [#7134](https://github.com/openstreetmap/iD/issues/7134) |
-| ๐คท | Scroll ball | E.g. in [Apple Mighty Mouse](https://en.wikipedia.org/wiki/Apple_Mighty_Mouse) |
-| ๐ฉ | Trackball | |
-| ๐ฉ | Trackpad | |
-| โ
| Multi-touch trackpad | E.g. [Magic Trackpad](https://en.wikipedia.org/wiki/Magic_Trackpad). Pinch-to-zoom and scroll-to-pan are supported in the map |
-| ๐ฉ | Pointing stick | |
-| โ
| Keyboard | |
+| | Display | Notes |
+|---|---|---|
+| โ | No display | Non-graphical devices and "[headless](https://en.wikipedia.org/wiki/Headless_software)" use cases aren't supported. See also the [vision accessibility](#-vision-accessibility) section |
+| ๐ | Small display | iD is not optimized for smartphone-sized screens or smaller, but some editing is usually possible |
+| โ
| Large display | The map expands to fill the entire browser window |
+| ๐ | Low pixel density display | Some icons are not legible on low-res displays |
+| โ
| High [pixel density](https://en.wikipedia.org/wiki/Pixel_density) display | iD's vector graphics scale well to high-resolution screens (e.g. [Retina](https://en.wikipedia.org/wiki/Retina_display)) |
+| โ
| Multiple displays | iD responds accordingly when its browser window is moved between different types of external screens |
-## Language Support
+### Network Support
+
+| | Connection | Notes |
+|---|---|---|
+| โ | No connection | iD isn't built for offline use out-of-the-box |
+| ๐ | Slow connection | iD downloads a lot of data all throughout use, so slow connections can significantly slow down mapping |
+| โ
| Intermittent connection | Downloaded data can be edited during temporary connection losses. A banner message is displayed. Reconnection is attempted automatically and a "Retry" button is also provided |
+| โ
| [Mobile phone connection](https://en.wikipedia.org/wiki/Cellular_network) | A suitably fast, reliable phone network can be used for mapping, with the risk of iD gobbling up data allowances |
+| ๐คท | [Tor](https://en.wikipedia.org/wiki/Tor_%28anonymity_network%29) connection | |
+
+
+
+## ๐ Language Support
English is the language of tags and relation roles in the OpenStreetMap database.
It's also the source language of iD's interface, meaning English is the only language
@@ -112,21 +160,24 @@ platform. Some languages have region-specific variants, such as Brazilian Portug
Translators are typically volunteers. See the [translation guide](https://github.com/openstreetmap/iD/blob/develop/CONTRIBUTING.md#translating)
for more info.
-| | Localization Feature | Notes |
+| | Multilingual Feature | Notes |
|---|---|---|
| โ
| Browser language preference | iD tries to use the language set in the browser |
| โ | Base language fallback | E.g. if `pt_BR` is incomplete, `pt` should be tried before `en` |
| โ | Custom fallback language | If the preferred language is incomplete, a user-specified one should be tried before `en` (e.g. `kk` โ `ru`) |
+| โ | [`lang` HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang) | Helps with text-to-speech, text formatting, and auto-transliteration, particularly when iD mixes strings from different languages |
| โ
| Locale URL parameters | `locale` and `rtl` can be used to manually set iD's locale preferences. See the [API](API.md#url-parameters) |
-| ๐ฉ | Right-to-left layouts | Used for languages like Hebrew and Arabic |
+| โ | Language selection in UI | The mapper should be able to view and change iD's language in the interface at any time. Useful for public computers with fixed browser languages |
+| ๐ฉ | Right-to-left layouts | The [`dir` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) is properly set for languages like Hebrew and Arabic |
+| ๐ | Label icons | Icons should accompany text labels to illustrate the meaning of untranslated terms |
### Translatability
-The following table details which interface elements can adapt to the mapper's
+This table details which interface elements can adapt to the mapper's
language preferences. This doesn't account for whether they've actually been
translated to one or more languages.
-| | Interface Element | Notes | Issues |
+| | Interface Element | Notes | Issues |
|---|---|---|---|
| โ
| Labels and descriptions | | |
| โ
| Help docs and walkthrough | | |
@@ -150,6 +201,28 @@ listed here. Visit the [Transifex project page](https://www.transifex.com/openst
to see the latest numbers. Typically a few languages (German, Spanish, Japaneseโฆ)
are kept close to 100% coverage, while most languages have less than 50% coverage.
+
+
+## ๐ Vision Accessibility
+
+| | Vision-Access Feature | Notes | Issues |
+|---|---|---|---|
+| ๐คท | [Screen reader support](https://en.wikipedia.org/wiki/Screen_reader) | | |
+| ๐ | [Browser zoom](https://support.mozilla.org/en-US/kb/accessibility-features-firefox-make-firefox-and-we#w_page-zoom) | Scrolling-to-pan the map may react oddly on some browsers | |
+| ๐ | [Text-only browser zoom](https://support.mozilla.org/en-US/kb/accessibility-features-firefox-make-firefox-and-we#w_text-zoom) | Enlarged text can overflow containers that have fixed dimensions | |
+| ๐ | [Don't rely on color alone](https://www.wuhcag.com/use-of-colour/) | Some classes of map data are indistinguishable except for their colors | |
+| ๐คท | [High-contrast text colors](https://www.wuhcag.com/contrast-enhanced/) | | |
+| โ | Dark mode | Many people find light-on-dark UIs easier to read under certain conditions | |
+| โ | Audio feedback | This would need to be easy to disable or even disabled by default | [#5821](https://github.com/openstreetmap/iD/issues/5821) |
+
+
+
+## ๐ Hearing Accessibility
+
+iD itself currently has no audio, so hearing difficulties alone are not expected to impact usability.
+
+
+
---
_Further sections coming soonโฆ_
diff --git a/css/80_app.css b/css/80_app.css
index f4ccd6c3b..41d658d5c 100644
--- a/css/80_app.css
+++ b/css/80_app.css
@@ -16,7 +16,7 @@
position: relative;
z-index: 0;
- font: normal 12px/1.6667 "-apple-system", BlinkMacSystemFont,
+ font: normal 12px/1.6667 ui-sans-serif, "-apple-system", BlinkMacSystemFont,
"Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell",
"Fira Sans", "Droid Sans", "Helvetica Neue", "Arial",
sans-serif;
@@ -147,8 +147,8 @@ kbd {
}
code {
- font-family: monospace, monospace;
- background: #eee;
+ font-family: ui-monospace, monospace, monospace;
+ background: rgba(174, 174, 174, 0.25);
padding: 1px 2px;
}
@@ -516,6 +516,14 @@ button[disabled].action {
.ideditor[dir='rtl'] .top-toolbar .toolbar-item:last-child .item-content {
margin-left: 10px;
}
+.ideditor[dir='ltr'] .top-toolbar .toolbar-item:last-child .item-label,
+.ideditor[dir='rtl'] .top-toolbar .toolbar-item:first-child .item-label {
+ padding-right: 5px;
+}
+.ideditor[dir='ltr'] .top-toolbar .toolbar-item:first-child .item-label,
+.ideditor[dir='rtl'] .top-toolbar .toolbar-item:last-child .item-label {
+ padding-left: 5px;
+}
.top-toolbar .toolbar-item .item-label {
text-align: center;
font-size: 11px;
@@ -632,15 +640,17 @@ button.add-note svg.icon {
border-bottom: 1px solid #ccc;
height: 60px;
position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
.header h3 {
text-align: center;
margin-bottom: 0;
- white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
- padding: 20px;
+ padding: 0;
}
.header button,
@@ -657,20 +667,14 @@ button.add-note svg.icon {
}
.field-help-title button.close,
-.sidebar-component .header button.data-editor-close,
-.sidebar-component .header button.note-editor-close,
-.sidebar-component .header button.qa-editor-close,
-.entity-editor-pane .header button.preset-close,
+.sidebar .header button.close,
.preset-list-pane .header button.preset-choose {
position: absolute;
right: 0;
top: 0;
}
.ideditor[dir='rtl'] .field-help-title button.close,
-.ideditor[dir='rtl'] .sidebar-component .header button.data-editor-close,
-.ideditor[dir='rtl'] .sidebar-component .header button.note-editor-close,
-.ideditor[dir='rtl'] .sidebar-component .header button.qa-editor-close,
-.ideditor[dir='rtl'] .entity-editor-pane .header button.preset-close,
+.ideditor[dir='rtl'] .sidebar .header button.close,
.ideditor[dir='rtl'] .preset-list-pane .header button.preset-choose {
left: 0;
right: auto;
@@ -728,6 +732,10 @@ button.add-note svg.icon {
justify-content: space-between;
}
+.header-block {
+ display: flex;
+ align-items: center;
+}
.header-block-outer {
width: 20%;
}
@@ -735,6 +743,7 @@ button.add-note svg.icon {
.header-block-close {
display: flex;
justify-content: flex-end;
+ height: 100%;
}
/* Hide/Toggle collapsable sections (aka Disclosure)
@@ -1382,12 +1391,17 @@ a.hide-toggle {
overflow: hidden;
}
.field-label .label-text {
+ overflow: hidden;
+ text-overflow: ellipsis;
flex: 1 1 auto;
padding: 5px 0 5px 10px;
}
.ideditor[dir='rtl'] .field-label .label-text {
padding: 5px 10px 5px 0;
}
+.field-label .label-text span {
+ white-space: nowrap;
+}
.label-text .label-textannotation svg.icon {
margin: 0 8px;
@@ -2808,14 +2822,6 @@ input.key-trap {
.qa-details-subsection:empty {
display: none;
}
-.qa-details-container code {
- padding: .2em .4em;
- margin: 0;
- font-size: 85%;
- font-family: monospace;
- background-color: rgba(27,31,35,.05);
- border-radius: 3px;
-}
.note-save .new-comment-input,
.qa-save .new-comment-input {
@@ -4664,16 +4670,12 @@ img.tile-debug {
padding: 20px;
border-bottom: 1px solid #ccc;
}
-.modal-section p:not(:last-of-type),
-.modal-section ul {
+.modal-section p:not(:last-of-type) {
padding-bottom: 20px;
}
.modal-section h4 {
padding-bottom: 0;
}
-.modal-section.header h3 {
- padding: 0;
-}
.modal-section.buttons {
text-align: center;
}
@@ -4693,7 +4695,6 @@ img.tile-debug {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
- margin-bottom: 30px;
}
.save-section .buttons .action,
@@ -4958,6 +4959,9 @@ svg.mouseclick use.right {
.settings-custom-background .instructions-template p {
margin-bottom: 0;
}
+.settings-custom-background .instructions-template ul {
+ padding-bottom: 20px;
+}
.settings-custom-background .instructions-template ul li {
list-style-type: disc;
list-style-position: inside;
diff --git a/data/core.yaml b/data/core.yaml
index 52605c6dc..b6c13418c 100644
--- a/data/core.yaml
+++ b/data/core.yaml
@@ -1221,7 +1221,6 @@ en:
mapillary_map_features:
title: "Map Features"
tooltip: "Map features from Mapillary"
- request_data: "Request Data"
construction:
flat:
crosswalk_plain: plain crosswalk
diff --git a/data/deprecated.json b/data/deprecated.json
index 84f806ded..df3f1941e 100644
--- a/data/deprecated.json
+++ b/data/deprecated.json
@@ -1390,6 +1390,22 @@
"old": {"toilets:disposal": "pit_latrine"},
"replace": {"toilets:disposal": "pitlatrine"}
},
+ {
+ "old": {"toilets:type": "flush"},
+ "replace": {"toilets:disposal": "flush"}
+ },
+ {
+ "old": {"toilets:type": "pit"},
+ "replace": {"toilets:disposal": "pitlatrine"}
+ },
+ {
+ "old": {"toilets:type": "pitlatrine"},
+ "replace": {"toilets:disposal": "pitlatrine"}
+ },
+ {
+ "old": {"toilets:type": "pit latrine"},
+ "replace": {"toilets:disposal": "pitlatrine"}
+ },
{
"old": {"tourism": "bed_and_breakfast"},
"replace": {"tourism": "guest_house", "guest_house": "bed_and_breakfast"}
diff --git a/data/presets/presets.json b/data/presets/presets.json
index 1d116f123..c9d393404 100644
--- a/data/presets/presets.json
+++ b/data/presets/presets.json
@@ -177,7 +177,7 @@
"amenity/planetarium": {"icon": "maki-globe", "fields": ["name", "operator", "address", "building_area", "opening_hours", "opening_hours/covid19"], "moreFields": ["air_conditioning", "charge_fee", "email", "fax", "fee", "gnis/feature_id", "payment_multi_fee", "phone", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["museum", "astronomy", "observatory"], "tags": {"amenity": "planetarium"}, "name": "Planetarium"},
"amenity/police": {"icon": "temaki-police_officer", "fields": ["name", "operator", "address", "building_area", "opening_hours", "opening_hours/covid19"], "moreFields": ["email", "fax", "gnis/feature_id", "level", "phone", "polling_station", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["badge", "constable", "constabulary", "cop", "detective", "fed", "law", "enforcement", "officer", "patrol"], "tags": {"amenity": "police"}, "name": "Police"},
"amenity/polling_station": {"icon": "fas-vote-yea", "fields": ["name", "ref", "operator", "address", "opening_hours", "opening_hours/covid19", "building_area"], "moreFields": ["air_conditioning", "email", "fax", "gnis/feature_id", "internet_access", "internet_access/fee", "internet_access/ssid", "level", "phone", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["ballot box", "ballot drop", "democracy", "elections", "polling place", "vote", "voting booth", "voting machine"], "tags": {"amenity": "polling_station"}, "addTags": {"amenity": "polling_station", "polling_station": "yes"}, "name": "Permanent Polling Place"},
- "amenity/post_box": {"icon": "temaki-post_box", "fields": ["operator", "collection_times", "drive_through", "ref"], "moreFields": ["access_simple", "brand", "covered", "gnis/feature_id", "height", "indoor", "level", "manufacturer", "wheelchair"], "geometry": ["point", "vertex"], "tags": {"amenity": "post_box"}, "terms": ["drop box", "dropbox", "letter drop", "mail box", "mail collection box", "mail drop", "mail dropoff", "mailbox", "package drop", "pillar box", "pillarbox", "post box", "postal box", "postbox"], "name": "Mail Drop Box"},
+ "amenity/post_box": {"icon": "temaki-post_box", "fields": ["operator", "collection_times", "drive_through", "ref"], "moreFields": ["access_simple", "brand", "colour", "covered", "gnis/feature_id", "height", "indoor", "level", "manufacturer", "material", "support", "wheelchair"], "geometry": ["point", "vertex"], "tags": {"amenity": "post_box"}, "terms": ["drop box", "dropbox", "letter drop", "mail box", "mail collection box", "mail drop", "mail dropoff", "mailbox", "package drop", "pillar box", "pillarbox", "post box", "postal box", "postbox"], "name": "Mail Drop Box"},
"amenity/post_depot": {"icon": "fas-mail-bulk", "fields": ["name", "operator", "address", "building_area", "phone"], "moreFields": ["email", "fax", "gnis/feature_id", "opening_hours", "opening_hours/covid19", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["mail processing and distribution center", "post depot"], "tags": {"amenity": "post_depot"}, "name": "Post Sorting Office"},
"amenity/post_office": {"icon": "maki-post", "fields": ["name", "operator", "address", "building_area", "opening_hours", "opening_hours/covid19"], "moreFields": ["brand", "email", "fax", "gnis/feature_id", "internet_access", "internet_access/fee", "internet_access/ssid", "level", "payment_multi", "phone", "polling_station", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["letter", "mail"], "tags": {"amenity": "post_office"}, "name": "Post Office"},
"amenity/prep_school": {"icon": "temaki-school", "fields": ["name", "operator", "address", "building_area", "opening_hours", "opening_hours/covid19"], "moreFields": ["email", "fax", "gnis/feature_id", "level", "payment_multi", "phone", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["academic", "ACT", "SAT", "homework", "math", "reading", "test prep", "tutoring", "writing"], "tags": {"amenity": "prep_school"}, "name": "Test Prep / Tutoring School"},
diff --git a/data/presets/presets/amenity/post_box.json b/data/presets/presets/amenity/post_box.json
index 91c72f567..abd81baf7 100644
--- a/data/presets/presets/amenity/post_box.json
+++ b/data/presets/presets/amenity/post_box.json
@@ -9,12 +9,15 @@
"moreFields": [
"access_simple",
"brand",
+ "colour",
"covered",
"gnis/feature_id",
"height",
"indoor",
"level",
"manufacturer",
+ "material",
+ "support",
"wheelchair"
],
"geometry": [
diff --git a/data/taginfo.json b/data/taginfo.json
index 5b94a2cdf..aa63944fd 100644
--- a/data/taginfo.json
+++ b/data/taginfo.json
@@ -2314,6 +2314,10 @@
{"key": "TODO", "description": "๐ณ โ fixme=*"},
{"key": "toilets:disposal", "value": "longdrop", "description": "๐ณ โ toilets:disposal=pitlatrine"},
{"key": "toilets:disposal", "value": "pit_latrine", "description": "๐ณ โ toilets:disposal=pitlatrine"},
+ {"key": "toilets:type", "value": "flush", "description": "๐ณ โ toilets:disposal=flush"},
+ {"key": "toilets:type", "value": "pit", "description": "๐ณ โ toilets:disposal=pitlatrine"},
+ {"key": "toilets:type", "value": "pitlatrine", "description": "๐ณ โ toilets:disposal=pitlatrine"},
+ {"key": "toilets:type", "value": "pit latrine", "description": "๐ณ โ toilets:disposal=pitlatrine"},
{"key": "tourism", "value": "bed_and_breakfast", "description": "๐ณ โ tourism=guest_house + guest_house=bed_and_breakfast"},
{"key": "tower:type", "value": "power", "description": "๐ณ โ power=tower"},
{"key": "tower:type", "value": "anchor", "description": "๐ณ โ line_attachment=anchor"},
diff --git a/dist/locales/en.json b/dist/locales/en.json
index 2f9f8db96..2c79d226b 100644
--- a/dist/locales/en.json
+++ b/dist/locales/en.json
@@ -1540,7 +1540,6 @@
"mapillary_map_features": {
"title": "Map Features",
"tooltip": "Map features from Mapillary",
- "request_data": "Request Data",
"construction": {
"flat": {
"crosswalk_plain": "plain crosswalk"
diff --git a/modules/behavior/hover.js b/modules/behavior/hover.js
index 5be06461a..4f67a11fd 100644
--- a/modules/behavior/hover.js
+++ b/modules/behavior/hover.js
@@ -78,7 +78,7 @@ export function behaviorHover(context) {
.on(_pointerPrefix + 'down.hover', pointerover);
d3_select(window)
- .on(_pointerPrefix + 'up.hover', pointerout, true)
+ .on(_pointerPrefix + 'up.hover pointercancel.hover', pointerout, true)
.on('keydown.hover', keydown)
.on('keyup.hover', keyup);
@@ -208,7 +208,7 @@ export function behaviorHover(context) {
.on(_pointerPrefix + 'down.hover', null);
d3_select(window)
- .on(_pointerPrefix + 'up.hover', null, true)
+ .on(_pointerPrefix + 'up.hover pointercancel.hover', null, true)
.on('keydown.hover', null)
.on('keyup.hover', null);
};
diff --git a/modules/modes/select.js b/modules/modes/select.js
index e595e0178..440a6416e 100644
--- a/modules/modes/select.js
+++ b/modules/modes/select.js
@@ -487,6 +487,8 @@ export function modeSelect(context, selectedIDs) {
mode.exit = function() {
+ _newFeature = false;
+
_operations.forEach(function(operation) {
if (operation.behavior) {
context.uninstall(operation.behavior);
diff --git a/modules/services/mapillary.js b/modules/services/mapillary.js
index 7d0c560eb..50ce60ede 100644
--- a/modules/services/mapillary.js
+++ b/modules/services/mapillary.js
@@ -14,7 +14,6 @@ var viewercss = 'mapillary-js/mapillary.min.css';
var viewerjs = 'mapillary-js/mapillary.min.js';
var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
var mapFeatureConfig = {
- organizationKey: 'FI3NAFfzQQgdF081TRdgTy',
values: [
'construction--flat--crosswalk-plain',
'marking--discrete--crosswalk-zebra',
@@ -372,8 +371,8 @@ export default {
loadMapFeatures: function(projection) {
// if we are looking at signs, we'll actually need to fetch images too
loadTiles('images', apibase + 'images?sort_by=key', projection);
- loadTiles('points', apibase + 'map_features?layers=points&min_nbr_image_detections=2&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
- loadTiles('image_detections', apibase + 'image_detections?layers=points&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
+ loadTiles('points', apibase + 'map_features?layers=points&min_nbr_image_detections=2&sort_by=key&values=' + mapFeatureConfig.values + '&', projection);
+ loadTiles('image_detections', apibase + 'image_detections?layers=points&sort_by=key&values=' + mapFeatureConfig.values + '&', projection);
},
diff --git a/modules/services/streetside.js b/modules/services/streetside.js
index 3c81d218b..04ee1d41a 100644
--- a/modules/services/streetside.js
+++ b/modules/services/streetside.js
@@ -469,26 +469,6 @@ export default {
options.scenes[sceneID] = _sceneOptions;
_pannellumViewer = window.pannellum.viewer('ideditor-viewer-streetside', options);
-
- var pointerPrefix = 'PointerEvent' in window ? 'pointer' : 'mouse';
-
- _pannellumViewer
- .on(pointerPrefix + 'down', () => {
- d3_select(window)
- .on(pointerPrefix + 'move.pannellum', () => { dispatch.call('viewerChanged'); });
- })
- .on(pointerPrefix + 'up', () => {
- d3_select(window)
- .on(pointerPrefix + 'move.pannellum', null);
-
- // continue dispatching events for a few seconds, in case viewer has inertia.
- let t = d3_timer(elapsed => {
- dispatch.call('viewerChanged');
- if (elapsed > 2000) {
- t.stop();
- }
- });
- });
},
@@ -498,6 +478,8 @@ export default {
loadViewer: function(context) {
let that = this;
+ let pointerPrefix = 'PointerEvent' in window ? 'pointer' : 'mouse';
+
// create ms-wrapper, a photo wrapper class
let wrap = context.container().select('.photoviewer').selectAll('.ms-wrapper')
.data([0]);
@@ -513,6 +495,24 @@ export default {
wrapEnter
.append('div')
.attr('id', 'ideditor-viewer-streetside')
+ .on(pointerPrefix + 'down.streetside', () => {
+ d3_select(window)
+ .on(pointerPrefix + 'move.streetside', () => {
+ dispatch.call('viewerChanged');
+ }, true);
+ })
+ .on(pointerPrefix + 'up.streetside pointercancel.streetside', () => {
+ d3_select(window)
+ .on(pointerPrefix + 'move.streetside', null);
+
+ // continue dispatching events for a few seconds, in case viewer has inertia.
+ let t = d3_timer(elapsed => {
+ dispatch.call('viewerChanged');
+ if (elapsed > 2000) {
+ t.stop();
+ }
+ });
+ })
.append('div')
.attr('class', 'photo-attribution fillD');
diff --git a/modules/svg/data.js b/modules/svg/data.js
index c18f9215f..94abf00d5 100644
--- a/modules/svg/data.js
+++ b/modules/svg/data.js
@@ -500,10 +500,13 @@ export function svgData(projection, context, dispatch) {
var map = context.map();
var viewport = map.trimmedExtent().polygon();
var coords = features.reduce(function(coords, feature) {
- var c = feature.geometry.coordinates;
+ var geom = feature.geometry;
+ if (!geom) return coords;
+
+ var c = geom.coordinates;
/* eslint-disable no-fallthrough */
- switch (feature.geometry.type) {
+ switch (geom.type) {
case 'Point':
c = [c];
case 'MultiPoint':
diff --git a/modules/svg/streetside.js b/modules/svg/streetside.js
index 023d333e0..5d489e9aa 100644
--- a/modules/svg/streetside.js
+++ b/modules/svg/streetside.js
@@ -30,8 +30,8 @@ export function svgStreetside(projection, context, dispatch) {
if (services.streetside && !_streetside) {
_streetside = services.streetside;
_streetside.event
- .on('viewerChanged', viewerChanged)
- .on('loadedBubbles', throttledRedraw);
+ .on('viewerChanged.svgStreetside', viewerChanged)
+ .on('loadedBubbles.svgStreetside', throttledRedraw);
} else if (!services.streetside && _streetside) {
_streetside = null;
}
diff --git a/modules/ui/commit.js b/modules/ui/commit.js
index a0f494952..01271385a 100644
--- a/modules/ui/commit.js
+++ b/modules/ui/commit.js
@@ -270,7 +270,7 @@ export function uiCommit(context) {
saveSection = saveSection.enter()
.append('div')
- .attr('class','modal-section save-section fillL cf')
+ .attr('class','modal-section save-section fillL')
.merge(saveSection);
var prose = saveSection.selectAll('.commit-info')
@@ -355,7 +355,7 @@ export function uiCommit(context) {
// enter
var buttonEnter = buttonSection.enter()
.append('div')
- .attr('class', 'buttons fillL cf');
+ .attr('class', 'buttons fillL');
buttonEnter
.append('button')
diff --git a/modules/ui/data_editor.js b/modules/ui/data_editor.js
index df5370c24..7048f04a2 100644
--- a/modules/ui/data_editor.js
+++ b/modules/ui/data_editor.js
@@ -25,7 +25,7 @@ export function uiDataEditor(context) {
headerEnter
.append('button')
- .attr('class', 'fr data-editor-close')
+ .attr('class', 'close')
.on('click', function() {
context.enter(modeBrowse(context));
})
diff --git a/modules/ui/entity_editor.js b/modules/ui/entity_editor.js
index e18387fda..9cb24141e 100644
--- a/modules/ui/entity_editor.js
+++ b/modules/ui/entity_editor.js
@@ -45,12 +45,12 @@ export function uiEntityEditor(context) {
headerEnter
.append('button')
- .attr('class', 'fl preset-reset preset-choose')
+ .attr('class', 'preset-reset preset-choose')
.call(svgIcon((localizer.textDirection() === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
headerEnter
.append('button')
- .attr('class', 'fr preset-close')
+ .attr('class', 'close')
.on('click', function() { context.enter(modeBrowse(context)); })
.call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
diff --git a/modules/ui/improveOSM_editor.js b/modules/ui/improveOSM_editor.js
index 784a6b815..932f62f74 100644
--- a/modules/ui/improveOSM_editor.js
+++ b/modules/ui/improveOSM_editor.js
@@ -30,7 +30,7 @@ export function uiImproveOsmEditor(context) {
headerEnter
.append('button')
- .attr('class', 'fr qa-editor-close')
+ .attr('class', 'close')
.on('click', () => context.enter(modeBrowse(context)))
.call(svgIcon('#iD-icon-close'));
diff --git a/modules/ui/inspector.js b/modules/ui/inspector.js
index 4362d09a0..2dc6825f8 100644
--- a/modules/ui/inspector.js
+++ b/modules/ui/inspector.js
@@ -17,7 +17,7 @@ export function uiInspector(context) {
var _newFeature = false;
- function inspector(selection, newFeature) {
+ function inspector(selection) {
presetList
.entityIDs(_entityIDs)
.autofocus(_newFeature)
@@ -25,6 +25,7 @@ export function uiInspector(context) {
.on('cancel', function() {
wrap.transition()
.styleTween('right', function() { return d3_interpolate('-100%', '0%'); });
+ editorPane.call(entityEditor);
});
entityEditor
@@ -66,7 +67,7 @@ export function uiInspector(context) {
if (entity.hasNonGeometryTags()) return false;
// prompt to select preset if feature is new and untagged
- if (newFeature) return true;
+ if (_newFeature) return true;
// all existing features except vertices should default to inspector
if (entity.geometry(context.graph()) !== 'vertex') return false;
diff --git a/modules/ui/intro/navigation.js b/modules/ui/intro/navigation.js
index 7843aac4c..8fe4cc3f5 100644
--- a/modules/ui/intro/navigation.js
+++ b/modules/ui/intro/navigation.js
@@ -361,7 +361,7 @@ export function uiIntroNavigation(context, reveal) {
function closeTownHall() {
if (!isTownHallSelected()) return clickTownHall();
- var selector = '.entity-editor-pane button.preset-close svg use';
+ var selector = '.entity-editor-pane button.close svg use';
var href = d3_select(selector).attr('href') || '#iD-icon-close';
reveal('.entity-editor-pane',
@@ -374,7 +374,7 @@ export function uiIntroNavigation(context, reveal) {
context.history().on('change.intro', function() {
// update the close icon in the tooltip if the user edits something.
- var selector = '.entity-editor-pane button.preset-close svg use';
+ var selector = '.entity-editor-pane button.close svg use';
var href = d3_select(selector).attr('href') || '#iD-icon-close';
reveal('.entity-editor-pane',
@@ -497,7 +497,7 @@ export function uiIntroNavigation(context, reveal) {
function editorStreet() {
- var selector = '.entity-editor-pane button.preset-close svg use';
+ var selector = '.entity-editor-pane button.close svg use';
var href = d3_select(selector).attr('href') || '#iD-icon-close';
reveal('.entity-editor-pane',
@@ -514,7 +514,7 @@ export function uiIntroNavigation(context, reveal) {
context.history().on('change.intro', function() {
// update the close icon in the tooltip if the user edits something.
- var selector = '.entity-editor-pane button.preset-close svg use';
+ var selector = '.entity-editor-pane button.close svg use';
var href = d3_select(selector).attr('href') || '#iD-icon-close';
reveal('.entity-editor-pane',
diff --git a/modules/ui/intro/point.js b/modules/ui/intro/point.js
index 81917c9cd..5daf86937 100644
--- a/modules/ui/intro/point.js
+++ b/modules/ui/intro/point.js
@@ -244,7 +244,7 @@ export function uiIntroPoint(context, reveal) {
// reset pane, in case user happened to change it..
context.container().select('.inspector-wrap .panewrap').style('right', '0%');
- var selector = '.entity-editor-pane button.preset-close svg use';
+ var selector = '.entity-editor-pane button.close svg use';
var href = d3_select(selector).attr('href') || '#iD-icon-close';
context.on('exit.intro', function() {
diff --git a/modules/ui/keepRight_editor.js b/modules/ui/keepRight_editor.js
index 4145d98aa..1cf31797e 100644
--- a/modules/ui/keepRight_editor.js
+++ b/modules/ui/keepRight_editor.js
@@ -29,7 +29,7 @@ export function uiKeepRightEditor(context) {
headerEnter
.append('button')
- .attr('class', 'fr qa-editor-close')
+ .attr('class', 'close')
.on('click', () => context.enter(modeBrowse(context)))
.call(svgIcon('#iD-icon-close'));
diff --git a/modules/ui/note_editor.js b/modules/ui/note_editor.js
index f16a71339..c49dcdfaa 100644
--- a/modules/ui/note_editor.js
+++ b/modules/ui/note_editor.js
@@ -46,7 +46,7 @@ export function uiNoteEditor(context) {
headerEnter
.append('button')
- .attr('class', 'fr note-editor-close')
+ .attr('class', 'close')
.on('click', function() {
context.enter(modeBrowse(context));
})
diff --git a/modules/ui/osmose_editor.js b/modules/ui/osmose_editor.js
index 84c36bec1..6423d23c1 100644
--- a/modules/ui/osmose_editor.js
+++ b/modules/ui/osmose_editor.js
@@ -29,7 +29,7 @@ export function uiOsmoseEditor(context) {
headerEnter
.append('button')
- .attr('class', 'fr qa-editor-close')
+ .attr('class', 'close')
.on('click', () => context.enter(modeBrowse(context)))
.call(svgIcon('#iD-icon-close'));
diff --git a/modules/ui/sections/photo_overlays.js b/modules/ui/sections/photo_overlays.js
index 2224f6647..b3c83f2b2 100644
--- a/modules/ui/sections/photo_overlays.js
+++ b/modules/ui/sections/photo_overlays.js
@@ -4,7 +4,6 @@ import {
import { t } from '../../core/localizer';
import { uiTooltip } from '../tooltip';
-import { svgIcon } from '../../svg/icon';
import { uiSection } from '../section';
export function uiSectionPhotoOverlays(context) {
@@ -93,17 +92,6 @@ export function uiSectionPhotoOverlays(context) {
return t(id.replace(/-/g, '_') + '.title');
});
- labelEnter
- .filter(function(d) { return d.id === 'mapillary-map-features'; })
- .append('a')
- .attr('class', 'request-data-link')
- .attr('target', '_blank')
- .attr('tabindex', -1)
- .call(svgIcon('#iD-icon-out-link', 'inline'))
- .attr('href', 'https://mapillary.github.io/mapillary_solutions/data-request')
- .append('span')
- .text(t('mapillary_map_features.request_data'));
-
// Update
li
diff --git a/modules/ui/sidebar.js b/modules/ui/sidebar.js
index af3ba323b..0f87ceecb 100644
--- a/modules/ui/sidebar.js
+++ b/modules/ui/sidebar.js
@@ -238,7 +238,8 @@ export function uiSidebar(context) {
if (!inspector.entityIDs() || !utilArrayIdentical(inspector.entityIDs(), [datum.id]) || inspector.state() !== 'hover') {
inspector
.state('hover')
- .entityIDs([datum.id]);
+ .entityIDs([datum.id])
+ .newFeature(false);
inspectorWrap
.call(inspector);
@@ -300,7 +301,7 @@ export function uiSidebar(context) {
.newFeature(newFeature);
inspectorWrap
- .call(inspector, newFeature);
+ .call(inspector);
}
} else {
diff --git a/modules/ui/success.js b/modules/ui/success.js
index f3b62160b..46454d7e2 100644
--- a/modules/ui/success.js
+++ b/modules/ui/success.js
@@ -72,16 +72,16 @@ export function uiSuccess(context) {
.append('div')
.attr('class', 'header fillL');
- header
- .append('button')
- .attr('class', 'fr')
- .on('click', () => dispatch.call('cancel'))
- .call(svgIcon('#iD-icon-close'));
-
header
.append('h3')
.text(t('success.just_edited'));
+ header
+ .append('button')
+ .attr('class', 'close')
+ .on('click', () => dispatch.call('cancel'))
+ .call(svgIcon('#iD-icon-close'));
+
let body = selection
.append('div')
.attr('class', 'body save-success fillL');
diff --git a/package.json b/package.json
index 2bf550ad0..df5a29f02 100644
--- a/package.json
+++ b/package.json
@@ -104,7 +104,7 @@
"postcss": "^7.0.27",
"postcss-selector-prepend": "^0.5.0",
"request": "^2.88.0",
- "rollup": "~2.18.0",
+ "rollup": "~2.21.0",
"rollup-plugin-includepaths": "~0.2.3",
"rollup-plugin-progress": "^1.1.1",
"rollup-plugin-visualizer": "~4.0.4",