Skip to content

Commit fc916db

Browse files
committed
refactor: ♻️ RenderItem type function
RenderItem type function parameter update to return item and metadata
1 parent d455aee commit fc916db

File tree

6 files changed

+19
-27
lines changed

6 files changed

+19
-27
lines changed

src/Models/metadata-model.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ export interface Metadata {
99
itemType: 'entry' | 'asset' | undefined
1010
styleType: StyleType | undefined
1111
contentTypeUid: string | undefined
12-
13-
item: EmbeddedItem | undefined
1412
}
1513

1614
export interface Attributes {
@@ -40,7 +38,6 @@ export function createMetadata(attribute: Attributes): Metadata {
4038
styleType: attribute["sys-style-type"] as StyleType,
4139
attributes: attribute,
4240
contentTypeUid: attribute["data-sys-content-type-uid"],
43-
item: undefined
4441
}
4542
}
4643

@@ -52,7 +49,6 @@ export function nodeToMetadata(attribute: Attributes, textNode: TextNode): Metad
5249
styleType: attribute["display-type"] as StyleType,
5350
attributes: attribute,
5451
contentTypeUid: attribute["content-type-uid"],
55-
item: undefined
5652
}
5753
}
5854

src/helper/find-embeded-object.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,14 @@ export function findEmbeddedItems(object: Metadata, entry: EntryEmbedable): (Emb
4545
}
4646

4747
export function findRenderString(
48+
item: EmbeddedItem,
4849
metadata: Metadata,
4950
renderOptions?: RenderOption,
5051
): string {
51-
if ((!metadata.item && metadata.item === undefined) || (!metadata && metadata === undefined)) {
52+
if ((!item && item === undefined) || (!metadata && metadata === undefined)) {
5253
return '';
5354
}
5455

55-
if (!metadata.styleType) {
56-
return '';
57-
}
58-
59-
6056
if (renderOptions && renderOptions[metadata.styleType] !== undefined) {
6157
const renderFunction = renderOptions[metadata.styleType] as RenderItem;
6258

@@ -65,29 +61,29 @@ export function findRenderString(
6561
typeof renderFunction !== 'function' &&
6662
renderFunction[(metadata.attributes as EntryAttributes)['data-sys-content-type-uid']] !== undefined
6763
) {
68-
return (renderFunction as RenderContentType)[(metadata.attributes as EntryAttributes)['data-sys-content-type-uid']](metadata);
64+
return (renderFunction as RenderContentType)[(metadata.attributes as EntryAttributes)['data-sys-content-type-uid']](item, metadata);
6965
} else if (
7066
(metadata.attributes as EntryAttributes)['data-sys-content-type-uid'] !== undefined &&
7167
typeof renderFunction !== 'function' &&
7268
(renderFunction as RenderContentType).$default !== undefined
7369
) {
74-
return (renderFunction as RenderContentType).$default(metadata);
70+
return (renderFunction as RenderContentType).$default(item, metadata);
7571
} else if (
7672
metadata.contentTypeUid !== undefined &&
7773
typeof renderFunction !== 'function' &&
7874
renderFunction[metadata.contentTypeUid] !== undefined
7975
) {
80-
return (renderFunction as RenderContentType)[metadata.contentTypeUid](metadata)
76+
return (renderFunction as RenderContentType)[metadata.contentTypeUid](item, metadata)
8177
} else if (
8278
metadata.contentTypeUid !== undefined &&
8379
typeof renderFunction !== 'function' &&
8480
(renderFunction as RenderContentType).$default !== undefined
8581
) {
86-
return (renderFunction as RenderContentType).$default(metadata);
82+
return (renderFunction as RenderContentType).$default(item, metadata);
8783
} else if (typeof renderFunction === 'function') {
88-
return renderFunction(metadata);
84+
return renderFunction(item, metadata);
8985
}
9086
}
9187
const defaultRenderFunction = defaultOptions[metadata.styleType] as RenderItem;
92-
return defaultRenderFunction(metadata);
88+
return defaultRenderFunction(item, metadata);
9389
}

src/json-to-html.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ export function referenceToHTML(node: Node,
109109
return ''
110110
}
111111
const metadata = nodeToMetadata(node.attrs, ((node.children && node.children.length > 0) ? node.children[0]: {}) as unknown as TextNode)
112-
metadata.item = findEmbeddedItems(metadata, entry)[0]
113-
return findRenderString(metadata, renderOption)
112+
const item = findEmbeddedItems(metadata, entry)[0]
113+
return findRenderString(item, metadata, renderOption)
114114
}
115115

