2 OSM.Element = function (map, type) {
5 page.pushstate = page.popstate = function (path, id, version) {
6 OSM.loadSidebarContent(path, function () {
7 scrollToActiveVersion();
8 page._addObject(type, id, version);
12 page.load = function (path, id, version) {
13 scrollToActiveVersion();
14 page._addObject(type, id, version, true);
17 page.unload = function () {
21 page._addObject = function () {};
22 page._removeObject = function () {};
27 OSM.MappedElement = function (map, type) {
28 const page = OSM.Element(map, type);
30 page._addObject = function (type, id, version, center) {
31 const hashParams = OSM.parseHash();
32 map.addObject({ type: type, id: parseInt(id, 10), version: version && parseInt(version, 10) }, function (bounds) {
33 if (!hashParams.center && bounds.isValid() &&
34 (center || !map.getBounds().contains(bounds))) {
35 OSM.router.withoutMoveListener(function () {
36 map.fitBounds(bounds);
42 page._removeObject = function () {
49 function scrollToActiveVersion() {
50 const [scrollableList] = $("#versions-navigation-list-middle");
52 if (!scrollableList) return;
54 const [activeStartItem] = $("#versions-navigation-list-start #versions-navigation-active-page-item");
55 const [activeScrollableItem] = $("#versions-navigation-list-middle #versions-navigation-active-page-item");
57 if (activeStartItem) {
58 scrollableList.scrollLeft = 0;
59 } else if (activeScrollableItem) {
60 scrollableList.scrollLeft = Math.round(activeScrollableItem.offsetLeft - (scrollableList.offsetWidth / 2) + (activeScrollableItem.offsetWidth / 2));
62 scrollableList.scrollLeft = scrollableList.scrollWidth - scrollableList.offsetWidth;