diff --git a/mods/outliner/panel.js b/mods/outliner/panel.js index 32ffa05..623a821 100644 --- a/mods/outliner/panel.js +++ b/mods/outliner/panel.js @@ -9,73 +9,60 @@ const { createElement } = require("../../pkg/helpers"); -module.exports = (store) => { - function initOutliner() { - // Find headers when switching panels - if (document.querySelector('.notion-page-content')) { - startContentObserver(); - }; - - // Observe for page changes - const pageObserver = new MutationObserver((list, observer) => { - for ( let { addedNodes } of list) { - if (addedNodes[0]) { - if (addedNodes[0].className === 'notion-page-content') { - startContentObserver(); - } - // Clear outline on database pages - else if (addedNodes[0].className === 'notion-scroller') { - contentObserver.disconnect(); - const outline = document.querySelector('.outliner'); - if (outline) outline.textContent = ''; - } - } - } - }); - pageObserver.observe(document.body, { - childList: true, - subtree: true, - }); - - // Observe for header changes - const contentObserver = new MutationObserver((list, observer) => { - list.forEach(m => { - if ( - ( - m.type === 'childList' && - ( - isHeaderElement(m.target) || - isHeaderElement(m.addedNodes[0]) || - isHeaderElement(m.removedNodes[0]) - ) - ) || - ( - m.type === 'characterData' && - isHeaderElement(m.target.parentElement) - ) - ) findHeaders(); - }) - }); - function startContentObserver() { - findHeaders(); - contentObserver.disconnect(); - contentObserver.observe( - document.querySelector('.notion-page-content'), - { - childList: true, - subtree: true, - characterData: true, +module.exports = (store) => { + // Observe for page changes + const pageObserver = new MutationObserver((list, observer) => { + for ( let { addedNodes } of list) { + if (addedNodes[0]) { + if (addedNodes[0].className === 'notion-page-content') { + startContentObserver(); } - ); + // Clear outline on database pages + else if (addedNodes[0].className === 'notion-scroller') { + contentObserver.disconnect(); + const outline = document.querySelector('.outliner'); + if (outline) outline.textContent = ''; + } + } } + }); + + // Observe for header changes + const contentObserver = new MutationObserver((list, observer) => { + list.forEach(m => { + if ( + ( + m.type === 'childList' && + ( + isHeaderElement(m.target) || + isHeaderElement(m.addedNodes[0]) || + isHeaderElement(m.removedNodes[0]) + ) + ) || + ( + m.type === 'characterData' && + isHeaderElement(m.target.parentElement) + ) + ) findHeaders(); + }) + }); + + function startContentObserver() { + findHeaders(); + contentObserver.disconnect(); + contentObserver.observe( + document.querySelector('.notion-page-content'), + { + childList: true, + subtree: true, + characterData: true, + } + ); } function findHeaders() { const outline = document.querySelector('.outliner'); - if (!outline) { - pageObserver.disconnect(); - observer.disconnect(); - } + if (!outline) return; outline.textContent = ''; const pageContent = document.querySelector('.notion-page-content'); @@ -111,5 +98,20 @@ module.exports = (store) => { return placeholder.includes('Heading'); } - return initOutliner; -} \ No newline at end of file + return { + onLoad() { + // Find headers when switching panels + if (document.querySelector('.notion-page-content')) { + startContentObserver(); + }; + pageObserver.observe(document.body, { + childList: true, + subtree: true, + }); + }, + onSwitch() { + pageObserver.disconnect(); + contentObserver.disconnect(); + } + } +}