diff --git a/admin/pages/DocsBrowser.svelte b/admin/pages/DocsBrowser.svelte index ab9c321..58f6f36 100644 --- a/admin/pages/DocsBrowser.svelte +++ b/admin/pages/DocsBrowser.svelte @@ -1,11 +1,8 @@ @@ -151,19 +167,34 @@ + {#if docs_data}

{ url }

{#if docs_data.comment} {@html docs_data.comment} {/if} -
+ + + {#each docs_data.exports as exp} + {#if exp.isa == "class"} + jump(exp.slug) }>{ exp.name } + + {#each exp.methods as member} + jump(member.slug) }>.{ member.name } + {/each} + {:else} + jump(exp.slug) }>{ exp.name } + {/if} + {/each} + + {#each docs_data.exports as exp} {#if exp.isa === "class"} -

class { exp.name }

+

jump_top() } id={ exp.slug }>class { exp.name }

@@ -176,7 +207,8 @@ {#each exp.methods as member} -

.{member.name}{ type_to_syntax[member.isa] || "" }

+

jump(exp.slug) }>.{member.name}{ type_to_syntax[member.isa] || "" } +

{docs_data.source}:{ member.line_start } { member.isa } of { exp.name } @@ -198,15 +230,17 @@ {:else} -

{exp.name}{ type_to_syntax[exp.isa] || "" }

+

jump_top() } + id={ exp.slug }>{exp.name}{ type_to_syntax[exp.isa] || "" } +

{docs_data.source}:{ exp.line_start } { exp.isa } {#if exp.static}static{/if} {#if exp.async}async{/if} {#if exp.generator}generator{/if} - -
+
+
{#if exp.comment} diff --git a/commands/codedoc.js b/commands/codedoc.js index f0807e6..05a1c5e 100644 --- a/commands/codedoc.js +++ b/commands/codedoc.js @@ -5,6 +5,7 @@ import logging from '../lib/logging.js'; import { mkdir, mkdir_to, glob } from "../lib/builderator.js"; import { create_renderer } from "../lib/docgen.js"; import path from "path"; +import slugify from "slugify"; import template from "lodash/template.js"; import * as acorn from "acorn"; import * as acorn_walk from "acorn-walk"; @@ -27,6 +28,8 @@ export const required = [ const RENDERER = create_renderer(); +const slug = (instring) => slugify(instring, { lower: true, strict: true, trim: true}); + /* Strips 1 leading space from the comments, or the \s\* combinations in traditional documentation comments. @@ -63,6 +66,7 @@ class ParseWalker { handle_class(root) { const new_class = { isa: "class", + slug: slug(root.declaration.id.name), name: root.declaration.id.name, line_start: root.loc.start.line, methods: [], @@ -81,6 +85,7 @@ class ParseWalker { static: meth_node.static, async: meth_node.value.async, generator: meth_node.value.generator, + slug: slug(`${new_class.name}-${meth_node.key.name}`), name: meth_node.key.name, line_start: meth_node.loc.start.line, range: [meth_node.start, meth_node.value.body.start], @@ -124,6 +129,7 @@ class ParseWalker { add_export(id, exp) { exp.name = id.name; + exp.slug = exp.slug ? exp.slug : slug(id.name); exp.line_start = id.loc.start.line; exp.comment = this.find_comment(exp.line_start); exp.code = this.slice_code(exp.range);