This commit is contained in:
2025-12-05 09:15:15 +01:00
commit 8837c20d66
1752 changed files with 1123339 additions and 0 deletions

View File

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="{{ with site.LanguageCode }}{{ . }}{{ else }}en-US{{ end }}">
<head>
{{ partial "page-transition.html" . }}
{{- partial "head.html" . -}}
{{- partialCached "style.html" . -}}
</head>
<body>
{{- partialCached "preloader.html" . -}}
{{- partial "header.html" . -}}
{{- block "main" . }}{{- end }}
{{- partialCached "footer.html" . -}}
{{- partialCached "script.html" . -}}
</body>
</html>

View File

@@ -0,0 +1,17 @@
{{ define "main" }}
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-10 mx-auto">
<div class="py-5 px-4 px-lg-5 shadow rounded content">
<h1 class="mb-4 fw-bold">{{ .Title }}</h1>
<p>{{.Params.Description | markdownify}}</p>
<div class="mt-5">{{ .Content | markdownify }}</div>
</div>
</div>
</div>
</div>
</section>
{{ end }}

View File

@@ -0,0 +1,47 @@
{{ define "main" }}
<section class="section">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="p-4 p-sm-5 shadow rounded content">
<h2 class="section-title">{{ .Title }}</h2>
<form method="POST" action="{{ site.Params.contact_form_action }}">
<div class="row gy-4">
<div class="form-group col-md-6">
<label for="fname">{{ i18n "first_name" }}</label>
<input type="text" class="form-control text-dark" id="fname" name="fname" placeholder="Your First Name" required>
</div>
<div class="form-group col-md-6">
<label for="lname">{{ i18n "last_name" }}</label>
<input type="text" class="form-control text-dark" id="lname" name="lname" placeholder="Your Last Name">
</div>
<div class="form-group col-md-12">
<label for="email">{{ i18n "email" }}</label>
<input type="email" class="form-control text-dark" id="email" name="email" placeholder="Your Email Address" required>
</div>
<div class="form-group col-md-12">
<label for="reason">{{ i18n "contact_reason" }}</label>
<select class="form-select rounded-0 px-0" id="inputGroupSelect01">
<option selected disabled>Choose Your Reason</option>
<option value="business">Business</option>
<option value="ticket">Ticket</option>
<option value="project">Project</option>
</select>
</div>
<div class="form-group col-md-12">
<label for="message">{{ i18n "write_message" }}</label>
<textarea name="message" id="message" class="form-control text-dark" placeholder="Your Text here ..."></textarea>
</div>
<div class="col-md-12">
<button type="submit" class="btn btn-primary">{{ i18n "send" }}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
{{ end }}

View File

@@ -0,0 +1,26 @@
{{- /* Verzamel alle pagina's die je wilt doorzoeken */ -}}
{{- $pages := where .Site.Pages "Type" "!=" "json" -}}
{{- $pages = where $pages "Params.ignoreSearch" "!=" true -}}
{{- /* Bouw een slice met objecten voor de search-JSON */ -}}
{{- $items := slice -}}
{{- range $e := $pages -}}
{{- $section := "" -}}
{{- with $e.Section }}{{ $section = . | humanize }}{{ end -}}
{{- $title := cond (isset $e.Params "bannertext") $e.Params.bannertext $e.Title -}}
{{- $obj := dict
"section" $section
"url" $e.Permalink
"title" $title
"description" $e.Description
"searchKeyword" $e.Params.searchKeyword
"content" $e.Plain
-}}
{{- $items = $items | append $obj -}}
{{- end -}}
{{- /* Laat Hugo alles in één keer omzetten naar geldige JSON */ -}}
{{- $items | jsonify -}}

View File

@@ -0,0 +1,5 @@
{{ define "main" }}
{{ partial "default.html" . }}
{{ end }}

View File

@@ -0,0 +1,29 @@
{{ define "main" }}
<section class="section">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<h2 class="mb-5 fw-medium">Search result for
<span class="text-primary">
<script>
var str = (window.location.search).substr(3);
var result = str.replaceAll("+", " ");
document.write(decodeURI(result));
</script>
</span>
</h2>
<div class="p-5 shadow rounded">
<div id="search-results"></div>
<script id="search-result-template" type="text/x-js-template">
<div class="py-4 search-item" id="summary-${key}">
<a class="h4 mb-0" href="${link}">${title}</a>
</div>
</script>
</div>
</div>
</div>
</div>
</section>
{{ end }}

