From: John Firebaugh Date: Tue, 3 Dec 2013 00:13:58 +0000 (-0800) Subject: Improve click behavior on changeset entries X-Git-Tag: live~5605^2 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/528d4a040e593f6ce2171167c436dbdf27511711?ds=inline 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() {