| Index: desktop-options.js |
| =================================================================== |
| --- a/desktop-options.js |
| +++ b/desktop-options.js |
| @@ -1295,7 +1295,7 @@ |
| updateSubscription(subscription); |
| break; |
| case "added": |
| - let {url, recommended} = subscription; |
| + let {url} = subscription; |
| // Handle custom subscription |
| if (/^~user/.test(url)) |
| { |
| @@ -1401,30 +1401,42 @@ |
| function updateTooltips() |
| { |
| - let anchors = document.querySelectorAll(":not(.tooltip) > [data-tooltip]"); |
| - for (let anchor of anchors) |
| + const anchors = document.querySelectorAll("[data-tooltip]"); |
|
sergei
2018/02/19 10:18:42
I thought we don't use `const` in such cases, do w
a.giammarchi
2018/02/19 10:26:38
why not, if I might ask? `const` is used to guard
sergei
2018/02/19 10:44:45
Yep, I know what it is for but I got several times
a.giammarchi
2018/02/19 10:53:05
that's the second point though, the first one says
|
| + for (const anchor of anchors) |
| { |
| let id = anchor.getAttribute("data-tooltip"); |
| - let wrapper = document.createElement("div"); |
| - wrapper.setAttribute("aria-describedby", id); |
| - wrapper.setAttribute("tabindex", "0"); |
| - wrapper.className = "icon tooltip"; |
| - anchor.parentNode.replaceChild(wrapper, anchor); |
| - wrapper.appendChild(anchor); |
| + // instead of replacing the whole node |
| + // just make it non discoverable for |
| + // the next updateTooltips call |
| + anchor.removeAttribute("data-tooltip"); |
| + anchor.classList.add("icon", "tooltip"); |
| - let tooltip = document.createElement("div"); |
| - tooltip.id = id; |
| + const tooltip = document.createElement("div"); |
| tooltip.setAttribute("role", "tooltip"); |
| + // needed by aria-describedby |
| + tooltip.id = id; |
| - let paragraph = document.createElement("p"); |
| + const paragraph = document.createElement("p"); |
| paragraph.textContent = getMessage(id); |
| tooltip.appendChild(paragraph); |
| - wrapper.appendChild(tooltip); |
| + anchor.appendChild(tooltip); |
| + anchor.setAttribute("aria-describedby", id); |
| + |
| + // if focused and the mouse reaches another (?) |
| + // blur the active element to drop previous tooltip |
| + anchor.addEventListener("mouseover", dropActiveElement); |
| } |
| } |
| + function dropActiveElement(event) |
| + { |
| + const active = event.target.ownerDocument.activeElement; |
| + if (active) |
| + active.blur(); |
| + } |
| + |
| ext.onMessage.addListener((message) => |
| { |
| switch (message.type) |