View File

@@ -0,0 +1,5 @@
{{ define "main" }}
{{ partial "default.html" . }}
{{ end }}

View File

@@ -0,0 +1,91 @@
{{ define "main" }}
<section class="section pb-0">
<div class="container">
<div class="row justify-content-between align-items-center">
<div class="col-lg-5 text-center text-lg-start">
{{ with .Params.banner }}
<h1 class="mb-4">{{ .title | markdownify }}</h1>
<p class="mb-4">{{ .subtitle | markdownify }}</p>
{{ end }}
<div class="d-flex flex-wrap justify-content-center justify-content-lg-start">
{{ with .Params.banner_button }}
<a class="btn btn-primary ms-2 me-2 me-lg-4 mt-2" href="{{.link | safeURL}}">{{.label}}</a>
{{ end }}
<form class="search-wrapper mt-2 mx-2 mx-lg-0" name="search-form" data-bs-toggle="modal" data-bs-target="#searchModal">
<i class="search-icon fas fa-search"></i>
<input class="form-control px-4 text-dark" placeholder="{{ i18n `search_placeholder`}}" readonly>
<button type="button" class="search-button" data-search-toggler>{{ i18n "search" }}</button>
</form>
</div>
</div>
<div class="col-lg-6 d-lg-block d-none">
{{ partial "image.html" (dict "Src" .Params.banner.image "Alt" "illustration") }}
</div>
</div>
</div>
</section>
<!-- topics -->
<section class="section pb-0">
<div class="container">
<h2 class="section-title">{{ i18n "topics" }}</h2>
<div class="row">
{{ range (where site.Pages "Type" "docs") }}
<div class="col-lg-4 col-sm-6 mb-4">
<div class="card h-100">
<div class="card-body py-5">
<h4 class="card-title h4"><i class="{{ .Params.Icon }}"></i> {{ .Title }}</h4>
<p class="card-text">{{ .Params.Description | markdownify }}</p>
<a href="{{ .Permalink }}" class="stretched-link"></a>
</div>
</div>
</div>
{{ end }}
</div>
</div>
</section>
<!-- /topics -->
<!-- faq -->
{{ with site.GetPage "/faq" }}
<section class="section pb-0">
<div class="container">
<h2 class="section-title">{{ .Title }}</h2>
<div class="row masonry-wrapper">
{{ .Content }}
</div>
</div>
</section>
{{ end }}
<!-- /faq -->
<!-- call to action -->
{{ with .Params.call_to_action }}
{{ if .enable }}
<section class="section">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-4 text-center d-lg-block d-none">
{{ partial "image.html" (dict "Src" .image "Alt" "call-to-action") }}
</div>
<div class="col-lg-8 text-lg-start text-center">
<h2 class="mb-3 fw-bold">{{ .title | markdownify }}</h2>
<p>{{ .content | markdownify }}</p>
{{ if .button.enable }}
{{ with .button }}
<a href="{{ .link | absLangURL }}" class="btn btn-primary">{{ .label }}</a>
{{ end }}
{{ end }}
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<!-- /call to action -->
{{ end }}

View File

