mirror of
https://github.com/outline/outline.git
synced 2026-05-08 02:50:30 -05:00
@@ -1,3 +1,4 @@
|
||||
import { ProsemirrorData } from "../types";
|
||||
import { CommentMark, ProsemirrorHelper } from "./ProsemirrorHelper";
|
||||
|
||||
describe("ProsemirrorHelper", () => {
|
||||
@@ -87,4 +88,131 @@ describe("ProsemirrorHelper", () => {
|
||||
expect(returnedAnchorText).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("getPlainParagraphs", () => {
|
||||
it("should return an array of plain paragraphs", async () => {
|
||||
const data = {
|
||||
type: "doc",
|
||||
content: [
|
||||
{
|
||||
type: "paragraph",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "some content in a paragraph",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "paragraph",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "some content in another paragraph",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
} as ProsemirrorData;
|
||||
|
||||
const paragraphs = ProsemirrorHelper.getPlainParagraphs(data);
|
||||
|
||||
expect(paragraphs).toEqual([
|
||||
{
|
||||
type: "paragraph",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "some content in a paragraph",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "paragraph",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "some content in another paragraph",
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it("should return undefined when data contains inline nodes", async () => {
|
||||
const data = {
|
||||
type: "doc",
|
||||
content: [
|
||||
{
|
||||
type: "paragraph",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "some content in a paragraph",
|
||||
},
|
||||
{
|
||||
type: "emoji",
|
||||
attrs: {
|
||||
"data-name": "😆",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
} as ProsemirrorData;
|
||||
|
||||
const paragraphs = ProsemirrorHelper.getPlainParagraphs(data);
|
||||
expect(paragraphs).toBeUndefined();
|
||||
});
|
||||
|
||||
it("should return undefined when data contains block nodes", async () => {
|
||||
const data = {
|
||||
type: "doc",
|
||||
content: [
|
||||
{
|
||||
type: "blockquote",
|
||||
content: [
|
||||
{
|
||||
type: "paragraph",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "some content in a paragraph",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
} as ProsemirrorData;
|
||||
|
||||
const paragraphs = ProsemirrorHelper.getPlainParagraphs(data);
|
||||
expect(paragraphs).toBeUndefined();
|
||||
});
|
||||
|
||||
it("should return undefined when data contains marks", async () => {
|
||||
const data = {
|
||||
type: "doc",
|
||||
content: [
|
||||
{
|
||||
type: "paragraph",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "some content in a paragraph",
|
||||
marks: [
|
||||
{
|
||||
type: "bold",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
} as ProsemirrorData;
|
||||
|
||||
const paragraphs = ProsemirrorHelper.getPlainParagraphs(data);
|
||||
expect(paragraphs).toBeUndefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -346,4 +346,29 @@ export class ProsemirrorHelper {
|
||||
|
||||
return replace(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the paragraphs from the data if there are only plain paragraphs
|
||||
* without any formatting. Otherwise returns undefined.
|
||||
*
|
||||
* @param data The ProsemirrorData object
|
||||
* @returns An array of paragraph nodes or undefined
|
||||
*/
|
||||
static getPlainParagraphs(data: ProsemirrorData) {
|
||||
const paragraphs = [];
|
||||
for (const node of data.content) {
|
||||
if (
|
||||
node.type === "paragraph" &&
|
||||
!node.content.some(
|
||||
(item) =>
|
||||
item.type !== "text" || (item.marks && item.marks.length > 0)
|
||||
)
|
||||
) {
|
||||
paragraphs.push(node);
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
return paragraphs;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user