diff --git a/composables/content-parse.ts b/composables/content-parse.ts index 7f6745ba..67f01948 100644 --- a/composables/content-parse.ts +++ b/composables/content-parse.ts @@ -524,10 +524,21 @@ function transformMarkdown(node: Node) { return _markdownProcess(node.value) } +function addBdiParagraphs(node: Node) { + if (node.name === 'p' && !('dir' in node.attributes) && node.children?.length && node.children.length > 1) + node.attributes.dir = 'auto' + + return node +} + function transformParagraphs(node: Node): Node | Node[] { + // Add bdi to paragraphs + addBdiParagraphs(node) + // For top level paragraphs, inject an empty
to preserve status paragraphs in our editor (except for the last one) if (node.parent?.type === DOCUMENT_NODE && node.name === 'p' && node.parent.children.at(-1) !== node) return [node, h('p')] + return node } diff --git a/tests/nuxt/__snapshots__/content-rich.test.ts.snap b/tests/nuxt/__snapshots__/content-rich.test.ts.snap index a5ebc393..e9d3f6e7 100644 --- a/tests/nuxt/__snapshots__/content-rich.test.ts.snap +++ b/tests/nuxt/__snapshots__/content-rich.test.ts.snap @@ -38,7 +38,7 @@ const isDark = usePreferredDark()
" `; exports[`content-rich > code frame 2 1`] = ` -"+"
code frame 2 1`] = `
"
`;
-exports[`content-rich > code frame empty 1`] = `"
hello world
hello world
+"
handles formatting from servers 1`] = `
`;
exports[`content-rich > handles html within code blocks 1`] = `
-"
+"
HTML block code:
+"
Testing bdi is added
+"
Testing bdi not added
content content
+"
Inline code with link:
+"
Happy
link + mention 1`] = `
"
`;
+exports[`content-rich > p moved to div and text children replaced with p[dir="auto"] tags: br children removed 1`] = `
+"
+ @bebatjof
+ هذا اختبار:
+ This is a test:
+ هذا اختبار جديد
+
+ @bebatjof
+
+ This is a new test
+
+ @bebatjof
+
+"
+"
+"
Happy
{
`)
expect(formatted).toMatchSnapshot()
})
+
+ it ('root p includes dir="auto" attr when mixed content', async () => {
+ const { formatted } = await render(`
+ هذا اختبار جديد 🐦🐤 @bebatjof This is a new test 🐦🐤 @bebatjof @bebatjof هذا اختبار: This is a test:
<span class="icon--noto icon--noto--1st-place-medal"></span>
@@ -178,7 +178,7 @@ exports[`content-rich > handles html within code blocks 1`] = `
`;
exports[`content-rich > hashtag adds bdi 1`] = `
-"
https://api.iconify.design/noto.css?icons=1st-place-medal,2nd-place-medal
inline code with link 1`] = `
`;
exports[`content-rich > link + mention 1`] = `
-"
أنا أحب الطريقة التي يتم بها دعم النموذج المزدوج العربي. تمت
+ ترجمة الكلمة الأخيرة بشكل خاطئ وأحاول العثور على كيفية إصلاحها. أيضًا، يجب
+ إصلاح نموذج 0.
+
I like how the arabic dual form is supported. The last
+ one is mistranslated and I'm trying to find how to fix it. Also, the form
+ for 0 needs to be fixed.
+
أنا أحب الطريقة التي يتم بها دعم النموذج المزدوج العربي. تمت ترجمة
+ الكلمة الأخيرة بشكل خاطئ وأحاول العثور على كيفية إصلاحها.
+
+ ;). كما أن النموذج الخاص بـ 0 يحتاج إلى إصلاح
+
I like how the arabic dual form is supported. The last one is
+ mistranslated and I'm trying to find how to fix it.
+
+ ;). Also, the form for 0 needs to be fixed
+
أنا أحب الطريقة التي يتم بها دعم النموذج المزدوج العربي. تمت ترجمة الكلمة الأخيرة بشكل خاطئ وأحاول العثور على كيفية إصلاحها. 🐦🐤 ;). كما أن النموذج الخاص بـ 0 يحتاج إلى إصلاح #turkey #العربية .
I like how the arabic dual form is supported. The last one is mistranslated and I'm trying to find how to fix it. 🐦🐤 ;). Also, the form for 0 needs to be fixed #turkey #العربية .
أنا أحب الطريقة التي يتم بها دعم النموذج المزدوج العربي. تمت ترجمة الكلمة الأخيرة بشكل خاطئ وأحاول العثور على كيفية إصلاحها. أيضًا، يجب إصلاح نموذج 0.
I like how the arabic dual form is supported. The last one is mistranslated and I'm trying to find how to fix it. Also, the form for 0 needs to be fixed.