From: John Firebaugh Date: Tue, 3 Dec 2013 00:13:58 +0000 (-0800) Subject: Improve click behavior on changeset entries X-Git-Tag: live~4571^2 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/528d4a040e593f6ce2171167c436dbdf27511711 Improve click behavior on changeset entries On Chrome, this lets clicks with modifier keys anywhere on the changeset entry work as expected. On other browsers, modifier keys still only work on the link itself. --- diff --git a/app/assets/javascripts/index/history.js b/app/assets/javascripts/index/history.js index 04f7c0731..27774f05b 100644 --- a/app/assets/javascripts/index/history.js +++ b/app/assets/javascripts/index/history.js @@ -10,8 +10,9 @@ OSM.History = function(map) { unHighlightChangeset($(this).data("changeset").id); }) .on("click", "[data-changeset]", function (e) { - e.preventDefault(); - clickChangeset($(this).data("changeset").id); + if (!$(e.target).is('a')) { + clickChangeset($(this).data("changeset").id, e); + } }); var group = L.featureGroup() @@ -22,7 +23,7 @@ OSM.History = function(map) { unHighlightChangeset(e.layer.id); }) .on("click", function (e) { - clickChangeset(e.layer.id); + clickChangeset(e.layer.id, e); }); group.getLayerId = function(layer) { @@ -39,8 +40,31 @@ OSM.History = function(map) { $("#changeset_" + id).removeClass("selected"); } - function clickChangeset(id) { - OSM.router.route($("#changeset_" + id).find(".changeset_id").attr("href")); + function clickChangeset(id, e) { + var evt, el = $("#changeset_" + id).find("a.changeset_id")[0]; + if ('createEvent' in document) { + evt = document.createEvent('MouseEvents'); + evt.initMouseEvent('click', + true, // canBubble + true, // cancelable + window, // 'AbstractView' + e.clicks, // click count + e.screenX, // screenX + e.screenY, // screenY + e.clientX, // clientX + e.clientY, // clientY + e.ctrlKey, // ctrl + e.altKey, // alt + e.shiftKey, // shift + e.metaKey, // meta + e.button, // mouse button + e.relatedTarget // relatedTarget + ); + el.dispatchEvent(evt); + } else { + evt = document.createEventObject(); + el.fireEvent('onclick', evt); + } } function loadData() {