mirror of
https://gitlab.com/ArkHost/HelixNotes.git
synced 2026-07-24 07:45:57 +02:00
Fix top-of-note collapsible section re-opening on note switch (persist its folded state) issue #86
This commit is contained in:
@@ -3000,6 +3000,41 @@
|
|||||||
})];
|
})];
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
Extension.create({
|
||||||
|
name: 'detailsOpenAttrSync',
|
||||||
|
addProseMirrorPlugins() {
|
||||||
|
return [new Plugin({
|
||||||
|
key: new PluginKey('detailsOpenAttrSync'),
|
||||||
|
props: {
|
||||||
|
handleDOMEvents: {
|
||||||
|
click(view, event) {
|
||||||
|
const btn = (event.target as HTMLElement)?.closest?.('button');
|
||||||
|
const detailsEl = btn && btn.parentElement?.getAttribute('data-type') === 'details'
|
||||||
|
? (btn.parentElement as HTMLElement) : null;
|
||||||
|
if (!detailsEl) return false;
|
||||||
|
// The extension's button handler already toggled the is-open class; sync
|
||||||
|
// node.attrs.open to it. Fixes the first node (pos 0), where upstream's
|
||||||
|
// `if (!pos)` guard skips persisting the attribute.
|
||||||
|
const isOpen = detailsEl.classList.contains('is-open');
|
||||||
|
const probe = detailsEl.querySelector('[data-type="detailsContent"]') ?? detailsEl;
|
||||||
|
let pos: number;
|
||||||
|
try { pos = view.posAtDOM(probe, 0); } catch { return false; }
|
||||||
|
const resolved = view.state.doc.resolve(pos);
|
||||||
|
for (let d = resolved.depth; d >= 0; d--) {
|
||||||
|
if (resolved.node(d).type.name === 'details') {
|
||||||
|
if (resolved.node(d).attrs.open !== isOpen) {
|
||||||
|
view.dispatch(view.state.tr.setNodeMarkup(resolved.before(d), undefined, { open: isOpen }));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})];
|
||||||
|
}
|
||||||
|
}),
|
||||||
TextAlign.configure({ types: ['heading', 'paragraph'] }).extend({
|
TextAlign.configure({ types: ['heading', 'paragraph'] }).extend({
|
||||||
addKeyboardShortcuts: () => ({}),
|
addKeyboardShortcuts: () => ({}),
|
||||||
}),
|
}),
|
||||||
|
|||||||
Reference in New Issue
Block a user