Created Dev-portal pages (#1219)

* Created Dev-portal pages

* changed structure of documents for dev-portal section, renamed dev-portal to docs, related template changes

* keeping learn section for future usage

* update dev-portal and documents

* added feedback and breadcrumbs components

* used the docs-side menu partial on documentation pages, and added active state to the docs-header links

* search console on docs

* small fixes

* assigned partitions, css fix

* fix links on the core page

* update links for cloud

* update links for build

* Reference -> API Reference

* [WIP] Dev portal light theme (#1250)

* light theme - docs side menu

* background fix

* wip: updating layout

* layout update

* light theme

* card titles with a link

* upd page-search package

* simplified header

* fixes

* TOC scroll spy (#1259)

* scroll spy on table of contents

* packages versions fix

* custom scroll spy for toc

* make spy work again

---------

Co-authored-by: generall <andrey@vasnetsov.com>

* limit toc depth to 3

* thin scrollbar

* No dev template (#1266)

* divided the docs template into smaller partials, increased reusability

* removed docs section, moved all to the documentation

* review fixes

* review fixes

---------

Co-authored-by: generall <andrey@vasnetsov.com>

* side panel more compact

* toc margin bottom fix

* Refactoring and renaming (#1277)

* renamed and moved partials, fixed link

* refactoring: docs-card

* fix

* fix urls

* disable scrollbar on table of content

* added scrollbar colors for light theme (#1280)

* fix language

* Dev portal fixes (#1285)

* cards fixes

* moved files, fixed paddings

* fix for my fix

* external header links

* fix

---------

Co-authored-by: trean <trean.mi@gmail.com>
Co-authored-by: Andrey Vasnetsov <andrey@vasnetsov.com>
Co-authored-by: davidmyriel <davidmyriel@gmail.com>
This commit is contained in:
nastyapash
2024-11-14 18:59:28 +01:00
committed by GitHub
co-authored by generall trean davidmyriel
parent 9704ddb36b
commit aa1acf0acb
105 changed files with 1929 additions and 179 deletions
@@ -6,7 +6,7 @@
<link href="{{ $splideCss.RelPermalink }}" rel="stylesheet" integrity="{{ $splideCss.Data.Integrity }}" />
{{ end }}
{{ if in (slice "blog" "documentation") .Section }}
{{ if in (slice "blog" "docs" "documentation") .Section }}
{{ $pageSearchCss := resources.Get "css/search/search.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
<link href="{{ $pageSearchCss.RelPermalink }}" rel="stylesheet" integrity="{{ $pageSearchCss.Data.Integrity }}" />
{{ end }}
@@ -21,7 +21,7 @@
/>
{{ end }}
{{ if eq .Section "documentation" }}
{{ if in (slice "docs" "documentation") .Section }}
{{ $documentationCss := resources.Get "css/documentation.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
<link
href="{{ $documentationCss.RelPermalink }}"
@@ -35,7 +35,7 @@
<link href="{{ $benchmarksCss.RelPermalink }}" rel="stylesheet" integrity="{{ $benchmarksCss.Data.Integrity }}" />
{{ end }}
{{ if not (in (slice "hybrid-cloud" "documentation" "benchmarks") .Section) }}
{{ if not (in (slice "hybrid-cloud" "docs" "documentation" "benchmarks") .Section) }}
{{ $mainCss := resources.Get "css/main.scss" | toCSS $opts | minify | resources.Fingerprint "sha512" }}
<link href="{{ $mainCss.RelPermalink }}" rel="stylesheet" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" />
{{ end }}
@@ -1,5 +0,0 @@
<div class="col-12 col-xl-8">
<article class="documentation-article">
{{ partial "article-content.html" . }}
</article>
</div>
@@ -1,9 +0,0 @@
<section class="documentation documentation_theme-light">
<div class="documentation__container">
<div class="row gx-4">
{{ partial "docs-menu" . }}
{{ partial "documentation-article" . }}
{{ partial "table-of-contents" . }}
</div>
</div>
</section>
@@ -0,0 +1,13 @@
<section class="docs-core__hero">
<h1 class="docs-core__hero-title">{{ .title }}</h1>
<p class="docs-core__hero-description">{{ .description }}</p>
<p class="docs-core__hero-link">{{ .linkDescription | safeHTML }}</p>
<div class="docs-core__hero-buttons">
<a href="{{ .cloudButton.url }}" {{ if strings.HasPrefix .cloudButton.url "https://" }}target="_blank"{{ end }} class="button button_contained button_sm">
{{ .cloudButton.text }}
</a>
<a href="{{ .localButton.url }}" {{ if strings.HasPrefix .localButton.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm">
{{ .localButton.text }}
</a>
</div>
</section>
@@ -0,0 +1,10 @@
<section class="docs-cloud__hero docs__hero">
<div class="docs__hero-content">
<h1 class="docs__hero-title">{{ .title }}</h1>
<a href="{{ .startedButton.url }}" {{ if strings.HasPrefix .startedButton.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm docs__hero-button">
{{ .startedButton.text }}
</a>
</div>
<img class="docs__hero-image" src="{{ .image.src }}" alt="{{ .image.alt }}" />
<div class="docs-core__overlay"></div>
</section>
@@ -0,0 +1,10 @@
<section class="docs-build__hero docs__hero">
<div class="docs__hero-content">
<h1 class="docs__hero-title">{{ .title }}</h1>
<a href="{{ .startedButton.url }}" {{ if strings.HasPrefix .startedButton.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm docs__hero-button">
{{ .startedButton.text }}
</a>
</div>
<img class="docs__hero-image" src="{{ .image.src }}" alt="{{ .image.alt }}" />
<div class="docs-core__overlay"></div>
</section>
@@ -0,0 +1,19 @@
<section class="docs-core__developing">
<h2>{{ .developingTitle }}</h2>
<p>{{ .developingDescription | safeHTML }}</p>
<div class="docs-core__developing-block">
<div class="row align-items-center">
<div class="docs-core__developing-block-text col-12 col-lg-7">
<h3 class="docs-core__developing-bloc-title">{{ .developingBlock.title }}</h3>
<a href="{{ .developingBlock.button.url }}" {{ if strings.HasPrefix .developingBlock.url "https://" }}target="_blank"{{ end }} class="button button_outlined button_sm" target="_blank">
{{ .developingBlock.button.text }}
</a>
</div>
<div class="docs-core__developing-block-image col-12 col-lg-5">
<img src="{{ .developingBlock.image.src }}" alt="{{ .image.alt }}" />
</div>
<div class="docs-core__overlay"></div>
</div>
</div>
</section>
@@ -0,0 +1,13 @@
<ul class="docs-breadcrumbs">
{{ $rellink := "" }}
{{ $paths := (split .RelPermalink "/") }}
{{ $len := sub (len $paths) 2 }}
{{ range first $len $paths }}
{{ if gt (len . ) 0 }}
{{ $rellink = printf "%s/%s" $rellink . }}
<li class="docs-breadcrumbs__crumb"><a href="{{ $rellink }}/">{{ humanize . }}</a></li>
<li class="docs-breadcrumbs__crumb-separator"></li>
{{ end }}
{{ end }}
<li class="docs-breadcrumbs__crumb">{{ .Params.title | safeHTML }}</li>
</ul>
@@ -0,0 +1,36 @@
{{ $cardsPerRow := .cardsPerRow }}
{{ $cardsPerRow = $cardsPerRow | int }}
{{ $cardsPerRow = div 12 $cardsPerRow }}
{{ $cardsPerRow = print $cardsPerRow }}
{{ $cardsPerRow = printf "col-12 col-lg-%s" $cardsPerRow }}
{{ $cardsPerRow = print $cardsPerRow }}
<div class="{{- $cardsPerRow -}}">
<a
href="{{ .card.link.url }}"
{{ if strings.HasPrefix .card.link.url "https://" }}target="_blank"{{ end }}
class="docs-card"
>
{{ if or (.card.tag) (.card.icon) }}
<div class="docs-card__tag {{ if .card.tagColor }}docs-card__tag_{{- .card.tagColor -}}{{ end }}">
{{ if .card.icon }}
<img class="docs-card__icon" src="{{ .card.icon.src }}" alt="{{ .card.icon.alt }}" />
{{ end }}
{{ if .card.tag }}
<span>{{ .card.tag }}</span>
{{ end }}
</div>
{{ end }}
{{ if .card.image }}
<img class="docs-card__image" src="{{ .card.image.src }}" alt="{{ .card.image.alt }}" />
{{ end }}
<h3 class="docs-card__title">{{ .card.title }}</h3>
<p class="docs-card__description">{{ .card.description }}</p>
{{ if .card.link.text }}
<span class="docs-card__link link link_sm">{{ .card.link.text }}</span>
{{ else }}
<div class="docs-card__arrow"></div>
{{ end }}
</a>
</div>
@@ -0,0 +1,39 @@
<!--documentation content layout, aka middle part of the documentation page where the actual content is displayed-->
<section class="docs documentation">
<div class="documentation__container">
<div class="d-flex flex-column flex-xl-row">
{{ $partition := partial "get-partition.html" (dict "page" .) }}
{{ partial "documentation/sidebar-menu" (dict "context" . "partition" $partition) }}
<div class="documentation__content">
<!-- todo: update this and styles to support both types of content on the same page-->
<div class="documentation__content-wrapper">
{{ if .Params.content }}
<div class="documentation__article-wrapper">
<div class="docs-core documentation-article">
{{ partial "documentation/custom-content.html" . }}
</div>
</div>
{{ else }}
<div class="documentation__article-wrapper">
{{ if not (eq .Params.breadcrumb false) }}
{{ partial "documentation/breadcrumbs" . }}
{{ end }}
<article class="documentation-article">
{{ partial "article-content.html" . }}
</article>
{{ partial "documentation/feedback.html" . }}
</div>
{{ partial "table-of-contents" . }}
{{ end }}
{{ partial "documentation/footer.html" . }}
</div>
</div>
</div>
</div>
</section>
@@ -0,0 +1,6 @@
<!--template for displaying `content` list from front matter-->
{{ if .Params.content }}
{{ range .Params.content }}
{{ partial .partial . }}
{{ end }}
{{ end }}
@@ -0,0 +1,36 @@
<section class="dev-portal-articles-posts">
<div class="dev-portal-articles-posts__articles row gx-3 gy-5 gy-lg-4">
{{ $all := ($.Site.GetPage "articles" .Section).Pages.ByPublishDate.Reverse }}
{{ $paginator := .Paginate $all 14 }}
{{ range $paginator.Pages }}
{{ .Scratch.Set "scope" "list" }}
{{ $link := .Permalink }}
{{ if .Params.external_link }}
{{ $link = .Params.external_link }}
{{ end }}
<article class="col-12 col-lg-6 col-xl-4 post">
<a class="post-link" href="{{ .RelPermalink }}">
<div class="post-preview">
<img src="{{ .Params.preview_dir }}/preview.jpg" alt="Preview" />
</div>
<h6 class="post-title">{{ .Params.title }}</h6>
<p class="post-description">{{ .Params.description }}</p>
<div class="post-about">
<p>{{ .Params.author }}</p>
<span>&middot;</span>
<p>{{ time.Format "January 02, 2006" .Date }}</p>
</div>
</a>
</article>
{{ end }}
</div>
<div class="row">
<div class="qdrant-articles-posts__pagination col-12">
{{ if gt $paginator.TotalPages 1 }}
{{ partial "pagination" $paginator }}
{{ end }}
</div>
</div>
</section>
@@ -0,0 +1,15 @@
{{ with (.Site.GetPage "/headless/docs-feedback") }}
<section class="docs-feedback">
<h5 class="docs-feedback__title">{{ .Params.title }}</h5>
<div class="docs-feedback__buttons">
<a href="{{ .Params.positiveButton.url }}" class="button button_outlined button_sm docs-feedback__button">
<img src="{{ .Params.positiveButton.icon.src }}" alt="{{ .Params.positiveButton.icon.alt }}">
{{ .Params.positiveButton.text }}
</a>
<a href="{{ .Params.negativeButton.url }}" class="button button_outlined button_sm docs-feedback__button">
<img src="{{ .Params.negativeButton.icon.src }}" alt="{{ .Params.negativeButton.icon.alt }}">
{{ .Params.negativeButton.text }}
</a>
</div>
</section>
{{end }}
@@ -0,0 +1,21 @@
{{ with (.Site.GetPage "/headless/footer") }}
<footer class="docs-footer w-100 py-0 pt-0 pb-4 pb-xl-0">
<div class="docs-footer__cta">
<h4>{{ .Params.question }}</h4>
<a href="{{ .Params.questionButton.url }}" class="button button_outlined button_sm" target="_blank">
{{ .Params.questionButton.text }}
</a>
</div>
<div class="docs-footer__bottom">
<div class="docs-footer__bottom-content">
<span>{{ .Params.copyright }}</span>
<div class="footer__bottom-links">
<a href="{{ .Params.termsLink.url }}">{{ .Params.termsLink.text }}</a>
<a href="{{ .Params.privacyLink.url }}">{{ .Params.privacyLink.text }}</a>
<a href="{{ .Params.impressumLink.url }}">{{ .Params.impressumLink.text }}</a>
</div>
</div>
</div>
</footer>
{{ end }}
@@ -0,0 +1,145 @@
<header class="docs-header">
{{ $partition := partial "get-partition.html" (dict "page" .) }}
{{ with (.Site.GetPage "/headless/docs-header") }}
<div class="main-menu z-5">
<a href="{{ .Params.logoLink }}">
{{ partial "logo.html" . }}
</a>
<div class="d-flex d-xl-none justify-content-end align-items-center gap-4">
<div class="d-block d-xl-none">
{{ partial "theme-switch" . }}
</div>
<button type="button" class="main-menu__trigger">{{ partial "svg" "hamburger-menu-white.svg" }}</button>
</div>
<ul class="main-menu__links">
{{ range $index, $element := .Params.menuItems }}
<li class="main-menu__item">
{{ if .url }}
<a
class="menu-link {{- if eq (lower .name) $partition }}active{{- end -}}"
href="{{ .url }}"
{{ if (eq $index 3) }}target="_blank"{{ end }}
>
{{ .name }}
</a>
{{ else }}
<span>{{ .name }}</span>
{{ end }}
{{ if .subMenuItems }}
<ul class="main-menu__submenu">
{{ if .url }}
<li class="main-menu__section-link">
<a class="link link_neutral link_sm" href="{{ .url }}">
{{ .name }}
</a>
</li>
{{ end }}
{{ range .subMenuItems }}
<li class="main-menu__submenu-item">
<a
href="{{ .url }}"
{{ if strings.HasPrefix .url "http" }}target="_blank" rel="noopener noreferrer nofollow"{{ end }}
>
<img src="/img/menu/{{ .icon }}" draggable="false" />
<span>{{ .name }}</span>
</a>
</li>
{{ end }}
</ul>
{{ end }}
</li>
{{ end }}
</ul>
<div class="main-menu__buttons">
<div class="main-menu__buttons-input">
<button
class="qdr-search-input-btn q-input input_md input_light-bg"
type="button"
name="search"
data-target="#searchModal"
>
Search
</button>
</div>
{{ partial "theme-switch" . }}
<a data-metric-loc="nav" href="{{ .Params.logIn.url }}" class="menu-link mx-3" target="_blank"
>{{ .Params.logIn.text }}</a
>
<a
data-metric-loc="nav"
href="{{ .Params.startFree.url }}"
class="button button_contained button_sm"
target="_blank"
>
{{ .Params.startFree.text }}
</a>
</div>
</div>
<div class="menu-mobile">
<div class="menu-mobile__header">
{{ partial "logo.html" . }}
<button type="button" class="menu-mobile__close">{{ partial "svg" "close.svg" }}</button>
</div>
<ul class="menu-mobile__items">
{{ range .Params.menuItems }}
<li class="menu-mobile__item" data-path="{{ .id }}">
<div class="menu-mobile__item-content">
{{ if and (not .subMenuItems) .url }}
<a href="{{ .url }}">
{{ .name }}
</a>
{{ else }}
{{ .name }}
{{ end }}
{{ if .subMenuItems }}
<button type="button" class="menu-mobile__expand">{{ partial "svg" "arrow-sm-down.svg" }}</button>
{{ end }}
</div>
{{ if .subMenuItems }}
<ul class="menu-mobile__subitems">
{{ if .url }}
<li class="menu-mobile__section-link">
<a class="link link_neutral link_sm" href="{{ .url }}">
{{ .name }}
</a>
</li>
{{ end }}
{{ range .subMenuItems }}
<a href="{{ .url }}">
<li class="menu-mobile__subitem">
<span style="background-image: url(/img/menu/{{ .icon }})"> </span>
{{ .name }}
</li>
</a>
{{ end }}
</ul>
{{ end }}
</li>
{{ end }}
</ul>
<div class="menu-mobile__controls">
<a
data-metric-loc="mobile_nav"
href="{{ .Params.logIn.url }}"
class="button button_outlined button_lg menu-mobile__login"
target="_blank"
>
{{ .Params.logIn.text }}
</a>
<a
data-metric-loc="mobile_nav"
href="{{ .Params.startFree.url }}"
class="button button_contained button_lg"
target="_blank"
>
{{ .Params.startFree.text }}
</a>
</div>
</div>
{{ end }}
</header>
@@ -0,0 +1,25 @@
{{ $context := . }}
<section class="docs-core__data">
<div class="d-flex justify-content-between align-items-center flex-wrap column-gap-4 mb-5 mb-lg-3">
<div>
<h2>{{ .title }}</h2>
<p class="mb-3">{{ .description }}</p>
</div>
{{ if .button }}
<a
href="{{ .button.url }}"
{{ if strings.HasPrefix .button.url "https://" }}target="_blank"{{ end }}
class="button button_outlined button_sm"
>
{{ .button.text }}
</a>
{{ end }}
</div>
<div class="row g-4 g-lg-3">
{{ range $index, $element := .cards }}
{{ $cardsPerRow := $context.cardsPerRow | default 3 }}
{{ partial $context.cardsPartial (dict "card" $element "cardsPerRow" $cardsPerRow) }}
{{ end }}
</div>
</section>
@@ -1,32 +1,37 @@
{{ $currentNode := . }}
<div class="col-12 col-xl-2">
<div class="docs-menu">
<div id="sidebar-toggle" class="docs-menu__header">
<h2>Docs Menu</h2>
<button type="button" class="docs-menu__button">{{ partial "svg" "arrow-sm-down-white.svg" }}</button>
{{ $partition := .partition }}
{{ $currentNode := .context }}
<div class="docs-menu">
<div id="sidebar-toggle" class="docs-menu__header">
<h2>Docs Menu</h2>
<button type="button" class="docs-menu__button">{{ partial "svg" "arrow-sm-down-white.svg" }}</button>
</div>
<div id="sidebar" class="docs-menu__content">
<div class="docs-menu__input">
<button
class="qdr-search-input-btn q-input input_md input_light-bg"
type="button"
name="search"
data-target="#searchModal"
>
Search
</button>
</div>
<div id="sidebar" class="docs-menu__content">
<div class="docs-menu__input">
<button
class="qdr-search-input-btn q-input input_md input_light-bg"
type="button"
name="search"
data-target="#searchModal"
>
Search
</button>
</div>
{{ $subject := site.GetPage "documentation" }}
{{ $subject := site.GetPage "documentation" }}
<nav class="docs-menu__links">
{{ range $subject.Pages }}
<nav class="docs-menu__links">
{{ range $subject.Pages }}
{{ if and (eq .Params.partition $partition) (not .Params.hideInSidebar) }}
{{ if (eq .Params.type "delimiter") }}
<h3 class="docs-menu__links-title">{{ .Title }}</h3>
{{ else }}
{{ if and (.IsPage) (not .Params.hideInSidebar) }}
<div class="docs-menu__links-group {{ if eq .File.UniqueID $currentNode.File.UniqueID }}active{{ end }}">
<div
class="docs-menu__links-group {{ if eq .File.UniqueID $currentNode.File.UniqueID }}active{{ end }}
{{- if (eq .Params.type "external-link") }}external-link{{ end -}} "
>
<div class="docs-menu__links-group-heading">
<a
href="{{ if (eq .Params.type "external-link") }}
@@ -37,9 +42,6 @@
{{ if (eq .Params.type "external-link") }}target="_blank"{{ end }}
>
{{ .Title }}
{{ if (eq .Params.type "external-link") }}
{{ partial "svg" "external-link.svg" }}
{{ end }}
</a>
</div>
</div>
@@ -102,7 +104,7 @@
{{ end }}
{{ end }}
{{ end }}
</nav>
</div>
{{ end }}
</nav>
</div>
</div>
@@ -0,0 +1,8 @@
{{- $page := .page -}}
{{- $partition := $page.Params.partition -}}
{{- if not $partition -}}
{{- if $page.Parent -}}
{{- $partition = partial "get-partition.html" (dict "page" $page.Parent) -}}
{{- end -}}
{{- end -}}
{{- return $partition -}}
@@ -31,13 +31,13 @@
<script src="{{ $filterChartJs.RelPermalink }}"></script>
{{ end }}
{{ if eq .Section "documentation" }}
{{ if in (slice "docs" "documentation") .Section }}
{{ $documentationJs := resources.Get "/js/documentation.js" | js.Build | minify | resources.Fingerprint "sha512" }}
<script src="{{ $documentationJs.RelPermalink }}"></script>
{{ end }}
<!--Segment-->
{{ if .Site.Params.segmentWriteKey }}
{{ if and hugo.IsProduction .Site.Params.segmentWriteKey }}
{{ $segmentJs := resources.Get "js/segment-setup.js" | js.Build (dict "params" (dict "segmentWriteKey" .Site.Params.segmentWriteKey "gaMeasurementId" .Site.GoogleAnalytics)) | minify | resources.Fingerprint "sha512" }}
<script src="{{ $segmentJs.RelPermalink }}?v=eu"></script>
{{ end }}
@@ -63,17 +63,17 @@
</script>
{{ end }}
{{ if or (eq .Section "documentation") (and (not .IsPage) (eq .Section "blog")) }}
{{ if or (in (slice "docs" "documentation") .Section) (and (not .IsPage) (eq .Section "blog")) }}
{{ $pageSearchJs := resources.Get "/js/search/search.js" | js.Build | minify | resources.Fingerprint "sha512" }}
<script src="{{ $pageSearchJs.RelPermalink }}" type="module"></script>
{{ end }}
{{ if and .IsPage (in (slice "blog" "articles" "benchmarks" "documentation") .Section) }}
{{ if and .IsPage (in (slice "blog" "articles" "benchmarks" "docs" "documentation") .Section) }}
{{ $pageSearchScrollJs := resources.Get "/js/search/scroll.js" | js.Build | minify | resources.Fingerprint "sha512" }}
<script src="{{ $pageSearchScrollJs.RelPermalink }}"></script>
{{ end }}
{{ if in (slice "blog" "articles" "benchmarks" "documentation") .Section }}
{{ if in (slice "blog" "articles" "benchmarks" "docs" "documentation") .Section }}
<!--popper.js for bootstrap-->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
@@ -115,7 +115,7 @@
<script src="{{ $anchorJs.RelPermalink }}"></script>
{{ end }}
{{ if or (eq .Section "blog") (eq .Section "documentation") }}
{{ if or (eq .Section "blog") (eq .Section "docs") (eq .Section "documentation") }}
<script>
document.addEventListener('keydown', function (event) {
if ((event.metaKey || event.ctrlKey) && event.key === 'k') {
@@ -1,8 +1,7 @@
{{ if not .Params.hideTOC }}
<div class="col-12 col-xl-2">
{{ if gt (.TableOfContents | len) 34 }}
<div class="table-of-contents">
<h2 class="table-of-contents__title">{{ .Params.title }}</h2>
<p class="table-of-contents__head">On this page:</p>
{{ .TableOfContents }}
@@ -10,19 +9,17 @@
<ul class="table-of-contents__external-links">
<li class="table-of-contents__link">
<a href="{{ .Site.Params.githubDocPrefix }}{{ path.Clean .File.Path }}" target="_blank">
{{ partial "svg" "github-red.svg" }}
{{ partial "svg" "github.svg" }}
Edit on Github
</a>
</li>
<li class="table-of-contents__link">
<a href="{{ .Site.Params.githubIssueLink }}" target="_blank">
{{ partial "svg" "bug-red.svg" }}
{{ partial "svg" "bug.svg" }}
Create an issue
</a>
</li>
</ul>
{{ partial "feedback" . }}
</div>
{{ end }}
</div>
{{ end }}
{{ end }}