@@ -0,0 +1,143 @@
{{ "<!-- details page -->" | safeHTML }}
<section class="pt-5">
<div class="container shadow section-sm rounded">
<div class="row">
<div class="col-lg-3 col-md-4 d-md-block order-2 order-md-1">
<ul class="sidenav">
{{ $currentNode := . }}
{{range site.Home.Sections.ByWeight}}
<!-- not render any single page, like contact page. -->
{{ $numberOfMainPages := len .Pages }}
{{ if eq $numberOfMainPages 0 }}
{{ else }}
<!-- /not render any single page, like contact page. -->
{{ template "section-tree-nav" dict "sect" . "currentnode" $currentNode}}
{{ end }}
{{ end }}
</ul>
</div>
<div class="col-md-8 order-1 order-md-2">
<div class="px-lg-5 px-sm-4">
<div class="header-row">
<h1 class="mb-4 fw-bold">{{ .Title }}</h1>
{{ with .Params.town_options.flag }}
{{ partial "image.html" (dict "Src" . "Class" "img-flag shadow" "Alt" (printf "Vlag van %s" $.Title)) }}
{{ end }}
</div>
{{ $town := .Params.town_options }}
{{ if $town }}
<div class="row mb-4">
<div class="col-md-6">
<h2 class="h5 mb-3">Bouw- en woonmogelijkheden</h2>
{{ partial "town-status-icon.html" (dict "status" $town.mantelzorgwoning_status "icon" "fa-house" "title" "Mantelzorgwoning") }}
{{ partial "town-status-icon.html" (dict "status" $town.premantelzorgwoning_status "icon" "fa-people-roof" "title" "Premantelzorgwoning") }}
{{ partial "town-status-icon.html" (dict "status" $town.generatiewoning_status "icon" "fa-people-group" "title" "Generatiewoning") }}
{{ partial "town-status-icon.html" (dict "status" $town.vrijebouw_status "icon" "fa-up-right-from-square" "title" "Vrije bouw") }}
</div>
<div class="col-md-6">
<h2 class="h5 mb-3">Ruimtelijke aandachtspunten</h2>
{{ partial "town-status-icon.html" (dict "status" $town.natura_status "icon" "fa-leaf" "title" "Natura / natuurgebieden") }}
{{ partial "town-status-icon.html" (dict "status" $town.monumenten_status "icon" "fa-landmark" "title" "Monumenten") }}
{{ partial "town-status-icon.html" (dict "status" $town.soil_status "icon" "fa-mountain" "title" "Bodem / fundering") }}
{{ partial "town-status-icon.html" (dict "status" $town.plan_status "icon" "fa-map" "title" "Omgevingsplan / bestemming") }}
</div>
</div>
{{ end }}
{{ if .Content }}
<div class="content">
{{ partial "autotooltips.html" . }}
</div>
{{ else }}
<div class="page-list">
{{ template "section-tree-nav" dict "sect" . "currentnode" $currentNode }}
</div>
{{ end }}
<nav class="pagination">
<!-- Next prev page -->
{{- $currentNode := . -}}
{{- template "menu-nextprev" dict "menu" site.Home "currentnode" $currentNode -}}
{{- define "menu-nextprev" -}}
{{- $currentNode := .currentnode -}}
{{- if ne .menu.Params.hidden true -}}
{{- if hasPrefix $currentNode.Permalink .menu.Permalink -}}
{{- $currentNode.Scratch.Set "NextPageOK" "OK" -}}
{{- $currentNode.Scratch.Set "prevPage" ($currentNode.Scratch.Get "prevPageTmp") -}}
{{- else -}}
{{- if eq ($currentNode.Scratch.Get "NextPageOK") "OK" -}}
{{- $currentNode.Scratch.Set "NextPageOK" nil -}}
{{- $currentNode.Scratch.Set "nextPage" .menu -}}
{{- end -}}
{{- end -}}
{{- $currentNode.Scratch.Set "prevPageTmp" .menu -}}
{{- $currentNode.Scratch.Set "pages" .menu.Pages -}}
{{- if .menu.IsHome -}}
{{- $currentNode.Scratch.Set "pages" .menu.Sections -}}
{{- else if .menu.Sections -}}
{{- $currentNode.Scratch.Set "pages" (.menu.Pages | union .menu.Sections) -}}
{{- end -}}
{{- $pages := ($currentNode.Scratch.Get "pages") -}}
{{- range $pages.ByWeight -}}
{{- template "menu-nextprev" dict "menu" . "currentnode" $currentNode -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- with ($.Scratch.Get "prevPage") -}}
{{- if .Title -}}
<a class="nav nav-prev" href="{{.RelPermalink }}"><i class="fas fa-chevron-left me-2"></i>
<span class="d-none d-sm-block">{{.Title}}</span> <span class="d-block d-sm-none">{{ i18n "previous" }}</span>
</a>
{{- end -}}
{{- end -}}
{{- with ($.Scratch.Get "nextPage") -}}
{{- if .Title -}}
<a class="nav nav-next" href="{{.RelPermalink }}">
<span class="d-none d-sm-block">{{.Title}}</span> <span class="d-block d-sm-none">{{ i18n "next" }}</span><i class="fas fa-chevron-right ms-2"></i>
</a>
{{- end -}}
{{- end -}}
</nav>
</div>
</div>
</div>
</div>
</section>
{{ "<!-- /details page -->" | safeHTML }}
<!-- templates -->
{{ define "section-tree-nav" }}
{{ $showvisitedlinks := .showvisitedlinks }}
{{ $currentNode := .currentnode }}
{{with .sect}}
{{safeHTML .Params.head}}
{{ $fileUniqueID := "" }}
{{ with .File }}{{ $fileUniqueID = .UniqueID }}{{ end }}
{{ $currentNodeFileUniqueID := "" }}
{{ with $currentNode.File }}{{ $currentNodeFileUniqueID = .UniqueID }}{{ end }}
<li data-nav-id="{{.Permalink}}" title="{{.Title}}"
class="sidelist {{if .IsAncestor $currentNode }}parent{{end}} {{if eq $fileUniqueID $currentNodeFileUniqueID}}active parent{{end}}">
<a href="{{.Permalink}}">{{.Title }}</a>
{{ $numberOfPages := (add (len .Pages) (len .Sections)) }}
{{ if ne $numberOfPages 0 }}
<ul>
{{ $currentNode.Scratch.Set "pages" .Pages }}
{{ if .Sections}}
{{ $currentNode.Scratch.Set "pages" (.Pages | union .Sections) }}
{{end}}
{{ $pages := ($currentNode.Scratch.Get "pages") }}
{{ range $pages.ByWeight }}
{{ template "section-tree-nav" dict "sect" . "currentnode" $currentNode }}
{{end}}
</ul>
</li>
{{ end }}
{{ end }}
{{ end }}

