From 2053f04ddb0c49c06787f4f301357df29cc5b099 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Fri, 23 Jun 2017 23:53:40 -0400 Subject: [PATCH] remove highlight when mouse goes outside the menu bbox --- pd/nw/pd_canvas.js | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/pd/nw/pd_canvas.js b/pd/nw/pd_canvas.js index c1f8946eb..a93120169 100644 --- a/pd/nw/pd_canvas.js +++ b/pd/nw/pd_canvas.js @@ -210,17 +210,23 @@ var canvas_events = (function() { svg.setAttribute("height", h); }, dropdown_index_to_pd = function(elem) { - pdgui.pdsend(elem.getAttribute("data-callback"), - elem.querySelector(".highlighted").getAttribute("data-index")); + var highlighted = elem.querySelector(".highlighted"); + if (highlighted) { + pdgui.pdsend(elem.getAttribute("data-callback"), + highlighted.getAttribute("data-index")); + } }, - dropdown_highlight_elem = function(elem, scroll) { + dropdown_clear_highlight = function() { var container = document.querySelector("#dropdown_list"), - li_array; - if (!elem.classList.contains("highlighted")) { li_array = container.querySelectorAll("li"); - Array.prototype.forEach.call(li_array, function(e) { - e.classList.remove("highlighted"); - }); + Array.prototype.forEach.call(li_array, function(e) { + e.classList.remove("highlighted"); + }); + }, + dropdown_highlight_elem = function(elem, scroll) { + var container = document.querySelector("#dropdown_list"); + if (!elem.classList.contains("highlighted")) { + dropdown_clear_highlight(); elem.classList.add("highlighted"); // Make sure the highlighted element is in view if (scroll) { @@ -552,13 +558,21 @@ var canvas_events = (function() { dropdown_menu_keypress: function(evt) { var li_nodes = document.querySelectorAll("#dropdown_list li"), string_array = [], + highlighted, highlighted_index, match, offset; - highlighted_index = - +document.querySelector("#dropdown_list .highlighted") - .getAttribute("data-index"); - offset = highlighted_index + 1; + highlighted = document + .querySelector("#dropdown_list .highlighted"); + if (highlighted) { + highlighted_index = + +document.querySelector("#dropdown_list .highlighted") + .getAttribute("data-index"); + offset = highlighted_index + 1; + } else { + highlighted_index = 1; + offset = 2; + } Array.prototype.forEach.call(li_nodes, function(e, i, a) { var s = a[(i + offset) % a.length]; string_array.push(s.textContent.trim()); @@ -621,7 +635,6 @@ var canvas_events = (function() { } }, dropdown_menu_mousemove: function(evt) { - var li_array; // For whatever reason, Chromium decides to trigger the // mousemove/mouseenter/mouseover events if the element // underneath it changes (or for mousemove, if the element @@ -635,6 +648,8 @@ var canvas_events = (function() { && evt.target.parentNode.parentNode && evt.target.parentNode.parentNode.id === "dropdown_list") { dropdown_highlight_elem(evt.target); + } else { + dropdown_clear_highlight(); } } last_dropdown_menu_x = evt.pageX; -- GitLab