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
+
+
+
+
\ No newline at end of file