View File

@@ -0,0 +1,36 @@
<footer>
<div class="container">
<div class="row align-items-center border-bottom py-5">
<div class="col-lg-4">
<ul class="list-inline footer-menu text-center text-lg-start">
{{ range site.Menus.footer }}
<li class="list-inline-item"><a href="{{ .URL | absLangURL }}">{{ .Name }}</a></li>
{{ end }}
</ul>
</div>
<div class="col-lg-4 text-center mb-4 mb-lg-0">
<!-- <a class="navbar-brand" href="{{ site.BaseURL | relLangURL }}">
{{ partial "logo" }}
</a>
</div> -->
<div class="py-4 text-center">
<small class="text-light">
{{ site.Params.copyright | markdownify }}
{{ if site.Params.theme_copyright }}
| Made with <i class="fa-solid fa-heart"></i> by
<a target="_blank" rel="noopener noreferrer" href="https://start-it.nl">StartIT</a>
{{ end }}
</small>
</div>
</div>
<div class="col-lg-4">
<ul class="list-inline social-icons text-lg-end text-center">
{{ range site.Params.social }}
<li class="list-inline-item"><a href="{{ .link | safeURL }}"><i class="{{ .icon }}"></i></a></li>
{{ end }}
</ul>
</div>
</div>
</div>
</footer>

View File

@@ -0,0 +1,55 @@
<meta charset="utf-8" />
<title>{{ .Title | default site.Title }}</title>
<!-- responsive meta -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5" />
<!-- theme meta -->
<meta name="theme-name" content="godocs-hugo" />
<!-- favicon -->
{{ partialCached "favicon" . }}
<!-- manifest -->
{{ partialCached "manifest" . }}
<!-- site verifications -->
{{ partialCached "site-verifications.html" . }}
<!-- opengraph and twitter card -->
{{ partial "basic-seo.html" . }}
<!-- custom script -->
{{ partialCached "custom-script.html" . }}
<!-- google analytics -->
<!-- {{ template "_internal/google_analytics.html" . }} -->
<!-- google tag manager -->
<!-- {{ partialCached "gtm.html" . }} -->
<!-- matomo analytics -->
{{ partialCached "matomo-analytics.html" . }}
<!-- Baidu analytics -->
{{ partialCached "baidu-analytics.html" . }}
<!-- Plausible Analytics -->
<!-- {{ partialCached "plausible-analytics.html" . }} -->
<script defer data-domain="kennisbank.start-it.nl" src="https://stats.start-it.nl/js/script.file-downloads.outbound-links.js"></script>
<!-- Counter Analytics -->
{{ partialCached "counter-analytics.html" . }}
<!-- Crisp Chat -->
{{ partialCached "crisp-chat.html" . }}

