Skip to content

Instantly share code, notes, and snippets.

@GoesuZuegs
Last active January 15, 2020 21:13
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GoesuZuegs/6ed96b20725d40262fac947b8501b1d9 to your computer and use it in GitHub Desktop.
Save GoesuZuegs/6ed96b20725d40262fac947b8501b1d9 to your computer and use it in GitHub Desktop.
A user script for Firefox, which opens bookmarks folders on the bookmarks toolbar when one hovers over them.
(function () {
if (window.location.href !== "chrome://browser/content/browser.xul") {
return;
}
const bookmarksToolbar = document.getElementById("PlacesToolbarItems");
if (!(bookmarksToolbar instanceof Element)) {
return;
}
const isFolder = (node) => {
if (node instanceof Element) {
if (node.classList.contains("bookmark-item")) {
if (node.getAttribute("type") === "menu" && node.getAttribute("container") === "true") {
return true;
}
}
}
};
const hoverListener = (event) => {
if (isFolder(event.target)) {
Array.from(event.target.parentNode.childNodes).filter(isFolder).forEach(current => {
current.open = false;
});
event.target.open = true;
}
};
const closeListener = (event) => {
if (isFolder(event.target)) {
event.target.open = false;
}
};
const foldersObserver = new MutationObserver(mutationsList => {
for (const mutation of mutationsList) {
if (mutation.type === "childList") {
if (mutation.addedNodes) {
const addedFolders = Array.from(mutation.addedNodes).filter(isFolder);
addedFolders.forEach(folder => {
folder.addEventListener("mouseenter", hoverListener);
folder.addEventListener("mouseleave", closeListener);
});
}
if (mutation.removedNodes) {
const removedFolders = Array.from(mutation.removedNodes).filter(isFolder);
removedFolders.forEach(folder => {
folder.removeEventListener("mouseenter", hoverListener);
folder.removeEventListener("mouseleave", closeListener);
});
}
}
}
});
foldersObserver.observe(bookmarksToolbar, {
childList: true
});
})();
// Hamburger menu
const menuButton = document.getElementById("PanelUI-menu-button");
if (menuButton instanceof Element) {
menuButton.addEventListener("mouseenter", () => {
menuButton.click();
});
}
// Page actions
const pageActionsButton = document.getElementById("pageActionButton");
if (pageActionsButton instanceof Element) {
pageActionsButton.addEventListener("mouseenter", () => {
pageActionsButton.click();
});
}
// Bookmarks menu
const bookmarksMenuButton = document.getElementById("bookmarks-menu-button");
if (bookmarksMenuButton instanceof Element) {
bookmarksMenuButton.addEventListener("mouseenter", () => {
bookmarksMenuButton.open = true;
});
}
@Gittyperson
Copy link

Gittyperson commented Oct 7, 2019

Thank you. Bookmarks auto-expand doesn't seem to work on FF 69.0.2 (CSS is 'unlocked' in about:config).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment