forked from cory/tildefriends
Cory McWilliams
0a6b842179
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4145 ed5197a5-7fde-0310-b194-c3ffbd925b24
48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
import * as linkify from './commonmark-linkify.js';
|
|
import * as hashtagify from './commonmark-hashtag.js';
|
|
|
|
export function markdown(md) {
|
|
var reader = new commonmark.Parser({safe: true});
|
|
var writer = new commonmark.HtmlRenderer();
|
|
var parsed = reader.parse(md || '');
|
|
parsed = linkify.transform(parsed);
|
|
parsed = hashtagify.transform(parsed);
|
|
var walker = parsed.walker();
|
|
var event, node;
|
|
while ((event = walker.next())) {
|
|
node = event.node;
|
|
if (event.entering) {
|
|
if (node.type == 'link') {
|
|
if (node.destination.startsWith('@') &&
|
|
node.destination.endsWith('.ed25519')) {
|
|
node.destination = '#' + node.destination;
|
|
} else if (node.destination.startsWith('%') &&
|
|
node.destination.endsWith('.sha256')) {
|
|
node.destination = '#' + node.destination;
|
|
} else if (node.destination.startsWith('&') &&
|
|
node.destination.endsWith('.sha256')) {
|
|
node.destination = '/' + node.destination + '/view';
|
|
}
|
|
} else if (node.type == 'image') {
|
|
if (node.destination.startsWith('&')) {
|
|
node.destination = '/' + node.destination + '/view';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return writer.render(parsed);
|
|
}
|
|
|
|
export function human_readable_size(bytes) {
|
|
let v = bytes;
|
|
let u = 'B';
|
|
for (let unit of ['kB', 'MB', 'GB']) {
|
|
if (v > 1024) {
|
|
v /= 1024;
|
|
u = unit;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
return `${Math.round(v * 10) / 10} ${u}`;
|
|
} |