forked from cory/tildefriends
Forgot this file.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4635 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
461e7b7d5a
commit
edabd7735c
71
apps/wiki/handler.js
Normal file
71
apps/wiki/handler.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import * as utils from './utils.js';
|
||||||
|
import * as commonmark from './commonmark.min.js';
|
||||||
|
|
||||||
|
function markdown(md) {
|
||||||
|
var reader = new commonmark.Parser({safe: true});
|
||||||
|
var writer = new commonmark.HtmlRenderer();
|
||||||
|
var parsed = reader.parse(md || '');
|
||||||
|
let walker = parsed.walker();
|
||||||
|
let event;
|
||||||
|
while ((event = walker.next())) {
|
||||||
|
let node = event.node;
|
||||||
|
if (event.entering) {
|
||||||
|
if (node.type === 'link') {
|
||||||
|
if (node.destination.indexOf(':') == -1 &&
|
||||||
|
node.destination.indexOf('/') == -1) {
|
||||||
|
node.destination = `#${this.wiki?.name}/${node.destination}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return writer.render(parsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
let slash = request.path.indexOf('/');
|
||||||
|
if (slash != -1) {
|
||||||
|
let wiki_name = request.path.substring(0, slash);
|
||||||
|
let wiki_doc_name = request.path.substring(slash + 1);
|
||||||
|
|
||||||
|
let ids = Object.keys(await ssb.following(await ssb.getOwnerIdentities(), 1));
|
||||||
|
let [max_row_id, wikis] = await utils.collection(ids, 'wiki', null, -1, {});
|
||||||
|
let wiki;
|
||||||
|
for (let w of Object.values(wikis)) {
|
||||||
|
if (w.name === wiki_name && !w.tombstone) {
|
||||||
|
wiki = w;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let wiki_doc;
|
||||||
|
if (wiki) {
|
||||||
|
let [max_row_id, wiki_docs] = await utils.collection(ids, 'wiki-doc', wiki.id, -1, {});
|
||||||
|
for (let w of Object.values(wiki_docs)) {
|
||||||
|
if (w.name === wiki_doc_name && !w.tombstone) {
|
||||||
|
wiki_doc = w;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let md;
|
||||||
|
if (wiki_doc?.blob) {
|
||||||
|
md = utf8Decode(await ssb.blobGet(wiki_doc.blob));
|
||||||
|
}
|
||||||
|
|
||||||
|
await respond({
|
||||||
|
data: `
|
||||||
|
<h1>${wiki_name}: ${wiki_doc_name}</h1>
|
||||||
|
<pre>${markdown(md)}</pre>
|
||||||
|
`,
|
||||||
|
content_type: 'text/html',
|
||||||
|
status_code: 200,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await respond({
|
||||||
|
data: '<h1>File not found</h1>',
|
||||||
|
content_type: 'text/html',
|
||||||
|
status_code: 404,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
main();
|
Loading…
Reference in New Issue
Block a user