2 $(document).on("click", "a[href='#versions-navigation-active-page-item']", function (e) {
3 scrollToActiveVersion();
4 $("#versions-navigation-active-page-item a.page-link").trigger("focus");
8 OSM.Element = function (map, type) {
11 page.pushstate = page.popstate = function (path, id, version) {
12 OSM.loadSidebarContent(path, function () {
13 scrollToActiveVersion();
14 page._addObject(type, id, version);
18 page.load = function (path, id, version) {
19 scrollToActiveVersion();
20 page._addObject(type, id, version, true);
23 page.unload = function () {
27 page._addObject = function () {};
28 page._removeObject = function () {};
33 OSM.MappedElement = function (map, type) {
34 const page = OSM.Element(map, type);
36 page._addObject = function (type, id, version, center) {
37 const hashParams = OSM.parseHash();
38 map.addObject({ type: type, id: parseInt(id, 10), version: version && parseInt(version, 10) }, function (bounds) {
39 if (!hashParams.center && bounds.isValid() &&
40 (center || !map.getBounds().contains(bounds))) {
41 OSM.router.withoutMoveListener(function () {
42 map.fitBounds(bounds);
48 page._removeObject = function () {
55 function scrollToActiveVersion() {
56 const [scrollableList] = $("#versions-navigation-list-middle");
58 if (!scrollableList) return;
60 const [activeStartItem] = $("#versions-navigation-list-start #versions-navigation-active-page-item");
61 const [activeScrollableItem] = $("#versions-navigation-list-middle #versions-navigation-active-page-item");
63 if (activeStartItem) {
64 scrollableList.scrollLeft = 0;
65 } else if (activeScrollableItem) {
66 scrollableList.scrollLeft = Math.round(activeScrollableItem.offsetLeft - (scrollableList.offsetWidth / 2) + (activeScrollableItem.offsetWidth / 2));
68 scrollableList.scrollLeft = scrollableList.scrollWidth - scrollableList.offsetWidth;