View File

@@ -0,0 +1,98 @@
{{ "<!-- navigation -->" | safeHTML }}
<header class="sticky-top navigation {{if .IsHome}}top-0{{end}}">
<div class="container">
<!-- navbar -->
<nav class="navbar px-0 navbar-expand-lg navbar-light bg-transparent">
<a class="navbar-brand" href="{{ site.BaseURL | relLangURL }}">
{{ partial "logo" }}
</a>
{{if not .IsHome }}
<form class="form-inline search-wrapper my-3 d-block d-lg-none" name="search-form" class="search-wrapper" data-bs-toggle="modal" data-bs-target="#searchModal">
<input id="search-by" name="s" type="search" class="form-control text-dark d-none d-lg-block" placeholder="{{ i18n `search_placeholder`}}" readonly>
<button class="border-0 bg-white pe-none" type="submit"><i class="fas fa-search"></i></button>
</form>
{{ end }}
<button class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navigation">
<i class="fa-solid fa-bars"></i>
<i class="fa-solid fa-xmark"></i>
</button>
<div class="collapse navbar-collapse text-center" id="navigation">
<ul class="navbar-nav mx-auto align-items-center">
{{ range site.Menus.main }}
{{ if .HasChildren }}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
{{ .Name }}
</a>
<div class="dropdown-menu">
{{ range .Children }}
<a class="dropdown-item" href="{{ .URL | absURL }}">{{ .Name }}</a>
{{ end }}
</div>
</li>
{{ else }}
<li class="nav-item">
<a class="nav-link" {{ if findRE `^http` .URL }} target="_blank" rel="noopener" {{ end }} href="{{ if findRE `^#` .URL }}{{ if not $.IsHome }}{{ site.BaseURL | relLangURL }}{{ end }}{{ .URL }}{{ else }}{{ .URL | relLangURL }}{{ end }}">{{ .Name }}</a>
</li>
{{ end }}
{{ end }}
<li class="nav-link">
<!-- Language List -->
{{ if .IsTranslated }}
<select class="nav-item" id="select-language" onchange="location = this.value;">
{{ $siteLanguages := site.Languages}}
{{ $pageLang := .Page.Lang}}
{{ range .Page.AllTranslations }}
{{ $translation := .}}
{{ range $siteLanguages }}
{{ if eq $translation.Lang .Lang }}
{{ $selected := false }}
{{ if eq $pageLang .Lang}}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}" selected>{{ .LanguageName }}
</option>
{{ else }}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}">{{ .LanguageName }}</option>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</select>
{{ end }}
</li>
</ul>
<!-- for mobile -->
<div class="d-lg-none d-block">
{{ range site.Params.nav_button }}
<a href="{{ .link | absLangURL }}"
class="btn btn-sm {{if eq .style `outline`}}btn-outline-primary{{else}}btn-primary{{end}} ms-lg-4">{{ i18n .label }}</a>
{{ end }}
</div>
<!-- /for mobile -->
</div>
{{if not .IsHome }}
<form class="form-inline search-wrapper my-3 d-none d-lg-block" class="search-wrapper" data-bs-toggle="modal" data-bs-target="#searchModal">
<i class="search-icon fas fa-search"></i>
<input class="form-control form-control-sm" placeholder="{{ i18n `search`}}" readonly>
<button type="button" class="search-button" style="font-size:12px" data-search-toggler>{{ i18n "search" }}</button>
</form>
{{ end }}
<!-- for desktop -->
<div class="d-lg-flex d-none">
{{ range site.Params.nav_button }}
<a href="{{ .link | absLangURL }}"
class="btn btn-sm {{if eq .style `outline`}}btn-outline-primary{{else}}btn-primary{{end}} ms-lg-4">{{ i18n .label }}</a>
{{ end }}
</div>
<!-- /for desktop -->
</nav>
</div>
</header>
{{ "<!-- /navigation -->" | safeHTML }}
{{ partial "search-modal" . }}

View File

@@ -0,0 +1,9 @@
{{ if site.Params.preloader.enable }}
{{ "<!-- preloader start -->" | safeHTML }}
<div class="preloader">
{{ with site.Params.preloader.preloader }}
<img src="{{ . | absURL }}" alt="preloader">
{{ end }}
</div>
{{ "<!-- preloader end -->" | safeHTML }}
{{ end }}

