Skip to content

Commit

Permalink
fix(blocks): only split paragraphs based on newlines
Browse files Browse the repository at this point in the history
  • Loading branch information
fourdim committed Nov 7, 2024
1 parent 7ab9691 commit f73f273
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 9 deletions.
4 changes: 2 additions & 2 deletions packages/blocks/src/_common/adapters/markdown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1313,10 +1313,10 @@ export class MarkdownAdapter extends BaseAdapter<Markdown> {
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [],
};
} as BlockSnapshot;
const contentSlice = (await this._traverseMarkdown(
markdownAst,
blockSnapshotRoot as BlockSnapshot,
blockSnapshotRoot,
payload.assets
)) as BlockSnapshot;
if (contentSlice.children.length === 0) {
Expand Down
88 changes: 81 additions & 7 deletions packages/blocks/src/_common/adapters/mix-text.ts
Original file line number Diff line number Diff line change
Expand Up @@ -245,13 +245,6 @@ export class MixTextAdapter extends BaseAdapter<MixText> {
return null;
}
payload.file = payload.file.replaceAll('\r', '');
const lines = payload.file.split('\n');
for (let i = 0; i < lines.length - 1; i++) {
if (lines[i].length !== 0 && lines[i + 1].length !== 0) {
lines[i] += '\n';
}
}
payload.file = lines.join('\n');
const sliceSnapshot = await this._markdownAdapter.toSliceSnapshot({
file: payload.file,
assets: payload.assets,
Expand All @@ -260,6 +253,87 @@ export class MixTextAdapter extends BaseAdapter<MixText> {
workspaceId: payload.workspaceId,
pageId: payload.pageId,
});
if (!sliceSnapshot) {
return null;
}
for (const contentSlice of sliceSnapshot.content) {
const blockSnapshotRoot = {
type: 'block',
id: nanoid(),
flavour: 'affine:note',
props: {
xywh: '[0,0,800,95]',
background: DEFAULT_NOTE_BACKGROUND_COLOR,
index: 'a0',
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
},
children: [],
} as BlockSnapshot;
const walker = new ASTWalker<BlockSnapshot, BlockSnapshot>();
walker.setONodeTypeGuard(
(node): node is BlockSnapshot =>
BlockSnapshotSchema.safeParse(node).success
);
walker.setEnter((o, context) => {
switch (o.node.flavour) {
case 'affine:note': {
break;
}
case 'affine:paragraph': {
if (o.parent?.node.flavour !== 'affine:note') {
context.openNode({ ...o.node, children: [] });
break;
}
const text = (o.node.props.text ?? { delta: [] }) as {
delta: DeltaInsert[];
};
const rawText = text.delta.map(delta => delta.insert).join('');
const lines = rawText
.split('\n')
.map((line, index) => [index, line]);
for (const [i, line] of lines) {
context.openNode({
type: 'block',
id: i === 0 ? o.node.id : nanoid(),
flavour: 'affine:paragraph',
props: {
type: 'text',
text: {
'$blocksuite:internal:text$': true,
delta: [
{
insert: line,
},
],
},
},
children: [],
});
if (i !== lines.length - 1) {
context.closeNode();
}
}
break;
}
default: {
context.openNode({ ...o.node, children: [] });
}
}
});
walker.setLeave((o, context) => {
switch (o.node.flavour) {
case 'affine:note': {
break;
}
default: {
context.closeNode();
}
}
});
await walker.walk(contentSlice, blockSnapshotRoot);
contentSlice.children = blockSnapshotRoot.children;
}
return sliceSnapshot;
}
}

0 comments on commit f73f273

Please sign in to comment.