Also, a few optimizations:
* don't redraw the minimap unless mainmap dispatched a full redraw event
* don't recenter mainmap on zoomend unless minimap actually got panned
* don't try to fetch newly created childnodes from the remote server
* a modified way with new childnodes will safely merge, but will
return the same graph (no diff), so check conflicts.length instead
It will also be much faster to fetch the remote entities in batches
rather than one at a time through LoadEntity.
One bonus/hazard with Multi Fetch GET is that it will get deleted entities
with `visible=false`, rather than returning a HTTP Status Code 410 (Gone).
This will be the only way that we can really do proper undeletion
(Incrementing the current version by 1 is not guaranteed to work. And
if a way is moved, fetching way/full will tell us whether the childnodes
are part of the way, but not necessarily whether they exist or not.)
We must be careful never to merge deleted entities into the real graph.
e.g, a deleted node will not have a 'loc' attribute, so code that assumes
every node must have a `loc` will be broken.
So because deleted entities are very special, the output from `loadMultiple`
should only be used for conflict resolution for now.
* working Previous/Next buttons
* remove behaviors from save mode
(users should not be moving nodes around or selecting at this point)
* clear hover before hovering next object
* enable save button and finished message after reviewing last conflict
* store users choice in __data__.chosen..
* default choices to `keep remote version`
* better message for delete conflicts
* fix undelete action to check localGraph (which will have the entity)
instead of context.graph() (which may not)
Like map#extentZoom, but uses trimmed viewport instead of full viewport
to avoid putting the extent under UI buttons and border elements.
This is because in conflict resolution the user will be extentZooming to see
their changes and it was annoying to have the change appear under the UI.
Also using this in zoomToGPXLayer.
This means
* no more weird saves to localStoage of partially merged graphs
* pop cleanly cancels back to history state before merges happen
(removed the annotated undo states)
filling the toCheck list from summary() means that moved vertices are
treated as a change to the parent way, instead of changes to each node
TODO: need to conflict check each node, but at least now they are
fetched with a single API call to fetch the way, and can be reported
as a single conflict in the ui..