116116
function nodeChildrenToHTML(nodes: AnyNode[],

src/options/default-options.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import StyleType from '../embedded-types/style-type';
22
import { RenderOption } from '.';
33
import { Metadata } from '../Models/metadata-model';
4+
import { EmbeddedItem } from '../Models/embedded-object';
45

56
export const defaultOptions: RenderOption = {
6-
[StyleType.BLOCK]: (metadata: Metadata) =>
7-
`<div><p>${metadata.item.title || metadata.item.uid}</p><p>Content type: <span>${metadata.item._content_type_uid}</span></p></div>`,
8-
[StyleType.INLINE]: (metadata: Metadata) => `<span>${metadata.item.title || metadata.item.uid}</span>`,
9-
[StyleType.LINK]: (metadata: Metadata) => `<a href="${metadata.item.url}">${metadata.text || metadata.item.title || metadata.item.uid}</a>`,
10-
[StyleType.DISPLAY]: (metadata: Metadata) => `<img src="${metadata.item.url}" alt="${metadata.attributes.alt || metadata.item.title || metadata.item.filename || metadata.item.uid}" />`,
11-
[StyleType.DOWNLOAD]: (metadata: Metadata) => `<a href="${metadata.item.url}">${metadata.text || metadata.item.title || metadata.item.uid}</a>`,
7+
[StyleType.BLOCK]: (item: EmbeddedItem) =>
8+
`<div><p>${item.title || item.uid}</p><p>Content type: <span>${item._content_type_uid}</span></p></div>`,
9+
[StyleType.INLINE]: (item: EmbeddedItem) => `<span>${item.title || item.uid}</span>`,
10+
[StyleType.LINK]: (item: EmbeddedItem, metadata: Metadata) => `<a href="${item.url}">${metadata.text || item.title || item.uid}</a>`,
11+
[StyleType.DISPLAY]: (item: EmbeddedItem, metadata: Metadata) => `<img src="${item.url}" alt="${metadata.attributes.alt || item.title || item.filename || item.uid}" />`,
12+
[StyleType.DOWNLOAD]: (item: EmbeddedItem, metadata: Metadata) => `<a href="${item.url}">${metadata.text || item.title || item.uid}</a>`,
1213
};

src/options/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import TextNode from '../nodes/text';
77
export type Next = (nodes: AnyNode[]) => string
88
export type RenderNode = (node: Node, next: Next) => string;
99
export type RenderMark = (text: string) => string;
10-
export type RenderItem = (metadata: Metadata) => string;
10+
export type RenderItem = (item: EmbeddedItem, metadata: Metadata) => string;
1111
export interface RenderOption {
1212
[embedType: string]: RenderNode | RenderMark | RenderItem | RenderContentType;
1313
}

src/render-embedded-objects.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ export function renderContent(content: (string | string[]), option: Option): (st
8080

8181
function findAndReplaceEmbeddedItem(content:string, embededObjectTag: string, metadata: Metadata, option: Option): string {
8282
const embeddedObjects = findEmbeddedItems(metadata, option.entry)
83-
metadata.item = embeddedObjects[0]
84-
const renderString = findRenderString(metadata, option.renderOption)
83+
const renderString = findRenderString(embeddedObjects[0], metadata, option.renderOption)
8584
return content.replace(embededObjectTag, renderString)
8685
}

0 commit comments

Comments
 (0)