@uniformdev/richtext 19.184.1 → 19.185.1-alpha.8
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.d.mts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.esm.js +28 -1
- package/dist/index.js +29 -1
- package/dist/index.mjs +28 -1
- package/package.json +9 -8
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AssetParamValueItem } from '@uniformdev/assets';
|
|
1
2
|
import { SerializedEditorState, SerializedParagraphNode } from 'lexical';
|
|
2
3
|
|
|
3
4
|
declare function purifyText(text: string): string;
|
|
@@ -26,7 +27,12 @@ interface NodeStringRendererProps {
|
|
|
26
27
|
type NodeStringRenderer = (props: NodeStringRendererProps) => string;
|
|
27
28
|
type ParameterRichTextValue = SerializedEditorState | undefined | null;
|
|
28
29
|
type RichTextBuiltInFormat = 'code' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'superscript' | 'subscript';
|
|
29
|
-
type RichTextBuiltInElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'unorderedList' | 'orderedList' | 'link' | 'quote' | 'code' | 'variable' | 'table';
|
|
30
|
+
type RichTextBuiltInElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'unorderedList' | 'orderedList' | 'link' | 'quote' | 'code' | 'variable' | 'table' | 'asset';
|
|
31
|
+
|
|
32
|
+
interface AssetNode extends RichTextNode {
|
|
33
|
+
__asset?: NonNullable<AssetParamValueItem>;
|
|
34
|
+
}
|
|
35
|
+
declare const assetHtmlRenderer: NodeStringRenderer;
|
|
30
36
|
|
|
31
37
|
interface HeadingNode extends RichTextNode {
|
|
32
38
|
tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
@@ -126,6 +132,7 @@ declare function isRichTextNodeType(node: unknown, type: 'text'): node is TextNo
|
|
|
126
132
|
declare function isRichTextNodeType(node: unknown, type: 'list'): node is ListNode;
|
|
127
133
|
declare function isRichTextNodeType(node: unknown, type: 'listitem'): node is ListItemNode;
|
|
128
134
|
declare function isRichTextNodeType(node: unknown, type: 'link'): node is LinkNode;
|
|
135
|
+
declare function isRichTextNodeType(node: unknown, type: 'asset'): node is AssetNode;
|
|
129
136
|
declare function isRichTextNodeType(node: unknown, type: string): node is RichTextNode;
|
|
130
137
|
declare function isRichTextValueConsideredEmpty(value: ParameterRichTextValue): boolean;
|
|
131
138
|
declare function hasChildren<TRichTextNode extends RichTextNode>(node: TRichTextNode): node is TRichTextNode & {
|
|
@@ -202,4 +209,4 @@ declare const emptyRichTextValue: {
|
|
|
202
209
|
};
|
|
203
210
|
};
|
|
204
211
|
|
|
205
|
-
export { type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextBuiltInElement, type RichTextBuiltInFormat, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TableCellNode, type TableNode, type TableRowNode, type TextNode, emptyRichTextValue, getLabelForElement, getLabelForFormat, getRichTextTagFromTableCellHeaderState, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, tableHtmlRenderer, tablecellHtmlRenderer, tablerowHtmlRenderer, textHtmlRenderer, walkRichTextTree };
|
|
212
|
+
export { type AssetNode, type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextBuiltInElement, type RichTextBuiltInFormat, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TableCellNode, type TableNode, type TableRowNode, type TextNode, assetHtmlRenderer, emptyRichTextValue, getLabelForElement, getLabelForFormat, getRichTextTagFromTableCellHeaderState, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, tableHtmlRenderer, tablecellHtmlRenderer, tablerowHtmlRenderer, textHtmlRenderer, walkRichTextTree };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AssetParamValueItem } from '@uniformdev/assets';
|
|
1
2
|
import { SerializedEditorState, SerializedParagraphNode } from 'lexical';
|
|
2
3
|
|
|
3
4
|
declare function purifyText(text: string): string;
|
|
@@ -26,7 +27,12 @@ interface NodeStringRendererProps {
|
|
|
26
27
|
type NodeStringRenderer = (props: NodeStringRendererProps) => string;
|
|
27
28
|
type ParameterRichTextValue = SerializedEditorState | undefined | null;
|
|
28
29
|
type RichTextBuiltInFormat = 'code' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'superscript' | 'subscript';
|
|
29
|
-
type RichTextBuiltInElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'unorderedList' | 'orderedList' | 'link' | 'quote' | 'code' | 'variable' | 'table';
|
|
30
|
+
type RichTextBuiltInElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'unorderedList' | 'orderedList' | 'link' | 'quote' | 'code' | 'variable' | 'table' | 'asset';
|
|
31
|
+
|
|
32
|
+
interface AssetNode extends RichTextNode {
|
|
33
|
+
__asset?: NonNullable<AssetParamValueItem>;
|
|
34
|
+
}
|
|
35
|
+
declare const assetHtmlRenderer: NodeStringRenderer;
|
|
30
36
|
|
|
31
37
|
interface HeadingNode extends RichTextNode {
|
|
32
38
|
tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
@@ -126,6 +132,7 @@ declare function isRichTextNodeType(node: unknown, type: 'text'): node is TextNo
|
|
|
126
132
|
declare function isRichTextNodeType(node: unknown, type: 'list'): node is ListNode;
|
|
127
133
|
declare function isRichTextNodeType(node: unknown, type: 'listitem'): node is ListItemNode;
|
|
128
134
|
declare function isRichTextNodeType(node: unknown, type: 'link'): node is LinkNode;
|
|
135
|
+
declare function isRichTextNodeType(node: unknown, type: 'asset'): node is AssetNode;
|
|
129
136
|
declare function isRichTextNodeType(node: unknown, type: string): node is RichTextNode;
|
|
130
137
|
declare function isRichTextValueConsideredEmpty(value: ParameterRichTextValue): boolean;
|
|
131
138
|
declare function hasChildren<TRichTextNode extends RichTextNode>(node: TRichTextNode): node is TRichTextNode & {
|
|
@@ -202,4 +209,4 @@ declare const emptyRichTextValue: {
|
|
|
202
209
|
};
|
|
203
210
|
};
|
|
204
211
|
|
|
205
|
-
export { type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextBuiltInElement, type RichTextBuiltInFormat, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TableCellNode, type TableNode, type TableRowNode, type TextNode, emptyRichTextValue, getLabelForElement, getLabelForFormat, getRichTextTagFromTableCellHeaderState, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, tableHtmlRenderer, tablecellHtmlRenderer, tablerowHtmlRenderer, textHtmlRenderer, walkRichTextTree };
|
|
212
|
+
export { type AssetNode, type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextBuiltInElement, type RichTextBuiltInFormat, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TableCellNode, type TableNode, type TableRowNode, type TextNode, assetHtmlRenderer, emptyRichTextValue, getLabelForElement, getLabelForFormat, getRichTextTagFromTableCellHeaderState, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, tableHtmlRenderer, tablecellHtmlRenderer, tablerowHtmlRenderer, textHtmlRenderer, walkRichTextTree };
|
package/dist/index.esm.js
CHANGED
|
@@ -66,6 +66,27 @@ function hasChildren(node) {
|
|
|
66
66
|
return "children" in node && isArrayWithLength(node.children);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// src/nodes/asset.ts
|
|
70
|
+
var ASSETS_SOURCE_UNIFORM = "uniform-assets";
|
|
71
|
+
var assetHtmlRenderer = ({ context }) => {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
const node = context.currentNode;
|
|
74
|
+
if (node.__asset === void 0) {
|
|
75
|
+
return "";
|
|
76
|
+
}
|
|
77
|
+
if (node.__asset.type !== "image" || node.__asset._source !== ASSETS_SOURCE_UNIFORM) {
|
|
78
|
+
return "";
|
|
79
|
+
}
|
|
80
|
+
const imgAttributes = /* @__PURE__ */ new Map();
|
|
81
|
+
imgAttributes.set("src", node.__asset.fields.url.value);
|
|
82
|
+
if ((_a = node.__asset.fields.title) == null ? void 0 : _a.value) {
|
|
83
|
+
imgAttributes.set("alt", node.__asset.fields.title.value);
|
|
84
|
+
}
|
|
85
|
+
const img = renderHtmlElement("img", imgAttributes);
|
|
86
|
+
const figcaption = ((_b = node.__asset.fields.description) == null ? void 0 : _b.value) ? renderHtmlElement("figcaption", null, node.__asset.fields.description.value) : "";
|
|
87
|
+
return renderHtmlElement("figure", null, `${img}${figcaption}`);
|
|
88
|
+
};
|
|
89
|
+
|
|
69
90
|
// src/nodes/heading.ts
|
|
70
91
|
var headingHtmlRenderer = ({ context, renderChildren }) => {
|
|
71
92
|
var _a;
|
|
@@ -248,7 +269,8 @@ var rendererTypeMap = /* @__PURE__ */ new Map([
|
|
|
248
269
|
["tab", tabHtmlRenderer],
|
|
249
270
|
["table", tableHtmlRenderer],
|
|
250
271
|
["tablecell", tablecellHtmlRenderer],
|
|
251
|
-
["tablerow", tablerowHtmlRenderer]
|
|
272
|
+
["tablerow", tablerowHtmlRenderer],
|
|
273
|
+
["asset", assetHtmlRenderer]
|
|
252
274
|
]);
|
|
253
275
|
var resolveDefaultRenderer = (context) => {
|
|
254
276
|
const renderer = rendererTypeMap.get(context.currentNode.type);
|
|
@@ -426,6 +448,10 @@ var richTextBuiltInElements = [
|
|
|
426
448
|
label: "Table",
|
|
427
449
|
type: "table"
|
|
428
450
|
},
|
|
451
|
+
{
|
|
452
|
+
label: "Asset",
|
|
453
|
+
type: "asset"
|
|
454
|
+
},
|
|
429
455
|
{
|
|
430
456
|
label: "Dynamic Token",
|
|
431
457
|
type: "variable"
|
|
@@ -496,6 +522,7 @@ var emptyRichTextValue = {
|
|
|
496
522
|
}
|
|
497
523
|
};
|
|
498
524
|
export {
|
|
525
|
+
assetHtmlRenderer,
|
|
499
526
|
emptyRichTextValue,
|
|
500
527
|
getLabelForElement,
|
|
501
528
|
getLabelForFormat,
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
|
+
assetHtmlRenderer: () => assetHtmlRenderer,
|
|
23
24
|
emptyRichTextValue: () => emptyRichTextValue,
|
|
24
25
|
getLabelForElement: () => getLabelForElement,
|
|
25
26
|
getLabelForFormat: () => getLabelForFormat,
|
|
@@ -126,6 +127,27 @@ function hasChildren(node) {
|
|
|
126
127
|
return "children" in node && isArrayWithLength(node.children);
|
|
127
128
|
}
|
|
128
129
|
|
|
130
|
+
// src/nodes/asset.ts
|
|
131
|
+
var ASSETS_SOURCE_UNIFORM = "uniform-assets";
|
|
132
|
+
var assetHtmlRenderer = ({ context }) => {
|
|
133
|
+
var _a, _b;
|
|
134
|
+
const node = context.currentNode;
|
|
135
|
+
if (node.__asset === void 0) {
|
|
136
|
+
return "";
|
|
137
|
+
}
|
|
138
|
+
if (node.__asset.type !== "image" || node.__asset._source !== ASSETS_SOURCE_UNIFORM) {
|
|
139
|
+
return "";
|
|
140
|
+
}
|
|
141
|
+
const imgAttributes = /* @__PURE__ */ new Map();
|
|
142
|
+
imgAttributes.set("src", node.__asset.fields.url.value);
|
|
143
|
+
if ((_a = node.__asset.fields.title) == null ? void 0 : _a.value) {
|
|
144
|
+
imgAttributes.set("alt", node.__asset.fields.title.value);
|
|
145
|
+
}
|
|
146
|
+
const img = renderHtmlElement("img", imgAttributes);
|
|
147
|
+
const figcaption = ((_b = node.__asset.fields.description) == null ? void 0 : _b.value) ? renderHtmlElement("figcaption", null, node.__asset.fields.description.value) : "";
|
|
148
|
+
return renderHtmlElement("figure", null, `${img}${figcaption}`);
|
|
149
|
+
};
|
|
150
|
+
|
|
129
151
|
// src/nodes/heading.ts
|
|
130
152
|
var headingHtmlRenderer = ({ context, renderChildren }) => {
|
|
131
153
|
var _a;
|
|
@@ -308,7 +330,8 @@ var rendererTypeMap = /* @__PURE__ */ new Map([
|
|
|
308
330
|
["tab", tabHtmlRenderer],
|
|
309
331
|
["table", tableHtmlRenderer],
|
|
310
332
|
["tablecell", tablecellHtmlRenderer],
|
|
311
|
-
["tablerow", tablerowHtmlRenderer]
|
|
333
|
+
["tablerow", tablerowHtmlRenderer],
|
|
334
|
+
["asset", assetHtmlRenderer]
|
|
312
335
|
]);
|
|
313
336
|
var resolveDefaultRenderer = (context) => {
|
|
314
337
|
const renderer = rendererTypeMap.get(context.currentNode.type);
|
|
@@ -486,6 +509,10 @@ var richTextBuiltInElements = [
|
|
|
486
509
|
label: "Table",
|
|
487
510
|
type: "table"
|
|
488
511
|
},
|
|
512
|
+
{
|
|
513
|
+
label: "Asset",
|
|
514
|
+
type: "asset"
|
|
515
|
+
},
|
|
489
516
|
{
|
|
490
517
|
label: "Dynamic Token",
|
|
491
518
|
type: "variable"
|
|
@@ -557,6 +584,7 @@ var emptyRichTextValue = {
|
|
|
557
584
|
};
|
|
558
585
|
// Annotate the CommonJS export names for ESM import in node:
|
|
559
586
|
0 && (module.exports = {
|
|
587
|
+
assetHtmlRenderer,
|
|
560
588
|
emptyRichTextValue,
|
|
561
589
|
getLabelForElement,
|
|
562
590
|
getLabelForFormat,
|
package/dist/index.mjs
CHANGED
|
@@ -66,6 +66,27 @@ function hasChildren(node) {
|
|
|
66
66
|
return "children" in node && isArrayWithLength(node.children);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// src/nodes/asset.ts
|
|
70
|
+
var ASSETS_SOURCE_UNIFORM = "uniform-assets";
|
|
71
|
+
var assetHtmlRenderer = ({ context }) => {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
const node = context.currentNode;
|
|
74
|
+
if (node.__asset === void 0) {
|
|
75
|
+
return "";
|
|
76
|
+
}
|
|
77
|
+
if (node.__asset.type !== "image" || node.__asset._source !== ASSETS_SOURCE_UNIFORM) {
|
|
78
|
+
return "";
|
|
79
|
+
}
|
|
80
|
+
const imgAttributes = /* @__PURE__ */ new Map();
|
|
81
|
+
imgAttributes.set("src", node.__asset.fields.url.value);
|
|
82
|
+
if ((_a = node.__asset.fields.title) == null ? void 0 : _a.value) {
|
|
83
|
+
imgAttributes.set("alt", node.__asset.fields.title.value);
|
|
84
|
+
}
|
|
85
|
+
const img = renderHtmlElement("img", imgAttributes);
|
|
86
|
+
const figcaption = ((_b = node.__asset.fields.description) == null ? void 0 : _b.value) ? renderHtmlElement("figcaption", null, node.__asset.fields.description.value) : "";
|
|
87
|
+
return renderHtmlElement("figure", null, `${img}${figcaption}`);
|
|
88
|
+
};
|
|
89
|
+
|
|
69
90
|
// src/nodes/heading.ts
|
|
70
91
|
var headingHtmlRenderer = ({ context, renderChildren }) => {
|
|
71
92
|
var _a;
|
|
@@ -248,7 +269,8 @@ var rendererTypeMap = /* @__PURE__ */ new Map([
|
|
|
248
269
|
["tab", tabHtmlRenderer],
|
|
249
270
|
["table", tableHtmlRenderer],
|
|
250
271
|
["tablecell", tablecellHtmlRenderer],
|
|
251
|
-
["tablerow", tablerowHtmlRenderer]
|
|
272
|
+
["tablerow", tablerowHtmlRenderer],
|
|
273
|
+
["asset", assetHtmlRenderer]
|
|
252
274
|
]);
|
|
253
275
|
var resolveDefaultRenderer = (context) => {
|
|
254
276
|
const renderer = rendererTypeMap.get(context.currentNode.type);
|
|
@@ -426,6 +448,10 @@ var richTextBuiltInElements = [
|
|
|
426
448
|
label: "Table",
|
|
427
449
|
type: "table"
|
|
428
450
|
},
|
|
451
|
+
{
|
|
452
|
+
label: "Asset",
|
|
453
|
+
type: "asset"
|
|
454
|
+
},
|
|
429
455
|
{
|
|
430
456
|
label: "Dynamic Token",
|
|
431
457
|
type: "variable"
|
|
@@ -496,6 +522,7 @@ var emptyRichTextValue = {
|
|
|
496
522
|
}
|
|
497
523
|
};
|
|
498
524
|
export {
|
|
525
|
+
assetHtmlRenderer,
|
|
499
526
|
emptyRichTextValue,
|
|
500
527
|
getLabelForElement,
|
|
501
528
|
getLabelForFormat,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uniformdev/richtext",
|
|
3
|
-
"version": "19.
|
|
3
|
+
"version": "19.185.1-alpha.8+53f7f96124",
|
|
4
4
|
"description": "Common functionality and types for Uniform Rich Text parameters",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -40,12 +40,13 @@
|
|
|
40
40
|
"document": "api-extractor run --local"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@lexical/headless": "0.17.
|
|
44
|
-
"@lexical/html": "0.17.
|
|
45
|
-
"@lexical/link": "0.17.
|
|
46
|
-
"@lexical/list": "0.17.
|
|
47
|
-
"@lexical/rich-text": "0.17.
|
|
48
|
-
"
|
|
43
|
+
"@lexical/headless": "0.17.1",
|
|
44
|
+
"@lexical/html": "0.17.1",
|
|
45
|
+
"@lexical/link": "0.17.1",
|
|
46
|
+
"@lexical/list": "0.17.1",
|
|
47
|
+
"@lexical/rich-text": "0.17.1",
|
|
48
|
+
"@uniformdev/assets": "19.185.1-alpha.8+53f7f96124",
|
|
49
|
+
"lexical": "0.17.1"
|
|
49
50
|
},
|
|
50
51
|
"files": [
|
|
51
52
|
"/dist"
|
|
@@ -53,5 +54,5 @@
|
|
|
53
54
|
"publishConfig": {
|
|
54
55
|
"access": "public"
|
|
55
56
|
},
|
|
56
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "53f7f961242f3518b103e55337ada7ad91c18dd7"
|
|
57
58
|
}
|