View File

@@ -0,0 +1,56 @@
<!-- Bootstrap scripts -->
{{ $bootstrap := resources.Get "js/bootstrap.js" }}
{{ $params := dict }}
{{ $sourceMap := cond hugo.IsProduction "" "inline" }}
{{ $opts := dict "sourceMap" $sourceMap "target" "es2018" "params" $params }}
{{ $bootstrap = $bootstrap | js.Build $opts }}
{{ if hugo.IsProduction }}
{{ $bootstrap = $bootstrap | fingerprint "sha512" }}
{{ end }}
<script crossorigin="anonymous" defer {{ if hugo.IsProduction }}integrity="{{ $bootstrap.Data.Integrity }}"{{end}} type="application/javascript">{{$bootstrap.Content | safeJS}}</script>
<!-- JS Plugins + Main script -->
{{ $scripts := slice }}
{{ range site.Params.plugins.js }}
{{ if findRE "^http" .link }}
<script
src="{{ .link | relURL }}"
type="application/javascript"
{{ .attributes | safeHTMLAttr }}></script>
{{ else }}
{{ $scripts = $scripts | append (resources.Get .link) }}
{{ end }}
{{ end }}
<!-- main script -->
{{ $scripts = $scripts | append (resources.Get "js/script.js") }}
{{ $scripts = $scripts | resources.Concat "js/scripts.js" }}
{{ if hugo.IsProduction }}
{{ $scripts = $scripts | fingerprint "sha512" }}
{{ end }}
<script crossorigin="anonymous" defer {{ if hugo.IsProduction }}integrity="{{ $scripts.Data.Integrity }}"{{end}} type="application/javascript">{{$scripts.Content | safeJS}}</script>
<!-- font family -->
{{ $pf:= site.Params.variables.font_primary }}
{{ $sf:= site.Params.variables.font_secondary }}
<script type="application/javascript">
WebFont.load({
google: {
api: 'https://fonts.googleapis.com/css2',
families: ['{{$pf | default `Lato:wght@400`}}{{if not $sf}}&display=swap{{end}}'{{with $sf}},'{{. | default `Lato:wght@400`}}&display=swap'{{end}}],
version: 2
},
active: () => {sessionStorage.fontsLoaded = true}
});
</script>
<!-- progressive web app -->
{{ partialCached "pwa.html" . }}
<!-- cookie consent -->
{{ partialCached "cookie-consent.html" . }}
<!-- google adsense -->
{{ partialCached "adsense-script.html" . }}

View File

