local html = import 'html.libsonnet'; local jekyll = import 'jekyll.libsonnet'; local content = import 'stdlib-content.jsonnet'; local h1 = html.h1, p = html.p; local manifestJsonSingleLine(val) = std.strReplace(std.manifestJsonEx(val, ''), '\n', ' '); local exampleDoc(ex) = local exRep = if std.isString(ex) then ex else html.spaceless([html.code({}, ex.input), ' yields ', html.code({}, manifestJsonSingleLine(ex.output))]) ; html.p({}, html.spaceless(['Example: ', exRep, '.'])) ; local hgroup(body) = html.div({ class: 'hgroup' }, body); local hgroup_inline(body) = html.div({ class: 'hgroup-inline' }, [body, '
']); local panel(body) = html.div({ class: 'panel' }, body); local in_panel(body) = hgroup(hgroup_inline(panel(body))); local fieldParams(f) = if std.objectHas(f, 'params') then '(' + std.join(', ', f.params) + ')' else '' ; local fieldDescription(f) = if std.isString(f.description) then html.p({}, f.description) else f.description ; local fieldDoc(f, prefix) = [ in_panel(html.h4({ id: f.name }, prefix + '.' + f.name + fieldParams(f))), in_panel([ if std.objectHas(f, 'availableSince') then ( html.p( {}, html.em( {}, if f.availableSince == 'upcoming' then 'Available in upcoming release.' else 'Available since version ' + f.availableSince + '.' ) ) ), fieldDescription(f), if std.objectHas(f, 'examples') then [ exampleDoc(ex) for ex in f.examples ] else [], ]), '', ]; local group(group_spec, prefix) = [ in_panel(html.h3({ id: group_spec.id }, group_spec.name)), if std.objectHas(group_spec, 'intro') then in_panel(group_spec.intro), '', [fieldDoc(f, prefix) for f in group_spec.fields], '', ]; local stdlibPage = [ in_panel(html.h1({id: 'standard_library'}, 'Standard Library')), '', in_panel(content.intro), '', [group(g, content.prefix) for g in content.groups], ]; local stdlibFrontMatter = { layout: 'default', title: 'Standard Library', }; jekyll.renderWithFrontMatter(stdlibFrontMatter, stdlibPage)