Skip to content

Commit b1a8a5f

Browse files
committed
feat: support centering the active node
close #57
1 parent 84ac772 commit b1a8a5f

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

src/app.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,28 @@ let root: INode | undefined;
1515
let style: HTMLStyleElement;
1616
let active:
1717
| {
18-
node: INode;
19-
el: Element;
20-
}
18+
node: INode;
19+
el: Element;
20+
}
2121
| undefined;
22+
const activeNodeOptions: {
23+
placement?: 'center' | 'visible';
24+
} = {};
2225

2326
const handlers = {
24-
async setData(data: { root?: INode; jsonOptions?: IMarkmapJSONOptions }) {
27+
async setData(data: {
28+
root?: INode;
29+
jsonOptions?: IMarkmapJSONOptions & {
30+
activeNode?: {
31+
placement?: 'center' | 'visible';
32+
};
33+
};
34+
}) {
2535
await mm.setData((root = data.root), {
2636
...defaultOptions,
2737
...deriveOptions(data.jsonOptions),
2838
});
39+
activeNodeOptions.placement = data.jsonOptions?.activeNode?.placement;
2940
if (firstTime) {
3041
mm.fit();
3142
firstTime = false;
@@ -170,8 +181,10 @@ function findActiveNode({
170181
return best && { node: best, needRerender };
171182
}
172183

173-
function highlightNode(node: INode) {
174-
mm.ensureView(node, {
184+
async function highlightNode(node: INode) {
185+
await mm[
186+
activeNodeOptions.placement === 'center' ? 'centerNode' : 'ensureVisible'
187+
](node, {
175188
bottom: 80,
176189
});
177190
const g = mm.findElement(node)?.g;

0 commit comments

Comments
 (0)