diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index c2658d7..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules/
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index f23b25f..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM node:18.0-slim
-COPY index.js package.json yarn.lock ./
-RUN yarn
-CMD [ "node", "index.js" ]
diff --git a/README.md b/README.md
index c033223..461ef4d 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,20 @@
# WikiJs Metabot
Ein Skript was die Page-Listings auf [https://wiki.ctdo.de](https://wiki.ctdo.de)
-automatisch aktuell hält
+automatisch befüllt
## Verwendung
-Um auf einer Wiki-Seite ein Page-Listing hinzuzufügen muss der Seite das `metapage`-Tag hinzugefügt
-werden und an der gewünschten Stelle ein Kommentar folgender Form eingefügt werden:
+Um auf einer Wiki-Seite ein Page-Listing hinzuzufügen muss in den Metadaten der Seite der Inhalt von
+`metapage.js.html` als Skript gesetzt werden.
+Dann kann an der gewünschten Stelle ein HTML-Element folgender Form eingefügt werden:
-```text
-
+```html
+
```
-Dabei muss `QUERY` eine Parameterlist für die `PageQuery::list`-Methode der WikiJs-GraphQL-API sein.
-Folgende Parameter werden unterstützt:
+Dabei muss `QUERY` eine Parameterliste für die `PageQuery::list`-Methode der WikiJs-GraphQL-API
+sein. Folgende Parameter werden unterstützt:
```text
limit: Int
@@ -29,57 +30,33 @@ authorId: Int
Liste aller Seiten die mit den Tags `top` und `new` versehen sind:
-```text
-
+```html
+
```
Liste der 10 zuletzt bearbeiteten Seiten:
-```text
-
+```html
+
```
### Details
- Mehrere Parameter müssen mit einem Komma getrennt werden
- Mehrere Tags im `tags`-Parameter müssen ebenfalls mit Komma getrennt werden
-- Parameter vom Typ `String` müssen in doppelte Anführungszeichen `"` eingeschlossen werden
+- Parameter vom Typ `String` müssen in einfache Anführungszeichen `'` eingeschlossen werden
- Parameter vom Typ `Int` und vom Typ `Enum` müssen ohne Anführungszeichen angegeben werden
## Features und Einschränkungen
-Zur Rekursionsvermeidung können leider die mit `metapage` getaggten Seiten nicht selbst in den
-Page-Listings auftauchen.
-Eine Seite welche die zuletzt aktualisierten Seiten enthält, kann also nur Seiten enthalten welche
-nicht mit `metapage` getaggt sind.
-
Seiten deren Pfad mit einem Unterstrich `_` beginnt werden als versteckt interpretiert und nicht in
Page-Listings angezeigt.
Das wird beispielsweise auf der Topictreff-Seite verwendet damit das Topic-Template nicht unter den
neuen Topics aufgelistet wird.
Bei gesetzten Limits kommt es vor, dass weniger Seiten als angegeben aufgelistet werden.
-Das liegt daran, dass das Filtern zur Rekursionsvermeidung und zum verstecken von Seiten erst nach
-dem Ausführen der GraphQL-Query passiert.
-Außerdem scheint auch das WikiJs einen ähnlichen Bug zu haben wodurch manche Seiten nicht in dem
-Ergebnis zurückgegeben aber trotzdem gezählt werden.
-
-## Ausführen des Bots
-
-Damit der Bot Seiten bearbeiten darf muss die Umgebungsvariable `CTDO_WIKIJS_API_KEY` auf einen
-gültigen Api-Key gesetzt sein.
-Api-Keys für das WikiJs können hier generiert werden: [https://wiki.ctdo.de/a/api](https://wiki.ctdo.de/a/api).
-
-### Docker commands
-
-Docker Container für den Bot bauen:
-
-```sh
-docker build -t wikijs-metabot .
-```
-
-Docker container ausführen:
-
-```sh
-docker run -it -e CTDO_WIKIJS_API_KEY wikijs-metabot
-```
+Das scheint ein Bug im WikiJs zu sein wodurch manche Seiten nicht in dem Ergebnis zurückgegeben aber
+trotzdem gezählt werden.
diff --git a/index.js b/index.js
deleted file mode 100644
index ed310e1..0000000
--- a/index.js
+++ /dev/null
@@ -1,138 +0,0 @@
-import WebSocket from 'ws';
-
-process.on('SIGINT', () => process.exit(0));
-
-const apiKey = process.env['CTDO_WIKIJS_API_KEY'];
-
-async function graphql(query) {
- const res = await fetch('https://wiki.ctdo.de/graphql', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${apiKey}`,
- },
- body: JSON.stringify({ query }),
- });
- return await res.json();
-}
-
-function graphqlSubscribe(query, callback) {
- const ws = new WebSocket(
- 'wss://wiki.ctdo.de/graphql-subscriptions',
- 'graphql-ws'
- );
- ws.onmessage = (event) => callback(JSON.parse(event.data));
- ws.onopen = () => {
- ws.send(JSON.stringify({ type: 'connection_init' }));
- ws.send(
- JSON.stringify({
- id: '1',
- type: 'start',
- payload: { query: `subscription ${query}` },
- })
- );
- };
-}
-
-async function update() {
- const pageIds = (
- await graphql('query { pages { list(tags: ["metapage"]) { id } } }')
- ).data.pages.list.map((page) => page.id);
- console.log('checking metapages', { pageIds });
- pageIds.forEach((pageId) => updatePage(pageId));
-}
-
-async function updatePage(pageId) {
- console.log('checking page', { pageId });
-
- const page = (
- await graphql(`query { pages { single(id: ${pageId}) {
- id
- content
- description
- editor
- isPrivate
- isPublished
- locale
- path
- publishEndDate
- publishStartDate
- scriptCss
- scriptJs
- tags { tag }
- title
- } } }`)
- ).data.pages.single;
- page.tags = page.tags.map((tag) => tag.tag);
-
- let contentLines = page.content.split('\n');
- const pagelistConfigs = contentLines.filter((line) =>
- line.match(/^\s*\s*$/)
- );
-
- for (const pagelistConfig of pagelistConfigs) {
- await updatePagelist(pagelistConfig, contentLines);
- }
-
- const updatedContent = contentLines.join('\n');
-
- if (page.content !== updatedContent) {
- page.content = updatedContent;
- console.log('updating page');
- console.log({ page });
- const mutation = Object.entries(page)
- .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
- .join(', ');
- const result = await graphql(
- `mutation { pages { update(${mutation}) { responseResult { succeeded, message, errorCode } } } }`
- );
- console.log({ result: JSON.stringify(result) });
- }
-}
-
-async function updatePagelist(pagelistConfig, contentLines) {
- const query = pagelistConfig
- .replace(/^\s*\s*$/, '');
-
- const result = (
- await graphql(`query { pages { list(${query}) { path, title, tags } }}`)
- ).data.pages.list
- .filter((page) => !page.path.includes('/_'))
- .filter((page) => !page.tags.includes('metapage'))
- .map((page) => `- [${page.title}](/${page.path})`);
-
- console.log({ pagelistConfig, query, result });
-
- const startIndex = contentLines.findIndex((line) => line == pagelistConfig);
- let endIndex = startIndex + 1;
- while (
- endIndex < contentLines.length &&
- contentLines[endIndex].startsWith('- ')
- ) {
- endIndex++;
- }
- contentLines.splice(
- startIndex,
- endIndex - startIndex,
- ``,
- ...result
- );
-}
-
-async function main() {
- await update();
-
- graphqlSubscribe('{ loggingLiveTrail { output } }', async (message) => {
- if (
- message.type === 'data' &&
- message.payload.data.loggingLiveTrail.output.includes(
- 'Committing updated file'
- )
- ) {
- await update();
- }
- });
-}
-
-main();
diff --git a/metapage.js.html b/metapage.js.html
new file mode 100644
index 0000000..b56e770
--- /dev/null
+++ b/metapage.js.html
@@ -0,0 +1,54 @@
+
diff --git a/package.json b/package.json
deleted file mode 100644
index 03d82b8..0000000
--- a/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "wikijs-metabot",
- "version": "1.0.0",
- "description": "",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "",
- "license": "AGPL-3.0-or-later",
- "dependencies": {
- "ws": "^8.9.0"
- },
- "type": "module"
-}
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 61bd46b..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,8 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-ws@^8.9.0:
- version "8.9.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e"
- integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==