diff --git a/.nvmrc b/.nvmrc
index 805b5a4e..8e03fd37 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-v20.9.0
+v22.15
diff --git a/.updateTdev b/.updateTdev
index d359a57f..2574e55e 100644
--- a/.updateTdev
+++ b/.updateTdev
@@ -1 +1 @@
-CURRENT_COMMIT=5103a900773b33dca171a591128d82a758724ac5
\ No newline at end of file
+CURRENT_COMMIT=439e0c4d9568d740a8577e58774106100f0522c7
\ No newline at end of file
diff --git a/dev/demoExamFile.json b/dev/demoExamFile.json
index f778f4f4..8438bc72 100644
--- a/dev/demoExamFile.json
+++ b/dev/demoExamFile.json
@@ -5,9 +5,7 @@
"data": {
"type": "string",
"documentRootId": "178c93a6-fa60-4ca8-97ed-f6b9344043e9",
- "transformers": [
- "trim"
- ],
+ "transformers": ["trim"],
"solutions": [
{ "value": "/Users/[^/]+/Desktop/demo.mp4", "regex": true },
{ "value": "C://Users/[^/]+/Desktop/demo.mp4", "regex": true }
@@ -19,14 +17,7 @@
"points": 3,
"data": {
"type": "true-false",
- "answers": [
- true,
- true,
- false,
- true,
- false,
- false
- ],
+ "answers": [true, true, false, true, false, false],
"grading": {
"correct": 0.5,
"incorrect": -0.25,
@@ -47,12 +38,7 @@
"points": 2,
"data": {
"type": "multiple-choice",
- "answers": [
- true,
- true,
- false,
- false
- ],
+ "answers": [true, true, false, false],
"grading": {
"error": -1,
"negativePoints": false
@@ -66,4 +52,4 @@
"type": "string"
}
}
-}
\ No newline at end of file
+}
diff --git a/docs/tdev/app-architecture/api-deploy/index.mdx b/docs/tdev/app-architecture/api-deploy/index.mdx
index 5f88a8ec..65d8b31a 100644
--- a/docs/tdev/app-architecture/api-deploy/index.mdx
+++ b/docs/tdev/app-architecture/api-deploy/index.mdx
@@ -5,7 +5,7 @@ page_id: 560cfd4d-4464-42ff-a121-a3d116ea1994
import Steps from '@tdev-components/Steps'
import { Val, TemplateCode, DynamicInput } from '@tdev-components/DynamicValues';
import _ from 'es-toolkit/compat';
-import { generateRandomBase64 } from './secureToken';
+import { generateRandomBase64 } from '../helpers/secureToken';
# API Aufsetzen
@@ -16,7 +16,6 @@ import { generateRandomBase64 } from './secureToken';
_.camelCase((page.dynamicValues.get('app') || 'inf-teaching-api'))} />
- generateRandomBase64()} />
diff --git a/docs/tdev/app-architecture/dokku/index.mdx b/docs/tdev/app-architecture/dokku/index.mdx
index 35cc9c8e..585c6d3c 100644
--- a/docs/tdev/app-architecture/dokku/index.mdx
+++ b/docs/tdev/app-architecture/dokku/index.mdx
@@ -4,6 +4,7 @@ page_id: 323ff390-40d6-4bd5-ac6c-7a05f3515526
import Steps from '@tdev-components/Steps'
import { Val, TemplateCode, DynamicInput } from '@tdev-components/DynamicValues';
+import { generateRandomBase64 } from '../helpers/secureToken';
# Dokku Deploy
@@ -18,8 +19,8 @@ Durch das Hosten auf einem eigenen Server kann mit bspw. `http-auth` der Zugriff
1. Eine neue App ____ auf dem Server erstellen
-
-
+
+ generateRandomBase64()} />
@@ -32,9 +33,8 @@ Durch das Hosten auf einem eigenen Server kann mit bspw. `http-auth` der Zugriff
# remove default global domain
dokku domains:remove {{app}} {{app}}.gbsl.website
- dokku config:set --no-restart {{app}} API_URI={{API_URI}}
dokku config:set --no-restart {{app}} APP_URL=https://{{domain}}
- dokku config:set --no-restart {{app}} BACKEND_URL={{BACKEND_URL}}
+ dokku config:set --no-restart {{app}} BETTER_AUTH_URL={{BETTER_AUTH_URL}}
dokku config:set --no-restart {{app}} CLIENT_ID={{CLIENT_ID}}
dokku config:set --no-restart {{app}} TENANT_ID={{TENANT_ID}}
```
@@ -42,9 +42,8 @@ Durch das Hosten auf einem eigenen Server kann mit bspw. `http-auth` der Zugriff
:::details[Alternativ: direkt über `/home/dokku/{{app}}/ENV`]
```bash title="/home/dokku/{{app}}/ENV"
- API_URI="{{API_URI}}"
APP_URL="https://{{domain}}"
- BACKEND_URL="{{BACKEND_URL}}"
+ BETTER_AUTH_URL="{{BETTER_AUTH_URL}}"
CLIENT_ID="{{CLIENT_ID}}"
TENANT_ID="{{TENANT_ID}}"
NGINX_ROOT="build"
diff --git a/docs/tdev/app-architecture/api-deploy/secureToken.ts b/docs/tdev/app-architecture/helpers/secureToken.ts
similarity index 100%
rename from docs/tdev/app-architecture/api-deploy/secureToken.ts
rename to docs/tdev/app-architecture/helpers/secureToken.ts
diff --git a/docs/tdev/app-architecture/remark-plugins/code-as-attribute/index.mdx b/docs/tdev/app-architecture/remark-plugins/code-as-attribute/index.mdx
new file mode 100644
index 00000000..403915db
--- /dev/null
+++ b/docs/tdev/app-architecture/remark-plugins/code-as-attribute/index.mdx
@@ -0,0 +1,149 @@
+---
+page_id: a923c804-819a-4683-b284-001c285626bc
+tags: [remark]
+---
+
+# Code as Attribute
+
+Dieses Remark-Plugin ermöglicht es, Codeblöcke als Attribute an spezifizierte MDX-Komponenten zu übergeben. Dies ist besonders nützlich, wenn Codeblöcke als MD-Codeblock formatiert werden sollen, aber der Code als Inhalt an eine Komponente übergeben werden muss.
+
+Wird bspw. eingesetzt für:
+- [SVG-Editor](../../../gallery/persistable-documents/svg-editor/index.mdx)
+- [Netpbm-Editor](../../../gallery/persistable-documents/netpbm-editor/index.mdx)
+- [HTML-Editor](../../../gallery/persistable-documents/html-editor/index.mdx)
+
+:::flex{minWidth=250px}
+#### Vorher
+````md
+# Remark Code as Attribute
+
+
+```html name="index.html"
+
Foo Bar
+```
+
+````
+::br
+#### Nachher
+```md
+
+```
+:::
+
+## Optionen
+
+### `codeAttributesName`
+
+Wird `codeAttributesName` angegeben, so werden die Attribute `lang` und `meta` des Codeblocks zusätzlich als Objekt mit diesem Namen übergeben.
+
+```ts title="Komponenten-Konfiguration"
+{
+ name: 'HtmlIDE',
+ // highlight-start
+ attributeName: 'code',
+ codeAttributesName: 'codeAttributes'
+ // highlight-end
+}
+```
+
+:::flex{minWidth=250px}
+#### Vorher
+````md
+# Remark Code as Attribute
+
+
+```html name=index.html
+
Foo Bar
+```
+
+````
+::br
+#### Nachher
+```md
+
+```
+:::
+
+### `processMultiple`
+Ist `processMultiple` gesetzt, so werden alle aufeinanderfolgenden Codeblöcke als Array von Objekten an die Komponente übergeben, wobei der CodeBlock im Feld `code` zu finden ist. Jedes Objekt enthält den Code und ggf. die Attribute `lang` und `meta`.
+
+```ts title="Komponenten-Konfiguration"
+{
+ name: 'HtmlIDE',
+ // highlight-start
+ attributeName: 'files',
+ processMultiple: true
+ // highlight-end
+}
+```
+
+:::flex{minWidth=250px}
+#### Vorher
+````md
+# Remark Code as Attribute
+
+
+```html name=foo.html
+