From b2b169ed1ec05c4ed137e320fddfaf891558eccd Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 19 Jul 2022 18:21:10 +0100 Subject: [PATCH] resolve-additional-types: generate an id for each returned type --- .../json-schema/resolve-additional-types.html | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/layouts/partials/json-schema/resolve-additional-types.html b/layouts/partials/json-schema/resolve-additional-types.html index f3a5413b..63a15bee 100644 --- a/layouts/partials/json-schema/resolve-additional-types.html +++ b/layouts/partials/json-schema/resolve-additional-types.html @@ -2,25 +2,33 @@ Finds and returns all nested objects, given a dict containing: * `schema`: a JSON schema object + * `anchor_base`: a prefix to add to the HTML anchors generated for each object. If nil, no anchors are generated. This template finds all nested objects inside `schema`. Assumes that "resolve-refs" and "resolve-allof" has already been called on the input schema. - It "cleans" each object by copying only the parts of the objects that - the renderer needs, and adds the result to an array, `additional_objects`. - - Finally it returns the array of all the objects it found. + Returns an array of all the objects found. For each object, the following properties are returned: + * title + * properties + * required + * enum + * anchor: a string suitable for using as an html anchor for this object (if `anchor_base` was set, and the object has a title) Note that the returned array may contain duplicate objects. */}} {{ $this_object := .schema }} +{{ $anchor_base := .anchor_base }} {{ $additional_objects := slice }} {{ if eq $this_object.type "object" }} + {{/* give this object an anchor, if it has a name */}} + {{ if (and $anchor_base $this_object.title) }} + {{ $this_object = merge $this_object (dict "anchor" (printf "%s_%s" $anchor_base (anchorize $this_object.title))) }} + {{ end }} {{/* Add the object we were passed into the $additional_objects array @@ -35,7 +43,7 @@ {{ $additional_objects = $additional_objects | append (partial "clean-object" $this_object.additionalProperties) }} {{ range $key, $property := $this_object.additionalProperties.properties }} - {{ $additional_objects = partial "get-additional-objects" (dict "this_object" $property "additional_objects" $additional_objects) }} + {{ $additional_objects = partial "get-additional-objects" (dict "this_object" $property "additional_objects" $additional_objects "anchor_base" $anchor_base) }} {{ end }} {{ end }} @@ -45,7 +53,7 @@ Add any nested objects referenced in this object's `properties` */}} {{ range $key, $property := $this_object.properties}} - {{ $additional_objects = partial "get-additional-objects" (dict "this_object" $property "additional_objects" $additional_objects) }} + {{ $additional_objects = partial "get-additional-objects" (dict "this_object" $property "additional_objects" $additional_objects "anchor_base" $anchor_base) }} {{ end }} {{ end }} @@ -56,10 +64,10 @@ */}} {{ if reflect.IsSlice $this_object.items}} {{ range $this_object.items }} - {{ $additional_objects = partial "get-additional-objects" (dict "this_object" . "additional_objects" $additional_objects) }} + {{ $additional_objects = partial "get-additional-objects" (dict "this_object" . "additional_objects" $additional_objects "anchor_base" $anchor_base) }} {{ end }} {{ else }} - {{ $additional_objects = partial "get-additional-objects" (dict "this_object" $this_object.items "additional_objects" $additional_objects) }} + {{ $additional_objects = partial "get-additional-objects" (dict "this_object" $this_object.items "additional_objects" $additional_objects "anchor_base" $anchor_base) }} {{ end }} {{ end }} @@ -77,7 +85,7 @@ */ {{ $this_object := partial "json-schema/resolve-allof" .this_object }} - {{ $more_objects := partial "json-schema/resolve-additional-types" (dict "schema" $this_object) }} + {{ $more_objects := partial "json-schema/resolve-additional-types" (dict "schema" $this_object "anchor_base" .anchor_base) }} {{/* As far as I know we don't have something like Array.concat(), so add them one at a time */}} @@ -93,5 +101,5 @@ but with (for example) different examples will be considered different. */}} {{ define "partials/clean-object" }} - {{ return (dict "title" .title "properties" .properties "required" .required "enum" .enum) }} + {{ return (dict "title" .title "properties" .properties "required" .required "enum" .enum "anchor" .anchor) }} {{ end }}