diff --git a/build.gradle b/build.gradle index 435b4bb09b..5e2ee550fd 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,7 @@ dependencies { include "com.enonic.xp:lib-value:${xpVersion}" include "no.item:lib-xp-cristin:1.3.2" include "no.item:lib-xp-time:1.0.4" + include "com.enonic.lib:lib-markdown:1.0.0" } repositories { diff --git a/nais.yaml b/nais.yaml index 76e895520e..29a9d0e76d 100644 --- a/nais.yaml +++ b/nais.yaml @@ -58,8 +58,6 @@ spec: requests: memory: 2Gi - ttl: 168h - prometheus: enabled: false diff --git a/src/main/resources/index.d.ts b/src/main/resources/index.d.ts index 8a0d2dbac5..67a0718490 100644 --- a/src/main/resources/index.d.ts +++ b/src/main/resources/index.d.ts @@ -37,6 +37,7 @@ declare global { export type LocalSearch = _PartComponent<'mimir:localSearch'> export type MailChimpForm = _PartComponent<'mimir:mailChimpForm'> export type Map = _PartComponent<'mimir:map'> + export type Markdown = _PartComponent<'mimir:markdown'> export type Maths = _PartComponent<'mimir:maths'> export type MenuBox = _PartComponent<'mimir:menuBox'> export type MenuDropdown = _PartComponent<'mimir:menuDropdown'> diff --git a/src/main/resources/lib/ssb/utils/markdownUtils.ts b/src/main/resources/lib/ssb/utils/markdownUtils.ts new file mode 100644 index 0000000000..dbac182c5a --- /dev/null +++ b/src/main/resources/lib/ssb/utils/markdownUtils.ts @@ -0,0 +1,9 @@ +import { connect, type RepoConnection } from '/lib/xp/node' + +export function connectMarkdownRepo(): RepoConnection { + return connect({ + repoId: 'no.ssb.pubmd', + branch: 'master', + principals: ['role:system.admin'], + }) +} diff --git a/src/main/resources/services/getMarkdownNodes/getMarkdownNodes.ts b/src/main/resources/services/getMarkdownNodes/getMarkdownNodes.ts new file mode 100644 index 0000000000..7ba0b9e400 --- /dev/null +++ b/src/main/resources/services/getMarkdownNodes/getMarkdownNodes.ts @@ -0,0 +1,30 @@ +import { connectMarkdownRepo } from '/lib/ssb/utils/markdownUtils' + +export const get = (): XP.Response => { + const conn = connectMarkdownRepo() + + const markdownNodes = conn.findChildren({ + parentKey: '/', + count: 100, + }) + + const hits = markdownNodes.hits.map((hit) => { + const node = conn.get(hit.id) + return { + id: hit.id, + displayName: node.displayName, + } + }) + + const body = { + count: markdownNodes.count, + total: markdownNodes.total, + hits: hits, + } + + return { + status: 200, + body: body, + contentType: 'application/json', + } +} diff --git a/src/main/resources/services/getMarkdownNodes/getMarkdownNodes.xml b/src/main/resources/services/getMarkdownNodes/getMarkdownNodes.xml new file mode 100644 index 0000000000..7f945f2c64 --- /dev/null +++ b/src/main/resources/services/getMarkdownNodes/getMarkdownNodes.xml @@ -0,0 +1,5 @@ + + + role:system.everyone + + \ No newline at end of file diff --git a/src/main/resources/services/postMarkdown/postMarkdown.ts b/src/main/resources/services/postMarkdown/postMarkdown.ts new file mode 100644 index 0000000000..cc775deb91 --- /dev/null +++ b/src/main/resources/services/postMarkdown/postMarkdown.ts @@ -0,0 +1,30 @@ +import { connectMarkdownRepo } from '/lib/ssb/utils/markdownUtils' + +export const post = (req: XP.Request): XP.Response => { + const setFields = (obj) => { + obj.displayName = req.params.displayName + obj.markdown = req.params.markdown + return obj + } + + const conn = connectMarkdownRepo() + + const nodeId = typeof req.params._id === 'string' ? req.params._id : '' + const nodeExists = nodeId ? conn.exists(nodeId) : false + + let result + if (nodeExists) { + result = conn.modify({ + key: nodeId, + editor: setFields, + }) + } else { + const createContentParams = setFields({}) + result = conn.create(createContentParams) + } + + return { + status: 200, + body: result, + } +} diff --git a/src/main/resources/services/postMarkdown/postMarkdown.xml b/src/main/resources/services/postMarkdown/postMarkdown.xml new file mode 100644 index 0000000000..7f945f2c64 --- /dev/null +++ b/src/main/resources/services/postMarkdown/postMarkdown.xml @@ -0,0 +1,5 @@ + + + role:system.everyone + + \ No newline at end of file diff --git a/src/main/resources/site/parts/markdown/markdown.ts b/src/main/resources/site/parts/markdown/markdown.ts new file mode 100644 index 0000000000..7ac964bc4c --- /dev/null +++ b/src/main/resources/site/parts/markdown/markdown.ts @@ -0,0 +1,19 @@ +import { getComponent } from '/lib/xp/portal' +import { connectMarkdownRepo } from '/lib/ssb/utils/markdownUtils' +import { render } from '/lib/enonic/react4xp' +import { render as renderMarkdown } from '/lib/markdown' + +export function get(req: XP.Request): XP.Response { + const component = getComponent() + + const conn = connectMarkdownRepo() + + const nodeId = component.config.markdownNode + const node = conn.get(nodeId) + const markdownText = node.markdown + + const props = { + markdownTextRendered: renderMarkdown(markdownText), + } + return render(component, props, req) +} diff --git a/src/main/resources/site/parts/markdown/markdown.tsx b/src/main/resources/site/parts/markdown/markdown.tsx new file mode 100644 index 0000000000..b5a7fe386d --- /dev/null +++ b/src/main/resources/site/parts/markdown/markdown.tsx @@ -0,0 +1,9 @@ +import React from 'react' + +export default (props) => ( +
+) diff --git a/src/main/resources/site/parts/markdown/markdown.xml b/src/main/resources/site/parts/markdown/markdown.xml new file mode 100644 index 0000000000..4d14e54188 --- /dev/null +++ b/src/main/resources/site/parts/markdown/markdown.xml @@ -0,0 +1,15 @@ + + + Markdown + +
+ + + + + getMarkdownNodes + + + + +
\ No newline at end of file