Fix docx import missing lesson content — include h1-h6 block elements
mammoth outputs week/quiz headings as <h2>/<h1>, not <p><strong>. The block-element regex only matched <p>, so all headings were skipped and no lessons were ever created. Expand regex to h[1-6]|p|ul|ol and treat any h-tag as a heading unconditionally. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
3197d29a28
commit
eb4b713e9d
1 file changed
+4
-4
@@ -44,15 +44,15 @@ async function parseUnitDocxBuffer(buffer, filename) {
|
||||
|
||||
// Walk the HTML and collect typed elements
|
||||
const elements = [];
|
||||
for (const m of stripped.matchAll(/<(p|ul|ol)(?:\s[^>]*)?>[\s\S]*?<\/\1>/gi)) {
|
||||
for (const m of stripped.matchAll(/<(h[1-6]|p|ul|ol)(?:\s[^>]*)?>[\s\S]*?<\/\1>/gi)) {
|
||||
const tag = m[0].match(/^<(\w+)/)[1].toLowerCase();
|
||||
const inner = m[0].replace(/^<[^>]+>/, '').replace(/<\/\w+>\s*$/, '');
|
||||
|
||||
if (tag === 'p') {
|
||||
if (tag === 'p' || /^h[1-6]$/.test(tag)) {
|
||||
const text = htmlToText(inner);
|
||||
if (!text) continue;
|
||||
// A paragraph whose only non-whitespace content is wrapped in <strong> is a heading
|
||||
const isHeading = /^<strong>[^<]+<\/strong>\s*$/.test(inner.trim());
|
||||
// h1-h6 are always headings; <p> is a heading only if its sole content is <strong>
|
||||
const isHeading = /^h[1-6]$/.test(tag) || /^<strong>[^<]+<\/strong>\s*$/.test(inner.trim());
|
||||
elements.push({ kind: isHeading ? 'heading' : 'para', text });
|
||||
} else {
|
||||
const items = [...inner.matchAll(/<li[^>]*>([\s\S]*?)<\/li>/gi)]
|
||||
|
||||
Reference in new issue
Block a user