Root cause was the `select` mode removing the "selected" class from all
elements upon `exit()`. Easy fix is to use a different class (here
"currentView") for street imagery elements.
Fixes:
- Selecting a bubble then enabling a second imagery layer removes the hovered and selected highlighting
- If multiple imagery layers are enabled and you select a bubble it only temporarily becomes highlighted
- If multiple imagery layers are enabled and a bubble is highlighted, hovering over another imagery layer's bubble will remove the selected and hovered highlighting
Basically these all came down to style updates resetting all layers for
cases other than when the viewport was changed (where doing so makes
sense because the selected bubble/sequence needs to update as a result).
See #5494
This is just a minor thing that doesn't usually alter visible behaviour.
The mouseover and mouseout events would fire when moving between child
elements of the svg group which was unnecessary.
(closes#4297)
The previous approach split the viewport up by pixels, but each time the view
moved, the pixels would change, so it was not a stable selection of the
streetview data, and the markers would fight for position as the user moved
around.
This approach uses utilTiler to partition the view into stable tiles.
(closes#3324)
Previously we allowed devs to swap out services that they didn't need.
This became difficult now that ES6 exports are immutable bindings.
But we can wrap the immutable bindings themselves in a live object,
to get back the flexibility that we used to have.
This change also drops the `taginfo` accessor on Context, since devs who want
to swap out taginfo service with something else can now do so through the live
binding. `iD.services.taginfo = myTaginfo()`