@examind/block-sdk 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +116 -72
- package/dist/index.mjs +107 -63
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -104,6 +104,26 @@ var EssayQuestionNodeHandler = class extends NodeHandler {
|
|
|
104
104
|
}
|
|
105
105
|
};
|
|
106
106
|
|
|
107
|
+
// src/typeGuards/isSerializedExcelCopyTextNode.ts
|
|
108
|
+
function isSerializedExcelCopyTextNode(node) {
|
|
109
|
+
return node?.type === "excel-copy-text";
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// src/exportToHtml/ExcelCopyTextNodeHandler.ts
|
|
113
|
+
var ExcelCopyTextNodeHandler = class extends NodeHandler {
|
|
114
|
+
processNode(node) {
|
|
115
|
+
if (!isSerializedExcelCopyTextNode(node)) return null;
|
|
116
|
+
const children = [];
|
|
117
|
+
node.children.forEach((child) => {
|
|
118
|
+
const childString = traverse(child);
|
|
119
|
+
if (childString) {
|
|
120
|
+
children.push(childString);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return `<x-copy>${children.join("")}</x-copy>`;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
107
127
|
// src/typeGuards/isSerializedExcelQuestionNode.ts
|
|
108
128
|
function isSerializedExcelQuestionNode(node) {
|
|
109
129
|
return node?.type === "excel-question" && "id" in node && typeof node.id === "string" && "points" in node && typeof node.points === "number" && "data" in node && typeof node.data === "object";
|
|
@@ -1037,7 +1057,7 @@ var VariableNodeHandler = class extends NodeHandler {
|
|
|
1037
1057
|
|
|
1038
1058
|
// src/exportToHtml/traverse.ts
|
|
1039
1059
|
var builder = new NodeHandlerChainBuilder();
|
|
1040
|
-
var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
|
|
1060
|
+
var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelCopyTextNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
|
|
1041
1061
|
var traverse = (node, metadata) => {
|
|
1042
1062
|
return nodeHandlerChain.handle(node, metadata);
|
|
1043
1063
|
};
|
|
@@ -1056,7 +1076,7 @@ function exportToHtml(editorState) {
|
|
|
1056
1076
|
}
|
|
1057
1077
|
|
|
1058
1078
|
// src/importFromHtml/index.ts
|
|
1059
|
-
var
|
|
1079
|
+
var import_node_html_parser32 = require("node-html-parser");
|
|
1060
1080
|
|
|
1061
1081
|
// src/importFromHtml/createEmptyParagraphNode.ts
|
|
1062
1082
|
function createEmptyParagraphNode(format = "") {
|
|
@@ -1348,6 +1368,30 @@ var EssayQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1348
1368
|
}
|
|
1349
1369
|
};
|
|
1350
1370
|
|
|
1371
|
+
// src/importFromHtml/ExcelCopyTextNodeHandler.ts
|
|
1372
|
+
var import_node_html_parser5 = require("node-html-parser");
|
|
1373
|
+
var ExcelCopyTextNodeHandler2 = class extends NodeHandler2 {
|
|
1374
|
+
isXCopyElement(node) {
|
|
1375
|
+
return node instanceof import_node_html_parser5.HTMLElement && node.tagName === "X-COPY";
|
|
1376
|
+
}
|
|
1377
|
+
processNode(node) {
|
|
1378
|
+
if (!this.isXCopyElement(node)) return null;
|
|
1379
|
+
const children = [];
|
|
1380
|
+
for (const childNode of node.childNodes) {
|
|
1381
|
+
const processedChildren = traverse2(childNode);
|
|
1382
|
+
children.push(...processedChildren);
|
|
1383
|
+
}
|
|
1384
|
+
return {
|
|
1385
|
+
children,
|
|
1386
|
+
direction: null,
|
|
1387
|
+
format: "",
|
|
1388
|
+
indent: 0,
|
|
1389
|
+
type: "excel-copy-text",
|
|
1390
|
+
version: 1
|
|
1391
|
+
};
|
|
1392
|
+
}
|
|
1393
|
+
};
|
|
1394
|
+
|
|
1351
1395
|
// src/importFromHtml/createNestedEditorFromHtml.ts
|
|
1352
1396
|
function createNestedEditorFromHtml(node) {
|
|
1353
1397
|
return {
|
|
@@ -1365,7 +1409,7 @@ function createNestedEditorFromHtml(node) {
|
|
|
1365
1409
|
}
|
|
1366
1410
|
|
|
1367
1411
|
// src/importFromHtml/ExcelQuestionNodeHandler.ts
|
|
1368
|
-
var
|
|
1412
|
+
var import_node_html_parser6 = require("node-html-parser");
|
|
1369
1413
|
var TAG_X = "x-excel";
|
|
1370
1414
|
function parseData(xDataString) {
|
|
1371
1415
|
const xData = JSON.parse(xDataString);
|
|
@@ -1378,14 +1422,14 @@ function parseData(xDataString) {
|
|
|
1378
1422
|
steps.push({
|
|
1379
1423
|
id: xStep.id,
|
|
1380
1424
|
description: createNestedEditorFromHtml(
|
|
1381
|
-
(0,
|
|
1425
|
+
(0, import_node_html_parser6.parse)(xStep.description ?? "")
|
|
1382
1426
|
)
|
|
1383
1427
|
});
|
|
1384
1428
|
}
|
|
1385
1429
|
tasks.push({
|
|
1386
1430
|
id: xTask.id,
|
|
1387
1431
|
instructions: createNestedEditorFromHtml(
|
|
1388
|
-
(0,
|
|
1432
|
+
(0, import_node_html_parser6.parse)(xTask.instructions ?? "")
|
|
1389
1433
|
),
|
|
1390
1434
|
steps
|
|
1391
1435
|
});
|
|
@@ -1393,10 +1437,10 @@ function parseData(xDataString) {
|
|
|
1393
1437
|
parts.push({
|
|
1394
1438
|
id: xPart.id,
|
|
1395
1439
|
objective: createNestedEditorFromHtml(
|
|
1396
|
-
(0,
|
|
1440
|
+
(0, import_node_html_parser6.parse)(xPart.objective ?? "")
|
|
1397
1441
|
),
|
|
1398
1442
|
instructions: createNestedEditorFromHtml(
|
|
1399
|
-
(0,
|
|
1443
|
+
(0, import_node_html_parser6.parse)(xPart.instructions ?? "")
|
|
1400
1444
|
),
|
|
1401
1445
|
onLoadActions: xPart.onLoadActions,
|
|
1402
1446
|
onNextActions: xPart.onNextActions,
|
|
@@ -1411,7 +1455,7 @@ function parseData(xDataString) {
|
|
|
1411
1455
|
}
|
|
1412
1456
|
var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1413
1457
|
processNode(node) {
|
|
1414
|
-
if (!(node instanceof
|
|
1458
|
+
if (!(node instanceof import_node_html_parser6.HTMLElement) || node.tagName !== TAG_X.toUpperCase()) {
|
|
1415
1459
|
return null;
|
|
1416
1460
|
}
|
|
1417
1461
|
const xDataElement = node.querySelector("x-data");
|
|
@@ -1435,11 +1479,11 @@ var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1435
1479
|
};
|
|
1436
1480
|
|
|
1437
1481
|
// src/importFromHtml/ExcelWorksheetLinkNodeHandler.ts
|
|
1438
|
-
var
|
|
1482
|
+
var import_node_html_parser7 = require("node-html-parser");
|
|
1439
1483
|
var TAG = "x-worksheet-link";
|
|
1440
1484
|
var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
|
|
1441
1485
|
processNode(node) {
|
|
1442
|
-
if (!(node instanceof
|
|
1486
|
+
if (!(node instanceof import_node_html_parser7.HTMLElement) || node.tagName !== TAG.toUpperCase()) {
|
|
1443
1487
|
return null;
|
|
1444
1488
|
}
|
|
1445
1489
|
const sheetName = node.getAttribute("x-data-name") || "";
|
|
@@ -1459,10 +1503,10 @@ var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
|
|
|
1459
1503
|
|
|
1460
1504
|
// src/importFromHtml/FillInTheBlankQuestionNodeHandler.ts
|
|
1461
1505
|
var import_nanoid2 = require("nanoid");
|
|
1462
|
-
var
|
|
1506
|
+
var import_node_html_parser8 = require("node-html-parser");
|
|
1463
1507
|
var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1464
1508
|
processNode(node) {
|
|
1465
|
-
if (!(node instanceof
|
|
1509
|
+
if (!(node instanceof import_node_html_parser8.HTMLElement) || node.tagName !== "x-fill-in-the-blank".toUpperCase())
|
|
1466
1510
|
return null;
|
|
1467
1511
|
const jsonNode = {
|
|
1468
1512
|
id: node.getAttribute("id") ?? (0, import_nanoid2.nanoid)(),
|
|
@@ -1479,7 +1523,7 @@ var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1479
1523
|
|
|
1480
1524
|
// src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
|
|
1481
1525
|
var import_nanoid3 = require("nanoid");
|
|
1482
|
-
var
|
|
1526
|
+
var import_node_html_parser9 = require("node-html-parser");
|
|
1483
1527
|
|
|
1484
1528
|
// src/importFromHtml/parseErrorToleranceAttribute.ts
|
|
1485
1529
|
function parseErrorToleranceAttribute(attr) {
|
|
@@ -1491,7 +1535,7 @@ function parseErrorToleranceAttribute(attr) {
|
|
|
1491
1535
|
// src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
|
|
1492
1536
|
var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
|
|
1493
1537
|
processNode(node) {
|
|
1494
|
-
if (!(node instanceof
|
|
1538
|
+
if (!(node instanceof import_node_html_parser9.HTMLElement) || node.tagName !== "x-space".toUpperCase())
|
|
1495
1539
|
return null;
|
|
1496
1540
|
const spaceTypeAttr = node.getAttribute("data-x-type");
|
|
1497
1541
|
const spaceType = spaceTypeAttr === "Text" || spaceTypeAttr === "Number" || spaceTypeAttr === "Dropdown" ? spaceTypeAttr : "Text";
|
|
@@ -1542,7 +1586,7 @@ var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
|
|
|
1542
1586
|
|
|
1543
1587
|
// src/importFromHtml/FinancialStatementQuestionNodeHandler.ts
|
|
1544
1588
|
var import_nanoid4 = require("nanoid");
|
|
1545
|
-
var
|
|
1589
|
+
var import_node_html_parser10 = require("node-html-parser");
|
|
1546
1590
|
var TAG_X_FINANCIAL_STATEMENT = "x-financial-statement";
|
|
1547
1591
|
var TAG_X_HEADER = "x-header";
|
|
1548
1592
|
var TAG_X_ROWS = "x-rows";
|
|
@@ -1556,7 +1600,7 @@ var isLineRole = (value) => value === "line-item" || value === "subtotal" || val
|
|
|
1556
1600
|
var parseLineRole = (value) => isLineRole(value) ? value : null;
|
|
1557
1601
|
var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1558
1602
|
processNode(node) {
|
|
1559
|
-
if (!(node instanceof
|
|
1603
|
+
if (!(node instanceof import_node_html_parser10.HTMLElement) || node.tagName !== TAG_X_FINANCIAL_STATEMENT.toUpperCase()) {
|
|
1560
1604
|
return null;
|
|
1561
1605
|
}
|
|
1562
1606
|
const headerElement = node.querySelector(TAG_X_HEADER);
|
|
@@ -1571,7 +1615,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1571
1615
|
version: 1
|
|
1572
1616
|
};
|
|
1573
1617
|
node.childNodes.forEach((child) => {
|
|
1574
|
-
if (!(child instanceof
|
|
1618
|
+
if (!(child instanceof import_node_html_parser10.HTMLElement)) return;
|
|
1575
1619
|
if (child.tagName === TAG_X_DISTRACTORS.toUpperCase()) {
|
|
1576
1620
|
this.processDistractorsNode(child, jsonNode);
|
|
1577
1621
|
} else if (child.tagName === TAG_X_ROWS.toUpperCase()) {
|
|
@@ -1582,7 +1626,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1582
1626
|
}
|
|
1583
1627
|
processDistractorsNode(distractorsNode, jsonNode) {
|
|
1584
1628
|
for (const distractorsChild of distractorsNode.childNodes) {
|
|
1585
|
-
if (!(distractorsChild instanceof
|
|
1629
|
+
if (!(distractorsChild instanceof import_node_html_parser10.HTMLElement)) continue;
|
|
1586
1630
|
if (distractorsChild.tagName !== TAG_X_DISTRACTOR.toUpperCase())
|
|
1587
1631
|
continue;
|
|
1588
1632
|
jsonNode.distractors.push({
|
|
@@ -1601,7 +1645,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1601
1645
|
const contentDiv = headerElement.querySelector(
|
|
1602
1646
|
'div > div:not([style*="display:flex"])'
|
|
1603
1647
|
);
|
|
1604
|
-
if (contentDiv && contentDiv instanceof
|
|
1648
|
+
if (contentDiv && contentDiv instanceof import_node_html_parser10.HTMLElement)
|
|
1605
1649
|
return createNestedEditorFromHtml(contentDiv);
|
|
1606
1650
|
}
|
|
1607
1651
|
return createNestedEditorFromHtml(headerElement);
|
|
@@ -1618,7 +1662,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1618
1662
|
}
|
|
1619
1663
|
processRowsNode(rowsNode, jsonNode) {
|
|
1620
1664
|
for (const rowsChild of rowsNode.childNodes) {
|
|
1621
|
-
if (!(rowsChild instanceof
|
|
1665
|
+
if (!(rowsChild instanceof import_node_html_parser10.HTMLElement)) continue;
|
|
1622
1666
|
if (rowsChild.tagName === TAG_X_HEADING.toUpperCase()) {
|
|
1623
1667
|
this.processHeadingRow(rowsChild, jsonNode);
|
|
1624
1668
|
} else if (rowsChild.tagName === TAG_X_LINE.toUpperCase()) {
|
|
@@ -1654,7 +1698,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1654
1698
|
};
|
|
1655
1699
|
|
|
1656
1700
|
// src/importFromHtml/FormattedNodeHandler.ts
|
|
1657
|
-
var
|
|
1701
|
+
var import_node_html_parser11 = require("node-html-parser");
|
|
1658
1702
|
var IS_BOLD2 = 1;
|
|
1659
1703
|
var IS_ITALIC2 = 1 << 1;
|
|
1660
1704
|
var IS_STRIKETHROUGH2 = 1 << 2;
|
|
@@ -1694,7 +1738,7 @@ function formatToProps(format) {
|
|
|
1694
1738
|
}
|
|
1695
1739
|
var FormattedNodeHandler = class extends NodeHandler2 {
|
|
1696
1740
|
processNode(node) {
|
|
1697
|
-
if (!(node instanceof
|
|
1741
|
+
if (!(node instanceof import_node_html_parser11.HTMLElement)) return null;
|
|
1698
1742
|
const tagName = node.tagName;
|
|
1699
1743
|
if (!tagName || !(tagName in TAG_TO_FORMAT)) return null;
|
|
1700
1744
|
const formatFlag = TAG_TO_FORMAT[tagName];
|
|
@@ -1729,7 +1773,7 @@ var FormattedNodeHandler = class extends NodeHandler2 {
|
|
|
1729
1773
|
};
|
|
1730
1774
|
|
|
1731
1775
|
// src/importFromHtml/HeadingNodeHandler.ts
|
|
1732
|
-
var
|
|
1776
|
+
var import_node_html_parser12 = require("node-html-parser");
|
|
1733
1777
|
|
|
1734
1778
|
// src/importFromHtml/extractTextAlignment.ts
|
|
1735
1779
|
var TEXT_ALIGN_TO_FORMAT = {
|
|
@@ -1757,7 +1801,7 @@ function extractTextAlignment(element) {
|
|
|
1757
1801
|
var TAG_HEADINGS = ["h1", "h2", "h3", "h4", "h5", "h6"];
|
|
1758
1802
|
var HeadingNodeHandler2 = class extends NodeHandler2 {
|
|
1759
1803
|
processNode(node) {
|
|
1760
|
-
if (!(node instanceof
|
|
1804
|
+
if (!(node instanceof import_node_html_parser12.HTMLElement) || !TAG_HEADINGS.includes(node.tagName.toLowerCase())) {
|
|
1761
1805
|
return null;
|
|
1762
1806
|
}
|
|
1763
1807
|
const headingNode = {
|
|
@@ -1778,11 +1822,11 @@ var HeadingNodeHandler2 = class extends NodeHandler2 {
|
|
|
1778
1822
|
};
|
|
1779
1823
|
|
|
1780
1824
|
// src/importFromHtml/HorizontalRuleNodeHandler.ts
|
|
1781
|
-
var
|
|
1825
|
+
var import_node_html_parser13 = require("node-html-parser");
|
|
1782
1826
|
var TAG_HR = "hr";
|
|
1783
1827
|
var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
|
|
1784
1828
|
processNode(node) {
|
|
1785
|
-
if (!(node instanceof
|
|
1829
|
+
if (!(node instanceof import_node_html_parser13.HTMLElement) || node.tagName !== TAG_HR.toUpperCase()) {
|
|
1786
1830
|
return null;
|
|
1787
1831
|
}
|
|
1788
1832
|
const horizontalRuleNode = {
|
|
@@ -1794,11 +1838,11 @@ var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
|
|
|
1794
1838
|
};
|
|
1795
1839
|
|
|
1796
1840
|
// src/importFromHtml/ImageNodeHandler.ts
|
|
1797
|
-
var
|
|
1841
|
+
var import_node_html_parser14 = require("node-html-parser");
|
|
1798
1842
|
var TAG_IMG = "img";
|
|
1799
1843
|
var ImageNodeHandler2 = class extends NodeHandler2 {
|
|
1800
1844
|
processNode(node) {
|
|
1801
|
-
if (!(node instanceof
|
|
1845
|
+
if (!(node instanceof import_node_html_parser14.HTMLElement) || node.tagName !== TAG_IMG.toUpperCase()) {
|
|
1802
1846
|
return null;
|
|
1803
1847
|
}
|
|
1804
1848
|
return createImageNode(
|
|
@@ -1814,11 +1858,11 @@ var ImageNodeHandler2 = class extends NodeHandler2 {
|
|
|
1814
1858
|
|
|
1815
1859
|
// src/importFromHtml/JournalEntryQuestionNodeHandler.ts
|
|
1816
1860
|
var import_nanoid6 = require("nanoid");
|
|
1817
|
-
var
|
|
1861
|
+
var import_node_html_parser16 = require("node-html-parser");
|
|
1818
1862
|
|
|
1819
1863
|
// src/importFromHtml/createOnePerLineDistractorNode.ts
|
|
1820
1864
|
var import_nanoid5 = require("nanoid");
|
|
1821
|
-
var
|
|
1865
|
+
var import_node_html_parser15 = require("node-html-parser");
|
|
1822
1866
|
function extractDistractorId(id) {
|
|
1823
1867
|
if (!id) return null;
|
|
1824
1868
|
const parts = id.split("|");
|
|
@@ -1831,7 +1875,7 @@ var createOnePerLineDistractorNode = (node) => {
|
|
|
1831
1875
|
distractorEditor.editorState.root.children = [];
|
|
1832
1876
|
let distractorId = null;
|
|
1833
1877
|
distractors.forEach((distractor) => {
|
|
1834
|
-
if (!(distractor instanceof
|
|
1878
|
+
if (!(distractor instanceof import_node_html_parser15.HTMLElement)) return;
|
|
1835
1879
|
distractorId = distractorId ?? extractDistractorId(distractor.getAttribute("id"));
|
|
1836
1880
|
distractorEditor.editorState.root.children.push(
|
|
1837
1881
|
...createNestedNodesFromHtml(distractor)
|
|
@@ -1849,7 +1893,7 @@ var createOnePerLineDistractorNode = (node) => {
|
|
|
1849
1893
|
// src/importFromHtml/JournalEntryQuestionNodeHandler.ts
|
|
1850
1894
|
var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1851
1895
|
processNode(node) {
|
|
1852
|
-
if (!(node instanceof
|
|
1896
|
+
if (!(node instanceof import_node_html_parser16.HTMLElement) || node.tagName !== "x-journal-entry".toUpperCase())
|
|
1853
1897
|
return null;
|
|
1854
1898
|
const jsonNode = {
|
|
1855
1899
|
id: node.getAttribute("id") ?? (0, import_nanoid6.nanoid)(),
|
|
@@ -1864,7 +1908,7 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1864
1908
|
};
|
|
1865
1909
|
const lineItems = node.querySelectorAll("x-line-item");
|
|
1866
1910
|
lineItems.forEach((lineItem) => {
|
|
1867
|
-
if (!(lineItem instanceof
|
|
1911
|
+
if (!(lineItem instanceof import_node_html_parser16.HTMLElement)) return;
|
|
1868
1912
|
const accountElement = lineItem.querySelector("x-account");
|
|
1869
1913
|
const debitElement = lineItem.querySelector("x-debit");
|
|
1870
1914
|
const creditElement = lineItem.querySelector("x-credit");
|
|
@@ -1893,10 +1937,10 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1893
1937
|
};
|
|
1894
1938
|
|
|
1895
1939
|
// src/importFromHtml/LineBreakNodeHandler.ts
|
|
1896
|
-
var
|
|
1940
|
+
var import_node_html_parser17 = require("node-html-parser");
|
|
1897
1941
|
var LineBreakNodeHandler2 = class extends NodeHandler2 {
|
|
1898
1942
|
processNode(node) {
|
|
1899
|
-
if (!(node instanceof
|
|
1943
|
+
if (!(node instanceof import_node_html_parser17.HTMLElement)) return null;
|
|
1900
1944
|
if (node.tagName !== "BR") return null;
|
|
1901
1945
|
return {
|
|
1902
1946
|
type: "linebreak",
|
|
@@ -1906,11 +1950,11 @@ var LineBreakNodeHandler2 = class extends NodeHandler2 {
|
|
|
1906
1950
|
};
|
|
1907
1951
|
|
|
1908
1952
|
// src/importFromHtml/LinkNodeHandler.ts
|
|
1909
|
-
var
|
|
1953
|
+
var import_node_html_parser18 = require("node-html-parser");
|
|
1910
1954
|
var TAG_A = "a";
|
|
1911
1955
|
var LinkNodeHandler2 = class extends NodeHandler2 {
|
|
1912
1956
|
processNode(node) {
|
|
1913
|
-
if (!(node instanceof
|
|
1957
|
+
if (!(node instanceof import_node_html_parser18.HTMLElement) || node.tagName !== TAG_A.toUpperCase()) {
|
|
1914
1958
|
return null;
|
|
1915
1959
|
}
|
|
1916
1960
|
const url = node.getAttribute("href") || "";
|
|
@@ -1939,10 +1983,10 @@ var LinkNodeHandler2 = class extends NodeHandler2 {
|
|
|
1939
1983
|
};
|
|
1940
1984
|
|
|
1941
1985
|
// src/importFromHtml/ListItemNodeHandler.ts
|
|
1942
|
-
var
|
|
1986
|
+
var import_node_html_parser19 = require("node-html-parser");
|
|
1943
1987
|
var ListItemNodeHandler2 = class extends NodeHandler2 {
|
|
1944
1988
|
processNode(node) {
|
|
1945
|
-
if (!(node instanceof
|
|
1989
|
+
if (!(node instanceof import_node_html_parser19.HTMLElement)) return null;
|
|
1946
1990
|
if (node.tagName !== "LI") return null;
|
|
1947
1991
|
const jsonNode = {
|
|
1948
1992
|
type: "listitem",
|
|
@@ -1963,10 +2007,10 @@ var ListItemNodeHandler2 = class extends NodeHandler2 {
|
|
|
1963
2007
|
};
|
|
1964
2008
|
|
|
1965
2009
|
// src/importFromHtml/ListNodeHandler.ts
|
|
1966
|
-
var
|
|
2010
|
+
var import_node_html_parser20 = require("node-html-parser");
|
|
1967
2011
|
var ListNodeHandler2 = class extends NodeHandler2 {
|
|
1968
2012
|
processNode(node) {
|
|
1969
|
-
if (!(node instanceof
|
|
2013
|
+
if (!(node instanceof import_node_html_parser20.HTMLElement)) return null;
|
|
1970
2014
|
if (node.tagName !== "UL" && node.tagName !== "OL") return null;
|
|
1971
2015
|
const tag = node.tagName.toLowerCase();
|
|
1972
2016
|
const listType = tag === "ol" ? "number" : "bullet";
|
|
@@ -1984,7 +2028,7 @@ var ListNodeHandler2 = class extends NodeHandler2 {
|
|
|
1984
2028
|
};
|
|
1985
2029
|
let itemIndex = 1;
|
|
1986
2030
|
node.childNodes.forEach((child) => {
|
|
1987
|
-
if (child instanceof
|
|
2031
|
+
if (child instanceof import_node_html_parser20.HTMLElement && child.tagName === "LI") {
|
|
1988
2032
|
const listItemNode = {
|
|
1989
2033
|
type: "listitem",
|
|
1990
2034
|
version: 1,
|
|
@@ -2009,10 +2053,10 @@ var ListNodeHandler2 = class extends NodeHandler2 {
|
|
|
2009
2053
|
|
|
2010
2054
|
// src/importFromHtml/MatchingQuestionNodeHandler.ts
|
|
2011
2055
|
var import_nanoid7 = require("nanoid");
|
|
2012
|
-
var
|
|
2056
|
+
var import_node_html_parser21 = require("node-html-parser");
|
|
2013
2057
|
var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
2014
2058
|
processNode(node) {
|
|
2015
|
-
if (!(node instanceof
|
|
2059
|
+
if (!(node instanceof import_node_html_parser21.HTMLElement) || node.tagName !== "x-matching".toUpperCase())
|
|
2016
2060
|
return null;
|
|
2017
2061
|
const jsonNode = {
|
|
2018
2062
|
id: node.getAttribute("id") ?? (0, import_nanoid7.nanoid)(),
|
|
@@ -2025,7 +2069,7 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2025
2069
|
};
|
|
2026
2070
|
const matches = node.querySelectorAll("x-match");
|
|
2027
2071
|
matches.forEach((match) => {
|
|
2028
|
-
if (!(match instanceof
|
|
2072
|
+
if (!(match instanceof import_node_html_parser21.HTMLElement)) return;
|
|
2029
2073
|
const premise = match.querySelector("x-premise");
|
|
2030
2074
|
const option = match.querySelector("x-option");
|
|
2031
2075
|
if (!premise || !option) return;
|
|
@@ -2048,10 +2092,10 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2048
2092
|
|
|
2049
2093
|
// src/importFromHtml/MultipleOptionQuestionNodeHandler.ts
|
|
2050
2094
|
var import_nanoid8 = require("nanoid");
|
|
2051
|
-
var
|
|
2095
|
+
var import_node_html_parser22 = require("node-html-parser");
|
|
2052
2096
|
var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
2053
2097
|
processNode(node) {
|
|
2054
|
-
if (!(node instanceof
|
|
2098
|
+
if (!(node instanceof import_node_html_parser22.HTMLElement)) return null;
|
|
2055
2099
|
if (node.tagName === "x-multiple-choice".toUpperCase())
|
|
2056
2100
|
return this.processMultipleChoiceNode(node);
|
|
2057
2101
|
else if (node.tagName === "x-multiple-answers".toUpperCase())
|
|
@@ -2091,7 +2135,7 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2091
2135
|
processOptions(node, jsonNode) {
|
|
2092
2136
|
const childNodes = node.childNodes;
|
|
2093
2137
|
childNodes.forEach((child) => {
|
|
2094
|
-
if (!(child instanceof
|
|
2138
|
+
if (!(child instanceof import_node_html_parser22.HTMLElement)) return;
|
|
2095
2139
|
if (child.tagName !== "x-option".toUpperCase()) return;
|
|
2096
2140
|
jsonNode.options.push({
|
|
2097
2141
|
id: child.getAttribute("id") ?? (0, import_nanoid8.nanoid)(),
|
|
@@ -2103,28 +2147,28 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2103
2147
|
};
|
|
2104
2148
|
|
|
2105
2149
|
// src/importFromHtml/ParagraphNodeHandler.ts
|
|
2106
|
-
var
|
|
2150
|
+
var import_node_html_parser23 = require("node-html-parser");
|
|
2107
2151
|
var ParagraphNodeHandler2 = class extends NodeHandler2 {
|
|
2108
2152
|
processImageNode(node) {
|
|
2109
|
-
if (node.childNodes.length === 1 && node.childNodes[0] instanceof
|
|
2153
|
+
if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].tagName === "IMG") {
|
|
2110
2154
|
return traverse2(node.childNodes[0]);
|
|
2111
2155
|
}
|
|
2112
2156
|
return null;
|
|
2113
2157
|
}
|
|
2114
2158
|
processSpanImageNode(node) {
|
|
2115
|
-
if (node.childNodes.length === 1 && node.childNodes[0] instanceof
|
|
2159
|
+
if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].tagName === "SPAN" && node.childNodes[0].childNodes.length === 1 && node.childNodes[0].childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].childNodes[0].tagName === "IMG") {
|
|
2116
2160
|
return traverse2(node.childNodes[0].childNodes[0]);
|
|
2117
2161
|
}
|
|
2118
2162
|
return null;
|
|
2119
2163
|
}
|
|
2120
2164
|
processNode(node) {
|
|
2121
|
-
if (!(node instanceof
|
|
2165
|
+
if (!(node instanceof import_node_html_parser23.HTMLElement)) return null;
|
|
2122
2166
|
if (node.tagName !== "P") return null;
|
|
2123
2167
|
const imageNode = this.processImageNode(node) ?? this.processSpanImageNode(node);
|
|
2124
2168
|
if (imageNode) return imageNode;
|
|
2125
2169
|
const jsonNode = createEmptyParagraphNode();
|
|
2126
2170
|
jsonNode.format = extractTextAlignment(node);
|
|
2127
|
-
if (node.childNodes.length === 1 && node.childNodes[0] instanceof
|
|
2171
|
+
if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].tagName === "BR")
|
|
2128
2172
|
return jsonNode;
|
|
2129
2173
|
node.childNodes.forEach((child) => {
|
|
2130
2174
|
const processedChildren = traverse2(child);
|
|
@@ -2136,10 +2180,10 @@ var ParagraphNodeHandler2 = class extends NodeHandler2 {
|
|
|
2136
2180
|
|
|
2137
2181
|
// src/importFromHtml/ShortAnswerQuestionNodeHandler.ts
|
|
2138
2182
|
var import_nanoid9 = require("nanoid");
|
|
2139
|
-
var
|
|
2183
|
+
var import_node_html_parser24 = require("node-html-parser");
|
|
2140
2184
|
var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
2141
2185
|
processNode(node) {
|
|
2142
|
-
if (!(node instanceof
|
|
2186
|
+
if (!(node instanceof import_node_html_parser24.HTMLElement) || node.tagName !== "x-short-answer".toUpperCase())
|
|
2143
2187
|
return null;
|
|
2144
2188
|
return {
|
|
2145
2189
|
id: node.getAttribute("id") ?? (0, import_nanoid9.nanoid)(),
|
|
@@ -2155,7 +2199,7 @@ var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2155
2199
|
};
|
|
2156
2200
|
|
|
2157
2201
|
// src/importFromHtml/SimulationQuestionNodeHandler.ts
|
|
2158
|
-
var
|
|
2202
|
+
var import_node_html_parser25 = require("node-html-parser");
|
|
2159
2203
|
var TAG_X_SIMULATION = "x-simulation";
|
|
2160
2204
|
var TAG_X_SYSTEM_MESSAGE2 = "x-ai-system-message";
|
|
2161
2205
|
var TAG_X_COMMENT_INSTRUCTIONS = "x-comment-instructions";
|
|
@@ -2163,7 +2207,7 @@ var TAG_X_STEP2_INSTRUCTIONS = "x-step2-instructions";
|
|
|
2163
2207
|
var findFirstNonEmptyInnerHtml = (root, elementNames) => elementNames.map((name) => root.querySelector(name)).find((el) => el?.innerHTML.trim().length)?.innerHTML.trim() ?? null;
|
|
2164
2208
|
var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
2165
2209
|
processNode(node) {
|
|
2166
|
-
if (!(node instanceof
|
|
2210
|
+
if (!(node instanceof import_node_html_parser25.HTMLElement) || node.tagName !== TAG_X_SIMULATION.toUpperCase()) {
|
|
2167
2211
|
return null;
|
|
2168
2212
|
}
|
|
2169
2213
|
const jsonNode = {
|
|
@@ -2184,11 +2228,11 @@ var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2184
2228
|
};
|
|
2185
2229
|
|
|
2186
2230
|
// src/importFromHtml/SpanNodeHandler.ts
|
|
2187
|
-
var
|
|
2188
|
-
var TextNode =
|
|
2231
|
+
var import_node_html_parser26 = require("node-html-parser");
|
|
2232
|
+
var TextNode = import_node_html_parser26.parse.TextNode;
|
|
2189
2233
|
var SpanNodeHandler = class extends NodeHandler2 {
|
|
2190
2234
|
processNode(node) {
|
|
2191
|
-
if (!(node instanceof
|
|
2235
|
+
if (!(node instanceof import_node_html_parser26.HTMLElement) || node.tagName !== "SPAN")
|
|
2192
2236
|
return null;
|
|
2193
2237
|
const styleAttr = node.getAttribute("style") || "";
|
|
2194
2238
|
if (node.childNodes.length === 1 && node.childNodes[0] instanceof TextNode) {
|
|
@@ -2250,7 +2294,7 @@ var SpanNodeHandler = class extends NodeHandler2 {
|
|
|
2250
2294
|
};
|
|
2251
2295
|
|
|
2252
2296
|
// src/importFromHtml/TableCellNodeHandler.ts
|
|
2253
|
-
var
|
|
2297
|
+
var import_node_html_parser27 = require("node-html-parser");
|
|
2254
2298
|
|
|
2255
2299
|
// src/importFromHtml/createTableNodes.ts
|
|
2256
2300
|
function createEmptyTableNode() {
|
|
@@ -2287,7 +2331,7 @@ function createEmptyTableCellNode(isHeader = false) {
|
|
|
2287
2331
|
|
|
2288
2332
|
// src/importFromHtml/TableCellNodeHandler.ts
|
|
2289
2333
|
var isHtmlTableCellElement = (node) => {
|
|
2290
|
-
return node instanceof
|
|
2334
|
+
return node instanceof import_node_html_parser27.HTMLElement && (node.tagName === "TD" || node.tagName === "TH");
|
|
2291
2335
|
};
|
|
2292
2336
|
var TableCellNodeHandler2 = class extends NodeHandler2 {
|
|
2293
2337
|
processNode(node) {
|
|
@@ -2332,10 +2376,10 @@ var TableCellNodeHandler2 = class extends NodeHandler2 {
|
|
|
2332
2376
|
};
|
|
2333
2377
|
|
|
2334
2378
|
// src/importFromHtml/TableNodeHandler.ts
|
|
2335
|
-
var
|
|
2379
|
+
var import_node_html_parser28 = require("node-html-parser");
|
|
2336
2380
|
var REFERENCE_TABLE_WIDTH = 720;
|
|
2337
2381
|
var MINIMUM_REFERENCE_TABLE_WIDTH = 500;
|
|
2338
|
-
var isHtmlTableElement = (node) => node instanceof
|
|
2382
|
+
var isHtmlTableElement = (node) => node instanceof import_node_html_parser28.HTMLElement && node.tagName === "TABLE";
|
|
2339
2383
|
var TableNodeHandler2 = class extends NodeHandler2 {
|
|
2340
2384
|
processNode(node) {
|
|
2341
2385
|
if (!isHtmlTableElement(node)) return null;
|
|
@@ -2490,9 +2534,9 @@ var TableNodeHandler2 = class extends NodeHandler2 {
|
|
|
2490
2534
|
};
|
|
2491
2535
|
|
|
2492
2536
|
// src/importFromHtml/TableRowNodeHandler.ts
|
|
2493
|
-
var
|
|
2537
|
+
var import_node_html_parser29 = require("node-html-parser");
|
|
2494
2538
|
var isHtmlTableRowElement = (node) => {
|
|
2495
|
-
return node instanceof
|
|
2539
|
+
return node instanceof import_node_html_parser29.HTMLElement && node.tagName === "TR";
|
|
2496
2540
|
};
|
|
2497
2541
|
var TableRowNodeHandler2 = class extends NodeHandler2 {
|
|
2498
2542
|
processNode(node) {
|
|
@@ -2515,8 +2559,8 @@ var TableRowNodeHandler2 = class extends NodeHandler2 {
|
|
|
2515
2559
|
};
|
|
2516
2560
|
|
|
2517
2561
|
// src/importFromHtml/TextNodeHandler.ts
|
|
2518
|
-
var
|
|
2519
|
-
var TextNode2 =
|
|
2562
|
+
var import_node_html_parser30 = require("node-html-parser");
|
|
2563
|
+
var TextNode2 = import_node_html_parser30.parse.TextNode;
|
|
2520
2564
|
var TextNodeHandler2 = class extends NodeHandler2 {
|
|
2521
2565
|
processNode(node) {
|
|
2522
2566
|
if (!(node instanceof TextNode2)) return null;
|
|
@@ -2535,10 +2579,10 @@ var TextNodeHandler2 = class extends NodeHandler2 {
|
|
|
2535
2579
|
};
|
|
2536
2580
|
|
|
2537
2581
|
// src/importFromHtml/VariableNodeHandler.ts
|
|
2538
|
-
var
|
|
2582
|
+
var import_node_html_parser31 = require("node-html-parser");
|
|
2539
2583
|
var VariableNodeHandler2 = class extends NodeHandler2 {
|
|
2540
2584
|
processNode(node) {
|
|
2541
|
-
if (!(node instanceof
|
|
2585
|
+
if (!(node instanceof import_node_html_parser31.HTMLElement) || !node.tagName) return null;
|
|
2542
2586
|
if (node.tagName !== "x-param".toUpperCase()) return null;
|
|
2543
2587
|
return {
|
|
2544
2588
|
variableName: node.getAttribute("data-x-name") || "undefined",
|
|
@@ -2551,7 +2595,7 @@ var VariableNodeHandler2 = class extends NodeHandler2 {
|
|
|
2551
2595
|
|
|
2552
2596
|
// src/importFromHtml/traverse.ts
|
|
2553
2597
|
var builder2 = new NodeHandlerChainBuilder();
|
|
2554
|
-
var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
|
|
2598
|
+
var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelCopyTextNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
|
|
2555
2599
|
function traverse2(node) {
|
|
2556
2600
|
const result = nodeHandlerChain2.handle(node);
|
|
2557
2601
|
if (result === null) return [];
|
|
@@ -2569,7 +2613,7 @@ function processChildren(node) {
|
|
|
2569
2613
|
return result;
|
|
2570
2614
|
}
|
|
2571
2615
|
function processHtml(html) {
|
|
2572
|
-
const root = (0,
|
|
2616
|
+
const root = (0, import_node_html_parser32.parse)(html);
|
|
2573
2617
|
return processChildren(root);
|
|
2574
2618
|
}
|
|
2575
2619
|
function importFromHtml(html) {
|
package/dist/index.mjs
CHANGED
|
@@ -77,6 +77,26 @@ var EssayQuestionNodeHandler = class extends NodeHandler {
|
|
|
77
77
|
}
|
|
78
78
|
};
|
|
79
79
|
|
|
80
|
+
// src/typeGuards/isSerializedExcelCopyTextNode.ts
|
|
81
|
+
function isSerializedExcelCopyTextNode(node) {
|
|
82
|
+
return node?.type === "excel-copy-text";
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// src/exportToHtml/ExcelCopyTextNodeHandler.ts
|
|
86
|
+
var ExcelCopyTextNodeHandler = class extends NodeHandler {
|
|
87
|
+
processNode(node) {
|
|
88
|
+
if (!isSerializedExcelCopyTextNode(node)) return null;
|
|
89
|
+
const children = [];
|
|
90
|
+
node.children.forEach((child) => {
|
|
91
|
+
const childString = traverse(child);
|
|
92
|
+
if (childString) {
|
|
93
|
+
children.push(childString);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
return `<x-copy>${children.join("")}</x-copy>`;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
80
100
|
// src/typeGuards/isSerializedExcelQuestionNode.ts
|
|
81
101
|
function isSerializedExcelQuestionNode(node) {
|
|
82
102
|
return node?.type === "excel-question" && "id" in node && typeof node.id === "string" && "points" in node && typeof node.points === "number" && "data" in node && typeof node.data === "object";
|
|
@@ -1010,7 +1030,7 @@ var VariableNodeHandler = class extends NodeHandler {
|
|
|
1010
1030
|
|
|
1011
1031
|
// src/exportToHtml/traverse.ts
|
|
1012
1032
|
var builder = new NodeHandlerChainBuilder();
|
|
1013
|
-
var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
|
|
1033
|
+
var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelCopyTextNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
|
|
1014
1034
|
var traverse = (node, metadata) => {
|
|
1015
1035
|
return nodeHandlerChain.handle(node, metadata);
|
|
1016
1036
|
};
|
|
@@ -1321,6 +1341,30 @@ var EssayQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1321
1341
|
}
|
|
1322
1342
|
};
|
|
1323
1343
|
|
|
1344
|
+
// src/importFromHtml/ExcelCopyTextNodeHandler.ts
|
|
1345
|
+
import { HTMLElement as HTMLElement5 } from "node-html-parser";
|
|
1346
|
+
var ExcelCopyTextNodeHandler2 = class extends NodeHandler2 {
|
|
1347
|
+
isXCopyElement(node) {
|
|
1348
|
+
return node instanceof HTMLElement5 && node.tagName === "X-COPY";
|
|
1349
|
+
}
|
|
1350
|
+
processNode(node) {
|
|
1351
|
+
if (!this.isXCopyElement(node)) return null;
|
|
1352
|
+
const children = [];
|
|
1353
|
+
for (const childNode of node.childNodes) {
|
|
1354
|
+
const processedChildren = traverse2(childNode);
|
|
1355
|
+
children.push(...processedChildren);
|
|
1356
|
+
}
|
|
1357
|
+
return {
|
|
1358
|
+
children,
|
|
1359
|
+
direction: null,
|
|
1360
|
+
format: "",
|
|
1361
|
+
indent: 0,
|
|
1362
|
+
type: "excel-copy-text",
|
|
1363
|
+
version: 1
|
|
1364
|
+
};
|
|
1365
|
+
}
|
|
1366
|
+
};
|
|
1367
|
+
|
|
1324
1368
|
// src/importFromHtml/createNestedEditorFromHtml.ts
|
|
1325
1369
|
function createNestedEditorFromHtml(node) {
|
|
1326
1370
|
return {
|
|
@@ -1338,7 +1382,7 @@ function createNestedEditorFromHtml(node) {
|
|
|
1338
1382
|
}
|
|
1339
1383
|
|
|
1340
1384
|
// src/importFromHtml/ExcelQuestionNodeHandler.ts
|
|
1341
|
-
import { HTMLElement as
|
|
1385
|
+
import { HTMLElement as HTMLElement6, parse } from "node-html-parser";
|
|
1342
1386
|
var TAG_X = "x-excel";
|
|
1343
1387
|
function parseData(xDataString) {
|
|
1344
1388
|
const xData = JSON.parse(xDataString);
|
|
@@ -1384,7 +1428,7 @@ function parseData(xDataString) {
|
|
|
1384
1428
|
}
|
|
1385
1429
|
var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1386
1430
|
processNode(node) {
|
|
1387
|
-
if (!(node instanceof
|
|
1431
|
+
if (!(node instanceof HTMLElement6) || node.tagName !== TAG_X.toUpperCase()) {
|
|
1388
1432
|
return null;
|
|
1389
1433
|
}
|
|
1390
1434
|
const xDataElement = node.querySelector("x-data");
|
|
@@ -1408,11 +1452,11 @@ var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1408
1452
|
};
|
|
1409
1453
|
|
|
1410
1454
|
// src/importFromHtml/ExcelWorksheetLinkNodeHandler.ts
|
|
1411
|
-
import { HTMLElement as
|
|
1455
|
+
import { HTMLElement as HTMLElement7 } from "node-html-parser";
|
|
1412
1456
|
var TAG = "x-worksheet-link";
|
|
1413
1457
|
var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
|
|
1414
1458
|
processNode(node) {
|
|
1415
|
-
if (!(node instanceof
|
|
1459
|
+
if (!(node instanceof HTMLElement7) || node.tagName !== TAG.toUpperCase()) {
|
|
1416
1460
|
return null;
|
|
1417
1461
|
}
|
|
1418
1462
|
const sheetName = node.getAttribute("x-data-name") || "";
|
|
@@ -1432,10 +1476,10 @@ var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
|
|
|
1432
1476
|
|
|
1433
1477
|
// src/importFromHtml/FillInTheBlankQuestionNodeHandler.ts
|
|
1434
1478
|
import { nanoid as nanoid2 } from "nanoid";
|
|
1435
|
-
import { HTMLElement as
|
|
1479
|
+
import { HTMLElement as HTMLElement8 } from "node-html-parser";
|
|
1436
1480
|
var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1437
1481
|
processNode(node) {
|
|
1438
|
-
if (!(node instanceof
|
|
1482
|
+
if (!(node instanceof HTMLElement8) || node.tagName !== "x-fill-in-the-blank".toUpperCase())
|
|
1439
1483
|
return null;
|
|
1440
1484
|
const jsonNode = {
|
|
1441
1485
|
id: node.getAttribute("id") ?? nanoid2(),
|
|
@@ -1452,7 +1496,7 @@ var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1452
1496
|
|
|
1453
1497
|
// src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
|
|
1454
1498
|
import { nanoid as nanoid3 } from "nanoid";
|
|
1455
|
-
import { HTMLElement as
|
|
1499
|
+
import { HTMLElement as HTMLElement9 } from "node-html-parser";
|
|
1456
1500
|
|
|
1457
1501
|
// src/importFromHtml/parseErrorToleranceAttribute.ts
|
|
1458
1502
|
function parseErrorToleranceAttribute(attr) {
|
|
@@ -1464,7 +1508,7 @@ function parseErrorToleranceAttribute(attr) {
|
|
|
1464
1508
|
// src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
|
|
1465
1509
|
var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
|
|
1466
1510
|
processNode(node) {
|
|
1467
|
-
if (!(node instanceof
|
|
1511
|
+
if (!(node instanceof HTMLElement9) || node.tagName !== "x-space".toUpperCase())
|
|
1468
1512
|
return null;
|
|
1469
1513
|
const spaceTypeAttr = node.getAttribute("data-x-type");
|
|
1470
1514
|
const spaceType = spaceTypeAttr === "Text" || spaceTypeAttr === "Number" || spaceTypeAttr === "Dropdown" ? spaceTypeAttr : "Text";
|
|
@@ -1515,7 +1559,7 @@ var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
|
|
|
1515
1559
|
|
|
1516
1560
|
// src/importFromHtml/FinancialStatementQuestionNodeHandler.ts
|
|
1517
1561
|
import { nanoid as nanoid4 } from "nanoid";
|
|
1518
|
-
import { HTMLElement as
|
|
1562
|
+
import { HTMLElement as HTMLElement10 } from "node-html-parser";
|
|
1519
1563
|
var TAG_X_FINANCIAL_STATEMENT = "x-financial-statement";
|
|
1520
1564
|
var TAG_X_HEADER = "x-header";
|
|
1521
1565
|
var TAG_X_ROWS = "x-rows";
|
|
@@ -1529,7 +1573,7 @@ var isLineRole = (value) => value === "line-item" || value === "subtotal" || val
|
|
|
1529
1573
|
var parseLineRole = (value) => isLineRole(value) ? value : null;
|
|
1530
1574
|
var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1531
1575
|
processNode(node) {
|
|
1532
|
-
if (!(node instanceof
|
|
1576
|
+
if (!(node instanceof HTMLElement10) || node.tagName !== TAG_X_FINANCIAL_STATEMENT.toUpperCase()) {
|
|
1533
1577
|
return null;
|
|
1534
1578
|
}
|
|
1535
1579
|
const headerElement = node.querySelector(TAG_X_HEADER);
|
|
@@ -1544,7 +1588,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1544
1588
|
version: 1
|
|
1545
1589
|
};
|
|
1546
1590
|
node.childNodes.forEach((child) => {
|
|
1547
|
-
if (!(child instanceof
|
|
1591
|
+
if (!(child instanceof HTMLElement10)) return;
|
|
1548
1592
|
if (child.tagName === TAG_X_DISTRACTORS.toUpperCase()) {
|
|
1549
1593
|
this.processDistractorsNode(child, jsonNode);
|
|
1550
1594
|
} else if (child.tagName === TAG_X_ROWS.toUpperCase()) {
|
|
@@ -1555,7 +1599,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1555
1599
|
}
|
|
1556
1600
|
processDistractorsNode(distractorsNode, jsonNode) {
|
|
1557
1601
|
for (const distractorsChild of distractorsNode.childNodes) {
|
|
1558
|
-
if (!(distractorsChild instanceof
|
|
1602
|
+
if (!(distractorsChild instanceof HTMLElement10)) continue;
|
|
1559
1603
|
if (distractorsChild.tagName !== TAG_X_DISTRACTOR.toUpperCase())
|
|
1560
1604
|
continue;
|
|
1561
1605
|
jsonNode.distractors.push({
|
|
@@ -1574,7 +1618,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1574
1618
|
const contentDiv = headerElement.querySelector(
|
|
1575
1619
|
'div > div:not([style*="display:flex"])'
|
|
1576
1620
|
);
|
|
1577
|
-
if (contentDiv && contentDiv instanceof
|
|
1621
|
+
if (contentDiv && contentDiv instanceof HTMLElement10)
|
|
1578
1622
|
return createNestedEditorFromHtml(contentDiv);
|
|
1579
1623
|
}
|
|
1580
1624
|
return createNestedEditorFromHtml(headerElement);
|
|
@@ -1591,7 +1635,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1591
1635
|
}
|
|
1592
1636
|
processRowsNode(rowsNode, jsonNode) {
|
|
1593
1637
|
for (const rowsChild of rowsNode.childNodes) {
|
|
1594
|
-
if (!(rowsChild instanceof
|
|
1638
|
+
if (!(rowsChild instanceof HTMLElement10)) continue;
|
|
1595
1639
|
if (rowsChild.tagName === TAG_X_HEADING.toUpperCase()) {
|
|
1596
1640
|
this.processHeadingRow(rowsChild, jsonNode);
|
|
1597
1641
|
} else if (rowsChild.tagName === TAG_X_LINE.toUpperCase()) {
|
|
@@ -1627,7 +1671,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1627
1671
|
};
|
|
1628
1672
|
|
|
1629
1673
|
// src/importFromHtml/FormattedNodeHandler.ts
|
|
1630
|
-
import { HTMLElement as
|
|
1674
|
+
import { HTMLElement as HTMLElement11 } from "node-html-parser";
|
|
1631
1675
|
var IS_BOLD2 = 1;
|
|
1632
1676
|
var IS_ITALIC2 = 1 << 1;
|
|
1633
1677
|
var IS_STRIKETHROUGH2 = 1 << 2;
|
|
@@ -1667,7 +1711,7 @@ function formatToProps(format) {
|
|
|
1667
1711
|
}
|
|
1668
1712
|
var FormattedNodeHandler = class extends NodeHandler2 {
|
|
1669
1713
|
processNode(node) {
|
|
1670
|
-
if (!(node instanceof
|
|
1714
|
+
if (!(node instanceof HTMLElement11)) return null;
|
|
1671
1715
|
const tagName = node.tagName;
|
|
1672
1716
|
if (!tagName || !(tagName in TAG_TO_FORMAT)) return null;
|
|
1673
1717
|
const formatFlag = TAG_TO_FORMAT[tagName];
|
|
@@ -1702,7 +1746,7 @@ var FormattedNodeHandler = class extends NodeHandler2 {
|
|
|
1702
1746
|
};
|
|
1703
1747
|
|
|
1704
1748
|
// src/importFromHtml/HeadingNodeHandler.ts
|
|
1705
|
-
import { HTMLElement as
|
|
1749
|
+
import { HTMLElement as HTMLElement12 } from "node-html-parser";
|
|
1706
1750
|
|
|
1707
1751
|
// src/importFromHtml/extractTextAlignment.ts
|
|
1708
1752
|
var TEXT_ALIGN_TO_FORMAT = {
|
|
@@ -1730,7 +1774,7 @@ function extractTextAlignment(element) {
|
|
|
1730
1774
|
var TAG_HEADINGS = ["h1", "h2", "h3", "h4", "h5", "h6"];
|
|
1731
1775
|
var HeadingNodeHandler2 = class extends NodeHandler2 {
|
|
1732
1776
|
processNode(node) {
|
|
1733
|
-
if (!(node instanceof
|
|
1777
|
+
if (!(node instanceof HTMLElement12) || !TAG_HEADINGS.includes(node.tagName.toLowerCase())) {
|
|
1734
1778
|
return null;
|
|
1735
1779
|
}
|
|
1736
1780
|
const headingNode = {
|
|
@@ -1751,11 +1795,11 @@ var HeadingNodeHandler2 = class extends NodeHandler2 {
|
|
|
1751
1795
|
};
|
|
1752
1796
|
|
|
1753
1797
|
// src/importFromHtml/HorizontalRuleNodeHandler.ts
|
|
1754
|
-
import { HTMLElement as
|
|
1798
|
+
import { HTMLElement as HTMLElement13 } from "node-html-parser";
|
|
1755
1799
|
var TAG_HR = "hr";
|
|
1756
1800
|
var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
|
|
1757
1801
|
processNode(node) {
|
|
1758
|
-
if (!(node instanceof
|
|
1802
|
+
if (!(node instanceof HTMLElement13) || node.tagName !== TAG_HR.toUpperCase()) {
|
|
1759
1803
|
return null;
|
|
1760
1804
|
}
|
|
1761
1805
|
const horizontalRuleNode = {
|
|
@@ -1767,11 +1811,11 @@ var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
|
|
|
1767
1811
|
};
|
|
1768
1812
|
|
|
1769
1813
|
// src/importFromHtml/ImageNodeHandler.ts
|
|
1770
|
-
import { HTMLElement as
|
|
1814
|
+
import { HTMLElement as HTMLElement14 } from "node-html-parser";
|
|
1771
1815
|
var TAG_IMG = "img";
|
|
1772
1816
|
var ImageNodeHandler2 = class extends NodeHandler2 {
|
|
1773
1817
|
processNode(node) {
|
|
1774
|
-
if (!(node instanceof
|
|
1818
|
+
if (!(node instanceof HTMLElement14) || node.tagName !== TAG_IMG.toUpperCase()) {
|
|
1775
1819
|
return null;
|
|
1776
1820
|
}
|
|
1777
1821
|
return createImageNode(
|
|
@@ -1787,11 +1831,11 @@ var ImageNodeHandler2 = class extends NodeHandler2 {
|
|
|
1787
1831
|
|
|
1788
1832
|
// src/importFromHtml/JournalEntryQuestionNodeHandler.ts
|
|
1789
1833
|
import { nanoid as nanoid6 } from "nanoid";
|
|
1790
|
-
import { HTMLElement as
|
|
1834
|
+
import { HTMLElement as HTMLElement16 } from "node-html-parser";
|
|
1791
1835
|
|
|
1792
1836
|
// src/importFromHtml/createOnePerLineDistractorNode.ts
|
|
1793
1837
|
import { nanoid as nanoid5 } from "nanoid";
|
|
1794
|
-
import { HTMLElement as
|
|
1838
|
+
import { HTMLElement as HTMLElement15 } from "node-html-parser";
|
|
1795
1839
|
function extractDistractorId(id) {
|
|
1796
1840
|
if (!id) return null;
|
|
1797
1841
|
const parts = id.split("|");
|
|
@@ -1804,7 +1848,7 @@ var createOnePerLineDistractorNode = (node) => {
|
|
|
1804
1848
|
distractorEditor.editorState.root.children = [];
|
|
1805
1849
|
let distractorId = null;
|
|
1806
1850
|
distractors.forEach((distractor) => {
|
|
1807
|
-
if (!(distractor instanceof
|
|
1851
|
+
if (!(distractor instanceof HTMLElement15)) return;
|
|
1808
1852
|
distractorId = distractorId ?? extractDistractorId(distractor.getAttribute("id"));
|
|
1809
1853
|
distractorEditor.editorState.root.children.push(
|
|
1810
1854
|
...createNestedNodesFromHtml(distractor)
|
|
@@ -1822,7 +1866,7 @@ var createOnePerLineDistractorNode = (node) => {
|
|
|
1822
1866
|
// src/importFromHtml/JournalEntryQuestionNodeHandler.ts
|
|
1823
1867
|
var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1824
1868
|
processNode(node) {
|
|
1825
|
-
if (!(node instanceof
|
|
1869
|
+
if (!(node instanceof HTMLElement16) || node.tagName !== "x-journal-entry".toUpperCase())
|
|
1826
1870
|
return null;
|
|
1827
1871
|
const jsonNode = {
|
|
1828
1872
|
id: node.getAttribute("id") ?? nanoid6(),
|
|
@@ -1837,7 +1881,7 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1837
1881
|
};
|
|
1838
1882
|
const lineItems = node.querySelectorAll("x-line-item");
|
|
1839
1883
|
lineItems.forEach((lineItem) => {
|
|
1840
|
-
if (!(lineItem instanceof
|
|
1884
|
+
if (!(lineItem instanceof HTMLElement16)) return;
|
|
1841
1885
|
const accountElement = lineItem.querySelector("x-account");
|
|
1842
1886
|
const debitElement = lineItem.querySelector("x-debit");
|
|
1843
1887
|
const creditElement = lineItem.querySelector("x-credit");
|
|
@@ -1866,10 +1910,10 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1866
1910
|
};
|
|
1867
1911
|
|
|
1868
1912
|
// src/importFromHtml/LineBreakNodeHandler.ts
|
|
1869
|
-
import { HTMLElement as
|
|
1913
|
+
import { HTMLElement as HTMLElement17 } from "node-html-parser";
|
|
1870
1914
|
var LineBreakNodeHandler2 = class extends NodeHandler2 {
|
|
1871
1915
|
processNode(node) {
|
|
1872
|
-
if (!(node instanceof
|
|
1916
|
+
if (!(node instanceof HTMLElement17)) return null;
|
|
1873
1917
|
if (node.tagName !== "BR") return null;
|
|
1874
1918
|
return {
|
|
1875
1919
|
type: "linebreak",
|
|
@@ -1879,11 +1923,11 @@ var LineBreakNodeHandler2 = class extends NodeHandler2 {
|
|
|
1879
1923
|
};
|
|
1880
1924
|
|
|
1881
1925
|
// src/importFromHtml/LinkNodeHandler.ts
|
|
1882
|
-
import { HTMLElement as
|
|
1926
|
+
import { HTMLElement as HTMLElement18 } from "node-html-parser";
|
|
1883
1927
|
var TAG_A = "a";
|
|
1884
1928
|
var LinkNodeHandler2 = class extends NodeHandler2 {
|
|
1885
1929
|
processNode(node) {
|
|
1886
|
-
if (!(node instanceof
|
|
1930
|
+
if (!(node instanceof HTMLElement18) || node.tagName !== TAG_A.toUpperCase()) {
|
|
1887
1931
|
return null;
|
|
1888
1932
|
}
|
|
1889
1933
|
const url = node.getAttribute("href") || "";
|
|
@@ -1912,10 +1956,10 @@ var LinkNodeHandler2 = class extends NodeHandler2 {
|
|
|
1912
1956
|
};
|
|
1913
1957
|
|
|
1914
1958
|
// src/importFromHtml/ListItemNodeHandler.ts
|
|
1915
|
-
import { HTMLElement as
|
|
1959
|
+
import { HTMLElement as HTMLElement19 } from "node-html-parser";
|
|
1916
1960
|
var ListItemNodeHandler2 = class extends NodeHandler2 {
|
|
1917
1961
|
processNode(node) {
|
|
1918
|
-
if (!(node instanceof
|
|
1962
|
+
if (!(node instanceof HTMLElement19)) return null;
|
|
1919
1963
|
if (node.tagName !== "LI") return null;
|
|
1920
1964
|
const jsonNode = {
|
|
1921
1965
|
type: "listitem",
|
|
@@ -1936,10 +1980,10 @@ var ListItemNodeHandler2 = class extends NodeHandler2 {
|
|
|
1936
1980
|
};
|
|
1937
1981
|
|
|
1938
1982
|
// src/importFromHtml/ListNodeHandler.ts
|
|
1939
|
-
import { HTMLElement as
|
|
1983
|
+
import { HTMLElement as HTMLElement20 } from "node-html-parser";
|
|
1940
1984
|
var ListNodeHandler2 = class extends NodeHandler2 {
|
|
1941
1985
|
processNode(node) {
|
|
1942
|
-
if (!(node instanceof
|
|
1986
|
+
if (!(node instanceof HTMLElement20)) return null;
|
|
1943
1987
|
if (node.tagName !== "UL" && node.tagName !== "OL") return null;
|
|
1944
1988
|
const tag = node.tagName.toLowerCase();
|
|
1945
1989
|
const listType = tag === "ol" ? "number" : "bullet";
|
|
@@ -1957,7 +2001,7 @@ var ListNodeHandler2 = class extends NodeHandler2 {
|
|
|
1957
2001
|
};
|
|
1958
2002
|
let itemIndex = 1;
|
|
1959
2003
|
node.childNodes.forEach((child) => {
|
|
1960
|
-
if (child instanceof
|
|
2004
|
+
if (child instanceof HTMLElement20 && child.tagName === "LI") {
|
|
1961
2005
|
const listItemNode = {
|
|
1962
2006
|
type: "listitem",
|
|
1963
2007
|
version: 1,
|
|
@@ -1982,10 +2026,10 @@ var ListNodeHandler2 = class extends NodeHandler2 {
|
|
|
1982
2026
|
|
|
1983
2027
|
// src/importFromHtml/MatchingQuestionNodeHandler.ts
|
|
1984
2028
|
import { nanoid as nanoid7 } from "nanoid";
|
|
1985
|
-
import { HTMLElement as
|
|
2029
|
+
import { HTMLElement as HTMLElement21 } from "node-html-parser";
|
|
1986
2030
|
var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
1987
2031
|
processNode(node) {
|
|
1988
|
-
if (!(node instanceof
|
|
2032
|
+
if (!(node instanceof HTMLElement21) || node.tagName !== "x-matching".toUpperCase())
|
|
1989
2033
|
return null;
|
|
1990
2034
|
const jsonNode = {
|
|
1991
2035
|
id: node.getAttribute("id") ?? nanoid7(),
|
|
@@ -1998,7 +2042,7 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
1998
2042
|
};
|
|
1999
2043
|
const matches = node.querySelectorAll("x-match");
|
|
2000
2044
|
matches.forEach((match) => {
|
|
2001
|
-
if (!(match instanceof
|
|
2045
|
+
if (!(match instanceof HTMLElement21)) return;
|
|
2002
2046
|
const premise = match.querySelector("x-premise");
|
|
2003
2047
|
const option = match.querySelector("x-option");
|
|
2004
2048
|
if (!premise || !option) return;
|
|
@@ -2021,10 +2065,10 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2021
2065
|
|
|
2022
2066
|
// src/importFromHtml/MultipleOptionQuestionNodeHandler.ts
|
|
2023
2067
|
import { nanoid as nanoid8 } from "nanoid";
|
|
2024
|
-
import { HTMLElement as
|
|
2068
|
+
import { HTMLElement as HTMLElement22 } from "node-html-parser";
|
|
2025
2069
|
var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
2026
2070
|
processNode(node) {
|
|
2027
|
-
if (!(node instanceof
|
|
2071
|
+
if (!(node instanceof HTMLElement22)) return null;
|
|
2028
2072
|
if (node.tagName === "x-multiple-choice".toUpperCase())
|
|
2029
2073
|
return this.processMultipleChoiceNode(node);
|
|
2030
2074
|
else if (node.tagName === "x-multiple-answers".toUpperCase())
|
|
@@ -2064,7 +2108,7 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2064
2108
|
processOptions(node, jsonNode) {
|
|
2065
2109
|
const childNodes = node.childNodes;
|
|
2066
2110
|
childNodes.forEach((child) => {
|
|
2067
|
-
if (!(child instanceof
|
|
2111
|
+
if (!(child instanceof HTMLElement22)) return;
|
|
2068
2112
|
if (child.tagName !== "x-option".toUpperCase()) return;
|
|
2069
2113
|
jsonNode.options.push({
|
|
2070
2114
|
id: child.getAttribute("id") ?? nanoid8(),
|
|
@@ -2076,28 +2120,28 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2076
2120
|
};
|
|
2077
2121
|
|
|
2078
2122
|
// src/importFromHtml/ParagraphNodeHandler.ts
|
|
2079
|
-
import { HTMLElement as
|
|
2123
|
+
import { HTMLElement as HTMLElement23 } from "node-html-parser";
|
|
2080
2124
|
var ParagraphNodeHandler2 = class extends NodeHandler2 {
|
|
2081
2125
|
processImageNode(node) {
|
|
2082
|
-
if (node.childNodes.length === 1 && node.childNodes[0] instanceof
|
|
2126
|
+
if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement23 && node.childNodes[0].tagName === "IMG") {
|
|
2083
2127
|
return traverse2(node.childNodes[0]);
|
|
2084
2128
|
}
|
|
2085
2129
|
return null;
|
|
2086
2130
|
}
|
|
2087
2131
|
processSpanImageNode(node) {
|
|
2088
|
-
if (node.childNodes.length === 1 && node.childNodes[0] instanceof
|
|
2132
|
+
if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement23 && node.childNodes[0].tagName === "SPAN" && node.childNodes[0].childNodes.length === 1 && node.childNodes[0].childNodes[0] instanceof HTMLElement23 && node.childNodes[0].childNodes[0].tagName === "IMG") {
|
|
2089
2133
|
return traverse2(node.childNodes[0].childNodes[0]);
|
|
2090
2134
|
}
|
|
2091
2135
|
return null;
|
|
2092
2136
|
}
|
|
2093
2137
|
processNode(node) {
|
|
2094
|
-
if (!(node instanceof
|
|
2138
|
+
if (!(node instanceof HTMLElement23)) return null;
|
|
2095
2139
|
if (node.tagName !== "P") return null;
|
|
2096
2140
|
const imageNode = this.processImageNode(node) ?? this.processSpanImageNode(node);
|
|
2097
2141
|
if (imageNode) return imageNode;
|
|
2098
2142
|
const jsonNode = createEmptyParagraphNode();
|
|
2099
2143
|
jsonNode.format = extractTextAlignment(node);
|
|
2100
|
-
if (node.childNodes.length === 1 && node.childNodes[0] instanceof
|
|
2144
|
+
if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement23 && node.childNodes[0].tagName === "BR")
|
|
2101
2145
|
return jsonNode;
|
|
2102
2146
|
node.childNodes.forEach((child) => {
|
|
2103
2147
|
const processedChildren = traverse2(child);
|
|
@@ -2109,10 +2153,10 @@ var ParagraphNodeHandler2 = class extends NodeHandler2 {
|
|
|
2109
2153
|
|
|
2110
2154
|
// src/importFromHtml/ShortAnswerQuestionNodeHandler.ts
|
|
2111
2155
|
import { nanoid as nanoid9 } from "nanoid";
|
|
2112
|
-
import { HTMLElement as
|
|
2156
|
+
import { HTMLElement as HTMLElement24 } from "node-html-parser";
|
|
2113
2157
|
var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
2114
2158
|
processNode(node) {
|
|
2115
|
-
if (!(node instanceof
|
|
2159
|
+
if (!(node instanceof HTMLElement24) || node.tagName !== "x-short-answer".toUpperCase())
|
|
2116
2160
|
return null;
|
|
2117
2161
|
return {
|
|
2118
2162
|
id: node.getAttribute("id") ?? nanoid9(),
|
|
@@ -2128,7 +2172,7 @@ var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2128
2172
|
};
|
|
2129
2173
|
|
|
2130
2174
|
// src/importFromHtml/SimulationQuestionNodeHandler.ts
|
|
2131
|
-
import { HTMLElement as
|
|
2175
|
+
import { HTMLElement as HTMLElement25 } from "node-html-parser";
|
|
2132
2176
|
var TAG_X_SIMULATION = "x-simulation";
|
|
2133
2177
|
var TAG_X_SYSTEM_MESSAGE2 = "x-ai-system-message";
|
|
2134
2178
|
var TAG_X_COMMENT_INSTRUCTIONS = "x-comment-instructions";
|
|
@@ -2136,7 +2180,7 @@ var TAG_X_STEP2_INSTRUCTIONS = "x-step2-instructions";
|
|
|
2136
2180
|
var findFirstNonEmptyInnerHtml = (root, elementNames) => elementNames.map((name) => root.querySelector(name)).find((el) => el?.innerHTML.trim().length)?.innerHTML.trim() ?? null;
|
|
2137
2181
|
var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
2138
2182
|
processNode(node) {
|
|
2139
|
-
if (!(node instanceof
|
|
2183
|
+
if (!(node instanceof HTMLElement25) || node.tagName !== TAG_X_SIMULATION.toUpperCase()) {
|
|
2140
2184
|
return null;
|
|
2141
2185
|
}
|
|
2142
2186
|
const jsonNode = {
|
|
@@ -2157,11 +2201,11 @@ var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
|
|
|
2157
2201
|
};
|
|
2158
2202
|
|
|
2159
2203
|
// src/importFromHtml/SpanNodeHandler.ts
|
|
2160
|
-
import { HTMLElement as
|
|
2204
|
+
import { HTMLElement as HTMLElement26, parse as parse2 } from "node-html-parser";
|
|
2161
2205
|
var TextNode = parse2.TextNode;
|
|
2162
2206
|
var SpanNodeHandler = class extends NodeHandler2 {
|
|
2163
2207
|
processNode(node) {
|
|
2164
|
-
if (!(node instanceof
|
|
2208
|
+
if (!(node instanceof HTMLElement26) || node.tagName !== "SPAN")
|
|
2165
2209
|
return null;
|
|
2166
2210
|
const styleAttr = node.getAttribute("style") || "";
|
|
2167
2211
|
if (node.childNodes.length === 1 && node.childNodes[0] instanceof TextNode) {
|
|
@@ -2223,7 +2267,7 @@ var SpanNodeHandler = class extends NodeHandler2 {
|
|
|
2223
2267
|
};
|
|
2224
2268
|
|
|
2225
2269
|
// src/importFromHtml/TableCellNodeHandler.ts
|
|
2226
|
-
import { HTMLElement as
|
|
2270
|
+
import { HTMLElement as HTMLElement27 } from "node-html-parser";
|
|
2227
2271
|
|
|
2228
2272
|
// src/importFromHtml/createTableNodes.ts
|
|
2229
2273
|
function createEmptyTableNode() {
|
|
@@ -2260,7 +2304,7 @@ function createEmptyTableCellNode(isHeader = false) {
|
|
|
2260
2304
|
|
|
2261
2305
|
// src/importFromHtml/TableCellNodeHandler.ts
|
|
2262
2306
|
var isHtmlTableCellElement = (node) => {
|
|
2263
|
-
return node instanceof
|
|
2307
|
+
return node instanceof HTMLElement27 && (node.tagName === "TD" || node.tagName === "TH");
|
|
2264
2308
|
};
|
|
2265
2309
|
var TableCellNodeHandler2 = class extends NodeHandler2 {
|
|
2266
2310
|
processNode(node) {
|
|
@@ -2305,10 +2349,10 @@ var TableCellNodeHandler2 = class extends NodeHandler2 {
|
|
|
2305
2349
|
};
|
|
2306
2350
|
|
|
2307
2351
|
// src/importFromHtml/TableNodeHandler.ts
|
|
2308
|
-
import { HTMLElement as
|
|
2352
|
+
import { HTMLElement as HTMLElement28 } from "node-html-parser";
|
|
2309
2353
|
var REFERENCE_TABLE_WIDTH = 720;
|
|
2310
2354
|
var MINIMUM_REFERENCE_TABLE_WIDTH = 500;
|
|
2311
|
-
var isHtmlTableElement = (node) => node instanceof
|
|
2355
|
+
var isHtmlTableElement = (node) => node instanceof HTMLElement28 && node.tagName === "TABLE";
|
|
2312
2356
|
var TableNodeHandler2 = class extends NodeHandler2 {
|
|
2313
2357
|
processNode(node) {
|
|
2314
2358
|
if (!isHtmlTableElement(node)) return null;
|
|
@@ -2463,9 +2507,9 @@ var TableNodeHandler2 = class extends NodeHandler2 {
|
|
|
2463
2507
|
};
|
|
2464
2508
|
|
|
2465
2509
|
// src/importFromHtml/TableRowNodeHandler.ts
|
|
2466
|
-
import { HTMLElement as
|
|
2510
|
+
import { HTMLElement as HTMLElement29 } from "node-html-parser";
|
|
2467
2511
|
var isHtmlTableRowElement = (node) => {
|
|
2468
|
-
return node instanceof
|
|
2512
|
+
return node instanceof HTMLElement29 && node.tagName === "TR";
|
|
2469
2513
|
};
|
|
2470
2514
|
var TableRowNodeHandler2 = class extends NodeHandler2 {
|
|
2471
2515
|
processNode(node) {
|
|
@@ -2508,10 +2552,10 @@ var TextNodeHandler2 = class extends NodeHandler2 {
|
|
|
2508
2552
|
};
|
|
2509
2553
|
|
|
2510
2554
|
// src/importFromHtml/VariableNodeHandler.ts
|
|
2511
|
-
import { HTMLElement as
|
|
2555
|
+
import { HTMLElement as HTMLElement30 } from "node-html-parser";
|
|
2512
2556
|
var VariableNodeHandler2 = class extends NodeHandler2 {
|
|
2513
2557
|
processNode(node) {
|
|
2514
|
-
if (!(node instanceof
|
|
2558
|
+
if (!(node instanceof HTMLElement30) || !node.tagName) return null;
|
|
2515
2559
|
if (node.tagName !== "x-param".toUpperCase()) return null;
|
|
2516
2560
|
return {
|
|
2517
2561
|
variableName: node.getAttribute("data-x-name") || "undefined",
|
|
@@ -2524,7 +2568,7 @@ var VariableNodeHandler2 = class extends NodeHandler2 {
|
|
|
2524
2568
|
|
|
2525
2569
|
// src/importFromHtml/traverse.ts
|
|
2526
2570
|
var builder2 = new NodeHandlerChainBuilder();
|
|
2527
|
-
var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
|
|
2571
|
+
var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelCopyTextNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
|
|
2528
2572
|
function traverse2(node) {
|
|
2529
2573
|
const result = nodeHandlerChain2.handle(node);
|
|
2530
2574
|
if (result === null) return [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@examind/block-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"@comment version": [
|
|
5
5
|
"Don't specify package version here. It will be injected by publish workflow."
|
|
6
6
|
],
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"nanoid": ">=3.0.0",
|
|
23
23
|
"node-html-parser": ">=6.0.0",
|
|
24
|
-
"@examind/block-types": "^0.
|
|
24
|
+
"@examind/block-types": "^0.6.1"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@eslint/js": "^9.17.0",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"tsup": "^8.3.5",
|
|
37
37
|
"typescript": "^5.7.2",
|
|
38
38
|
"typescript-eslint": "^8.18.2",
|
|
39
|
-
"@examind/block-types": "0.
|
|
39
|
+
"@examind/block-types": "0.6.1"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"lodash-es": "4.17.21"
|