@payloadcms/plugin-form-builder 3.80.0-internal.cee0ccf → 3.80.0
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/utilities/keyValuePairToHtmlTable.d.ts.map +1 -1
- package/dist/utilities/keyValuePairToHtmlTable.js +2 -1
- package/dist/utilities/keyValuePairToHtmlTable.js.map +1 -1
- package/dist/utilities/lexical/converters/heading.d.ts.map +1 -1
- package/dist/utilities/lexical/converters/heading.js +19 -2
- package/dist/utilities/lexical/converters/heading.js.map +1 -1
- package/dist/utilities/lexical/converters/link.d.ts.map +1 -1
- package/dist/utilities/lexical/converters/link.js +5 -2
- package/dist/utilities/lexical/converters/link.js.map +1 -1
- package/dist/utilities/lexical/converters/list.d.ts.map +1 -1
- package/dist/utilities/lexical/converters/list.js +17 -5
- package/dist/utilities/lexical/converters/list.js.map +1 -1
- package/dist/utilities/lexical/converters/quote.d.ts.map +1 -1
- package/dist/utilities/lexical/converters/quote.js +9 -1
- package/dist/utilities/lexical/converters/quote.js.map +1 -1
- package/dist/utilities/lexical/converters/text.d.ts.map +1 -1
- package/dist/utilities/lexical/converters/text.js +2 -1
- package/dist/utilities/lexical/converters/text.js.map +1 -1
- package/dist/utilities/replaceDoubleCurlys.d.ts.map +1 -1
- package/dist/utilities/replaceDoubleCurlys.js +3 -2
- package/dist/utilities/replaceDoubleCurlys.js.map +1 -1
- package/dist/utilities/slate/serializeSlate.d.ts.map +1 -1
- package/dist/utilities/slate/serializeSlate.js +14 -3
- package/dist/utilities/slate/serializeSlate.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyValuePairToHtmlTable.d.ts","sourceRoot":"","sources":["../../src/utilities/keyValuePairToHtmlTable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"keyValuePairToHtmlTable.d.ts","sourceRoot":"","sources":["../../src/utilities/keyValuePairToHtmlTable.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,MAAM,CAS9E"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import escapeHTML from 'escape-html';
|
|
1
2
|
export function keyValuePairToHtmlTable(obj) {
|
|
2
3
|
let htmlTable = '<table>';
|
|
3
4
|
for (const [key, value] of Object.entries(obj)){
|
|
4
|
-
htmlTable += `<tr><td>${key}</td><td>${value}</td></tr>`;
|
|
5
|
+
htmlTable += `<tr><td>${escapeHTML(key)}</td><td>${escapeHTML(value)}</td></tr>`;
|
|
5
6
|
}
|
|
6
7
|
htmlTable += '</table>';
|
|
7
8
|
return htmlTable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/keyValuePairToHtmlTable.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/keyValuePairToHtmlTable.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\n\nexport function keyValuePairToHtmlTable(obj: { [key: string]: string }): string {\n let htmlTable = '<table>'\n\n for (const [key, value] of Object.entries(obj)) {\n htmlTable += `<tr><td>${escapeHTML(key)}</td><td>${escapeHTML(value)}</td></tr>`\n }\n\n htmlTable += '</table>'\n return htmlTable\n}\n"],"names":["escapeHTML","keyValuePairToHtmlTable","obj","htmlTable","key","value","Object","entries"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAEpC,OAAO,SAASC,wBAAwBC,GAA8B;IACpE,IAAIC,YAAY;IAEhB,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACL,KAAM;QAC9CC,aAAa,CAAC,QAAQ,EAAEH,WAAWI,KAAK,SAAS,EAAEJ,WAAWK,OAAO,UAAU,CAAC;IAClF;IAEAF,aAAa;IACb,OAAOA;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/heading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/heading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAOhD,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,GAAG,CAqBnD,CAAA"}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
import { convertLexicalNodesToHTML } from '../serializeLexical.js';
|
|
2
|
+
const ALLOWED_HEADING_TAGS = new Set([
|
|
3
|
+
'h1',
|
|
4
|
+
'h2',
|
|
5
|
+
'h3',
|
|
6
|
+
'h4',
|
|
7
|
+
'h5',
|
|
8
|
+
'h6'
|
|
9
|
+
]);
|
|
10
|
+
const ALLOWED_TEXT_ALIGN = new Set([
|
|
11
|
+
'center',
|
|
12
|
+
'end',
|
|
13
|
+
'justify',
|
|
14
|
+
'left',
|
|
15
|
+
'right',
|
|
16
|
+
'start'
|
|
17
|
+
]);
|
|
2
18
|
export const HeadingHTMLConverter = {
|
|
3
19
|
async converter ({ converters, node, parent, submissionData }) {
|
|
4
20
|
const childrenText = await convertLexicalNodesToHTML({
|
|
@@ -10,11 +26,12 @@ export const HeadingHTMLConverter = {
|
|
|
10
26
|
},
|
|
11
27
|
submissionData
|
|
12
28
|
});
|
|
29
|
+
const tag = ALLOWED_HEADING_TAGS.has(node?.tag) ? node.tag : 'h1';
|
|
13
30
|
const style = [
|
|
14
|
-
node.format ? `text-align: ${node.format};` : '',
|
|
31
|
+
node.format && ALLOWED_TEXT_ALIGN.has(node.format) ? `text-align: ${node.format};` : '',
|
|
15
32
|
node.indent > 0 ? `padding-inline-start: ${node.indent * 40}px;` : ''
|
|
16
33
|
].filter(Boolean).join(' ');
|
|
17
|
-
return `<${
|
|
34
|
+
return `<${tag}${style ? ` style='${style}'` : ''}>${childrenText}</${tag}>`;
|
|
18
35
|
},
|
|
19
36
|
nodeTypes: [
|
|
20
37
|
'heading'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utilities/lexical/converters/heading.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nexport const HeadingHTMLConverter: HTMLConverter<any> = {\n async converter({ converters, node, parent, submissionData }) {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n const style = [\n node.format ? `text-align: ${node.format};` : '',\n node.indent > 0 ? `padding-inline-start: ${node.indent * 40}px;` : '',\n ]\n .filter(Boolean)\n .join(' ')\n return `<${
|
|
1
|
+
{"version":3,"sources":["../../../../src/utilities/lexical/converters/heading.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nconst ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\nconst ALLOWED_TEXT_ALIGN = new Set(['center', 'end', 'justify', 'left', 'right', 'start'])\n\nexport const HeadingHTMLConverter: HTMLConverter<any> = {\n async converter({ converters, node, parent, submissionData }) {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n const tag = ALLOWED_HEADING_TAGS.has(node?.tag) ? node.tag : 'h1'\n const style = [\n node.format && ALLOWED_TEXT_ALIGN.has(node.format) ? `text-align: ${node.format};` : '',\n node.indent > 0 ? `padding-inline-start: ${node.indent * 40}px;` : '',\n ]\n .filter(Boolean)\n .join(' ')\n return `<${tag}${style ? ` style='${style}'` : ''}>${childrenText}</${tag}>`\n },\n nodeTypes: ['heading'],\n}\n"],"names":["convertLexicalNodesToHTML","ALLOWED_HEADING_TAGS","Set","ALLOWED_TEXT_ALIGN","HeadingHTMLConverter","converter","converters","node","parent","submissionData","childrenText","lexicalNodes","children","tag","has","style","format","indent","filter","Boolean","join","nodeTypes"],"mappings":"AAEA,SAASA,yBAAyB,QAAQ,yBAAwB;AAElE,MAAMC,uBAAuB,IAAIC,IAAI;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;CAAK;AACzE,MAAMC,qBAAqB,IAAID,IAAI;IAAC;IAAU;IAAO;IAAW;IAAQ;IAAS;CAAQ;AAEzF,OAAO,MAAME,uBAA2C;IACtD,MAAMC,WAAU,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,cAAc,EAAE;QAC1D,MAAMC,eAAe,MAAMV,0BAA0B;YACnDM;YACAK,cAAcJ,KAAKK,QAAQ;YAC3BJ,QAAQ;gBACN,GAAGD,IAAI;gBACPC;YACF;YACAC;QACF;QACA,MAAMI,MAAMZ,qBAAqBa,GAAG,CAACP,MAAMM,OAAON,KAAKM,GAAG,GAAG;QAC7D,MAAME,QAAQ;YACZR,KAAKS,MAAM,IAAIb,mBAAmBW,GAAG,CAACP,KAAKS,MAAM,IAAI,CAAC,YAAY,EAAET,KAAKS,MAAM,CAAC,CAAC,CAAC,GAAG;YACrFT,KAAKU,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAEV,KAAKU,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG;SACpE,CACEC,MAAM,CAACC,SACPC,IAAI,CAAC;QACR,OAAO,CAAC,CAAC,EAAEP,MAAME,QAAQ,CAAC,QAAQ,EAAEA,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,EAAEL,aAAa,EAAE,EAAEG,IAAI,CAAC,CAAC;IAC9E;IACAQ,WAAW;QAAC;KAAU;AACxB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/link.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/link.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,GAAG,CA0BhD,CAAA"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import escapeHTML from 'escape-html';
|
|
2
|
+
import { sanitizeUrl } from 'payload/shared';
|
|
1
3
|
import { replaceDoubleCurlys } from '../../replaceDoubleCurlys.js';
|
|
2
4
|
import { convertLexicalNodesToHTML } from '../serializeLexical.js';
|
|
3
5
|
export const LinkHTMLConverter = {
|
|
@@ -11,11 +13,12 @@ export const LinkHTMLConverter = {
|
|
|
11
13
|
},
|
|
12
14
|
submissionData
|
|
13
15
|
});
|
|
14
|
-
let href = node.fields.linkType === 'custom' ? node.fields.url : node.fields.doc?.value?.id;
|
|
16
|
+
let href = node.fields.linkType === 'custom' ? node.fields.url ?? '' : node.fields.doc?.value?.id ?? '';
|
|
15
17
|
if (submissionData) {
|
|
16
18
|
href = replaceDoubleCurlys(href, submissionData);
|
|
17
19
|
}
|
|
18
|
-
|
|
20
|
+
const safeHref = escapeHTML(sanitizeUrl(href));
|
|
21
|
+
return `<a href="${safeHref}"${node.fields.newTab ? ' rel="noopener noreferrer" target="_blank"' : ''}>${childrenText}</a>`;
|
|
19
22
|
},
|
|
20
23
|
nodeTypes: [
|
|
21
24
|
'link'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utilities/lexical/converters/link.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { replaceDoubleCurlys } from '../../replaceDoubleCurlys.js'\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nexport const LinkHTMLConverter: HTMLConverter<any> = {\n async converter({ converters, node, parent, submissionData }) {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n\n let href: string =\n node.fields.linkType === 'custom'
|
|
1
|
+
{"version":3,"sources":["../../../../src/utilities/lexical/converters/link.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\nimport { sanitizeUrl } from 'payload/shared'\n\nimport type { HTMLConverter } from '../types.js'\n\nimport { replaceDoubleCurlys } from '../../replaceDoubleCurlys.js'\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nexport const LinkHTMLConverter: HTMLConverter<any> = {\n async converter({ converters, node, parent, submissionData }) {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n\n let href: string =\n node.fields.linkType === 'custom'\n ? (node.fields.url ?? '')\n : (node.fields.doc?.value?.id ?? '')\n\n if (submissionData) {\n href = replaceDoubleCurlys(href, submissionData)\n }\n\n const safeHref = escapeHTML(sanitizeUrl(href))\n\n return `<a href=\"${safeHref}\"${node.fields.newTab ? ' rel=\"noopener noreferrer\" target=\"_blank\"' : ''}>${childrenText}</a>`\n },\n nodeTypes: ['link'],\n}\n"],"names":["escapeHTML","sanitizeUrl","replaceDoubleCurlys","convertLexicalNodesToHTML","LinkHTMLConverter","converter","converters","node","parent","submissionData","childrenText","lexicalNodes","children","href","fields","linkType","url","doc","value","id","safeHref","newTab","nodeTypes"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AACpC,SAASC,WAAW,QAAQ,iBAAgB;AAI5C,SAASC,mBAAmB,QAAQ,+BAA8B;AAClE,SAASC,yBAAyB,QAAQ,yBAAwB;AAElE,OAAO,MAAMC,oBAAwC;IACnD,MAAMC,WAAU,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,cAAc,EAAE;QAC1D,MAAMC,eAAe,MAAMP,0BAA0B;YACnDG;YACAK,cAAcJ,KAAKK,QAAQ;YAC3BJ,QAAQ;gBACN,GAAGD,IAAI;gBACPC;YACF;YACAC;QACF;QAEA,IAAII,OACFN,KAAKO,MAAM,CAACC,QAAQ,KAAK,WACpBR,KAAKO,MAAM,CAACE,GAAG,IAAI,KACnBT,KAAKO,MAAM,CAACG,GAAG,EAAEC,OAAOC,MAAM;QAErC,IAAIV,gBAAgB;YAClBI,OAAOX,oBAAoBW,MAAMJ;QACnC;QAEA,MAAMW,WAAWpB,WAAWC,YAAYY;QAExC,OAAO,CAAC,SAAS,EAAEO,SAAS,CAAC,EAAEb,KAAKO,MAAM,CAACO,MAAM,GAAG,+CAA+C,GAAG,CAAC,EAAEX,aAAa,IAAI,CAAC;IAC7H;IACAY,WAAW;QAAC;KAAO;AACrB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAOhD,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAkBhD,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,GAAG,CA8BpD,CAAA"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { convertLexicalNodesToHTML } from '../serializeLexical.js';
|
|
2
|
+
const ALLOWED_LIST_TAGS = new Set([
|
|
3
|
+
'ol',
|
|
4
|
+
'ul'
|
|
5
|
+
]);
|
|
6
|
+
const ALLOWED_LIST_TYPES = new Set([
|
|
7
|
+
'bullet',
|
|
8
|
+
'check',
|
|
9
|
+
'number'
|
|
10
|
+
]);
|
|
2
11
|
export const ListHTMLConverter = {
|
|
3
12
|
converter: async ({ converters, node, parent, submissionData })=>{
|
|
4
13
|
const childrenText = await convertLexicalNodesToHTML({
|
|
@@ -10,7 +19,9 @@ export const ListHTMLConverter = {
|
|
|
10
19
|
},
|
|
11
20
|
submissionData
|
|
12
21
|
});
|
|
13
|
-
|
|
22
|
+
const tag = ALLOWED_LIST_TAGS.has(node?.tag) ? node.tag : 'ul';
|
|
23
|
+
const listType = ALLOWED_LIST_TYPES.has(node?.listType) ? node.listType : 'bullet';
|
|
24
|
+
return `<${tag} class="${listType}">${childrenText}</${tag}>`;
|
|
14
25
|
},
|
|
15
26
|
nodeTypes: [
|
|
16
27
|
'list'
|
|
@@ -26,16 +37,17 @@ export const ListItemHTMLConverter = {
|
|
|
26
37
|
parent
|
|
27
38
|
}
|
|
28
39
|
});
|
|
40
|
+
const safeValue = Number.isFinite(Number(node?.value)) ? Number(node.value) : 1;
|
|
29
41
|
if ('listType' in parent && parent?.listType === 'check') {
|
|
30
|
-
return `<li aria-checked
|
|
42
|
+
return `<li aria-checked="${node.checked ? 'true' : 'false'}" class="${node.checked ? 'list-item-checkbox list-item-checkbox-checked' : 'list-item-checkbox list-item-checkbox-unchecked'}"
|
|
31
43
|
role="checkbox"
|
|
32
|
-
tabIndex
|
|
33
|
-
value
|
|
44
|
+
tabIndex="-1"
|
|
45
|
+
value="${safeValue}"
|
|
34
46
|
>
|
|
35
47
|
${childrenText}
|
|
36
48
|
</li>`;
|
|
37
49
|
} else {
|
|
38
|
-
return `<li value
|
|
50
|
+
return `<li value="${safeValue}">${childrenText}</li>`;
|
|
39
51
|
}
|
|
40
52
|
},
|
|
41
53
|
nodeTypes: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utilities/lexical/converters/list.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nexport const ListHTMLConverter: HTMLConverter<any> = {\n converter: async ({ converters, node, parent, submissionData }) => {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n\n return `<${
|
|
1
|
+
{"version":3,"sources":["../../../../src/utilities/lexical/converters/list.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nconst ALLOWED_LIST_TAGS = new Set(['ol', 'ul'])\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverter: HTMLConverter<any> = {\n converter: async ({ converters, node, parent, submissionData }) => {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n\n const tag = ALLOWED_LIST_TAGS.has(node?.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node?.listType) ? node.listType : 'bullet'\n\n return `<${tag} class=\"${listType}\">${childrenText}</${tag}>`\n },\n nodeTypes: ['list'],\n}\n\nexport const ListItemHTMLConverter: HTMLConverter<any> = {\n converter: async ({ converters, node, parent }) => {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n })\n\n const safeValue = Number.isFinite(Number(node?.value)) ? Number(node.value) : 1\n\n if ('listType' in parent && parent?.listType === 'check') {\n return `<li aria-checked=\"${node.checked ? 'true' : 'false'}\" class=\"${\n node.checked\n ? 'list-item-checkbox list-item-checkbox-checked'\n : 'list-item-checkbox list-item-checkbox-unchecked'\n }\"\n role=\"checkbox\"\n tabIndex=\"-1\"\n value=\"${safeValue}\"\n >\n ${childrenText}\n </li>`\n } else {\n return `<li value=\"${safeValue}\">${childrenText}</li>`\n }\n },\n nodeTypes: ['listitem'],\n}\n"],"names":["convertLexicalNodesToHTML","ALLOWED_LIST_TAGS","Set","ALLOWED_LIST_TYPES","ListHTMLConverter","converter","converters","node","parent","submissionData","childrenText","lexicalNodes","children","tag","has","listType","nodeTypes","ListItemHTMLConverter","safeValue","Number","isFinite","value","checked"],"mappings":"AAEA,SAASA,yBAAyB,QAAQ,yBAAwB;AAElE,MAAMC,oBAAoB,IAAIC,IAAI;IAAC;IAAM;CAAK;AAC9C,MAAMC,qBAAqB,IAAID,IAAI;IAAC;IAAU;IAAS;CAAS;AAEhE,OAAO,MAAME,oBAAwC;IACnDC,WAAW,OAAO,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,cAAc,EAAE;QAC5D,MAAMC,eAAe,MAAMV,0BAA0B;YACnDM;YACAK,cAAcJ,KAAKK,QAAQ;YAC3BJ,QAAQ;gBACN,GAAGD,IAAI;gBACPC;YACF;YACAC;QACF;QAEA,MAAMI,MAAMZ,kBAAkBa,GAAG,CAACP,MAAMM,OAAON,KAAKM,GAAG,GAAG;QAC1D,MAAME,WAAWZ,mBAAmBW,GAAG,CAACP,MAAMQ,YAAYR,KAAKQ,QAAQ,GAAG;QAE1E,OAAO,CAAC,CAAC,EAAEF,IAAI,QAAQ,EAAEE,SAAS,EAAE,EAAEL,aAAa,EAAE,EAAEG,IAAI,CAAC,CAAC;IAC/D;IACAG,WAAW;QAAC;KAAO;AACrB,EAAC;AAED,OAAO,MAAMC,wBAA4C;IACvDZ,WAAW,OAAO,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAE;QAC5C,MAAME,eAAe,MAAMV,0BAA0B;YACnDM;YACAK,cAAcJ,KAAKK,QAAQ;YAC3BJ,QAAQ;gBACN,GAAGD,IAAI;gBACPC;YACF;QACF;QAEA,MAAMU,YAAYC,OAAOC,QAAQ,CAACD,OAAOZ,MAAMc,UAAUF,OAAOZ,KAAKc,KAAK,IAAI;QAE9E,IAAI,cAAcb,UAAUA,QAAQO,aAAa,SAAS;YACxD,OAAO,CAAC,kBAAkB,EAAER,KAAKe,OAAO,GAAG,SAAS,QAAQ,SAAS,EACnEf,KAAKe,OAAO,GACR,kDACA,kDACL;;;iBAGU,EAAEJ,UAAU;;UAEnB,EAAER,aAAa;eACV,CAAC;QACZ,OAAO;YACL,OAAO,CAAC,WAAW,EAAEQ,UAAU,EAAE,EAAER,aAAa,KAAK,CAAC;QACxD;IACF;IACAM,WAAW;QAAC;KAAW;AACzB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/quote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/quote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhD,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAqBjD,CAAA"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { convertLexicalNodesToHTML } from '../serializeLexical.js';
|
|
2
|
+
const ALLOWED_TEXT_ALIGN = new Set([
|
|
3
|
+
'center',
|
|
4
|
+
'end',
|
|
5
|
+
'justify',
|
|
6
|
+
'left',
|
|
7
|
+
'right',
|
|
8
|
+
'start'
|
|
9
|
+
]);
|
|
2
10
|
export const QuoteHTMLConverter = {
|
|
3
11
|
async converter ({ converters, node, parent, submissionData }) {
|
|
4
12
|
const childrenText = await convertLexicalNodesToHTML({
|
|
@@ -11,7 +19,7 @@ export const QuoteHTMLConverter = {
|
|
|
11
19
|
submissionData
|
|
12
20
|
});
|
|
13
21
|
const style = [
|
|
14
|
-
node.format ? `text-align: ${node.format};` : '',
|
|
22
|
+
node.format && ALLOWED_TEXT_ALIGN.has(node.format) ? `text-align: ${node.format};` : '',
|
|
15
23
|
node.indent > 0 ? `padding-inline-start: ${node.indent * 40}px;` : ''
|
|
16
24
|
].filter(Boolean).join(' ');
|
|
17
25
|
return `<blockquote${style ? ` style='${style}'` : ''}>${childrenText}</blockquote>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utilities/lexical/converters/quote.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nexport const QuoteHTMLConverter: HTMLConverter<any> = {\n async converter({ converters, node, parent, submissionData }) {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n const style = [\n node.format ? `text-align: ${node.format};` : '',\n node.indent > 0 ? `padding-inline-start: ${node.indent * 40}px;` : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return `<blockquote${style ? ` style='${style}'` : ''}>${childrenText}</blockquote>`\n },\n nodeTypes: ['quote'],\n}\n"],"names":["convertLexicalNodesToHTML","QuoteHTMLConverter","converter","converters","node","parent","submissionData","childrenText","lexicalNodes","children","style","format","indent","filter","Boolean","join","nodeTypes"],"mappings":"AAEA,SAASA,yBAAyB,QAAQ,yBAAwB;AAElE,OAAO,MAAMC,qBAAyC;IACpD,MAAMC,WAAU,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,cAAc,EAAE;QAC1D,MAAMC,eAAe,
|
|
1
|
+
{"version":3,"sources":["../../../../src/utilities/lexical/converters/quote.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { convertLexicalNodesToHTML } from '../serializeLexical.js'\n\nconst ALLOWED_TEXT_ALIGN = new Set(['center', 'end', 'justify', 'left', 'right', 'start'])\n\nexport const QuoteHTMLConverter: HTMLConverter<any> = {\n async converter({ converters, node, parent, submissionData }) {\n const childrenText = await convertLexicalNodesToHTML({\n converters,\n lexicalNodes: node.children,\n parent: {\n ...node,\n parent,\n },\n submissionData,\n })\n const style = [\n node.format && ALLOWED_TEXT_ALIGN.has(node.format) ? `text-align: ${node.format};` : '',\n node.indent > 0 ? `padding-inline-start: ${node.indent * 40}px;` : '',\n ]\n .filter(Boolean)\n .join(' ')\n\n return `<blockquote${style ? ` style='${style}'` : ''}>${childrenText}</blockquote>`\n },\n nodeTypes: ['quote'],\n}\n"],"names":["convertLexicalNodesToHTML","ALLOWED_TEXT_ALIGN","Set","QuoteHTMLConverter","converter","converters","node","parent","submissionData","childrenText","lexicalNodes","children","style","format","has","indent","filter","Boolean","join","nodeTypes"],"mappings":"AAEA,SAASA,yBAAyB,QAAQ,yBAAwB;AAElE,MAAMC,qBAAqB,IAAIC,IAAI;IAAC;IAAU;IAAO;IAAW;IAAQ;IAAS;CAAQ;AAEzF,OAAO,MAAMC,qBAAyC;IACpD,MAAMC,WAAU,EAAEC,UAAU,EAAEC,IAAI,EAAEC,MAAM,EAAEC,cAAc,EAAE;QAC1D,MAAMC,eAAe,MAAMT,0BAA0B;YACnDK;YACAK,cAAcJ,KAAKK,QAAQ;YAC3BJ,QAAQ;gBACN,GAAGD,IAAI;gBACPC;YACF;YACAC;QACF;QACA,MAAMI,QAAQ;YACZN,KAAKO,MAAM,IAAIZ,mBAAmBa,GAAG,CAACR,KAAKO,MAAM,IAAI,CAAC,YAAY,EAAEP,KAAKO,MAAM,CAAC,CAAC,CAAC,GAAG;YACrFP,KAAKS,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAET,KAAKS,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG;SACpE,CACEC,MAAM,CAACC,SACPC,IAAI,CAAC;QAER,OAAO,CAAC,WAAW,EAAEN,QAAQ,CAAC,QAAQ,EAAEA,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,EAAEH,aAAa,aAAa,CAAC;IACtF;IACAU,WAAW;QAAC;KAAQ;AACtB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/text.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/utilities/lexical/converters/text.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAiChD,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import escapeHTML from 'escape-html';
|
|
1
2
|
import { replaceDoubleCurlys } from '../../replaceDoubleCurlys.js';
|
|
2
3
|
import { NodeFormat } from '../nodeFormat.js';
|
|
3
4
|
export const TextHTMLConverter = {
|
|
4
5
|
converter ({ node, submissionData }) {
|
|
5
|
-
let text = node.text;
|
|
6
|
+
let text = escapeHTML(node.text);
|
|
6
7
|
if (submissionData) {
|
|
7
8
|
text = replaceDoubleCurlys(text, submissionData);
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utilities/lexical/converters/text.ts"],"sourcesContent":["import type { HTMLConverter } from '../types.js'\n\nimport { replaceDoubleCurlys } from '../../replaceDoubleCurlys.js'\nimport { NodeFormat } from '../nodeFormat.js'\n\nexport const TextHTMLConverter: HTMLConverter<any> = {\n converter({ node, submissionData }) {\n let text = node.text\n\n if (submissionData) {\n text = replaceDoubleCurlys(text, submissionData)\n }\n\n if (node.format & NodeFormat.IS_BOLD) {\n text = `<strong>${text}</strong>`\n }\n if (node.format & NodeFormat.IS_ITALIC) {\n text = `<em>${text}</em>`\n }\n if (node.format & NodeFormat.IS_STRIKETHROUGH) {\n text = `<span style=\"text-decoration: line-through\">${text}</span>`\n }\n if (node.format & NodeFormat.IS_UNDERLINE) {\n text = `<span style=\"text-decoration: underline\">${text}</span>`\n }\n if (node.format & NodeFormat.IS_CODE) {\n text = `<code>${text}</code>`\n }\n if (node.format & NodeFormat.IS_SUBSCRIPT) {\n text = `<sub>${text}</sub>`\n }\n if (node.format & NodeFormat.IS_SUPERSCRIPT) {\n text = `<sup>${text}</sup>`\n }\n\n return text\n },\n nodeTypes: ['text'],\n}\n"],"names":["replaceDoubleCurlys","NodeFormat","TextHTMLConverter","converter","node","submissionData","text","format","IS_BOLD","IS_ITALIC","IS_STRIKETHROUGH","IS_UNDERLINE","IS_CODE","IS_SUBSCRIPT","IS_SUPERSCRIPT","nodeTypes"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/utilities/lexical/converters/text.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\n\nimport type { HTMLConverter } from '../types.js'\n\nimport { replaceDoubleCurlys } from '../../replaceDoubleCurlys.js'\nimport { NodeFormat } from '../nodeFormat.js'\n\nexport const TextHTMLConverter: HTMLConverter<any> = {\n converter({ node, submissionData }) {\n let text = escapeHTML(node.text)\n\n if (submissionData) {\n text = replaceDoubleCurlys(text, submissionData)\n }\n\n if (node.format & NodeFormat.IS_BOLD) {\n text = `<strong>${text}</strong>`\n }\n if (node.format & NodeFormat.IS_ITALIC) {\n text = `<em>${text}</em>`\n }\n if (node.format & NodeFormat.IS_STRIKETHROUGH) {\n text = `<span style=\"text-decoration: line-through\">${text}</span>`\n }\n if (node.format & NodeFormat.IS_UNDERLINE) {\n text = `<span style=\"text-decoration: underline\">${text}</span>`\n }\n if (node.format & NodeFormat.IS_CODE) {\n text = `<code>${text}</code>`\n }\n if (node.format & NodeFormat.IS_SUBSCRIPT) {\n text = `<sub>${text}</sub>`\n }\n if (node.format & NodeFormat.IS_SUPERSCRIPT) {\n text = `<sup>${text}</sup>`\n }\n\n return text\n },\n nodeTypes: ['text'],\n}\n"],"names":["escapeHTML","replaceDoubleCurlys","NodeFormat","TextHTMLConverter","converter","node","submissionData","text","format","IS_BOLD","IS_ITALIC","IS_STRIKETHROUGH","IS_UNDERLINE","IS_CODE","IS_SUBSCRIPT","IS_SUPERSCRIPT","nodeTypes"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAIpC,SAASC,mBAAmB,QAAQ,+BAA8B;AAClE,SAASC,UAAU,QAAQ,mBAAkB;AAE7C,OAAO,MAAMC,oBAAwC;IACnDC,WAAU,EAAEC,IAAI,EAAEC,cAAc,EAAE;QAChC,IAAIC,OAAOP,WAAWK,KAAKE,IAAI;QAE/B,IAAID,gBAAgB;YAClBC,OAAON,oBAAoBM,MAAMD;QACnC;QAEA,IAAID,KAAKG,MAAM,GAAGN,WAAWO,OAAO,EAAE;YACpCF,OAAO,CAAC,QAAQ,EAAEA,KAAK,SAAS,CAAC;QACnC;QACA,IAAIF,KAAKG,MAAM,GAAGN,WAAWQ,SAAS,EAAE;YACtCH,OAAO,CAAC,IAAI,EAAEA,KAAK,KAAK,CAAC;QAC3B;QACA,IAAIF,KAAKG,MAAM,GAAGN,WAAWS,gBAAgB,EAAE;YAC7CJ,OAAO,CAAC,4CAA4C,EAAEA,KAAK,OAAO,CAAC;QACrE;QACA,IAAIF,KAAKG,MAAM,GAAGN,WAAWU,YAAY,EAAE;YACzCL,OAAO,CAAC,yCAAyC,EAAEA,KAAK,OAAO,CAAC;QAClE;QACA,IAAIF,KAAKG,MAAM,GAAGN,WAAWW,OAAO,EAAE;YACpCN,OAAO,CAAC,MAAM,EAAEA,KAAK,OAAO,CAAC;QAC/B;QACA,IAAIF,KAAKG,MAAM,GAAGN,WAAWY,YAAY,EAAE;YACzCP,OAAO,CAAC,KAAK,EAAEA,KAAK,MAAM,CAAC;QAC7B;QACA,IAAIF,KAAKG,MAAM,GAAGN,WAAWa,cAAc,EAAE;YAC3CR,OAAO,CAAC,KAAK,EAAEA,KAAK,MAAM,CAAC;QAC7B;QAEA,OAAOA;IACT;IACAS,WAAW;QAAC;KAAO;AACrB,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replaceDoubleCurlys.d.ts","sourceRoot":"","sources":["../../src/utilities/replaceDoubleCurlys.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replaceDoubleCurlys.d.ts","sourceRoot":"","sources":["../../src/utilities/replaceDoubleCurlys.ts"],"names":[],"mappings":"AAIA,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,KAAK,cAAc,GAAG,aAAa,EAAE,CAAA;AAErC,eAAO,MAAM,mBAAmB,QAAS,MAAM,cAAc,cAAc,KAAG,MA8B7E,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import escapeHTML from 'escape-html';
|
|
1
2
|
import { keyValuePairToHtmlTable } from './keyValuePairToHtmlTable.js';
|
|
2
3
|
export const replaceDoubleCurlys = (str, variables)=>{
|
|
3
4
|
const regex = /\{\{(.+?)\}\}/g;
|
|
@@ -5,7 +6,7 @@ export const replaceDoubleCurlys = (str, variables)=>{
|
|
|
5
6
|
return str.replace(regex, (_, variable)=>{
|
|
6
7
|
if (variable.includes('*')) {
|
|
7
8
|
if (variable === '*') {
|
|
8
|
-
return variables.map(({ field, value })=>`${field} : ${value}`).join(' <br /> ');
|
|
9
|
+
return variables.map(({ field, value })=>`${escapeHTML(field)} : ${escapeHTML(value)}`).join(' <br /> ');
|
|
9
10
|
} else if (variable === '*:table') {
|
|
10
11
|
return keyValuePairToHtmlTable(variables.reduce((acc, { field, value })=>{
|
|
11
12
|
acc[field] = value;
|
|
@@ -17,7 +18,7 @@ export const replaceDoubleCurlys = (str, variables)=>{
|
|
|
17
18
|
return variable === fieldName;
|
|
18
19
|
});
|
|
19
20
|
if (foundVariable) {
|
|
20
|
-
return foundVariable.value;
|
|
21
|
+
return escapeHTML(foundVariable.value);
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
return variable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/replaceDoubleCurlys.ts"],"sourcesContent":["import { keyValuePairToHtmlTable } from './keyValuePairToHtmlTable.js'\n\ninterface EmailVariable {\n field: string\n value: string\n}\n\ntype EmailVariables = EmailVariable[]\n\nexport const replaceDoubleCurlys = (str: string, variables?: EmailVariables): string => {\n const regex = /\\{\\{(.+?)\\}\\}/g\n if (str && variables) {\n return str.replace(regex, (_, variable: string) => {\n if (variable.includes('*')) {\n if (variable === '*') {\n return variables.map(({ field, value }) => `${field} : ${value}`).join(' <br /> ')\n } else if (variable === '*:table') {\n return keyValuePairToHtmlTable(\n variables.reduce<Record<string, string>>((acc, { field, value }) => {\n acc[field] = value\n return acc\n }, {}),\n )\n }\n } else {\n const foundVariable = variables.find(({ field: fieldName }) => {\n return variable === fieldName\n })\n if (foundVariable) {\n return foundVariable.value\n }\n }\n\n return variable\n })\n }\n return str\n}\n"],"names":["keyValuePairToHtmlTable","replaceDoubleCurlys","str","variables","regex","replace","_","variable","includes","map","field","value","join","reduce","acc","foundVariable","find","fieldName"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/replaceDoubleCurlys.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\n\nimport { keyValuePairToHtmlTable } from './keyValuePairToHtmlTable.js'\n\ninterface EmailVariable {\n field: string\n value: string\n}\n\ntype EmailVariables = EmailVariable[]\n\nexport const replaceDoubleCurlys = (str: string, variables?: EmailVariables): string => {\n const regex = /\\{\\{(.+?)\\}\\}/g\n if (str && variables) {\n return str.replace(regex, (_, variable: string) => {\n if (variable.includes('*')) {\n if (variable === '*') {\n return variables\n .map(({ field, value }) => `${escapeHTML(field)} : ${escapeHTML(value)}`)\n .join(' <br /> ')\n } else if (variable === '*:table') {\n return keyValuePairToHtmlTable(\n variables.reduce<Record<string, string>>((acc, { field, value }) => {\n acc[field] = value\n return acc\n }, {}),\n )\n }\n } else {\n const foundVariable = variables.find(({ field: fieldName }) => {\n return variable === fieldName\n })\n if (foundVariable) {\n return escapeHTML(foundVariable.value)\n }\n }\n\n return variable\n })\n }\n return str\n}\n"],"names":["escapeHTML","keyValuePairToHtmlTable","replaceDoubleCurlys","str","variables","regex","replace","_","variable","includes","map","field","value","join","reduce","acc","foundVariable","find","fieldName"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAEpC,SAASC,uBAAuB,QAAQ,+BAA8B;AAStE,OAAO,MAAMC,sBAAsB,CAACC,KAAaC;IAC/C,MAAMC,QAAQ;IACd,IAAIF,OAAOC,WAAW;QACpB,OAAOD,IAAIG,OAAO,CAACD,OAAO,CAACE,GAAGC;YAC5B,IAAIA,SAASC,QAAQ,CAAC,MAAM;gBAC1B,IAAID,aAAa,KAAK;oBACpB,OAAOJ,UACJM,GAAG,CAAC,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAK,GAAGZ,WAAWW,OAAO,GAAG,EAAEX,WAAWY,QAAQ,EACvEC,IAAI,CAAC;gBACV,OAAO,IAAIL,aAAa,WAAW;oBACjC,OAAOP,wBACLG,UAAUU,MAAM,CAAyB,CAACC,KAAK,EAAEJ,KAAK,EAAEC,KAAK,EAAE;wBAC7DG,GAAG,CAACJ,MAAM,GAAGC;wBACb,OAAOG;oBACT,GAAG,CAAC;gBAER;YACF,OAAO;gBACL,MAAMC,gBAAgBZ,UAAUa,IAAI,CAAC,CAAC,EAAEN,OAAOO,SAAS,EAAE;oBACxD,OAAOV,aAAaU;gBACtB;gBACA,IAAIF,eAAe;oBACjB,OAAOhB,WAAWgB,cAAcJ,KAAK;gBACvC;YACF;YAEA,OAAOJ;QACT;IACF;IACA,OAAOL;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeSlate.d.ts","sourceRoot":"","sources":["../../../src/utilities/slate/serializeSlate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serializeSlate.d.ts","sourceRoot":"","sources":["../../../src/utilities/slate/serializeSlate.ts"],"names":[],"mappings":"AAKA,UAAU,IAAI;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAMD,eAAO,MAAM,cAAc,cAAe,IAAI,EAAE,mBAAmB,GAAG,KAAG,MAAM,GAAG,SAiIrE,CAAA"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import escapeHTML from 'escape-html';
|
|
2
|
+
import { sanitizeUrl } from 'payload/shared';
|
|
2
3
|
import { replaceDoubleCurlys } from '../replaceDoubleCurlys.js';
|
|
3
4
|
const isTextNode = (node)=>{
|
|
4
5
|
return 'text' in node;
|
|
5
6
|
};
|
|
6
7
|
export const serializeSlate = (children, submissionData)=>children?.map((node)=>{
|
|
7
8
|
if (isTextNode(node)) {
|
|
8
|
-
let text =
|
|
9
|
+
let text = escapeHTML(node.text);
|
|
10
|
+
if (submissionData) {
|
|
11
|
+
text = replaceDoubleCurlys(text, submissionData);
|
|
12
|
+
}
|
|
13
|
+
text = `<span>${text}</span>`;
|
|
9
14
|
if (node.bold) {
|
|
10
15
|
text = `
|
|
11
16
|
<strong>
|
|
@@ -82,11 +87,17 @@ export const serializeSlate = (children, submissionData)=>children?.map((node)=>
|
|
|
82
87
|
</li>
|
|
83
88
|
`;
|
|
84
89
|
case 'link':
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
{
|
|
91
|
+
let href = escapeHTML(sanitizeUrl(node.url ?? ''));
|
|
92
|
+
if (submissionData) {
|
|
93
|
+
href = replaceDoubleCurlys(href, submissionData);
|
|
94
|
+
}
|
|
95
|
+
return `
|
|
96
|
+
<a href="${href}">
|
|
87
97
|
${serializeSlate(node.children, submissionData)}
|
|
88
98
|
</a>
|
|
89
99
|
`;
|
|
100
|
+
}
|
|
90
101
|
case 'ol':
|
|
91
102
|
return `
|
|
92
103
|
<ol>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/slate/serializeSlate.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\n\nimport { replaceDoubleCurlys } from '../replaceDoubleCurlys.js'\n\ninterface Node {\n bold?: boolean\n children?: Node[]\n code?: boolean\n italic?: boolean\n text?: string\n type?: string\n url?: string\n}\n\nconst isTextNode = (node: Node): node is { text: string } & Node => {\n return 'text' in node\n}\n\nexport const serializeSlate = (children?: Node[], submissionData?: any): string | undefined =>\n children\n ?.map((node: Node) => {\n if (isTextNode(node)) {\n let text = node.text
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/slate/serializeSlate.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\nimport { sanitizeUrl } from 'payload/shared'\n\nimport { replaceDoubleCurlys } from '../replaceDoubleCurlys.js'\n\ninterface Node {\n bold?: boolean\n children?: Node[]\n code?: boolean\n italic?: boolean\n text?: string\n type?: string\n url?: string\n}\n\nconst isTextNode = (node: Node): node is { text: string } & Node => {\n return 'text' in node\n}\n\nexport const serializeSlate = (children?: Node[], submissionData?: any): string | undefined =>\n children\n ?.map((node: Node) => {\n if (isTextNode(node)) {\n let text = escapeHTML(node.text)\n if (submissionData) {\n text = replaceDoubleCurlys(text, submissionData)\n }\n text = `<span>${text}</span>`\n\n if (node.bold) {\n text = `\n <strong>\n ${text}\n </strong>\n `\n }\n\n if (node.code) {\n text = `\n <code>\n ${text}\n </code>\n `\n }\n\n if (node.italic) {\n text = `\n <em >\n ${text}\n </em>\n `\n }\n\n return text\n }\n\n if (!node) {\n return null\n }\n\n switch (node.type) {\n case 'h1':\n return `\n <h1>\n ${serializeSlate(node.children, submissionData)}\n </h1>\n `\n case 'h2':\n return `\n <h2>\n ${serializeSlate(node.children, submissionData)}\n </h2>\n `\n case 'h3':\n return `\n <h3>\n ${serializeSlate(node.children, submissionData)}\n </h3>\n `\n case 'h4':\n return `\n <h4>\n ${serializeSlate(node.children, submissionData)}\n </h4>\n `\n case 'h5':\n return `\n <h5>\n ${serializeSlate(node.children, submissionData)}\n </h5>\n `\n case 'h6':\n return `\n <h6>\n ${serializeSlate(node.children, submissionData)}\n </h6>\n `\n case 'indent':\n return `\n <p style=\"padding-left: 20px\">\n ${serializeSlate(node.children, submissionData)}\n </p>\n `\n case 'li':\n return `\n <li>\n ${serializeSlate(node.children, submissionData)}\n </li>\n `\n case 'link': {\n let href = escapeHTML(sanitizeUrl(node.url ?? ''))\n if (submissionData) {\n href = replaceDoubleCurlys(href, submissionData)\n }\n return `\n <a href=\"${href}\">\n ${serializeSlate(node.children, submissionData)}\n </a>\n `\n }\n case 'ol':\n return `\n <ol>\n ${serializeSlate(node.children, submissionData)}\n </ol>\n `\n case 'quote':\n return `\n <blockquote>\n ${serializeSlate(node.children, submissionData)}\n </blockquote>\n `\n case 'ul':\n return `\n <ul>\n ${serializeSlate(node.children, submissionData)}\n </ul>\n `\n\n default:\n return `\n <p>\n ${serializeSlate(node.children, submissionData)}\n </p>\n `\n }\n })\n .filter(Boolean)\n .join('')\n"],"names":["escapeHTML","sanitizeUrl","replaceDoubleCurlys","isTextNode","node","serializeSlate","children","submissionData","map","text","bold","code","italic","type","href","url","filter","Boolean","join"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AACpC,SAASC,WAAW,QAAQ,iBAAgB;AAE5C,SAASC,mBAAmB,QAAQ,4BAA2B;AAY/D,MAAMC,aAAa,CAACC;IAClB,OAAO,UAAUA;AACnB;AAEA,OAAO,MAAMC,iBAAiB,CAACC,UAAmBC,iBAChDD,UACIE,IAAI,CAACJ;QACL,IAAID,WAAWC,OAAO;YACpB,IAAIK,OAAOT,WAAWI,KAAKK,IAAI;YAC/B,IAAIF,gBAAgB;gBAClBE,OAAOP,oBAAoBO,MAAMF;YACnC;YACAE,OAAO,CAAC,MAAM,EAAEA,KAAK,OAAO,CAAC;YAE7B,IAAIL,KAAKM,IAAI,EAAE;gBACbD,OAAO,CAAC;;UAER,EAAEA,KAAK;;MAEX,CAAC;YACC;YAEA,IAAIL,KAAKO,IAAI,EAAE;gBACbF,OAAO,CAAC;;UAER,EAAEA,KAAK;;MAEX,CAAC;YACC;YAEA,IAAIL,KAAKQ,MAAM,EAAE;gBACfH,OAAO,CAAC;;UAER,EAAEA,KAAK;;MAEX,CAAC;YACC;YAEA,OAAOA;QACT;QAEA,IAAI,CAACL,MAAM;YACT,OAAO;QACT;QAEA,OAAQA,KAAKS,IAAI;YACf,KAAK;gBACH,OAAO,CAAC;;UAER,EAAER,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;YAEN,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;QAEpD,CAAC;YACD,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBAAQ;oBACX,IAAIO,OAAOd,WAAWC,YAAYG,KAAKW,GAAG,IAAI;oBAC9C,IAAIR,gBAAgB;wBAClBO,OAAOZ,oBAAoBY,MAAMP;oBACnC;oBACA,OAAO,CAAC;mBACC,EAAEO,KAAK;UAChB,EAAET,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;gBACC;YACA,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YAEC;gBACE,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;QACD;IACF,GACCS,OAAOC,SACPC,KAAK,IAAG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-form-builder",
|
|
3
|
-
"version": "3.80.0
|
|
3
|
+
"version": "3.80.0",
|
|
4
4
|
"description": "Form builder plugin for Payload CMS",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
],
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"escape-html": "^1.0.3",
|
|
56
|
-
"@payloadcms/ui": "3.80.0
|
|
56
|
+
"@payloadcms/ui": "3.80.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@types/escape-html": "^1.0.4",
|
|
@@ -62,12 +62,12 @@
|
|
|
62
62
|
"copyfiles": "^2.4.1",
|
|
63
63
|
"cross-env": "^7.0.3",
|
|
64
64
|
"@payloadcms/eslint-config": "3.28.0",
|
|
65
|
-
"payload": "3.80.0
|
|
65
|
+
"payload": "3.80.0"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
68
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
69
69
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
70
|
-
"payload": "3.80.0
|
|
70
|
+
"payload": "3.80.0"
|
|
71
71
|
},
|
|
72
72
|
"publishConfig": {
|
|
73
73
|
"registry": "https://registry.npmjs.org/"
|