@@ -0,0 +1,93 @@
<div class="modal search-modal" id="searchModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog search-modal-dialog">
<div class="modal-content border-0"><div class="modal-header border-0" style="padding:1rem"><div class="input-group border-0">
<span class="input-group-text bg-transparent text-dark border-end-0" id="Search">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-search" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/></svg>
</span>
<input type="text" id="searchInput" class="form-control search-form-control shadow-none text-dark border-start-0 ps-0 ms-0 border-end-0" placeholder="{{i18n `search_placeholder`}}" aria-label="Search" aria-describedby="Search">
<span class="input-group-text bg-transparent text-muted border-start-0" style="font-size:14px;">
<span class="border border-muted rounded-1 px-1" data-bs-dismiss="modal" aria-label="Close">ESC</span>
</span>
</div></div>
<div class="modal-body">
<div id="search-result-body"></div>
</div></div>
</div>
</div>
<script>
const searchModal = document.getElementById('searchModal');
const searchInput = document.getElementById('searchInput');
const searchResult = document.getElementById("search-result-body");
searchModal.addEventListener('shown.bs.modal', () => {searchInput.focus()});
let jsonData = [];
let indexJSON = {{"index.json" | relURL}};
const loadJsonData = async () => {
try {
const res = await fetch(indexJSON);
jsonData = await res.json();
} catch (err) {
console.error(err);
}
};
searchInput.addEventListener("keyup", (e) => {
const searchString = e.target.value.toLowerCase();
let filteredJSON = jsonData.reduce((prev, item) => [...new Set([...prev, item.section])], []).map((item) => {
let filteredItems = jsonData.filter((i) => i.section === item);
return {
section: item,
data: filteredItems,
};
});
let searchItem = filteredJSON.filter((item) => {
if (searchString === "" ) {
return "";
}
else if (item.data.find((el) => (el.title?.toLowerCase().includes(searchString)))) {
return item
}
else if (item.data.find((el) => (el.description?.toLowerCase().includes(searchString)))) {
return item
}
else if (item.data.find((el) => (el.searchKeyword?.toLowerCase().includes(searchString)))) {
return item
}
else if (item.data.find((el) => (el.content?.toLowerCase().includes(searchString)))) {
return item
}
});
displayResult(searchItem, searchString);
});
const displayResult = (searchItems, searchString) => {
const htmlString = searchItems.map((item) => {
const contentValue = item.data.filter((d) => d.content?.toLowerCase().includes(searchString)).map((innerItem) => {
const position = innerItem.content?.toLowerCase().indexOf(searchString.toLowerCase());
let matches = innerItem.content?.substring(position, searchString.length + position);
let matchesAfter = innerItem.content?.substring(searchString.length + position, searchString.length + position + 100);
const highlighted = innerItem.content?.replace(innerItem.content, '<mark>' + matches + '</mark>' + matchesAfter);
return highlighted;
});
return`
<div class="search-result-item">
<p class="section">${item.section}</p>
${item.data.filter((d) =>
d.title?.toLowerCase().includes(searchString) ||
d.description?.toLowerCase().includes(searchString) ||
d.searchKeyword?.toLowerCase().includes(searchString) ||
d.content?.toLowerCase().includes(searchString)).map((innerItem) =>
`<a class="block" href="${innerItem.url}"><p class="text-dark mb-0 lh-base">${innerItem.title}</p><span></span><p class="small text-muted mt-1 mb-0 lh-base">${contentValue}</p></a>`
).join("")}
</div>`
}).join("");
searchResult.innerHTML = htmlString;
};
loadJsonData();
</script>

View File

@@ -0,0 +1,31 @@
<!-- DNS preconnect -->
<meta http-equiv="x-dns-prefetch-control" content="on" />
<link rel="preconnect" href="//ajax.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous" />
<link rel="preconnect" href="https://use.fontawesome.com" crossorigin />
<link rel="preconnect" href="//cdnjs.cloudflare.com" />
<link rel="preconnect" href="//www.googletagmanager.com" />
<link rel="preconnect" href="//www.google-analytics.com" />
<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
<link rel="dns-prefetch" href="https://use.fontawesome.com" />
<link rel="dns-prefetch" href="//ajax.googleapis.com" />
<link rel="dns-prefetch" href="//cdnjs.cloudflare.com" />
<link rel="dns-prefetch" href="//www.googletagmanager.com" />
<link rel="dns-prefetch" href="//www.google-analytics.com" />
<link rel="dns-prefetch" href="//fonts.googleapis.com" />
<link rel="dns-prefetch" href="//connect.facebook.net" />
<link rel="dns-prefetch" href="//platform.linkedin.com" />
<link rel="dns-prefetch" href="//platform.twitter.com" />
<!-- plugins + stylesheet -->
{{ $styles := slice }}
{{ range site.Params.plugins.css }}
{{ if findRE "^http" .link }}
<link crossorigin="anonymous" media="all" rel="stylesheet" href="{{ .link | absURL }}" {{.attributes | safeHTMLAttr}} >
{{ else }}
{{ $styles = $styles | append (resources.Get .link) }}
{{ end }}
{{ end }}
{{ $styles := $styles | append (resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "style.scss" . | toCSS) }}
{{ $styles := $styles | resources.Concat "/css/style.css" | minify | fingerprint "sha512"}}
<style crossorigin="anonymous" media="all" type="text/css" integrity="{{ $styles.Data.Integrity }}">{{$styles.Content | safeCSS}}</style>

View File

@@ -0,0 +1,6 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="mt-4">
<div class="badge {{ .Get 0 | lower}}">{{ .Get 0 | title }}</div>
{{ .Inner | markdownify }}
</div>

View File

@@ -0,0 +1,10 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="col-md-6 mb-4">
<div class="card card-lg">
<div class="card-body">
<h3 class="card-title h5 mb-3">{{ .Get 0 | markdownify }}</h3>
<p class="card-text content">{{ .Inner | markdownify }}</p>
</div>
</div>
</div>