]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Squashed 'docs/' changes from 7ef2dbce4..cb18a5183
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 20 Oct 2023 07:42:39 +0000 (09:42 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 20 Oct 2023 07:42:39 +0000 (09:42 +0200)
cb18a5183 Fix broken link
07a0198bf Config: Place Google Analytics tag ID under the services key
4bf0c719f Fix typo
50d8ad1af Fix muiltilingual menu definition instructions
1a32519a9 Fix typos
6f34ca8e0 Explain usage of front matter to target a template
5bd977257 Improve goldmark config docs
447632938 Remove Docker notes from installation instructions
84741d173 Update reference to hugo.work
0338d7c71 Fix menu template
f5d2f5ed4 Fix typos in content/en/functions/fmt
a3a40ff99 Add return type to functions
85ac3e779 Remove outdated feature image
d47d889e4 Fix signatures
7551ba28f Document safe.JSStr function
e77993be0 Document keyVals function
4dba20db3 Update theme
babf91544 Update echoparam
8c8203efa Adjust related functions
4cb1b30fc Fix example
ba95eca64 Improve showcase prose
5d3dcf366 Add Overmind Studios showcase
8d634ac70 Change code blocks from indented to fenced
cfab978e6 Add missing code fences
407dd5c47 Limit related pages for functions to other functions
9fa67d981 Fix .Site.LastChange doc
393aa16d0 netlify: Hugo 0.119.0
f864af97a docs: Even more about images.Process
9d772d5f0 docs: More about images.Process
bc655f869 docs: Regen docshelper
41c3536d1 Merge commit '9aec42c5452b3eb224888c50ba1c3f3b68a447e9'
918ed53f4 Add images.Process filter
573645883 Add $image.Process
a1151b0fd Add images.Opacity filter

git-subtree-dir: docs
git-subtree-split: cb18a5183fc62f301ffde50b8c39f03e4b897aec

405 files changed:
_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_social-icons.css
_vendor/github.com/gohugoio/gohugoioTheme/assets/output/css/app.css
_vendor/github.com/gohugoio/gohugoioTheme/assets/output/js/app.js
_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-nav.html
_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/social-follow.html
_vendor/modules.txt
archetypes/functions.md
archetypes/news/index.md
archetypes/showcase/index.md
content/en/about/security-model.md [new file with mode: 0644]
content/en/about/security-model/hugo-security-model-featured.png [deleted file]
content/en/about/security-model/index.md [deleted file]
content/en/about/what-is-hugo.md
content/en/content-management/archetypes.md
content/en/content-management/formats.md
content/en/content-management/image-processing/index.md
content/en/content-management/multilingual.md
content/en/content-management/shortcodes.md
content/en/content-management/syntax-highlighting.md
content/en/content-management/taxonomies.md
content/en/functions/AddDate.md [new file with mode: 0644]
content/en/functions/Format.md [new file with mode: 0644]
content/en/functions/Get.md [new file with mode: 0644]
content/en/functions/GetPage.md
content/en/functions/HasMenuCurrent.md [new file with mode: 0644]
content/en/functions/IsMenuCurrent.md [new file with mode: 0644]
content/en/functions/Param.md [new file with mode: 0644]
content/en/functions/Render.md [new file with mode: 0644]
content/en/functions/RenderString.md
content/en/functions/Scratch.md [new file with mode: 0644]
content/en/functions/Store.md [new file with mode: 0644]
content/en/functions/Unix.md [new file with mode: 0644]
content/en/functions/_common/go-template-functions.md [new file with mode: 0644]
content/en/functions/_common/index.md [new file with mode: 0644]
content/en/functions/_common/locales.md [new file with mode: 0644]
content/en/functions/_common/regular-expressions.md [new file with mode: 0644]
content/en/functions/_common/time-layout-string.md [new file with mode: 0644]
content/en/functions/abslangurl.md [deleted file]
content/en/functions/absurl.md [deleted file]
content/en/functions/adddate.md [deleted file]
content/en/functions/after.md [deleted file]
content/en/functions/anchorize.md [deleted file]
content/en/functions/append.md [deleted file]
content/en/functions/apply.md [deleted file]
content/en/functions/base64.md [deleted file]
content/en/functions/cast/ToFloat.md [new file with mode: 0644]
content/en/functions/cast/ToInt.md [new file with mode: 0644]
content/en/functions/cast/ToString.md [new file with mode: 0644]
content/en/functions/chomp.md [deleted file]
content/en/functions/collections/After.md [new file with mode: 0644]
content/en/functions/collections/Append.md [new file with mode: 0644]
content/en/functions/collections/Apply.md [new file with mode: 0644]
content/en/functions/collections/Complement.md [new file with mode: 0644]
content/en/functions/collections/Delimit.md [new file with mode: 0644]
content/en/functions/collections/Dictionary.md [new file with mode: 0644]
content/en/functions/collections/EchoParam.md [new file with mode: 0644]
content/en/functions/collections/First.md [new file with mode: 0644]
content/en/functions/collections/Group.md [new file with mode: 0644]
content/en/functions/collections/In.md [new file with mode: 0644]
content/en/functions/collections/IndexFunction.md [new file with mode: 0644]
content/en/functions/collections/Intersect.md [new file with mode: 0644]
content/en/functions/collections/IsSet.md [new file with mode: 0644]
content/en/functions/collections/KeyVals.md [new file with mode: 0644]
content/en/functions/collections/Last.md [new file with mode: 0644]
content/en/functions/collections/Merge.md [new file with mode: 0644]
content/en/functions/collections/NewScratch.md [new file with mode: 0644]
content/en/functions/collections/Querify.md [new file with mode: 0644]
content/en/functions/collections/Reverse.md [new file with mode: 0644]
content/en/functions/collections/Seq.md [new file with mode: 0644]
content/en/functions/collections/Shuffle.md [new file with mode: 0644]
content/en/functions/collections/Slice.md [new file with mode: 0644]
content/en/functions/collections/Sort.md [new file with mode: 0644]
content/en/functions/collections/SymDiff.md [new file with mode: 0644]
content/en/functions/collections/Union.md [new file with mode: 0644]
content/en/functions/collections/Uniq.md [new file with mode: 0644]
content/en/functions/collections/Where.md [new file with mode: 0644]
content/en/functions/common/index.md [deleted file]
content/en/functions/common/regular-expressions.md [deleted file]
content/en/functions/compare/Cond.md [new file with mode: 0644]
content/en/functions/compare/Default.md [new file with mode: 0644]
content/en/functions/compare/Eq.md [new file with mode: 0644]
content/en/functions/compare/Ge.md [new file with mode: 0644]
content/en/functions/compare/Gt.md [new file with mode: 0644]
content/en/functions/compare/Le.md [new file with mode: 0644]
content/en/functions/compare/Lt.md [new file with mode: 0644]
content/en/functions/compare/Ne.md [new file with mode: 0644]
content/en/functions/complement.md [deleted file]
content/en/functions/cond.md [deleted file]
content/en/functions/countrunes.md [deleted file]
content/en/functions/countwords.md [deleted file]
content/en/functions/crypto.FNV32a.md [deleted file]
content/en/functions/crypto/FNV32a.md [new file with mode: 0644]
content/en/functions/crypto/HMAC.md [new file with mode: 0644]
content/en/functions/crypto/MD5.md [new file with mode: 0644]
content/en/functions/crypto/SHA1.md [new file with mode: 0644]
content/en/functions/crypto/SHA256.md [new file with mode: 0644]
content/en/functions/data/GetCSV.md [new file with mode: 0644]
content/en/functions/data/GetJSON.md [new file with mode: 0644]
content/en/functions/dateformat.md [deleted file]
content/en/functions/debug/Dump.md [new file with mode: 0644]
content/en/functions/default.md [deleted file]
content/en/functions/delimit.md [deleted file]
content/en/functions/dict.md [deleted file]
content/en/functions/duration.md [deleted file]
content/en/functions/echoparam.md [deleted file]
content/en/functions/emojify.md [deleted file]
content/en/functions/encoding/Base64Decode.md [new file with mode: 0644]
content/en/functions/encoding/Base64Encode.md [new file with mode: 0644]
content/en/functions/encoding/Jsonify.md [new file with mode: 0644]
content/en/functions/eq.md [deleted file]
content/en/functions/errorf.md [deleted file]
content/en/functions/fileExists.md [deleted file]
content/en/functions/findRe.md [deleted file]
content/en/functions/findresubmatch.md [deleted file]
content/en/functions/first.md [deleted file]
content/en/functions/float.md [deleted file]
content/en/functions/fmt/Errorf.md [new file with mode: 0644]
content/en/functions/fmt/Erroridf.md [new file with mode: 0644]
content/en/functions/fmt/Print.md [new file with mode: 0644]
content/en/functions/fmt/Printf.md [new file with mode: 0644]
content/en/functions/fmt/Println.md [new file with mode: 0644]
content/en/functions/fmt/Warnf.md [new file with mode: 0644]
content/en/functions/format.md [deleted file]
content/en/functions/ge.md [deleted file]
content/en/functions/get.md [deleted file]
content/en/functions/getenv.md [deleted file]
content/en/functions/go-template/len.md [new file with mode: 0644]
content/en/functions/go-template/range.md [new file with mode: 0644]
content/en/functions/go-template/urlquery.md [new file with mode: 0644]
content/en/functions/go-template/with.md [new file with mode: 0644]
content/en/functions/group.md [deleted file]
content/en/functions/gt.md [deleted file]
content/en/functions/hasmenucurrent.md [deleted file]
content/en/functions/highlight.md [deleted file]
content/en/functions/hmac.md [deleted file]
content/en/functions/htmlEscape.md [deleted file]
content/en/functions/htmlUnescape.md [deleted file]
content/en/functions/hugo.md [deleted file]
content/en/functions/hugo/index.md [new file with mode: 0644]
content/en/functions/humanize.md [deleted file]
content/en/functions/i18n.md [deleted file]
content/en/functions/images/index.md
content/en/functions/in.md [deleted file]
content/en/functions/index-function.md [deleted file]
content/en/functions/inflect/Humanize.md [new file with mode: 0644]
content/en/functions/inflect/Pluralize.md [new file with mode: 0644]
content/en/functions/inflect/Singularize.md [new file with mode: 0644]
content/en/functions/int.md [deleted file]
content/en/functions/intersect.md [deleted file]
content/en/functions/ismenucurrent.md [deleted file]
content/en/functions/isset.md [deleted file]
content/en/functions/jsonify.md [deleted file]
content/en/functions/lang.Merge.md [deleted file]
content/en/functions/lang.md [deleted file]
content/en/functions/lang/FormatAccounting.md [new file with mode: 0644]
content/en/functions/lang/FormatCurrency.md [new file with mode: 0644]
content/en/functions/lang/FormatNumber.md [new file with mode: 0644]
content/en/functions/lang/FormatNumberCustom.md [new file with mode: 0644]
content/en/functions/lang/FormatPercent.md [new file with mode: 0644]
content/en/functions/lang/Merge.md [new file with mode: 0644]
content/en/functions/lang/Translate.md [new file with mode: 0644]
content/en/functions/last.md [deleted file]
content/en/functions/le.md [deleted file]
content/en/functions/len.md [deleted file]
content/en/functions/lower.md [deleted file]
content/en/functions/lt.md [deleted file]
content/en/functions/markdownify.md [deleted file]
content/en/functions/math.md [deleted file]
content/en/functions/math/index.md [new file with mode: 0644]
content/en/functions/md5.md [deleted file]
content/en/functions/merge.md [deleted file]
content/en/functions/ne.md [deleted file]
content/en/functions/now.md [deleted file]
content/en/functions/os.Stat.md [deleted file]
content/en/functions/os/FileExists.md [new file with mode: 0644]
content/en/functions/os/Getenv.md [new file with mode: 0644]
content/en/functions/os/ReadDir.md [new file with mode: 0644]
content/en/functions/os/ReadFile.md [new file with mode: 0644]
content/en/functions/os/Stat.md [new file with mode: 0644]
content/en/functions/page/index.md [new file with mode: 0644]
content/en/functions/param.md [deleted file]
content/en/functions/partialCached.md [deleted file]
content/en/functions/partials/Include.md [new file with mode: 0644]
content/en/functions/partials/IncludeCached.md [new file with mode: 0644]
content/en/functions/path.Base.md [deleted file]
content/en/functions/path.BaseName.md [deleted file]
content/en/functions/path.Clean.md [deleted file]
content/en/functions/path.Dir.md [deleted file]
content/en/functions/path.Ext.md [deleted file]
content/en/functions/path.Join.md [deleted file]
content/en/functions/path.Split.md [deleted file]
content/en/functions/path/Base.md [new file with mode: 0644]
content/en/functions/path/BaseName.md [new file with mode: 0644]
content/en/functions/path/Clean.md [new file with mode: 0644]
content/en/functions/path/Dir.md [new file with mode: 0644]
content/en/functions/path/Ext.md [new file with mode: 0644]
content/en/functions/path/Join.md [new file with mode: 0644]
content/en/functions/path/Split.md [new file with mode: 0644]
content/en/functions/plainify.md [deleted file]
content/en/functions/pluralize.md [deleted file]
content/en/functions/print.md [deleted file]
content/en/functions/printf.md [deleted file]
content/en/functions/println.md [deleted file]
content/en/functions/querify.md [deleted file]
content/en/functions/range.md [deleted file]
content/en/functions/readdir.md [deleted file]
content/en/functions/readfile.md [deleted file]
content/en/functions/ref.md [deleted file]
content/en/functions/reflect.IsMap.md [deleted file]
content/en/functions/reflect.IsSlice.md [deleted file]
content/en/functions/reflect/IsMap.md [new file with mode: 0644]
content/en/functions/reflect/IsSlice.md [new file with mode: 0644]
content/en/functions/relLangURL.md [deleted file]
content/en/functions/relref.md [deleted file]
content/en/functions/relurl.md [deleted file]
content/en/functions/render.md [deleted file]
content/en/functions/replace.md [deleted file]
content/en/functions/replacere.md [deleted file]
content/en/functions/safe/CSS.md [new file with mode: 0644]
content/en/functions/safe/HTML.md [new file with mode: 0644]
content/en/functions/safe/HTMLAttr.md [new file with mode: 0644]
content/en/functions/safe/JS.md [new file with mode: 0644]
content/en/functions/safe/JSStr.md [new file with mode: 0644]
content/en/functions/safe/URL.md [new file with mode: 0644]
content/en/functions/safeCSS.md [deleted file]
content/en/functions/safeHTML.md [deleted file]
content/en/functions/safeHTMLAttr.md [deleted file]
content/en/functions/safeJS.md [deleted file]
content/en/functions/safeURL.md [deleted file]
content/en/functions/scratch.md [deleted file]
content/en/functions/seq.md [deleted file]
content/en/functions/sha.md [deleted file]
content/en/functions/shuffle.md [deleted file]
content/en/functions/singularize.md [deleted file]
content/en/functions/site.md [deleted file]
content/en/functions/site/index.md [new file with mode: 0644]
content/en/functions/slice.md [deleted file]
content/en/functions/slicestr.md [deleted file]
content/en/functions/sort.md [deleted file]
content/en/functions/split.md [deleted file]
content/en/functions/store.md [deleted file]
content/en/functions/string.md [deleted file]
content/en/functions/strings.Contains.md [deleted file]
content/en/functions/strings.ContainsAny.md [deleted file]
content/en/functions/strings.ContainsNonSpace.md [deleted file]
content/en/functions/strings.Count.md [deleted file]
content/en/functions/strings.FirstUpper.md [deleted file]
content/en/functions/strings.HasPrefix.md [deleted file]
content/en/functions/strings.HasSuffix.md [deleted file]
content/en/functions/strings.Repeat.md [deleted file]
content/en/functions/strings.RuneCount.md [deleted file]
content/en/functions/strings.TrimLeft.md [deleted file]
content/en/functions/strings.TrimPrefix.md [deleted file]
content/en/functions/strings.TrimRight.md [deleted file]
content/en/functions/strings.TrimSuffix.md [deleted file]
content/en/functions/strings/Chomp.md [new file with mode: 0644]
content/en/functions/strings/Contains.md [new file with mode: 0644]
content/en/functions/strings/ContainsAny.md [new file with mode: 0644]
content/en/functions/strings/ContainsNonSpace.md [new file with mode: 0644]
content/en/functions/strings/Count.md [new file with mode: 0644]
content/en/functions/strings/CountRunes.md [new file with mode: 0644]
content/en/functions/strings/CountWords.md [new file with mode: 0644]
content/en/functions/strings/FindRESubmatch.md [new file with mode: 0644]
content/en/functions/strings/FindRe.md [new file with mode: 0644]
content/en/functions/strings/FirstUpper.md [new file with mode: 0644]
content/en/functions/strings/HasPrefix.md [new file with mode: 0644]
content/en/functions/strings/HasSuffix.md [new file with mode: 0644]
content/en/functions/strings/Repeat.md [new file with mode: 0644]
content/en/functions/strings/Replace.md [new file with mode: 0644]
content/en/functions/strings/ReplaceRE.md [new file with mode: 0644]
content/en/functions/strings/RuneCount.md [new file with mode: 0644]
content/en/functions/strings/SliceString.md [new file with mode: 0644]
content/en/functions/strings/Split.md [new file with mode: 0644]
content/en/functions/strings/Substr.md [new file with mode: 0644]
content/en/functions/strings/Title.md [new file with mode: 0644]
content/en/functions/strings/ToLower.md [new file with mode: 0644]
content/en/functions/strings/ToUpper.md [new file with mode: 0644]
content/en/functions/strings/Trim.md [new file with mode: 0644]
content/en/functions/strings/TrimLeft.md [new file with mode: 0644]
content/en/functions/strings/TrimPrefix.md [new file with mode: 0644]
content/en/functions/strings/TrimRight.md [new file with mode: 0644]
content/en/functions/strings/TrimSuffix.md [new file with mode: 0644]
content/en/functions/strings/Truncate.md [new file with mode: 0644]
content/en/functions/substr.md [deleted file]
content/en/functions/symdiff.md [deleted file]
content/en/functions/templates.Exists.md [deleted file]
content/en/functions/templates/Exists.md [new file with mode: 0644]
content/en/functions/time.ParseDuration.md [deleted file]
content/en/functions/time.md [deleted file]
content/en/functions/time/AsTime.md [new file with mode: 0644]
content/en/functions/time/Duration.md [new file with mode: 0644]
content/en/functions/time/Format.md [new file with mode: 0644]
content/en/functions/time/Now.md [new file with mode: 0644]
content/en/functions/time/ParseDuration.md [new file with mode: 0644]
content/en/functions/title.md [deleted file]
content/en/functions/transform.Remarshal.md [deleted file]
content/en/functions/transform.Unmarshal.md [deleted file]
content/en/functions/transform/CanHighlight.md [new file with mode: 0644]
content/en/functions/transform/Emojify.md [new file with mode: 0644]
content/en/functions/transform/HTMLEscape.md [new file with mode: 0644]
content/en/functions/transform/HTMLUnescape.md [new file with mode: 0644]
content/en/functions/transform/Highlight.md [new file with mode: 0644]
content/en/functions/transform/HighlightCodeBlock.md [new file with mode: 0644]
content/en/functions/transform/Markdownify.md [new file with mode: 0644]
content/en/functions/transform/Plainify.md [new file with mode: 0644]
content/en/functions/transform/Remarshal.md [new file with mode: 0644]
content/en/functions/transform/Unmarshal.md [new file with mode: 0644]
content/en/functions/trim.md [deleted file]
content/en/functions/truncate.md [deleted file]
content/en/functions/union.md [deleted file]
content/en/functions/uniq.md [deleted file]
content/en/functions/unix.md [deleted file]
content/en/functions/upper.md [deleted file]
content/en/functions/urlize.md [deleted file]
content/en/functions/urlquery.md [deleted file]
content/en/functions/urls.JoinPath.md [deleted file]
content/en/functions/urls.Parse.md [deleted file]
content/en/functions/urls/AbsLangURL.md [new file with mode: 0644]
content/en/functions/urls/AbsURL.md [new file with mode: 0644]
content/en/functions/urls/Anchorize.md [new file with mode: 0644]
content/en/functions/urls/JoinPath.md [new file with mode: 0644]
content/en/functions/urls/Parse.md [new file with mode: 0644]
content/en/functions/urls/Ref.md [new file with mode: 0644]
content/en/functions/urls/RelLangURL.md [new file with mode: 0644]
content/en/functions/urls/RelRef.md [new file with mode: 0644]
content/en/functions/urls/RelURL.md [new file with mode: 0644]
content/en/functions/urls/URLize.md [new file with mode: 0644]
content/en/functions/where.md [deleted file]
content/en/functions/with.md [deleted file]
content/en/getting-started/configuration-markup.md
content/en/getting-started/configuration.md
content/en/getting-started/glossary.md
content/en/hosting-and-deployment/hosting-on-firebase.md
content/en/hugo-modules/use-modules.md
content/en/hugo-pipes/babel.md
content/en/hugo-pipes/bundling.md
content/en/hugo-pipes/fingerprint.md
content/en/hugo-pipes/js.md
content/en/hugo-pipes/minification.md
content/en/hugo-pipes/postcss.md
content/en/hugo-pipes/postprocess.md
content/en/hugo-pipes/resource-from-string.md
content/en/hugo-pipes/resource-from-template.md
content/en/hugo-pipes/transpile-sass-to-css.md
content/en/installation/_common/01-editions.md [new file with mode: 0644]
content/en/installation/_common/02-prerequisites.md [new file with mode: 0644]
content/en/installation/_common/03-prebuilt-binaries.md [new file with mode: 0644]
content/en/installation/_common/04-build-from-source.md [new file with mode: 0644]
content/en/installation/_common/homebrew.md [new file with mode: 0644]
content/en/installation/_common/index.md [new file with mode: 0644]
content/en/installation/bsd.md
content/en/installation/common/01-editions.md [deleted file]
content/en/installation/common/02-prerequisites.md [deleted file]
content/en/installation/common/03-prebuilt-binaries.md [deleted file]
content/en/installation/common/04-docker.md [deleted file]
content/en/installation/common/05-build-from-source.md [deleted file]
content/en/installation/common/homebrew.md [deleted file]
content/en/installation/common/index.md [deleted file]
content/en/installation/linux.md
content/en/installation/macos.md
content/en/installation/windows.md
content/en/readfiles/README.md [deleted file]
content/en/readfiles/dateformatting.md [deleted file]
content/en/readfiles/index.md [deleted file]
content/en/readfiles/sectionvars.md [deleted file]
content/en/readfiles/testing.txt [deleted file]
content/en/showcase/overmindstudios/bio.md [new file with mode: 0644]
content/en/showcase/overmindstudios/featured.png [new file with mode: 0644]
content/en/showcase/overmindstudios/index.md [new file with mode: 0644]
content/en/templates/data-templates.md
content/en/templates/files.md
content/en/templates/introduction.md
content/en/templates/lists/index.md
content/en/templates/lookup-order.md
content/en/templates/menu-templates.md
content/en/templates/pagination.md
content/en/templates/partials.md
content/en/templates/section-templates.md
content/en/templates/shortcode-templates.md
content/en/templates/single-page-templates.md
content/en/templates/taxonomy-templates.md
content/en/troubleshooting/build-performance.md
content/en/troubleshooting/faq.md
content/en/variables/_index.md
content/en/variables/git.md
content/en/variables/page.md
content/en/variables/site.md
content/en/variables/taxonomy.md
data/docs.yaml
go.mod
go.sum
hugo.toml
layouts/_default/page.html [new file with mode: 0644]
layouts/partials/docs/functions-aliases.html [new file with mode: 0644]
layouts/partials/docs/functions-signatures.html [new file with mode: 0644]
layouts/partials/related.html [new file with mode: 0644]
netlify.toml
resources/.gitattributes [deleted file]
resources/_gen/assets/css/output/css/app.css_d11fe7b62c27961c87ecd0f2490357b9.content [deleted file]
resources/_gen/assets/css/output/css/app.css_d11fe7b62c27961c87ecd0f2490357b9.json [deleted file]
resources/_gen/assets/js/output/js/app.js_8848f55d07695b7ff7188138f23d69e3.content [deleted file]
resources/_gen/assets/js/output/js/app.js_8848f55d07695b7ff7188138f23d69e3.json [deleted file]
resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_1024x512_fill_catmullrom_top_2.png [deleted file]
resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_640x0_resize_catmullrom_2.png [deleted file]
resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_8298a1fa052279512823ecd663d6f9c8.png [deleted file]

index 04ea11ec54897c6c498036645c856baaf53cda3e..6cfa7b1b4f409b012527a4607721ba78b11a4f29 100644 (file)
@@ -1,5 +1,8 @@
-.facebook, .twitter, .instagram, .youtube {
-  fill: #BABABA;
+.facebook,
+.twitter,
+.instagram,
+.youtube {
+  fill: #bababa;
 }
 .facebook:hover {
   fill: #3b5998;
 }
 
 .twitter:hover {
-  fill: #BABABA;
+  fill: #bababa;
 }
 
-
 .instagram:hover {
   fill: #e95950;
 }
 .youtube:hover {
   fill: #bb0000;
 }
+
+.mstdn {
+  display: inline-block;
+  background-color: #282c37;
+  color: #d9e1e8;
+  text-decoration: none;
+  padding: 4px 10px 4px 30px;
+  border-radius: 4px;
+  font-size: 16px;
+  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2261.076954mm%22%20height%3D%2265.47831mm%22%20viewBox%3D%220%200%20216.4144%20232.00976%22%3E%3Cpath%20d%3D%22M211.80734%20139.0875c-3.18125%2016.36625-28.4925%2034.2775-57.5625%2037.74875-15.15875%201.80875-30.08375%203.47125-45.99875%202.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125%200%202.53375.15625%204.94625.46875%207.2025%203.38375%2025.68625%2025.47%2027.225%2046.39125%2027.9425%2021.11625.7225%2039.91875-5.20625%2039.91875-5.20625l.8675%2019.09s-14.77%207.93125-41.08125%209.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234%20213.82%201.40609%20165.31125.20859%20116.09125c-.365-14.61375-.14-28.39375-.14-39.91875%200-50.33%2032.97625-65.0825%2032.97625-65.0825C49.67234%203.45375%2078.20359.2425%20107.86484%200h.72875c29.66125.2425%2058.21125%203.45375%2074.8375%2011.09%200%200%2032.975%2014.7525%2032.975%2065.0825%200%200%20.41375%2037.13375-4.59875%2062.915%22%20fill%3D%22%233088d4%22%2F%3E%3Cpath%20d%3D%22M177.50984%2080.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025%200-17.4175%207.5075-17.4175%2022.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375%200-15.74%206.32875-15.74%2018.7975v59.15H38.90484V80.077c0-12.455%203.17125-22.3525%209.54125-29.675%206.56875-7.3225%2015.17125-11.07625%2025.85-11.07625%2012.355%200%2021.71125%204.74875%2027.8975%2014.2475l6.01375%2010.08125%206.015-10.08125c6.185-9.49875%2015.54125-14.2475%2027.8975-14.2475%2010.6775%200%2019.28%203.75375%2025.85%2011.07625%206.36875%207.3225%209.54%2017.22%209.54%2029.675%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E");
+  background-size: 16px;
+  background-repeat: no-repeat;
+  background-position: top 50% left 8px;
+  transition: all 0.5s;
+}
+.mstdn:hover {
+  background-color: #484c56;
+}
+
+.mstdn > span {
+  color: #9baec8;
+  font-size: 12px;
+  padding-left: 3px;
+}
+.mstdn > span:before {
+  content: "@";
+}
index af648c759d8d910471660c11bff2343c1d2c422c..f5e09aeb10d42cb97b8a4a7de82f5e6eada69fa2 100644 (file)
@@ -804,8 +804,6 @@ img { max-width: 100%; }
 .b--washed-red { border-color: #ffdfdf; }
 .b--transparent { border-color: transparent; }
 .b--inherit { border-color: inherit; }
-.b--initial { border-color: currentColor; border-color: initial; }
-.b--unset { border-color: unset; }
 /*
 
    BORDER RADIUS
@@ -854,9 +852,6 @@ img { max-width: 100%; }
       border-top-right-radius: 0;
       border-bottom-right-radius: 0;
   }
-.br-inherit { border-radius: inherit; }
-.br-initial { border-radius: 0; border-radius: initial; }
-.br-unset { border-radius: unset; }
 @media screen and (min-width: 30em) {
   .br0-ns {     border-radius: 0; }
   .br1-ns {     border-radius: .125rem; }
@@ -881,9 +876,6 @@ img { max-width: 100%; }
       border-top-right-radius: 0;
       border-bottom-right-radius: 0;
   }
-  .br-inherit-ns { border-radius: inherit; }
-  .br-initial-ns { border-radius: 0; border-radius: initial; }
-  .br-unset-ns { border-radius: unset; }
 }
 @media screen and (min-width: 30em) and (max-width: 60em) {
   .br0-m {     border-radius: 0; }
@@ -909,9 +901,6 @@ img { max-width: 100%; }
       border-top-right-radius: 0;
       border-bottom-right-radius: 0;
   }
-  .br-inherit-m { border-radius: inherit; }
-  .br-initial-m { border-radius: 0; border-radius: initial; }
-  .br-unset-m { border-radius: unset; }
 }
 @media screen and (min-width: 60em) {
   .br0-l {     border-radius: 0; }
@@ -937,9 +926,6 @@ img { max-width: 100%; }
       border-top-right-radius: 0;
       border-bottom-right-radius: 0;
   }
-  .br-inherit-l { border-radius: inherit; }
-  .br-initial-l { border-radius: 0; border-radius: initial; }
-  .br-unset-l { border-radius: unset; }
 }
 /*
 
@@ -2381,7 +2367,6 @@ img { max-width: 100%; }
 .washed-yellow { color: #fffceb; }
 .washed-red { color: #ffdfdf; }
 .color-inherit { color: inherit; }
-/* Background colors */
 .bg-black-90 {         background-color: rgba(0, 0, 0, .9); }
 .bg-black-80 {         background-color: rgba(0, 0, 0, .8); }
 .bg-black-70 {         background-color: rgba(0, 0, 0, .7); }
@@ -2401,6 +2386,7 @@ img { max-width: 100%; }
 .bg-white-30 {        background-color: rgba(255, 255, 255, .3); }
 .bg-white-20 {        background-color: rgba(255, 255, 255, .2); }
 .bg-white-10 {        background-color: rgba(255, 255, 255, .1); }
+/* Background colors */
 .bg-black {         background-color: #000; }
 .bg-near-black {    background-color: #111; }
 .bg-dark-gray {     background-color: #333; }
@@ -4685,7 +4671,6 @@ h6:hover .header-link {
 .searchbox__input::-webkit-input-placeholder{color:#aaa}
 .searchbox__input:-ms-input-placeholder{color:#aaa}
 .searchbox__input::-ms-input-placeholder{color:#aaa}
-.searchbox__input::-moz-placeholder{color:#aaa}
 .searchbox__input::placeholder{color:#aaa}
 .searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69, 142, 225, 0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}
 .searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}
@@ -4919,14 +4904,14 @@ pre {
   text-decoration: none;
 
 }
-.column-count-2 {-webkit-column-count: 1;-moz-column-count: 1;column-count: 1}
-.column-gap-1 {-webkit-column-gap: 0;-moz-column-gap: 0;column-gap: 0}
-.break-inside-avoid {-webkit-column-break-inside: auto;page-break-inside: auto;break-inside: auto}
+.column-count-2 {-webkit-column-count: 1;column-count: 1}
+.column-gap-1 {-webkit-column-gap: 0;column-gap: 0}
+.break-inside-avoid {-webkit-column-break-inside: auto;break-inside: auto}
 @media screen and (min-width: 60em) {
-  .column-count-3-l {-webkit-column-count: 3;-moz-column-count: 3;column-count: 3}
-  .column-count-2-l {-webkit-column-count: 2;-moz-column-count: 2;column-count: 2}
-  .column-gap-1-l {-webkit-column-gap: 1;-moz-column-gap: 1;column-gap: 1}
-  .break-inside-avoid-l {-webkit-column-break-inside: avoid;page-break-inside: avoid;break-inside: avoid}
+  .column-count-3-l {-webkit-column-count: 3;column-count: 3}
+  .column-count-2-l {-webkit-column-count: 2;column-count: 2}
+  .column-gap-1-l {-webkit-column-gap: 1;column-gap: 1}
+  .break-inside-avoid-l {-webkit-column-break-inside: avoid;break-inside: avoid}
 }
 .prose ul, .prose ol {
   margin-bottom: 2em;
@@ -4937,10 +4922,6 @@ pre {
 .prose li:hover {
   background-color: #eee
 }
-.prose ::-moz-selection {
-  background: #0594CB; /* WebKit/Blink Browsers */
-  color: white;
-}
 .prose ::selection {
   background: #0594CB; /* WebKit/Blink Browsers */
   color: white;
@@ -5132,8 +5113,11 @@ code, .code, pre code, .highlight pre  {
   -webkit-transition: opacity .15s ease-in;
   transition: opacity .15s ease-in;
 }
-.facebook, .twitter, .instagram, .youtube {
-  fill: #BABABA;
+.facebook,
+.twitter,
+.instagram,
+.youtube {
+  fill: #bababa;
 }
 .facebook:hover {
   fill: #3b5998;
@@ -5142,7 +5126,7 @@ code, .code, pre code, .highlight pre  {
   fill: #55acee;
 }
 .twitter:hover {
-  fill: #BABABA;
+  fill: #bababa;
 }
 .instagram:hover {
   fill: #e95950;
@@ -5150,6 +5134,32 @@ code, .code, pre code, .highlight pre  {
 .youtube:hover {
   fill: #bb0000;
 }
+.mstdn {
+  display: inline-block;
+  background-color: #282c37;
+  color: #d9e1e8;
+  text-decoration: none;
+  padding: 4px 10px 4px 30px;
+  border-radius: 4px;
+  font-size: 16px;
+  background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2261.076954mm%22%20height%3D%2265.47831mm%22%20viewBox%3D%220%200%20216.4144%20232.00976%22%3E%3Cpath%20d%3D%22M211.80734%20139.0875c-3.18125%2016.36625-28.4925%2034.2775-57.5625%2037.74875-15.15875%201.80875-30.08375%203.47125-45.99875%202.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125%200%202.53375.15625%204.94625.46875%207.2025%203.38375%2025.68625%2025.47%2027.225%2046.39125%2027.9425%2021.11625.7225%2039.91875-5.20625%2039.91875-5.20625l.8675%2019.09s-14.77%207.93125-41.08125%209.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234%20213.82%201.40609%20165.31125.20859%20116.09125c-.365-14.61375-.14-28.39375-.14-39.91875%200-50.33%2032.97625-65.0825%2032.97625-65.0825C49.67234%203.45375%2078.20359.2425%20107.86484%200h.72875c29.66125.2425%2058.21125%203.45375%2074.8375%2011.09%200%200%2032.975%2014.7525%2032.975%2065.0825%200%200%20.41375%2037.13375-4.59875%2062.915%22%20fill%3D%22%233088d4%22%2F%3E%3Cpath%20d%3D%22M177.50984%2080.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025%200-17.4175%207.5075-17.4175%2022.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375%200-15.74%206.32875-15.74%2018.7975v59.15H38.90484V80.077c0-12.455%203.17125-22.3525%209.54125-29.675%206.56875-7.3225%2015.17125-11.07625%2025.85-11.07625%2012.355%200%2021.71125%204.74875%2027.8975%2014.2475l6.01375%2010.08125%206.015-10.08125c6.185-9.49875%2015.54125-14.2475%2027.8975-14.2475%2010.6775%200%2019.28%203.75375%2025.85%2011.07625%206.36875%207.3225%209.54%2017.22%209.54%2029.675%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E");
+  background-size: 16px;
+  background-repeat: no-repeat;
+  background-position: top 50% left 8px;
+  -webkit-transition: all 0.5s;
+  transition: all 0.5s;
+}
+.mstdn:hover {
+  background-color: #484c56;
+}
+.mstdn > span {
+  color: #9baec8;
+  font-size: 12px;
+  padding-left: 3px;
+}
+.mstdn > span:before {
+  content: "@";
+}
 @media (min-width: 75em) {
   
   [data-scrolldir="down"] .sticky {
index 346f209ba5e65123ff48bf7a3b2107edcc04acda..a3e1801f8b040197231b968295a63c90fd48584e 100644 (file)
@@ -1,24 +1,17 @@
-!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(t,e,n){!function(e,n){var r=function(t,e,n){"use strict";var r,i;if(function(){var e,n={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};for(e in i=t.lazySizesConfig||t.lazysizesConfig||{},n)e in i||(i[e]=n[e])}(),!e||!e.getElementsByClassName)return{init:function(){},cfg:i,noSupport:!0};var o=e.documentElement,s=t.HTMLPictureElement,a=t.addEventListener.bind(t),u=t.setTimeout,c=t.requestAnimationFrame||u,l=t.requestIdleCallback,h=/^picture$/i,f=["load","error","lazyincluded","_lazyloaded"],p={},d=Array.prototype.forEach,g=function(t,e){return p[e]||(p[e]=new RegExp("(\\s|^)"+e+"(\\s|$)")),p[e].test(t.getAttribute("class")||"")&&p[e]},m=function(t,e){g(t,e)||t.setAttribute("class",(t.getAttribute("class")||"").trim()+" "+e)},y=function(t,e){var n;(n=g(t,e))&&t.setAttribute("class",(t.getAttribute("class")||"").replace(n," "))},v=function(t,e,n){var r=n?"addEventListener":"removeEventListener";n&&v(t,e),f.forEach((function(n){t[r](n,e)}))},b=function(t,n,i,o,s){var a=e.createEvent("Event");return i||(i={}),i.instance=r,a.initEvent(n,!o,!s),a.detail=i,t.dispatchEvent(a),a},w=function(e,n){var r;!s&&(r=t.picturefill||i.pf)?(n&&n.src&&!e.getAttribute("srcset")&&e.setAttribute("srcset",n.src),r({reevaluate:!0,elements:[e]})):n&&n.src&&(e.src=n.src)},_=function(t,e){return(getComputedStyle(t,null)||{})[e]},x=function(t,e,n){for(n=n||t.offsetWidth;n<i.minSize&&e&&!t._lazysizesWidth;)n=e.offsetWidth,e=e.parentNode;return n},S=(pt=[],dt=[],gt=pt,mt=function(){var t=gt;for(gt=pt.length?dt:pt,ht=!0,ft=!1;t.length;)t.shift()();ht=!1},yt=function(t,n){ht&&!n?t.apply(this,arguments):(gt.push(t),ft||(ft=!0,(e.hidden?u:c)(mt)))},yt._lsFlush=mt,yt),C=function(t,e){return e?function(){S(t)}:function(){var e=this,n=arguments;S((function(){t.apply(e,n)}))}},A=function(t){var e,r,i=function(){e=null,t()},o=function(){var t=n.now()-r;t<99?u(o,99-t):(l||i)(i)};return function(){r=n.now(),e||(e=u(o,99))}},E=(V=/^img$/i,K=/^iframe$/i,J="onscroll"in t&&!/(gle|ing)bot/.test(navigator.userAgent),W=0,Q=0,X=-1,G=function(t){Q--,(!t||Q<0||!t.target)&&(Q=0)},Z=function(t){return null==U&&(U="hidden"==_(e.body,"visibility")),U||!("hidden"==_(t.parentNode,"visibility")&&"hidden"==_(t,"visibility"))},Y=function(t,n){var r,i=t,s=Z(t);for(H-=n,B+=n,F-=n,z+=n;s&&(i=i.offsetParent)&&i!=e.body&&i!=o;)(s=(_(i,"opacity")||1)>0)&&"visible"!=_(i,"overflow")&&(r=i.getBoundingClientRect(),s=z>r.left&&F<r.right&&B>r.top-1&&H<r.bottom+1);return s},tt=function(){var t,n,s,a,u,c,l,h,f,p,d,g,m=r.elements;if((D=i.loadMode)&&Q<8&&(t=m.length)){for(n=0,X++;n<t;n++)if(m[n]&&!m[n]._lazyRace)if(!J||r.prematureUnveil&&r.prematureUnveil(m[n]))at(m[n]);else if((h=m[n].getAttribute("data-expand"))&&(c=1*h)||(c=W),p||(p=!i.expand||i.expand<1?o.clientHeight>500&&o.clientWidth>500?500:370:i.expand,r._defEx=p,d=p*i.expFactor,g=i.hFac,U=null,W<d&&Q<1&&X>2&&D>2&&!e.hidden?(W=d,X=0):W=D>1&&X>1&&Q<6?p:0),f!==c&&($=innerWidth+c*g,M=innerHeight+c,l=-1*c,f=c),s=m[n].getBoundingClientRect(),(B=s.bottom)>=l&&(H=s.top)<=M&&(z=s.right)>=l*g&&(F=s.left)<=$&&(B||z||F||H)&&(i.loadHidden||Z(m[n]))&&(R&&Q<3&&!h&&(D<3||X<4)||Y(m[n],c))){if(at(m[n]),u=!0,Q>9)break}else!u&&R&&!a&&Q<4&&X<4&&D>2&&(L[0]||i.preloadAfterLoad)&&(L[0]||!h&&(B||z||F||H||"auto"!=m[n].getAttribute(i.sizesAttr)))&&(a=L[0]||m[n]);a&&!u&&at(a)}},et=function(t){var e,r=0,o=i.throttleDelay,s=i.ricTimeout,a=function(){e=!1,r=n.now(),t()},c=l&&s>49?function(){l(a,{timeout:s}),s!==i.ricTimeout&&(s=i.ricTimeout)}:C((function(){u(a)}),!0);return function(t){var i;(t=!0===t)&&(s=33),e||(e=!0,(i=o-(n.now()-r))<0&&(i=0),t||i<9?c():u(c,i))}}(tt),nt=function(t){var e=t.target;e._lazyCache?delete e._lazyCache:(G(t),m(e,i.loadedClass),y(e,i.loadingClass),v(e,it),b(e,"lazyloaded"))},rt=C(nt),it=function(t){rt({target:t.target})},ot=function(t){var e,n=t.getAttribute(i.srcsetAttr);(e=i.customMedia[t.getAttribute("data-media")||t.getAttribute("media")])&&t.setAttribute("media",e),n&&t.setAttribute("srcset",n)},st=C((function(t,e,n,r,o){var s,a,c,l,f,p;(f=b(t,"lazybeforeunveil",e)).defaultPrevented||(r&&(n?m(t,i.autosizesClass):t.setAttribute("sizes",r)),a=t.getAttribute(i.srcsetAttr),s=t.getAttribute(i.srcAttr),o&&(l=(c=t.parentNode)&&h.test(c.nodeName||"")),p=e.firesLoad||"src"in t&&(a||s||l),f={target:t},m(t,i.loadingClass),p&&(clearTimeout(P),P=u(G,2500),v(t,it,!0)),l&&d.call(c.getElementsByTagName("source"),ot),a?t.setAttribute("srcset",a):s&&!l&&(K.test(t.nodeName)?function(t,e){var n=t.getAttribute("data-load-mode")||i.iframeLoadMode;0==n?t.contentWindow.location.replace(e):1==n&&(t.src=e)}(t,s):t.src=s),o&&(a||l)&&w(t,{src:s})),t._lazyRace&&delete t._lazyRace,y(t,i.lazyClass),S((function(){var e=t.complete&&t.naturalWidth>1;p&&!e||(e&&m(t,i.fastLoadedClass),nt(f),t._lazyCache=!0,u((function(){"_lazyCache"in t&&delete t._lazyCache}),9)),"lazy"==t.loading&&Q--}),!0)})),at=function(t){if(!t._lazyRace){var e,n=V.test(t.nodeName),r=n&&(t.getAttribute(i.sizesAttr)||t.getAttribute("sizes")),o="auto"==r;(!o&&R||!n||!t.getAttribute("src")&&!t.srcset||t.complete||g(t,i.errorClass)||!g(t,i.lazyClass))&&(e=b(t,"lazyunveilread").detail,o&&T.updateElem(t,!0,t.offsetWidth),t._lazyRace=!0,Q++,st(t,e,o,r,n))}},ut=A((function(){i.loadMode=3,et()})),ct=function(){3==i.loadMode&&(i.loadMode=2),ut()},lt=function(){R||(n.now()-q<999?u(lt,999):(R=!0,i.loadMode=3,et(),a("scroll",ct,!0)))},{_:function(){q=n.now(),r.elements=e.getElementsByClassName(i.lazyClass),L=e.getElementsByClassName(i.lazyClass+" "+i.preloadClass),a("scroll",et,!0),a("resize",et,!0),a("pageshow",(function(t){if(t.persisted){var n=e.querySelectorAll("."+i.loadingClass);n.length&&n.forEach&&c((function(){n.forEach((function(t){t.complete&&at(t)}))}))}})),t.MutationObserver?new MutationObserver(et).observe(o,{childList:!0,subtree:!0,attributes:!0}):(o.addEventListener("DOMNodeInserted",et,!0),o.addEventListener("DOMAttrModified",et,!0),setInterval(et,999)),a("hashchange",et,!0),["focus","mouseover","click","load","transitionend","animationend"].forEach((function(t){e.addEventListener(t,et,!0)})),/d$|^c/.test(e.readyState)?lt():(a("load",lt),e.addEventListener("DOMContentLoaded",et),u(lt,2e4)),r.elements.length?(tt(),S._lsFlush()):et()},checkElems:et,unveil:at,_aLSL:ct}),T=(N=C((function(t,e,n,r){var i,o,s;if(t._lazysizesWidth=r,r+="px",t.setAttribute("sizes",r),h.test(e.nodeName||""))for(o=0,s=(i=e.getElementsByTagName("source")).length;o<s;o++)i[o].setAttribute("sizes",r);n.detail.dataAttr||w(t,n.detail)})),j=function(t,e,n){var r,i=t.parentNode;i&&(n=x(t,i,n),(r=b(t,"lazybeforesizes",{width:n,dataAttr:!!e})).defaultPrevented||(n=r.detail.width)&&n!==t._lazysizesWidth&&N(t,i,r,n))},I=A((function(){var t,e=k.length;if(e)for(t=0;t<e;t++)j(k[t])})),{_:function(){k=e.getElementsByClassName(i.autosizesClass),a("resize",I)},checkElems:I,updateElem:j}),O=function(){!O.i&&e.getElementsByClassName&&(O.i=!0,T._(),E._())};var k,N,j,I;var L,R,P,D,q,$,M,H,F,z,B,U,V,K,J,W,Q,X,G,Z,Y,tt,et,nt,rt,it,ot,st,at,ut,ct,lt;var ht,ft,pt,dt,gt,mt,yt;return u((function(){i.init&&O()})),r={cfg:i,autoSizer:T,loader:E,init:O,uP:w,aC:m,rC:y,hC:g,fire:b,gW:x,rAF:S}}(e,e.document,Date);e.lazySizes=r,t.exports&&(t.exports=r)}("undefined"!=typeof window?window:{})},function(t,e,n){"use strict";n.r(e);n(3),n(4),n(6),n(8),n(10),n(11),n(13),n(14),n(15);n(2)},function(t,e,n){},function(t,e,n){},function(t,e,n){function r(t,e){t.setAttribute("class","copied bg-primary-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2"),t.setAttribute("aria-label",e)}new(n(5))(".copy",{target:function(t){return t.classList.contains("copy-toggle")?t.previousElementSibling:t.nextElementSibling}}).on("success",(function(t){r(t.trigger,"Copied!"),t.clearSelection()})).on("error",(function(t){r(t.trigger,function(t,e){var n="",r="cut"===e?"X":"C";n=isMac?"Press ⌘-"+r:"Press Ctrl-"+r;return n}(t.action))}))},function(t,e,n){
+!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(t,e,n){!function(e,n){var r=function(t,e,n){"use strict";var r,i;if(function(){var e,n={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};for(e in i=t.lazySizesConfig||t.lazysizesConfig||{},n)e in i||(i[e]=n[e])}(),!e||!e.getElementsByClassName)return{init:function(){},cfg:i,noSupport:!0};var o=e.documentElement,s=t.HTMLPictureElement,a=t.addEventListener.bind(t),u=t.setTimeout,c=t.requestAnimationFrame||u,l=t.requestIdleCallback,h=/^picture$/i,f=["load","error","lazyincluded","_lazyloaded"],d={},p=Array.prototype.forEach,g=function(t,e){return d[e]||(d[e]=new RegExp("(\\s|^)"+e+"(\\s|$)")),d[e].test(t.getAttribute("class")||"")&&d[e]},m=function(t,e){g(t,e)||t.setAttribute("class",(t.getAttribute("class")||"").trim()+" "+e)},y=function(t,e){var n;(n=g(t,e))&&t.setAttribute("class",(t.getAttribute("class")||"").replace(n," "))},v=function(t,e,n){var r=n?"addEventListener":"removeEventListener";n&&v(t,e),f.forEach((function(n){t[r](n,e)}))},b=function(t,n,i,o,s){var a=e.createEvent("Event");return i||(i={}),i.instance=r,a.initEvent(n,!o,!s),a.detail=i,t.dispatchEvent(a),a},w=function(e,n){var r;!s&&(r=t.picturefill||i.pf)?(n&&n.src&&!e.getAttribute("srcset")&&e.setAttribute("srcset",n.src),r({reevaluate:!0,elements:[e]})):n&&n.src&&(e.src=n.src)},_=function(t,e){return(getComputedStyle(t,null)||{})[e]},x=function(t,e,n){for(n=n||t.offsetWidth;n<i.minSize&&e&&!t._lazysizesWidth;)n=e.offsetWidth,e=e.parentNode;return n},S=(dt=[],pt=[],gt=dt,mt=function(){var t=gt;for(gt=dt.length?pt:dt,ht=!0,ft=!1;t.length;)t.shift()();ht=!1},yt=function(t,n){ht&&!n?t.apply(this,arguments):(gt.push(t),ft||(ft=!0,(e.hidden?u:c)(mt)))},yt._lsFlush=mt,yt),C=function(t,e){return e?function(){S(t)}:function(){var e=this,n=arguments;S((function(){t.apply(e,n)}))}},A=function(t){var e,r,i=function(){e=null,t()},o=function(){var t=n.now()-r;t<99?u(o,99-t):(l||i)(i)};return function(){r=n.now(),e||(e=u(o,99))}},E=(V=/^img$/i,K=/^iframe$/i,J="onscroll"in t&&!/(gle|ing)bot/.test(navigator.userAgent),W=0,Q=0,X=-1,G=function(t){Q--,(!t||Q<0||!t.target)&&(Q=0)},Z=function(t){return null==U&&(U="hidden"==_(e.body,"visibility")),U||!("hidden"==_(t.parentNode,"visibility")&&"hidden"==_(t,"visibility"))},Y=function(t,n){var r,i=t,s=Z(t);for(H-=n,B+=n,F-=n,z+=n;s&&(i=i.offsetParent)&&i!=e.body&&i!=o;)(s=(_(i,"opacity")||1)>0)&&"visible"!=_(i,"overflow")&&(r=i.getBoundingClientRect(),s=z>r.left&&F<r.right&&B>r.top-1&&H<r.bottom+1);return s},tt=function(){var t,n,s,a,u,c,l,h,f,d,p,g,m=r.elements;if((D=i.loadMode)&&Q<8&&(t=m.length)){for(n=0,X++;n<t;n++)if(m[n]&&!m[n]._lazyRace)if(!J||r.prematureUnveil&&r.prematureUnveil(m[n]))at(m[n]);else if((h=m[n].getAttribute("data-expand"))&&(c=1*h)||(c=W),d||(d=!i.expand||i.expand<1?o.clientHeight>500&&o.clientWidth>500?500:370:i.expand,r._defEx=d,p=d*i.expFactor,g=i.hFac,U=null,W<p&&Q<1&&X>2&&D>2&&!e.hidden?(W=p,X=0):W=D>1&&X>1&&Q<6?d:0),f!==c&&($=innerWidth+c*g,M=innerHeight+c,l=-1*c,f=c),s=m[n].getBoundingClientRect(),(B=s.bottom)>=l&&(H=s.top)<=M&&(z=s.right)>=l*g&&(F=s.left)<=$&&(B||z||F||H)&&(i.loadHidden||Z(m[n]))&&(R&&Q<3&&!h&&(D<3||X<4)||Y(m[n],c))){if(at(m[n]),u=!0,Q>9)break}else!u&&R&&!a&&Q<4&&X<4&&D>2&&(L[0]||i.preloadAfterLoad)&&(L[0]||!h&&(B||z||F||H||"auto"!=m[n].getAttribute(i.sizesAttr)))&&(a=L[0]||m[n]);a&&!u&&at(a)}},et=function(t){var e,r=0,o=i.throttleDelay,s=i.ricTimeout,a=function(){e=!1,r=n.now(),t()},c=l&&s>49?function(){l(a,{timeout:s}),s!==i.ricTimeout&&(s=i.ricTimeout)}:C((function(){u(a)}),!0);return function(t){var i;(t=!0===t)&&(s=33),e||(e=!0,(i=o-(n.now()-r))<0&&(i=0),t||i<9?c():u(c,i))}}(tt),nt=function(t){var e=t.target;e._lazyCache?delete e._lazyCache:(G(t),m(e,i.loadedClass),y(e,i.loadingClass),v(e,it),b(e,"lazyloaded"))},rt=C(nt),it=function(t){rt({target:t.target})},ot=function(t){var e,n=t.getAttribute(i.srcsetAttr);(e=i.customMedia[t.getAttribute("data-media")||t.getAttribute("media")])&&t.setAttribute("media",e),n&&t.setAttribute("srcset",n)},st=C((function(t,e,n,r,o){var s,a,c,l,f,d;(f=b(t,"lazybeforeunveil",e)).defaultPrevented||(r&&(n?m(t,i.autosizesClass):t.setAttribute("sizes",r)),a=t.getAttribute(i.srcsetAttr),s=t.getAttribute(i.srcAttr),o&&(l=(c=t.parentNode)&&h.test(c.nodeName||"")),d=e.firesLoad||"src"in t&&(a||s||l),f={target:t},m(t,i.loadingClass),d&&(clearTimeout(P),P=u(G,2500),v(t,it,!0)),l&&p.call(c.getElementsByTagName("source"),ot),a?t.setAttribute("srcset",a):s&&!l&&(K.test(t.nodeName)?function(t,e){var n=t.getAttribute("data-load-mode")||i.iframeLoadMode;0==n?t.contentWindow.location.replace(e):1==n&&(t.src=e)}(t,s):t.src=s),o&&(a||l)&&w(t,{src:s})),t._lazyRace&&delete t._lazyRace,y(t,i.lazyClass),S((function(){var e=t.complete&&t.naturalWidth>1;d&&!e||(e&&m(t,i.fastLoadedClass),nt(f),t._lazyCache=!0,u((function(){"_lazyCache"in t&&delete t._lazyCache}),9)),"lazy"==t.loading&&Q--}),!0)})),at=function(t){if(!t._lazyRace){var e,n=V.test(t.nodeName),r=n&&(t.getAttribute(i.sizesAttr)||t.getAttribute("sizes")),o="auto"==r;(!o&&R||!n||!t.getAttribute("src")&&!t.srcset||t.complete||g(t,i.errorClass)||!g(t,i.lazyClass))&&(e=b(t,"lazyunveilread").detail,o&&T.updateElem(t,!0,t.offsetWidth),t._lazyRace=!0,Q++,st(t,e,o,r,n))}},ut=A((function(){i.loadMode=3,et()})),ct=function(){3==i.loadMode&&(i.loadMode=2),ut()},lt=function(){R||(n.now()-q<999?u(lt,999):(R=!0,i.loadMode=3,et(),a("scroll",ct,!0)))},{_:function(){q=n.now(),r.elements=e.getElementsByClassName(i.lazyClass),L=e.getElementsByClassName(i.lazyClass+" "+i.preloadClass),a("scroll",et,!0),a("resize",et,!0),a("pageshow",(function(t){if(t.persisted){var n=e.querySelectorAll("."+i.loadingClass);n.length&&n.forEach&&c((function(){n.forEach((function(t){t.complete&&at(t)}))}))}})),t.MutationObserver?new MutationObserver(et).observe(o,{childList:!0,subtree:!0,attributes:!0}):(o.addEventListener("DOMNodeInserted",et,!0),o.addEventListener("DOMAttrModified",et,!0),setInterval(et,999)),a("hashchange",et,!0),["focus","mouseover","click","load","transitionend","animationend"].forEach((function(t){e.addEventListener(t,et,!0)})),/d$|^c/.test(e.readyState)?lt():(a("load",lt),e.addEventListener("DOMContentLoaded",et),u(lt,2e4)),r.elements.length?(tt(),S._lsFlush()):et()},checkElems:et,unveil:at,_aLSL:ct}),T=(N=C((function(t,e,n,r){var i,o,s;if(t._lazysizesWidth=r,r+="px",t.setAttribute("sizes",r),h.test(e.nodeName||""))for(o=0,s=(i=e.getElementsByTagName("source")).length;o<s;o++)i[o].setAttribute("sizes",r);n.detail.dataAttr||w(t,n.detail)})),j=function(t,e,n){var r,i=t.parentNode;i&&(n=x(t,i,n),(r=b(t,"lazybeforesizes",{width:n,dataAttr:!!e})).defaultPrevented||(n=r.detail.width)&&n!==t._lazysizesWidth&&N(t,i,r,n))},I=A((function(){var t,e=O.length;if(e)for(t=0;t<e;t++)j(O[t])})),{_:function(){O=e.getElementsByClassName(i.autosizesClass),a("resize",I)},checkElems:I,updateElem:j}),k=function(){!k.i&&e.getElementsByClassName&&(k.i=!0,T._(),E._())};var O,N,j,I;var L,R,P,D,q,$,M,H,F,z,B,U,V,K,J,W,Q,X,G,Z,Y,tt,et,nt,rt,it,ot,st,at,ut,ct,lt;var ht,ft,dt,pt,gt,mt,yt;return u((function(){i.init&&k()})),r={cfg:i,autoSizer:T,loader:E,init:k,uP:w,aC:m,rC:y,hC:g,fire:b,gW:x,rAF:S}}(e,e.document,Date);e.lazySizes=r,t.exports&&(t.exports=r)}("undefined"!=typeof window?window:{})},function(t,e,n){"use strict";n.r(e);n(3),n(4),n(6),n(8),n(10),n(11),n(13),n(14),n(15);n(2)},function(t,e,n){},function(t,e,n){},function(t,e,n){function r(t,e){t.setAttribute("class","copied bg-primary-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2"),t.setAttribute("aria-label",e)}new(n(5))(".copy",{target:function(t){return t.classList.contains("copy-toggle")?t.previousElementSibling:t.nextElementSibling}}).on("success",(function(t){r(t.trigger,"Copied!"),t.clearSelection()})).on("error",(function(t){r(t.trigger,function(t,e){var n="",r="cut"===e?"X":"C";n=isMac?"Press ⌘-"+r:"Press Ctrl-"+r;return n}(t.action))}))},function(t,e,n){
 /*!
- * clipboard.js v2.0.11
- * https://clipboardjs.com/
- *
+ * clipboard.js v2.0.4
+ * https://zenorocha.github.io/clipboard.js
+ * 
  * Licensed MIT © Zeno Rocha
  */
-var r;r=function(){return function(){var t={686:function(t,e,n){"use strict";n.d(e,{default:function(){return x}});var r=n(279),i=n.n(r),o=n(370),s=n.n(o),a=n(817),u=n.n(a);function c(t){try{return document.execCommand(t)}catch(t){return!1}}var l=function(t){var e=u()(t);return c("cut"),e},h=function(t,e){var n=function(t){var e="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea");n.style.fontSize="12pt",n.style.border="0",n.style.padding="0",n.style.margin="0",n.style.position="absolute",n.style[e?"right":"left"]="-9999px";var r=window.pageYOffset||document.documentElement.scrollTop;return n.style.top="".concat(r,"px"),n.setAttribute("readonly",""),n.value=t,n}(t);e.container.appendChild(n);var r=u()(n);return c("copy"),n.remove(),r},f=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";return"string"==typeof t?n=h(t,e):t instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==t?void 0:t.type)?n=h(t.value,e):(n=u()(t),c("copy")),n};function p(t){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var d=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.action,n=void 0===e?"copy":e,r=t.container,i=t.target,o=t.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==i){if(!i||"object"!==p(i)||1!==i.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&i.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(i.hasAttribute("readonly")||i.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return o?f(o,{container:r}):i?"cut"===n?l(i):f(i,{container:r}):void 0};function g(t){return(g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function m(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function y(t,e){return(y=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function v(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=w(t);if(e){var i=w(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return b(this,n)}}function b(t,e){return!e||"object"!==g(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function w(t){return(w=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function _(t,e){var n="data-clipboard-".concat(t);if(e.hasAttribute(n))return e.getAttribute(n)}var x=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&y(t,e)}(o,t);var e,n,r,i=v(o);function o(t,e){var n;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o),(n=i.call(this)).resolveOptions(e),n.listenClick(t),n}return e=o,r=[{key:"copy",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body};return f(t,e)}},{key:"cut",value:function(t){return l(t)}},{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}],(n=[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===g(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=s()(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget,n=this.action(e)||"copy",r=d({action:n,container:this.container,target:this.target(e),text:this.text(e)});this.emit(r?"success":"error",{action:n,text:r,trigger:e,clearSelection:function(){e&&e.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(t){return _("action",t)}},{key:"defaultTarget",value:function(t){var e=_("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return _("text",t)}},{key:"destroy",value:function(){this.listener.destroy()}}])&&m(e.prototype,n),r&&m(e,r),o}(i())},828:function(t){if("undefined"!=typeof Element&&!Element.prototype.matches){var e=Element.prototype;e.matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}},438:function(t,e,n){var r=n(828);function i(t,e,n,r,i){var s=o.apply(this,arguments);return t.addEventListener(n,s,i),{destroy:function(){t.removeEventListener(n,s,i)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}t.exports=function(t,e,n,r,o){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,(function(t){return i(t,e,n,r,o)})))}},879:function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},370:function(t,e,n){var r=n(879),i=n(438);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!r.string(e))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(t))return function(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}(t,e,n);if(r.nodeList(t))return function(t,e,n){return Array.prototype.forEach.call(t,(function(t){t.addEventListener(e,n)})),{destroy:function(){Array.prototype.forEach.call(t,(function(t){t.removeEventListener(e,n)}))}}}(t,e,n);if(r.string(t))return function(t,e,n){return i(document.body,t,e,n)}(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(t){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},279:function(t){function e(){}e.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r<i;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],i=[];if(r&&e)for(var o=0,s=r.length;o<s;o++)r[o].fn!==e&&r[o].fn._!==e&&i.push(r[o]);return i.length?n[t]=i:delete n[t],this}},t.exports=e,t.exports.TinyEmitter=e}},e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={exports:{}};return t[r](i,i.exports,n),i.exports}return n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,{a:e}),e},n.d=function(t,e){for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n(686)}().default},t.exports=r()},function(t,e,n){n(7)({appId:"D1BPLZHGYQ",apiKey:"6df94e1e5d55d258c56f60d974d10314",indexName:"hugodocs",inputSelector:"#search-input",debug:!0})},function(t,e,n){
-/*! docsearch 2.6.3 | © Algolia | github.com/algolia/docsearch */
-var r;"undefined"!=typeof self&&self,r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=22)}([function(t,e,n){"use strict";var r,i=n(1);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,r){t&&(n.isArray(t)?e[r]=[].concat(t):n.isObject(t)&&(e[r]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(r,i){n&&(n=e.call(null,r,i,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(r,i){if(e.call(null,r,i,t))return n=!0,!1})),n):n},getUniqueId:(r=0,function(){return r++}),templatify:function(t){if(this.isFunction(t))return t;var e=i.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return(n?"":".")+t+e},escapeHighlightedString:function(t,e,n){e=e||"<em>";var r=document.createElement("div");r.appendChild(document.createTextNode(e)),n=n||"</em>";var i=document.createElement("div");i.appendChild(document.createTextNode(n));var s=document.createElement("div");return s.appendChild(document.createTextNode(t)),s.innerHTML.replace(RegExp(o(r.innerHTML),"g"),e).replace(RegExp(o(i.innerHTML),"g"),n)}}},function(t,e,n){"use strict";t.exports={element:null}},function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var o=t.length;if(o===+o)for(var s=0;s<o;s++)e.call(i,t[s],s,t);else for(var a in t)n.call(t,a)&&e.call(i,t[a],a,t)}},function(t,e){t.exports=function(t){return JSON.parse(JSON.stringify(t))}},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var r=n(12);function i(t,e){var r=n(2),i=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):i.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",e&&r(e,(function(t,e){i[e]=t}))}function o(t,e){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(e),i.apply(this,n),this.name="AlgoliaSearch"+t+"Error"}return r(n,i),n}r(i,Error),t.exports={AlgoliaSearchError:i,UnparsableJSON:o("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:o("RequestTimeout","Request timedout before getting a response"),Network:o("Network","Network issue, see err.more for details"),JSONPScriptFail:o("JSONPScriptFail","<script> was loaded but did not call our provided callback"),JSONPScriptError:o("JSONPScriptError","<script> unable to load due to an `error` event on it"),Unknown:o("Unknown","Unknown error occured")}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){var r=n(2);t.exports=function(t,e){var n=[];return r(t,(function(r,i){n.push(e(r,i,t))})),n}},function(t,e,n){(function(r){function i(){var t;try{t=e.storage.debug}catch(t){}return!t&&void 0!==r&&"env"in r&&(t=Object({NODE_ENV:"production"}).DEBUG),t}(e=t.exports=n(39)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var i=0,o=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(i++,"%c"===t&&(o=i))})),t.splice(o,0,r)}},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=i,e.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(i())}).call(e,n(9))},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(t){r=s}}();var u,c=[],l=!1,h=-1;function f(){l&&u&&(l=!1,u.length?c=u.concat(c):h=-1,c.length&&p())}function p(){if(!l){var t=a(f);l=!0;for(var e=c.length;e;){for(u=c,c=[];++h<e;)u&&u[h].run();h=-1,e=c.length}u=null,l=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function d(t,e){this.fun=t,this.array=e}function g(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new d(t,e)),1!==c.length||l||a(p)},d.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(t,e,n){"use strict";var r=n(53),i=/\s+/;function o(t,e,n,r){var o;if(!n)return this;for(e=e.split(i),n=r?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,r):n,this._callbacks=this._callbacks||{};o=e.shift();)this._callbacks[o]=this._callbacks[o]||{sync:[],async:[]},this._callbacks[o][t].push(n);return this}function s(t,e,n){return function(){for(var r,i=0,o=t.length;!r&&i<o;i+=1)r=!1===t[i].apply(e,n);return!r}}t.exports={onSync:function(t,e,n){return o.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return o.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;for(t=t.split(i);e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,o,a,u;if(!this._callbacks)return this;for(t=t.split(i),o=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)a=s(n.sync,this,[e].concat(o)),u=s(n.async,this,[e].concat(o)),a()&&r(u);return this}}},function(t,e,n){"use strict";var r=n(0),i={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};r.isMsie()&&r.mixin(i.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),r.isMsie()&&r.isMsie()<=7&&r.mixin(i.input,{marginTop:"-1px"}),t.exports=i},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e,n){t.exports=function(t,e){return function(n,i,o){if("function"==typeof n&&"object"==typeof i||"object"==typeof o)throw new r.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof n?(o=n,n=""):1!==arguments.length&&"function"!=typeof i||(o=i,i=void 0),"object"==typeof n&&null!==n?(i=n,n=void 0):null==n&&(n="");var s,a="";return void 0!==n&&(a+=t+"="+encodeURIComponent(n)),void 0!==i&&(i.additionalUA&&(s=i.additionalUA,delete i.additionalUA),a=this.as._getSearchParams(i,a)),this._search(a,e,o,s)}};var r=n(5)},function(t,e,n){t.exports=function(t,e){var r=n(36),i=n(2),o={};return i(r(t),(function(n){!0!==e(n)&&(o[n]=t[n])})),o}},function(t,e){var n;n=window,t.exports=function(t){var e,n,r=function(){var e,n,r,i,o,s=[],a=s.concat,u=s.filter,c=s.slice,l=t.document,h={},f={},p={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},d=/^\s*<(\w+|!)[^>]*>/,g=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,v=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],w=l.createElement("table"),_=l.createElement("tr"),x={tr:l.createElement("tbody"),tbody:w,thead:w,tfoot:w,td:_,th:_,"*":l.createElement("div")},S=/complete|loaded|interactive/,C=/^[\w-]*$/,A={},E=A.toString,T={},O=l.createElement("div"),k={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},N=Array.isArray||function(t){return t instanceof Array};function j(t){return null==t?String(t):A[E.call(t)]||"object"}function I(t){return"function"==j(t)}function L(t){return null!=t&&t==t.window}function R(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function P(t){return"object"==j(t)}function D(t){return P(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,r=n.type(t);return"function"!=r&&!L(t)&&("array"==r||0===e||"number"==typeof e&&e>0&&e-1 in t)}function $(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function M(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||p[$(t)]?e:e+"px"}function F(t){return"children"in t?c.call(t.children):n.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function z(t,e){var n,r=t?t.length:0;for(n=0;n<r;n++)this[n]=t[n];this.length=r,this.selector=e||""}function B(t,n,r){for(e in n)r&&(D(n[e])||N(n[e]))?(D(n[e])&&!D(t[e])&&(t[e]={}),N(n[e])&&!N(t[e])&&(t[e]=[]),B(t[e],n[e],r)):void 0!==n[e]&&(t[e]=n[e])}function U(t,e){return null==e?n(t):n(t).filter(e)}function V(t,e,n,r){return I(e)?e.call(t,n,r):e}function K(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function J(t,e){var n=t.className||"",r=n&&void 0!==n.baseVal;if(void 0===e)return r?n.baseVal:n;r?n.baseVal=e:t.className=e}function W(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?n.parseJSON(t):t):t}catch(e){return t}}function Q(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)Q(t.childNodes[n],e)}return T.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=O).appendChild(t),r=~T.qsa(i,e).indexOf(t),o&&O.removeChild(t),r},i=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},o=function(t){return u.call(t,(function(e,n){return t.indexOf(e)==n}))},T.fragment=function(t,e,r){var i,o,s;return g.test(t)&&(i=n(l.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(m,"<$1></$2>")),void 0===e&&(e=d.test(t)&&RegExp.$1),e in x||(e="*"),(s=x[e]).innerHTML=""+t,i=n.each(c.call(s.childNodes),(function(){s.removeChild(this)}))),D(r)&&(o=n(i),n.each(r,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),i},T.Z=function(t,e){return new z(t,e)},T.isZ=function(t){return t instanceof T.Z},T.init=function(t,e){var r,i;if(!t)return T.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&d.test(t))r=T.fragment(t,RegExp.$1,e),t=null;else{if(void 0!==e)return n(e).find(t);r=T.qsa(l,t)}else{if(I(t))return n(l).ready(t);if(T.isZ(t))return t;if(N(t))i=t,r=u.call(i,(function(t){return null!=t}));else if(P(t))r=[t],t=null;else if(d.test(t))r=T.fragment(t.trim(),RegExp.$1,e),t=null;else{if(void 0!==e)return n(e).find(t);r=T.qsa(l,t)}}return T.Z(r,t)},(n=function(t,e){return T.init(t,e)}).extend=function(t){var e,n=c.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){B(t,n,e)})),t},T.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=C.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:c.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=l.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},n.type=j,n.isFunction=I,n.isWindow=L,n.isArray=N,n.isPlainObject=D,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},n.inArray=function(t,e,n){return s.indexOf.call(e,t,n)},n.camelCase=i,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.noop=function(){},n.map=function(t,e){var r,i,o,s,a=[];if(q(t))for(i=0;i<t.length;i++)null!=(r=e(t[i],i))&&a.push(r);else for(o in t)null!=(r=e(t[o],o))&&a.push(r);return(s=a).length>0?n.fn.concat.apply([],s):s},n.each=function(t,e){var n,r;if(q(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(r in t)if(!1===e.call(t[r],r,t[r]))return t;return t},n.grep=function(t,e){return u.call(t,e)},t.JSON&&(n.parseJSON=JSON.parse),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){A["[object "+e+"]"]=e.toLowerCase()})),n.fn={constructor:T.Z,length:0,forEach:s.forEach,reduce:s.reduce,push:s.push,sort:s.sort,splice:s.splice,indexOf:s.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=T.isZ(e)?e.toArray():e;return a.apply(T.isZ(this)?this.toArray():this,n)},map:function(t){return n(n.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return n(c.apply(this,arguments))},ready:function(t){return S.test(l.readyState)&&l.body?t(n):l.addEventListener("DOMContentLoaded",(function(){t(n)}),!1),this},get:function(t){return void 0===t?c.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return s.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return I(t)?this.not(this.not(t)):n(u.call(this,(function(e){return T.matches(e,t)})))},add:function(t,e){return n(o(this.concat(n(t,e))))},is:function(t){return this.length>0&&T.matches(this[0],t)},not:function(t){var e=[];if(I(t)&&void 0!==t.call)this.each((function(n){t.call(this,n)||e.push(this)}));else{var r="string"==typeof t?this.filter(t):q(t)&&I(t.item)?c.call(t):n(t);this.forEach((function(t){r.indexOf(t)<0&&e.push(t)}))}return n(e)},has:function(t){return this.filter((function(){return P(t)?n.contains(this,t):n(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!P(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!P(t)?t:n(t)},find:function(t){var e=this;return t?"object"==typeof t?n(t).filter((function(){var t=this;return s.some.call(e,(function(e){return n.contains(e,t)}))})):1==this.length?n(T.qsa(this[0],t)):this.map((function(){return T.qsa(this,t)})):n()},closest:function(t,e){var r=[],i="object"==typeof t&&n(t);return this.each((function(n,o){for(;o&&!(i?i.indexOf(o)>=0:T.matches(o,t));)o=o!==e&&!R(o)&&o.parentNode;o&&r.indexOf(o)<0&&r.push(o)})),n(r)},parents:function(t){for(var e=[],r=this;r.length>0;)r=n.map(r,(function(t){if((t=t.parentNode)&&!R(t)&&e.indexOf(t)<0)return e.push(t),t}));return U(e,t)},parent:function(t){return U(o(this.pluck("parentNode")),t)},children:function(t){return U(this.map((function(){return F(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||c.call(this.childNodes)}))},siblings:function(t){return U(this.map((function(t,e){return u.call(F(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return n.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){var t,e,n;"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=(t=this.nodeName,h[t]||(e=l.createElement(t),l.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),h[t]=n),h[t]))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=I(t);if(this[0]&&!e)var r=n(t).get(0),i=r.parentNode||this.length>1;return this.each((function(o){n(this).wrapAll(e?t.call(this,o):i?r.cloneNode(!0):r)}))},wrapAll:function(t){if(this[0]){var e;for(n(this[0]).before(t=n(t));(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=I(t);return this.each((function(r){var i=n(this),o=i.contents(),s=e?t.call(this,r):t;o.length?o.wrapAll(s):i.append(s)}))},unwrap:function(){return this.parent().each((function(){n(this).replaceWith(n(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var e=n(this);(void 0===t?"none"==e.css("display"):t)?e.show():e.hide()}))},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var r=this.innerHTML;n(this).empty().append(V(this,t,e,r))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=V(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,n){var r;return"string"!=typeof t||1 in arguments?this.each((function(r){if(1===this.nodeType)if(P(t))for(e in t)K(this,e,t[e]);else K(this,t,V(this,n,r,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(r=this[0].getAttribute(t))?r:void 0},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){K(this,t)}),this)}))},prop:function(t,e){return t=k[t]||t,1 in arguments?this.each((function(n){this[t]=V(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=k[t]||t,this.each((function(){delete this[t]}))},data:function(t,e){var n="data-"+t.replace(v,"-$1").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?W(r):void 0},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=V(this,t,e,this.value)}))):this[0]&&(this[0].multiple?n(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var r=n(this),i=V(this,e,t,r.offset()),o=r.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==r.css("position")&&(s.position="relative"),r.css(s)}));if(!this.length)return null;if(l.documentElement!==this[0]&&!n.contains(l.documentElement,this[0]))return{top:0,left:0};var r=this[0].getBoundingClientRect();return{left:r.left+t.pageXOffset,top:r.top+t.pageYOffset,width:Math.round(r.width),height:Math.round(r.height)}},css:function(t,r){if(arguments.length<2){var o=this[0];if("string"==typeof t){if(!o)return;return o.style[i(t)]||getComputedStyle(o,"").getPropertyValue(t)}if(N(t)){if(!o)return;var s={},a=getComputedStyle(o,"");return n.each(t,(function(t,e){s[e]=o.style[i(e)]||a.getPropertyValue(e)})),s}}var u="";if("string"==j(t))r||0===r?u=$(t)+":"+H(t,r):this.each((function(){this.style.removeProperty($(t))}));else for(e in t)t[e]||0===t[e]?u+=$(e)+":"+H(e,t[e])+";":this.each((function(){this.style.removeProperty($(e))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&s.some.call(this,(function(t){return this.test(J(t))}),M(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){r=[];var i=J(this);V(this,t,e,i).split(/\s+/g).forEach((function(t){n(this).hasClass(t)||r.push(t)}),this),r.length&&J(this,i+(i?" ":"")+r.join(" "))}})):this},removeClass:function(t){return this.each((function(e){if("className"in this){if(void 0===t)return J(this,"");r=J(this),V(this,t,e,r).split(/\s+/g).forEach((function(t){r=r.replace(M(t)," ")})),J(this,r.trim())}}))},toggleClass:function(t,e){return t?this.each((function(r){var i=n(this);V(this,t,r,J(this)).split(/\s+/g).forEach((function(t){(void 0===e?!i.hasClass(t):e)?i.addClass(t):i.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return void 0===t?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return void 0===t?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),r=this.offset(),i=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return r.top-=parseFloat(n(t).css("margin-top"))||0,r.left-=parseFloat(n(t).css("margin-left"))||0,i.top+=parseFloat(n(e[0]).css("border-top-width"))||0,i.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:r.top-i.top,left:r.left-i.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||l.body;t&&!y.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t}))}},n.fn.detach=n.fn.remove,["width","height"].forEach((function(t){var e=t.replace(/./,(function(t){return t[0].toUpperCase()}));n.fn[t]=function(r){var i,o=this[0];return void 0===r?L(o)?o["inner"+e]:R(o)?o.documentElement["scroll"+e]:(i=this.offset())&&i[t]:this.each((function(e){(o=n(this)).css(t,V(this,r,e,o[t]()))}))}})),["after","prepend","before","append"].forEach((function(e,r){var i=r%2;n.fn[e]=function(){var e,o,s=n.map(arguments,(function(t){var r=[];return"array"==(e=j(t))?(t.forEach((function(t){return void 0!==t.nodeType?r.push(t):n.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(T.fragment(t)))})),r):"object"==e||null==t?t:T.fragment(t)})),a=this.length>1;return s.length<1?this:this.each((function(e,u){o=i?u:u.parentNode,u=0==r?u.nextSibling:1==r?u.firstChild:2==r?u:null;var c=n.contains(l.documentElement,o);s.forEach((function(e){if(a)e=e.cloneNode(!0);else if(!o)return n(e).remove();o.insertBefore(e,u),c&&Q(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},n.fn[i?e+"To":"insert"+(r?"Before":"After")]=function(t){return n(t)[e](this),this}})),T.Z.prototype=z.prototype=n.fn,T.uniq=o,T.deserializeValue=W,n.zepto=T,n}();return function(e){var n=1,r=Array.prototype.slice,i=e.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};function h(t){return t._zid||(t._zid=n++)}function f(t,e,n,r){if((e=p(e)).ns)var i=(o=e.ns,new RegExp("(?:^| )"+o.replace(" "," .* ?")+"(?: |$)"));var o;return(s[h(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)}))}function p(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function d(t,e){return t.del&&!u&&t.e in c||!!e}function g(t){return l[t]||u&&c[t]||t}function m(t,n,r,i,o,a,u){var c=h(t),f=s[c]||(s[c]=[]);n.split(/\s/).forEach((function(n){if("ready"==n)return e(document).ready(r);var s=p(n);s.fn=r,s.sel=o,s.e in l&&(r=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return s.fn.apply(this,arguments)}),s.del=a;var c=a||r;s.proxy=function(e){if(!(e=x(e)).isImmediatePropagationStopped()){try{var n=Object.getOwnPropertyDescriptor(e,"data");n&&!n.writable||(e.data=i)}catch(e){}var r=c.apply(t,null==e._args?[e]:[e].concat(e._args));return!1===r&&(e.preventDefault(),e.stopPropagation()),r}},s.i=f.length,f.push(s),"addEventListener"in t&&t.addEventListener(g(s.e),s.proxy,d(s,u))}))}function y(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,r).forEach((function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,d(e,i))}))}))}a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",e.event={add:m,remove:y},e.proxy=function(t,n){var s=2 in arguments&&r.call(arguments,2);if(i(t)){var a=function(){return t.apply(n,s?s.concat(r.call(arguments)):arguments)};return a._zid=h(t),a}if(o(n))return s?(s.unshift(t[n],t),e.proxy.apply(null,s)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var v=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function x(t,n){return!n&&t.isDefaultPrevented||(n||(n=t),e.each(_,(function(e,r){var i=n[e];t[e]=function(){return this[r]=v,i&&i.apply(n,arguments)},t[r]=b})),t.timeStamp||(t.timeStamp=Date.now()),(void 0!==n.defaultPrevented?n.defaultPrevented:"returnValue"in n?!1===n.returnValue:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=v)),t}function S(t){var e,n={originalEvent:t};for(e in t)w.test(e)||void 0===t[e]||(n[e]=t[e]);return x(n,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,s,a,u){var c,l,h=this;return t&&!o(t)?(e.each(t,(function(t,e){h.on(t,n,s,e,u)})),h):(o(n)||i(a)||!1===a||(a=s,s=n,n=void 0),void 0!==a&&!1!==s||(a=s,s=void 0),!1===a&&(a=b),h.each((function(i,o){u&&(c=function(t){return y(o,t.type,a),a.apply(this,arguments)}),n&&(l=function(t){var i,s=e(t.target).closest(n,o).get(0);if(s&&s!==o)return i=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||a).apply(s,[i].concat(r.call(arguments,1)))}),m(o,t,a,s,n,l||c)})))},e.fn.off=function(t,n,r){var s=this;return t&&!o(t)?(e.each(t,(function(t,e){s.off(t,n,e)})),s):(o(n)||i(r)||!1===r||(r=n,n=void 0),!1===r&&(r=b),s.each((function(){y(this,t,r,n)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):x(t))._args=n,this.each((function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var r,i;return this.each((function(s,a){(r=S(o(t)?e.Event(t):t))._args=n,r.target=a,e.each(f(a,t.type||t),(function(t,e){if(i=e.proxy(r),r.isImmediatePropagationStopped())return!1}))})),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(a[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),x(n)}}(r),n=[],r.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,r=t.camelCase,i=t.expando="Zepto"+ +new Date,o=[];function s(n,s,a){var u=n[i]||(n[i]=++t.uuid),c=e[u]||(e[u]=function(e){var n={};return t.each(e.attributes||o,(function(e,i){0==i.name.indexOf("data-")&&(n[r(i.name.replace("data-",""))]=t.zepto.deserializeValue(i.value))})),n}(n));return void 0!==s&&(c[r(s)]=a),c}t.fn.data=function(o,a){return void 0===a?t.isPlainObject(o)?this.each((function(e,n){t.each(o,(function(t,e){s(n,t,e)}))})):0 in this?function(o,a){var u=o[i],c=u&&e[u];if(void 0===a)return c||s(o);if(c){if(a in c)return c[a];var l=r(a);if(l in c)return c[l]}return n.call(t(o),a)}(this[0],o):void 0:this.each((function(){s(this,o,a)}))},t.data=function(e,n,r){return t(e).data(n,r)},t.hasData=function(n){var r=n[i],o=r&&e[r];return!!o&&!t.isEmptyObject(o)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var o=this[i],s=o&&e[o];s&&t.each(n||s,(function(t){delete s[n?r(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(r),r}(n)},function(t,e,n){"use strict";var r=n(0),i=n(1);function o(t){t&&t.el||r.error("EventBus initialized without el"),this.$el=i.element(t.el)}r.mixin(o.prototype,{trigger:function(t,e,n,i){var o=r.Event("autocomplete:"+t);return this.$el.trigger(o,[e,n,i]),o}}),t.exports=o},function(t,e,n){"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},function(t,e){t.exports="0.36.0"},function(t,e,n){"use strict";t.exports=function(t){var e=t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(15),o=(r=i)&&r.__esModule?r:{default:r};e.default=o.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default="2.6.3"},function(t,e,n){"use strict";var r,i=n(23),o=(r=i)&&r.__esModule?r:{default:r};t.exports=o.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=s(n(24)),i=s(n(25)),o=s(n(21));function s(t){return t&&t.__esModule?t:{default:t}}var a=(0,r.default)(i.default);a.version=o.default,e.default=a},function(t,e,n){"use strict";var r=Function.prototype.bind;t.exports=function(t){var e=function(){for(var e=arguments.length,n=Array(e),i=0;i<e;i++)n[i]=arguments[i];return new(r.apply(t,[null].concat(n)))};return e.__proto__=t,e.prototype=t.prototype,e}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),o=f(n(26)),s=f(n(29)),a=f(n(49)),u=f(n(64)),c=f(n(65)),l=f(n(21)),h=f(n(20));function f(t){return t&&t.__esModule?t:{default:t}}var p=function(){function t(e){var n=e.apiKey,i=e.indexName,o=e.inputSelector,c=e.appId,f=void 0===c?"BH4D9OD16A":c,p=e.debug,d=void 0!==p&&p,g=e.algoliaOptions,m=void 0===g?{}:g,y=e.queryDataCallback,v=void 0===y?null:y,b=e.autocompleteOptions,w=void 0===b?{debug:!1,hint:!1,autoselect:!0}:b,_=e.transformData,x=void 0!==_&&_,S=e.queryHook,C=void 0!==S&&S,A=e.handleSelected,E=void 0!==A&&A,T=e.enhancedSearchInput,O=void 0!==T&&T,k=e.layout,N=void 0===k?"collumns":k;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),t.checkArguments({apiKey:n,indexName:i,inputSelector:o,debug:d,algoliaOptions:m,queryDataCallback:v,autocompleteOptions:w,transformData:x,queryHook:C,handleSelected:E,enhancedSearchInput:O,layout:N}),this.apiKey=n,this.appId=f,this.indexName=i,this.input=t.getInputFromSelector(o),this.algoliaOptions=r({hitsPerPage:5},m),this.queryDataCallback=v||null;var j=!(!w||!w.debug)&&w.debug;w.debug=d||j,this.autocompleteOptions=w,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||"ds";var I=this.input&&"function"==typeof this.input.attr&&this.input.attr("aria-label");this.autocompleteOptions.ariaLabel=this.autocompleteOptions.ariaLabel||I||"search input",this.isSimpleLayout="simple"===N,this.client=(0,s.default)(this.appId,this.apiKey),this.client.addAlgoliaAgent("docsearch.js "+l.default),O&&(this.input=t.injectSearchBox(this.input)),this.autocomplete=(0,a.default)(this.input,w,[{source:this.getAutocompleteSource(x,C),templates:{suggestion:t.getSuggestionTemplate(this.isSimpleLayout),footer:u.default.footer,empty:t.getEmptyTemplate()}}]);var L=E;this.handleSelected=L||this.handleSelected,L&&(0,h.default)(".algolia-autocomplete").on("click",".ds-suggestions a",(function(t){t.preventDefault()})),this.autocomplete.on("autocomplete:selected",this.handleSelected.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on("autocomplete:shown",this.handleShown.bind(null,this.input)),O&&t.bindSearchBoxEvent()}return i(t,[{key:"getAutocompleteSource",value:function(e,n){var r=this;return function(i,o){n&&(i=n(i)||i),r.client.search([{indexName:r.indexName,query:i,params:r.algoliaOptions}]).then((function(n){r.queryDataCallback&&"function"==typeof r.queryDataCallback&&r.queryDataCallback(n);var i=n.results[0].hits;e&&(i=e(i)||i),o(t.formatHits(i))}))}}},{key:"handleSelected",value:function(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};"click"!==i.selectionMethod&&(t.setVal(""),window.location.assign(n.url))}},{key:"handleShown",value:function(t){var e=t.offset().left+t.width()/2,n=(0,h.default)(document).width()/2;isNaN(n)&&(n=900);var r=e-n>=0?"algolia-autocomplete-right":"algolia-autocomplete-left",i=e-n<0?"algolia-autocomplete-right":"algolia-autocomplete-left",o=(0,h.default)(".algolia-autocomplete");o.hasClass(r)||o.addClass(r),o.hasClass(i)&&o.removeClass(i)}}],[{key:"checkArguments",value:function(e){if(!e.apiKey||!e.indexName)throw new Error("Usage:\n  documentationSearch({\n  apiKey,\n  indexName,\n  inputSelector,\n  [ appId ],\n  [ algoliaOptions.{hitsPerPage} ]\n  [ autocompleteOptions.{hint,debug} ]\n})");if("string"!=typeof e.inputSelector)throw new Error("Error: inputSelector:"+e.inputSelector+"  must be a string. Each selector must match only one element and separated by ','");if(!t.getInputFromSelector(e.inputSelector))throw new Error("Error: No input element in the page matches "+e.inputSelector)}},{key:"injectSearchBox",value:function(t){t.before(u.default.searchBox);var e=t.prev().prev().find("input");return t.remove(),e}},{key:"bindSearchBoxEvent",value:function(){(0,h.default)('.searchbox [type="reset"]').on("click",(function(){(0,h.default)("input#docsearch").focus(),(0,h.default)(this).addClass("hide"),a.default.autocomplete.setVal("")})),(0,h.default)("input#docsearch").on("keyup",(function(){var t=document.querySelector("input#docsearch"),e=document.querySelector('.searchbox [type="reset"]');e.className="searchbox__reset",0===t.value.length&&(e.className+=" hide")}))}},{key:"getInputFromSelector",value:function(t){var e=(0,h.default)(t).filter("input");return e.length?(0,h.default)(e[0]):null}},{key:"formatHits",value:function(e){var n=c.default.deepClone(e).map((function(t){return t._highlightResult&&(t._highlightResult=c.default.mergeKeyWithParent(t._highlightResult,"hierarchy")),c.default.mergeKeyWithParent(t,"hierarchy")})),r=c.default.groupBy(n,"lvl0");return h.default.each(r,(function(t,e){var n=c.default.groupBy(e,"lvl1"),i=c.default.flattenAndFlagFirst(n,"isSubCategoryHeader");r[t]=i})),(r=c.default.flattenAndFlagFirst(r,"isCategoryHeader")).map((function(e){var n=t.formatURL(e),r=c.default.getHighlightedValue(e,"lvl0"),i=c.default.getHighlightedValue(e,"lvl1")||r,o=c.default.compact([c.default.getHighlightedValue(e,"lvl2")||i,c.default.getHighlightedValue(e,"lvl3"),c.default.getHighlightedValue(e,"lvl4"),c.default.getHighlightedValue(e,"lvl5"),c.default.getHighlightedValue(e,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> › </span>'),s=c.default.getSnippetedValue(e,"content"),a=i&&""!==i||o&&""!==o,u=o&&""!==o&&o!==i,l=!u&&i&&""!==i&&i!==r;return{isLvl0:!l&&!u,isLvl1:l,isLvl2:u,isLvl1EmptyOrDuplicate:!i||""===i||i===r,isCategoryHeader:e.isCategoryHeader,isSubCategoryHeader:e.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:a,category:r,subcategory:i,title:o,text:s,url:n}}))}},{key:"formatURL",value:function(t){var e=t.url,n=t.anchor;return e?-1!==e.indexOf("#")?e:n?t.url+"#"+t.anchor:e:n?"#"+t.anchor:(console.warn("no anchor nor url for : ",JSON.stringify(t)),null)}},{key:"getEmptyTemplate",value:function(){return function(t){return o.default.compile(u.default.empty).render(t)}}},{key:"getSuggestionTemplate",value:function(t){var e=t?u.default.suggestionSimple:u.default.suggestion,n=o.default.compile(e);return function(t){return n.render(t)}}}]),t}();e.default=p},function(t,e,n){var r=n(27);r.Template=n(28).Template,r.template=r.Template,t.exports=r},function(t,e,n){!function(t){var e=/\S/,n=/\"/g,r=/\n/g,i=/\r/g,o=/\\/g,s=/\u2028/,a=/\u2029/;function u(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function c(t,e,n){if(e.charAt(n)!=t.charAt(0))return!1;for(var r=1,i=t.length;r<i;r++)if(e.charAt(n+r)!=t.charAt(r))return!1;return!0}t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(n,r){var i,o=n.length,s=0,a=null,l=null,h="",f=[],p=!1,d=0,g=0,m="{{",y="}}";function v(){h.length>0&&(f.push({tag:"_t",text:new String(h)}),h="")}function b(n,r){if(v(),n&&function(){for(var n=!0,r=g;r<f.length;r++)if(!(n=t.tags[f[r].tag]<t.tags._v||"_t"==f[r].tag&&null===f[r].text.match(e)))return!1;return n}())for(var i,o=g;o<f.length;o++)f[o].text&&((i=f[o+1])&&">"==i.tag&&(i.indent=f[o].text.toString()),f.splice(o,1));else r||f.push({tag:"\n"});p=!1,g=f.length}function w(t,e){var n="="+y,r=t.indexOf(n,e),i=u(t.substring(t.indexOf("=",e)+1,r)).split(" ");return m=i[0],y=i[i.length-1],r+n.length-1}for(r&&(r=r.split(" "),m=r[0],y=r[1]),d=0;d<o;d++)0==s?c(m,n,d)?(--d,v(),s=1):"\n"==n.charAt(d)?b(p):h+=n.charAt(d):1==s?(d+=m.length-1,"="==(a=(l=t.tags[n.charAt(d+1)])?n.charAt(d+1):"_v")?(d=w(n,d),s=0):(l&&d++,s=2),p=d):c(y,n,d)?(f.push({tag:a,n:u(h),otag:m,ctag:y,i:"/"==a?p-m.length:d+y.length}),h="",d+=y.length-1,s=0,"{"==a&&("}}"==y?d++:"}"===(i=f[f.length-1]).n.substr(i.n.length-1)&&(i.n=i.n.substring(0,i.n.length-1)))):h+=n.charAt(d);return b(p,!0),f};var l={_t:!0,"\n":!0,$:!0,"/":!0};function h(t,e){for(var n=0,r=e.length;n<r;n++)if(e[n].o==t.n)return t.tag="#",!0}function f(t,e,n){for(var r=0,i=n.length;r<i;r++)if(n[r].c==t&&n[r].o==e)return!0}function p(t){var e=[];for(var n in t.partials)e.push('"'+g(n)+'":{name:"'+g(t.partials[n].name)+'", '+p(t.partials[n])+"}");return"partials: {"+e.join(",")+"}, subs: "+function(t){var e=[];for(var n in t)e.push('"'+g(n)+'": function(c,p,t,i) {'+t[n]+"}");return"{ "+e.join(",")+" }"}(t.subs)}t.stringify=function(e,n,r){return"{code: function (c,p,i) { "+t.wrapMain(e.code)+" },"+p(e)+"}"};var d=0;function g(t){return t.replace(o,"\\\\").replace(n,'\\"').replace(r,"\\n").replace(i,"\\r").replace(s,"\\u2028").replace(a,"\\u2029")}function m(t){return~t.indexOf(".")?"d":"f"}function y(t,e){var n="<"+(e.prefix||"")+t.n+d++;return e.partials[n]={name:t.n,partials:{}},e.code+='t.b(t.rp("'+g(n)+'",c,p,"'+(t.indent||"")+'"));',n}function v(t,e){e.code+="t.b(t.t(t."+m(t.n)+'("'+g(t.n)+'",c,p,0)));'}function b(t){return"t.b("+t+");"}t.generate=function(e,n,r){d=0;var i={code:"",subs:{},partials:{}};return t.walk(e,i),r.asString?this.stringify(i,n,r):this.makeTemplate(i,n,r)},t.wrapMain=function(t){return'var t=this;t.b(i=i||"");'+t+"return t.fl();"},t.template=t.Template,t.makeTemplate=function(t,e,n){var r=this.makePartials(t);return r.code=new Function("c","p","i",this.wrapMain(t.code)),new this.template(r,e,this,n)},t.makePartials=function(t){var e,n={subs:{},partials:t.partials,name:t.name};for(e in n.partials)n.partials[e]=this.makePartials(n.partials[e]);for(e in t.subs)n.subs[e]=new Function("c","p","t","i",t.subs[e]);return n},t.codegen={"#":function(e,n){n.code+="if(t.s(t."+m(e.n)+'("'+g(e.n)+'",c,p,1),c,p,0,'+e.i+","+e.end+',"'+e.otag+" "+e.ctag+'")){t.rs(c,p,function(c,p,t){',t.walk(e.nodes,n),n.code+="});c.pop();}"},"^":function(e,n){n.code+="if(!t.s(t."+m(e.n)+'("'+g(e.n)+'",c,p,1),c,p,1,0,0,"")){',t.walk(e.nodes,n),n.code+="};"},">":y,"<":function(e,n){var r={partials:{},code:"",subs:{},inPartial:!0};t.walk(e.nodes,r);var i=n.partials[y(e,n)];i.subs=r.subs,i.partials=r.partials},$:function(e,n){var r={subs:{},code:"",partials:n.partials,prefix:e.n};t.walk(e.nodes,r),n.subs[e.n]=r.code,n.inPartial||(n.code+='t.sub("'+g(e.n)+'",c,p,i);')},"\n":function(t,e){e.code+=b('"\\n"'+(t.last?"":" + i"))},_v:function(t,e){e.code+="t.b(t.v(t."+m(t.n)+'("'+g(t.n)+'",c,p,0)));'},_t:function(t,e){e.code+=b('"'+g(t.text)+'"')},"{":v,"&":v},t.walk=function(e,n){for(var r,i=0,o=e.length;i<o;i++)(r=t.codegen[e[i].tag])&&r(e[i],n);return n},t.parse=function(e,n,r){return function e(n,r,i,o){var s,a=[],u=null,c=null;for(s=i[i.length-1];n.length>0;){if(c=n.shift(),s&&"<"==s.tag&&!(c.tag in l))throw new Error("Illegal content in < super tag.");if(t.tags[c.tag]<=t.tags.$||h(c,o))i.push(c),c.nodes=e(n,c.tag,i,o);else{if("/"==c.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+c.n);if(u=i.pop(),c.n!=u.n&&!f(c.n,u.n,o))throw new Error("Nesting error: "+u.n+" vs. "+c.n);return u.end=c.i,a}"\n"==c.tag&&(c.last=0==n.length||"\n"==n[0].tag)}a.push(c)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return a}(e,0,[],(r=r||{}).sectionTags||[])},t.cache={},t.cacheKey=function(t,e){return[t,!!e.asString,!!e.disableLambda,e.delimiters,!!e.modelGet].join("||")},t.compile=function(e,n){n=n||{};var r=t.cacheKey(e,n),i=this.cache[r];if(i){var o=i.partials;for(var s in o)delete o[s].instance;return i}return i=this.generate(this.parse(this.scan(e,n.delimiters),e,n),e,n),this.cache[r]=i}}(e)},function(t,e,n){!function(t){function e(t,e,n){var r;return e&&"object"==typeof e&&(void 0!==e[t]?r=e[t]:n&&e.get&&"function"==typeof e.get&&(r=e.get(t))),r}t.Template=function(t,e,n,r){t=t||{},this.r=t.code||this.r,this.c=n,this.options=r||{},this.text=e||"",this.partials=t.partials||{},this.subs=t.subs||{},this.buf=""},t.Template.prototype={r:function(t,e,n){return""},v:function(t){return t=u(t),a.test(t)?t.replace(n,"&amp;").replace(r,"&lt;").replace(i,"&gt;").replace(o,"&#39;").replace(s,"&quot;"):t},t:u,render:function(t,e,n){return this.ri([t],e||{},n)},ri:function(t,e,n){return this.r(t,e,n)},ep:function(t,e){var n=this.partials[t],r=e[n.name];if(n.instance&&n.base==r)return n.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[t].base=r,n.subs){for(key in e.stackText||(e.stackText={}),n.subs)e.stackText[key]||(e.stackText[key]=void 0!==this.activeSub&&e.stackText[this.activeSub]?e.stackText[this.activeSub]:this.text);r=function(t,e,n,r,i,o){function s(){}function a(){}var u;s.prototype=t,a.prototype=t.subs;var c=new s;for(u in c.subs=new a,c.subsText={},c.buf="",r=r||{},c.stackSubs=r,c.subsText=o,e)r[u]||(r[u]=e[u]);for(u in r)c.subs[u]=r[u];for(u in i=i||{},c.stackPartials=i,n)i[u]||(i[u]=n[u]);for(u in i)c.partials[u]=i[u];return c}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,e.stackText)}return this.partials[t].instance=r,r},rp:function(t,e,n,r){var i=this.ep(t,n);return i?i.ri(e,n,r):""},rs:function(t,e,n){var r=t[t.length-1];if(c(r))for(var i=0;i<r.length;i++)t.push(r[i]),n(t,e,this),t.pop();else n(t,e,this)},s:function(t,e,n,r,i,o,s){var a;return(!c(t)||0!==t.length)&&("function"==typeof t&&(t=this.ms(t,e,n,r,i,o,s)),a=!!t,!r&&a&&e&&e.push("object"==typeof t?t:e[e.length-1]),a)},d:function(t,n,r,i){var o,s=t.split("."),a=this.f(s[0],n,r,i),u=this.options.modelGet,l=null;if("."===t&&c(n[n.length-2]))a=n[n.length-1];else for(var h=1;h<s.length;h++)void 0!==(o=e(s[h],a,u))?(l=a,a=o):a="";return!(i&&!a)&&(i||"function"!=typeof a||(n.push(l),a=this.mv(a,n,r),n.pop()),a)},f:function(t,n,r,i){for(var o=!1,s=!1,a=this.options.modelGet,u=n.length-1;u>=0;u--)if(void 0!==(o=e(t,n[u],a))){s=!0;break}return s?(i||"function"!=typeof o||(o=this.mv(o,n,r)),o):!i&&""},ls:function(t,e,n,r,i){var o=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(u(t.call(e,r)),e,n)),this.options.delimiters=o,!1},ct:function(t,e,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(t,this.options).render(e,n)},b:function(t){this.buf+=t},fl:function(){var t=this.buf;return this.buf="",t},ms:function(t,e,n,r,i,o,s){var a,u=e[e.length-1],c=t.call(u);return"function"==typeof c?!!r||(a=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,n,a.substring(i,o),s)):c},mv:function(t,e,n){var r=e[e.length-1],i=t.call(r);return"function"==typeof i?this.ct(u(i.call(r)),r,n):i},sub:function(t,e,n,r){var i=this.subs[t];i&&(this.activeSub=t,i(e,n,this,r),this.activeSub=!1)}};var n=/&/g,r=/</g,i=/>/g,o=/\'/g,s=/\"/g,a=/[&<>\"\']/;function u(t){return String(null==t?"":t)}var c=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}(e)},function(t,e,n){"use strict";var r=n(30),i=n(41);t.exports=i(r,"(lite) ")},function(t,e,n){t.exports=u;var r=n(5),i=n(31),o=n(32),s=n(38),a=Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER&&parseInt(Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER,10)||12e4;function u(t,e,i){var o=n(8)("algoliasearch"),s=n(3),a=n(6),u=n(7),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(!0!==i._allowEmptyCredentials&&!t)throw new r.AlgoliaSearchError("Please provide an application ID. "+l);if(!0!==i._allowEmptyCredentials&&!e)throw new r.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=e,this.hosts={read:[],write:[]},i=i||{},this._timeouts=i.timeouts||{connect:1e3,read:2e3,write:3e4},i.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=i.timeout);var h=i.protocol||"https:";if(/:$/.test(h)||(h+=":"),"http:"!==h&&"https:"!==h)throw new r.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+i.protocol+"`)");if(this._checkAppIdData(),i.hosts)a(i.hosts)?(this.hosts.read=s(i.hosts),this.hosts.write=s(i.hosts)):(this.hosts.read=s(i.hosts.read),this.hosts.write=s(i.hosts.write));else{var f=u(this._shuffleResult,(function(e){return t+"-"+e+".algolianet.com"})),p=(!1===i.dsn?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+p].concat(f),this.hosts.write=[this.applicationID+".algolia.net"].concat(f)}this.hosts.read=u(this.hosts.read,c(h)),this.hosts.write=u(this.hosts.write,c(h)),this.extraHeaders={},this.cache=i._cache||{},this._ua=i._ua,this._useCache=!(void 0!==i._useCache&&!i._cache)||i._useCache,this._useRequestCache=this._useCache&&i._useRequestCache,this._useFallback=void 0===i.useFallback||i.useFallback,this._setTimeout=i._setTimeout,o("init done, %j",this)}function c(t){return function(e){return t+"//"+e.toLowerCase()}}function l(t){if(void 0===Array.prototype.toJSON)return JSON.stringify(t);var e=Array.prototype.toJSON;delete Array.prototype.toJSON;var n=JSON.stringify(t);return Array.prototype.toJSON=e,n}function h(t){var e={};for(var n in t){var r;Object.prototype.hasOwnProperty.call(t,n)&&(r="x-algolia-api-key"===n||"x-algolia-application-id"===n?"**hidden for security purposes**":t[n],e[n]=r)}return e}u.prototype.initIndex=function(t){return new o(this,t)},u.prototype.setExtraHeader=function(t,e){this.extraHeaders[t.toLowerCase()]=e},u.prototype.getExtraHeader=function(t){return this.extraHeaders[t.toLowerCase()]},u.prototype.unsetExtraHeader=function(t){delete this.extraHeaders[t.toLowerCase()]},u.prototype.addAlgoliaAgent=function(t){-1===this._ua.indexOf(";"+t)&&(this._ua+=";"+t)},u.prototype._jsonRequest=function(t){this._checkAppIdData();var e,o,s,a=n(8)("algoliasearch:"+t.url),u=t.additionalUA||"",c=t.cache,f=this,p=0,d=!1,g=f._useFallback&&f._request.fallback&&t.fallback;this.apiKey.length>500&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,s=this._computeRequestHeaders({additionalUA:u,withApiKey:!1,headers:t.headers})):s=this._computeRequestHeaders({additionalUA:u,headers:t.headers}),void 0!==t.body&&(e=l(t.body)),a("request start");var m=[];function y(t,e,n){return f._useCache&&t&&e&&void 0!==e[n]}function v(e,n){if(y(f._useRequestCache,c,o)&&e.catch((function(){delete c[o]})),"function"!=typeof t.callback)return e.then(n);e.then((function(e){i((function(){t.callback(null,n(e))}),f._setTimeout||setTimeout)}),(function(e){i((function(){t.callback(e)}),f._setTimeout||setTimeout)}))}if(f._useCache&&f._useRequestCache&&(o=t.url),f._useCache&&f._useRequestCache&&e&&(o+="_body_"+e),y(f._useRequestCache,c,o)){a("serving request from cache");var b=c[o];return v("function"!=typeof b.then?f._promise.resolve({responseText:b}):b,(function(t){return JSON.parse(t.responseText)}))}var w=function n(i,v){f._checkAppIdData();var b=new Date;if(f._useCache&&!f._useRequestCache&&(o=t.url),f._useCache&&!f._useRequestCache&&e&&(o+="_body_"+v.body),y(!f._useRequestCache,c,o)){a("serving response from cache");var w=c[o];return f._promise.resolve({body:JSON.parse(w),responseText:w})}if(p>=f.hosts[t.hostType].length)return!g||d?(a("could not get any response"),f._promise.reject(new r.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+f.applicationID,{debugData:m}))):(a("switching to fallback"),p=0,v.method=t.fallback.method,v.url=t.fallback.url,v.jsonBody=t.fallback.body,v.jsonBody&&(v.body=l(v.jsonBody)),s=f._computeRequestHeaders({additionalUA:u,headers:t.headers}),v.timeouts=f._getTimeoutsForRequest(t.hostType),f._setHostIndexByType(0,t.hostType),d=!0,n(f._request.fallback,v));var _=f._getHostByType(t.hostType),x=_+v.url,S={body:v.body,jsonBody:v.jsonBody,method:v.method,headers:s,timeouts:v.timeouts,debug:a,forceAuthHeaders:v.forceAuthHeaders};return a("method: %s, url: %s, headers: %j, timeouts: %d",S.method,x,S.headers,S.timeouts),i===f._request.fallback&&a("using fallback"),i.call(f,x,S).then((function(t){var n=t&&t.body&&t.body.message&&t.body.status||t.statusCode||t&&t.body&&200;a("received response: statusCode: %s, computed statusCode: %d, headers: %j",t.statusCode,n,t.headers);var i=2===Math.floor(n/100),u=new Date;if(m.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b,statusCode:n}),i)return f._useCache&&!f._useRequestCache&&c&&(c[o]=t.responseText),{responseText:t.responseText,body:t.body};if(4!==Math.floor(n/100))return p+=1,C();a("unrecoverable error");var l=new r.AlgoliaSearchError(t.body&&t.body.message,{debugData:m,statusCode:n});return f._promise.reject(l)}),(function(o){a("error: %s, stack: %s",o.message,o.stack);var u=new Date;return m.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b}),o instanceof r.AlgoliaSearchError||(o=new r.Unknown(o&&o.message,o)),p+=1,o instanceof r.Unknown||o instanceof r.UnparsableJSON||p>=f.hosts[t.hostType].length&&(d||!g)?(o.debugData=m,f._promise.reject(o)):o instanceof r.RequestTimeout?(a("retrying request with higher timeout"),f._incrementHostIndex(t.hostType),f._incrementTimeoutMultipler(),v.timeouts=f._getTimeoutsForRequest(t.hostType),n(i,v)):C()}));function C(){return a("retrying request"),f._incrementHostIndex(t.hostType),n(i,v)}}(f._request,{url:t.url,method:t.method,body:e,jsonBody:t.body,timeouts:f._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return f._useCache&&f._useRequestCache&&c&&(c[o]=w),v(w,(function(t){return t.body}))},u.prototype._getSearchParams=function(t,e){if(null==t)return e;for(var n in t)null!==n&&void 0!==t[n]&&t.hasOwnProperty(n)&&(e+=""===e?"":"&",e+=n+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(t[n])?l(t[n]):t[n]));return e},u.prototype._computeRequestHeaders=function(t){var e=n(2),r={"x-algolia-agent":t.additionalUA?this._ua+";"+t.additionalUA:this._ua,"x-algolia-application-id":this.applicationID};return!1!==t.withApiKey&&(r["x-algolia-api-key"]=this.apiKey),this.userToken&&(r["x-algolia-usertoken"]=this.userToken),this.securityTags&&(r["x-algolia-tagfilters"]=this.securityTags),e(this.extraHeaders,(function(t,e){r[e]=t})),t.headers&&e(t.headers,(function(t,e){r[e]=t})),r},u.prototype.search=function(t,e,r){var i=n(6),o=n(7);if(!i(t))throw new Error("Usage: client.search(arrayOfQueries[, callback])");"function"==typeof e?(r=e,e={}):void 0===e&&(e={});var s=this,a={requests:o(t,(function(t){var e="";return void 0!==t.query&&(e+="query="+encodeURIComponent(t.query)),{indexName:t.indexName,params:s._getSearchParams(t.params,e)}}))},u=o(a.requests,(function(t,e){return e+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(t.indexName)+"?"+t.params)})).join("&");return void 0!==e.strategy&&(a.strategy=e.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/*/queries",body:a,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:r})},u.prototype.searchForFacetValues=function(t){var e=n(6),r=n(7),i="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!e(t))throw new Error(i);var o=this;return o._promise.all(r(t,(function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(i);var e=n(3),r=n(14),s=t.indexName,a=t.params,u=a.facetName,c=r(e(a),(function(t){return"facetName"===t})),l=o._getSearchParams(c,"");return o._jsonRequest({cache:o.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(s)+"/facets/"+encodeURIComponent(u)+"/query",hostType:"read",body:{params:l}})})))},u.prototype.setSecurityTags=function(t){if("[object Array]"===Object.prototype.toString.call(t)){for(var e=[],n=0;n<t.length;++n)if("[object Array]"===Object.prototype.toString.call(t[n])){for(var r=[],i=0;i<t[n].length;++i)r.push(t[n][i]);e.push("("+r.join(",")+")")}else e.push(t[n]);t=e.join(",")}this.securityTags=t},u.prototype.setUserToken=function(t){this.userToken=t},u.prototype.clearCache=function(){this.cache={}},u.prototype.setRequestTimeout=function(t){t&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=t)},u.prototype.setTimeouts=function(t){this._timeouts=t},u.prototype.getTimeouts=function(){return this._timeouts},u.prototype._getAppIdData=function(){var t=s.get(this.applicationID);return null!==t&&this._cacheAppIdData(t),t},u.prototype._setAppIdData=function(t){return t.lastChange=(new Date).getTime(),this._cacheAppIdData(t),s.set(this.applicationID,t)},u.prototype._checkAppIdData=function(){var t=this._getAppIdData(),e=(new Date).getTime();return null===t||e-t.lastChange>a?this._resetInitialAppIdData(t):t},u.prototype._resetInitialAppIdData=function(t){var e=t||{};return e.hostIndexes={read:0,write:0},e.timeoutMultiplier=1,e.shuffleResult=e.shuffleResult||function(t){for(var e,n,r=t.length;0!==r;)n=Math.floor(Math.random()*r),e=t[r-=1],t[r]=t[n],t[n]=e;return t}([1,2,3]),this._setAppIdData(e)},u.prototype._cacheAppIdData=function(t){this._hostIndexes=t.hostIndexes,this._timeoutMultiplier=t.timeoutMultiplier,this._shuffleResult=t.shuffleResult},u.prototype._partialAppIdDataUpdate=function(t){var e=n(2),r=this._getAppIdData();return e(t,(function(t,e){r[e]=t})),this._setAppIdData(r)},u.prototype._getHostByType=function(t){return this.hosts[t][this._getHostIndexByType(t)]},u.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},u.prototype._getHostIndexByType=function(t){return this._hostIndexes[t]},u.prototype._setHostIndexByType=function(t,e){var r=n(3)(this._hostIndexes);return r[e]=t,this._partialAppIdDataUpdate({hostIndexes:r}),t},u.prototype._incrementHostIndex=function(t){return this._setHostIndexByType((this._getHostIndexByType(t)+1)%this.hosts[t].length,t)},u.prototype._incrementTimeoutMultipler=function(){var t=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:t})},u.prototype._getTimeoutsForRequest=function(t){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[t]*this._timeoutMultiplier}}},function(t,e){t.exports=function(t,e){e(t,0)}},function(t,e,n){var r=n(13),i=n(33),o=n(34);function s(t,e){this.indexName=e,this.as=t,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}t.exports=s,s.prototype.clearCache=function(){this.cache={}},s.prototype.search=r("query"),s.prototype.similarSearch=r("similarQuery"),s.prototype.browse=function(t,e,r){var i,o,s=n(35),a=this;0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(i=0,r=arguments[0],t=void 0):"number"==typeof arguments[0]?(i=arguments[0],"number"==typeof arguments[1]?o=arguments[1]:"function"==typeof arguments[1]&&(r=arguments[1],o=void 0),t=void 0,e=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(r=arguments[1]),e=arguments[0],t=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(r=arguments[1],e=void 0),e=s({},e||{},{page:i,hitsPerPage:o,query:t});var u=this.as._getSearchParams(e,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a.indexName)+"/browse",body:{params:u},hostType:"read",callback:r})},s.prototype.browseFrom=function(t,e){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:t},hostType:"read",callback:e})},s.prototype.searchForFacetValues=function(t,e){var r=n(3),i=n(14);if(void 0===t.facetName||void 0===t.facetQuery)throw new Error("Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])");var o=t.facetName,s=i(r(t),(function(t){return"facetName"===t})),a=this.as._getSearchParams(s,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(o)+"/query",hostType:"read",body:{params:a},callback:e})},s.prototype.searchFacet=i((function(t,e){return this.searchForFacetValues(t,e)}),o("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),s.prototype._search=function(t,e,n,r){return this.as._jsonRequest({cache:this.cache,method:"POST",url:e||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:t},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:t}},callback:n,additionalUA:r})},s.prototype.getObject=function(t,e,n){var r=this;1!==arguments.length&&"function"!=typeof e||(n=e,e=void 0);var i="";if(void 0!==e){i="?attributes=";for(var o=0;o<e.length;++o)0!==o&&(i+=","),i+=e[o]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(r.indexName)+"/"+encodeURIComponent(t)+i,hostType:"read",callback:n})},s.prototype.getObjects=function(t,e,r){var i=n(6),o=n(7),s="Usage: index.getObjects(arrayOfObjectIDs[, callback])";if(!i(t))throw new Error(s);var a=this;1!==arguments.length&&"function"!=typeof e||(r=e,e=void 0);var u={requests:o(t,(function(t){var n={indexName:a.indexName,objectID:t};return e&&(n.attributesToRetrieve=e.join(",")),n}))};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:u,callback:r})},s.prototype.as=null,s.prototype.indexName=null,s.prototype.typeAheadArgs=null,s.prototype.typeAheadValueOption=null},function(t,e){t.exports=function(t,e){var n=!1;return function(){return n||(console.warn(e),n=!0),t.apply(this,arguments)}}},function(t,e){t.exports=function(t,e){var n=t.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+t+"` was replaced by `"+e+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+n}},function(t,e,n){var r=n(2);t.exports=function t(e){var n=Array.prototype.slice.call(arguments);return r(n,(function(n){for(var r in n)n.hasOwnProperty(r)&&("object"==typeof e[r]&&"object"==typeof n[r]?e[r]=t({},e[r],n[r]):void 0!==n[r]&&(e[r]=n[r]))})),e}},function(t,e,n){"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=Array.prototype.slice,s=n(37),a=Object.prototype.propertyIsEnumerable,u=!a.call({toString:null},"toString"),c=a.call((function(){}),"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(t){var e=t.constructor;return e&&e.prototype===t},f={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},p=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!f["$"+t]&&r.call(window,t)&&null!==window[t]&&"object"==typeof window[t])try{h(window[t])}catch(t){return!0}}catch(t){return!0}return!1}(),d=function(t){var e=null!==t&&"object"==typeof t,n="[object Function]"===i.call(t),o=s(t),a=e&&"[object String]"===i.call(t),f=[];if(!e&&!n&&!o)throw new TypeError("Object.keys called on a non-object");var d=c&&n;if(a&&t.length>0&&!r.call(t,0))for(var g=0;g<t.length;++g)f.push(String(g));if(o&&t.length>0)for(var m=0;m<t.length;++m)f.push(String(m));else for(var y in t)d&&"prototype"===y||!r.call(t,y)||f.push(String(y));if(u)for(var v=function(t){if("undefined"==typeof window||!p)return h(t);try{return h(t)}catch(t){return!1}}(t),b=0;b<l.length;++b)v&&"constructor"===l[b]||!r.call(t,l[b])||f.push(l[b]);return f};d.shim=function(){if(Object.keys){if(!function(){return 2===(Object.keys(arguments)||"").length}(1,2)){var t=Object.keys;Object.keys=function(e){return s(e)?t(o.call(e)):t(e)}}}else Object.keys=d;return Object.keys||d},t.exports=d},function(t,e,n){"use strict";var r=Object.prototype.toString;t.exports=function(t){var e=r.call(t),n="[object Arguments]"===e;return n||(n="[object Array]"!==e&&null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===r.call(t.callee)),n}},function(t,e,n){(function(e){var r,i=n(8)("algoliasearch:src/hostIndexState.js"),o={state:{},set:function(t,e){return this.state[t]=e,this.state[t]},get:function(t){return this.state[t]||null}},s={set:function(t,n){o.set(t,n);try{var r=JSON.parse(e.localStorage["algoliasearch-client-js"]);return r[t]=n,e.localStorage["algoliasearch-client-js"]=JSON.stringify(r),r[t]}catch(e){return a(t,e)}},get:function(t){try{return JSON.parse(e.localStorage["algoliasearch-client-js"])[t]||null}catch(e){return a(t,e)}}};function a(t,n){return i("localStorage failed with",n),function(){try{e.localStorage.removeItem("algoliasearch-client-js")}catch(t){}}(),(r=o).get(t)}function u(t,e){return 1===arguments.length?r.get(t):r.set(t,e)}function c(){try{return"localStorage"in e&&null!==e.localStorage&&(e.localStorage["algoliasearch-client-js"]||e.localStorage.setItem("algoliasearch-client-js",JSON.stringify({})),!0)}catch(t){return!1}}r=c()?s:o,t.exports={get:u,set:u,supportsLocalStorage:c}}).call(e,n(4))},function(t,e,n){var r;function i(t){function n(){if(n.enabled){var t=n,i=+new Date,o=i-(r||i);t.diff=o,t.prev=r,t.curr=i,r=i;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var u=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=e.formatters[r];if("function"==typeof i){var o=s[u];n=i.call(t,o),s.splice(u,1),u--}return n})),e.formatArgs.call(t,s);var c=n.log||e.log||console.log.bind(console);c.apply(t,s)}}return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=function(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}(t),"function"==typeof e.init&&e.init(n),n}(e=t.exports=i.debug=i.default=i).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&("-"===(t=n[i].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1},e.humanize=n(40),e.names=[],e.skips=[],e.formatters={}},function(t,e){var n=1e3,r=6e4,i=60*r,o=24*i;function s(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}t.exports=function(t,e){e=e||{};var a,u=typeof t;if("string"===u&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var s=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"days":case"day":case"d":return s*o;case"hours":case"hour":case"hrs":case"hr":case"h":return s*i;case"minutes":case"minute":case"mins":case"min":case"m":return s*r;case"seconds":case"second":case"secs":case"sec":case"s":return s*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}(t);if("number"===u&&!1===isNaN(t))return e.long?s(a=t,o,"day")||s(a,i,"hour")||s(a,r,"minute")||s(a,n,"second")||a+" ms":function(t){return t>=o?Math.round(t/o)+"d":t>=i?Math.round(t/i)+"h":t>=r?Math.round(t/r)+"m":t>=n?Math.round(t/n)+"s":t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){"use strict";var r=n(42),i=r.Promise||n(43).Promise;t.exports=function(t,e){var o=n(12),s=n(5),a=n(44),u=n(46),c=n(47);function l(t,e,r){return(r=n(3)(r||{}))._ua=r._ua||l.ua,new f(t,e,r)}e=e||"",l.version=n(48),l.ua="Algolia for vanilla JavaScript "+e+l.version,l.initPlaces=c(l),r.__algolia={debug:n(8),algoliasearch:l};var h={hasXMLHttpRequest:"XMLHttpRequest"in r,hasXDomainRequest:"XDomainRequest"in r};function f(){t.apply(this,arguments)}return h.hasXMLHttpRequest&&(h.cors="withCredentials"in new XMLHttpRequest),o(f,t),f.prototype._request=function(t,e){return new i((function(n,r){if(h.cors||h.hasXDomainRequest){t=a(t,e.headers);var i,o,u=e.body,c=h.cors?new XMLHttpRequest:new XDomainRequest,l=!1;i=setTimeout(f,e.timeouts.connect),c.onprogress=function(){l||p()},"onreadystatechange"in c&&(c.onreadystatechange=function(){!l&&c.readyState>1&&p()}),c.onload=function(){if(!o){var t;clearTimeout(i);try{t={body:JSON.parse(c.responseText),responseText:c.responseText,statusCode:c.status,headers:c.getAllResponseHeaders&&c.getAllResponseHeaders()||{}}}catch(e){t=new s.UnparsableJSON({more:c.responseText})}t instanceof s.UnparsableJSON?r(t):n(t)}},c.onerror=function(t){o||(clearTimeout(i),r(new s.Network({more:t})))},c instanceof XMLHttpRequest?(c.open(e.method,t,!0),e.forceAuthHeaders&&(c.setRequestHeader("x-algolia-application-id",e.headers["x-algolia-application-id"]),c.setRequestHeader("x-algolia-api-key",e.headers["x-algolia-api-key"]))):c.open(e.method,t),h.cors&&(u&&("POST"===e.method?c.setRequestHeader("content-type","application/x-www-form-urlencoded"):c.setRequestHeader("content-type","application/json")),c.setRequestHeader("accept","application/json")),u?c.send(u):c.send()}else r(new s.Network("CORS not supported"));function f(){o=!0,c.abort(),r(new s.RequestTimeout)}function p(){l=!0,clearTimeout(i),i=setTimeout(f,e.timeouts.complete)}}))},f.prototype._request.fallback=function(t,e){return t=a(t,e.headers),new i((function(n,r){u(t,e,(function(t,e){t?r(t):n(e)}))}))},f.prototype._promise={reject:function(t){return i.reject(t)},resolve:function(t){return i.resolve(t)},delay:function(t){return new i((function(e){setTimeout(e,t)}))},all:function(t){return i.all(t)}},l}},function(t,e,n){(function(e){var n;n="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},t.exports=n}).call(e,n(4))},function(t,e,n){(function(e,n){
+var r;r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),o=u(n(1)),s=u(n(3)),a=u(n(4));function u(t){return t&&t.__esModule?t:{default:t}}var c=function(t){function e(t,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var r=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.resolveOptions(n),r.listenClick(t),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),i(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,a.default)(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return l("action",t)}},{key:"defaultTarget",value:function(t){var e=l("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return l("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}]),e}(s.default);function l(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=c},function(t,e,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=n(2),a=(r=s)&&r.__esModule?r:{default:r},u=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.resolveOptions(e),this.initSelection()}return o(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,a.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,a.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":i(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r<i;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],i=[];if(r&&e)for(var o=0,s=r.length;o<s;o++)r[o].fn!==e&&r[o].fn._!==e&&i.push(r[o]);return i.length?n[t]=i:delete n[t],this}},t.exports=n},function(t,e,n){var r=n(5),i=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!r.string(e))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(t))return function(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}(t,e,n);if(r.nodeList(t))return function(t,e,n){return Array.prototype.forEach.call(t,(function(t){t.addEventListener(e,n)})),{destroy:function(){Array.prototype.forEach.call(t,(function(t){t.removeEventListener(e,n)}))}}}(t,e,n);if(r.string(t))return function(t,e,n){return i(document.body,t,e,n)}(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(7);function i(t,e,n,r,i){var s=o.apply(this,arguments);return t.addEventListener(n,s,i),{destroy:function(){t.removeEventListener(n,s,i)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}t.exports=function(t,e,n,r,o){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,(function(t){return i(t,e,n,r,o)})))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])},t.exports=r()},function(t,e,n){n(7)({appId:"D1BPLZHGYQ",apiKey:"6df94e1e5d55d258c56f60d974d10314",indexName:"hugodocs",inputSelector:"#search-input",debug:!0})},function(t,e,n){
+/*! docsearch 2.6.1 | © Algolia | github.com/algolia/docsearch */
+var r;"undefined"!=typeof self&&self,r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=22)}([function(t,e,n){"use strict";var r,i=n(1);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,r){t&&(n.isArray(t)?e[r]=[].concat(t):n.isObject(t)&&(e[r]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(r,i){if(!(n=e.call(null,r,i,t)))return!1})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(r,i){if(e.call(null,r,i,t))return n=!0,!1})),n):n},getUniqueId:(r=0,function(){return r++}),templatify:function(t){if(this.isFunction(t))return t;var e=i.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return(n?"":".")+t+e},escapeHighlightedString:function(t,e,n){e=e||"<em>";var r=document.createElement("div");r.appendChild(document.createTextNode(e)),n=n||"</em>";var i=document.createElement("div");i.appendChild(document.createTextNode(n));var s=document.createElement("div");return s.appendChild(document.createTextNode(t)),s.innerHTML.replace(RegExp(o(r.innerHTML),"g"),e).replace(RegExp(o(i.innerHTML),"g"),n)}}},function(t,e,n){"use strict";t.exports={element:null}},function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var o=t.length;if(o===+o)for(var s=0;s<o;s++)e.call(i,t[s],s,t);else for(var a in t)n.call(t,a)&&e.call(i,t[a],a,t)}},function(t,e){t.exports=function(t){return JSON.parse(JSON.stringify(t))}},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var r=n(12);function i(t,e){var r=n(2),i=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):i.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",e&&r(e,(function(t,e){i[e]=t}))}function o(t,e){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(e),i.apply(this,n),this.name="AlgoliaSearch"+t+"Error"}return r(n,i),n}r(i,Error),t.exports={AlgoliaSearchError:i,UnparsableJSON:o("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:o("RequestTimeout","Request timedout before getting a response"),Network:o("Network","Network issue, see err.more for details"),JSONPScriptFail:o("JSONPScriptFail","<script> was loaded but did not call our provided callback"),JSONPScriptError:o("JSONPScriptError","<script> unable to load due to an `error` event on it"),Unknown:o("Unknown","Unknown error occured")}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){var r=n(2);t.exports=function(t,e){var n=[];return r(t,(function(r,i){n.push(e(r,i,t))})),n}},function(t,e,n){(function(r){function i(){var t;try{t=e.storage.debug}catch(t){}return!t&&void 0!==r&&"env"in r&&(t=Object({NODE_ENV:"production"}).DEBUG),t}(e=t.exports=n(39)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var i=0,o=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(i++,"%c"===t&&(o=i))})),t.splice(o,0,r)}},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=i,e.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(i())}).call(e,n(9))},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(t){r=s}}();var u,c=[],l=!1,h=-1;function f(){l&&u&&(l=!1,u.length?c=u.concat(c):h=-1,c.length&&d())}function d(){if(!l){var t=a(f);l=!0;for(var e=c.length;e;){for(u=c,c=[];++h<e;)u&&u[h].run();h=-1,e=c.length}u=null,l=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function g(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new p(t,e)),1!==c.length||l||a(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(t,e,n){"use strict";var r=n(53),i=/\s+/;function o(t,e,n,r){var o;if(!n)return this;for(e=e.split(i),n=r?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,r):n,this._callbacks=this._callbacks||{};o=e.shift();)this._callbacks[o]=this._callbacks[o]||{sync:[],async:[]},this._callbacks[o][t].push(n);return this}function s(t,e,n){return function(){for(var r,i=0,o=t.length;!r&&i<o;i+=1)r=!1===t[i].apply(e,n);return!r}}t.exports={onSync:function(t,e,n){return o.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return o.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;for(t=t.split(i);e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,o,a,u;if(!this._callbacks)return this;for(t=t.split(i),o=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)a=s(n.sync,this,[e].concat(o)),u=s(n.async,this,[e].concat(o)),a()&&r(u);return this}}},function(t,e,n){"use strict";var r=n(0),i={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};r.isMsie()&&r.mixin(i.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),r.isMsie()&&r.isMsie()<=7&&r.mixin(i.input,{marginTop:"-1px"}),t.exports=i},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e,n){t.exports=function(t,e){return function(n,i,o){if("function"==typeof n&&"object"==typeof i||"object"==typeof o)throw new r.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof n?(o=n,n=""):1!==arguments.length&&"function"!=typeof i||(o=i,i=void 0),"object"==typeof n&&null!==n?(i=n,n=void 0):null==n&&(n="");var s,a="";return void 0!==n&&(a+=t+"="+encodeURIComponent(n)),void 0!==i&&(i.additionalUA&&(s=i.additionalUA,delete i.additionalUA),a=this.as._getSearchParams(i,a)),this._search(a,e,o,s)}};var r=n(5)},function(t,e,n){t.exports=function(t,e){var r=n(36),i=n(2),o={};return i(r(t),(function(n){!0!==e(n)&&(o[n]=t[n])})),o}},function(t,e){var n;n=window,t.exports=function(t){var e,n,r=function(){var e,n,r,i,o,s=[],a=s.concat,u=s.filter,c=s.slice,l=t.document,h={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},p=/^\s*<(\w+|!)[^>]*>/,g=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,v=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],w=l.createElement("table"),_=l.createElement("tr"),x={tr:l.createElement("tbody"),tbody:w,thead:w,tfoot:w,td:_,th:_,"*":l.createElement("div")},S=/complete|loaded|interactive/,C=/^[\w-]*$/,A={},E=A.toString,T={},k=l.createElement("div"),O={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},N=Array.isArray||function(t){return t instanceof Array};function j(t){return null==t?String(t):A[E.call(t)]||"object"}function I(t){return"function"==j(t)}function L(t){return null!=t&&t==t.window}function R(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function P(t){return"object"==j(t)}function D(t){return P(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,r=n.type(t);return"function"!=r&&!L(t)&&("array"==r||0===e||"number"==typeof e&&e>0&&e-1 in t)}function $(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function M(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||d[$(t)]?e:e+"px"}function F(t){return"children"in t?c.call(t.children):n.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function z(t,e){var n,r=t?t.length:0;for(n=0;n<r;n++)this[n]=t[n];this.length=r,this.selector=e||""}function B(t,n,r){for(e in n)r&&(D(n[e])||N(n[e]))?(D(n[e])&&!D(t[e])&&(t[e]={}),N(n[e])&&!N(t[e])&&(t[e]=[]),B(t[e],n[e],r)):void 0!==n[e]&&(t[e]=n[e])}function U(t,e){return null==e?n(t):n(t).filter(e)}function V(t,e,n,r){return I(e)?e.call(t,n,r):e}function K(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function J(t,e){var n=t.className||"",r=n&&void 0!==n.baseVal;if(void 0===e)return r?n.baseVal:n;r?n.baseVal=e:t.className=e}function W(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?n.parseJSON(t):t):t}catch(e){return t}}function Q(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)Q(t.childNodes[n],e)}return T.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=k).appendChild(t),r=~T.qsa(i,e).indexOf(t),o&&k.removeChild(t),r},i=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},o=function(t){return u.call(t,(function(e,n){return t.indexOf(e)==n}))},T.fragment=function(t,e,r){var i,o,s;return g.test(t)&&(i=n(l.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(m,"<$1></$2>")),void 0===e&&(e=p.test(t)&&RegExp.$1),e in x||(e="*"),(s=x[e]).innerHTML=""+t,i=n.each(c.call(s.childNodes),(function(){s.removeChild(this)}))),D(r)&&(o=n(i),n.each(r,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),i},T.Z=function(t,e){return new z(t,e)},T.isZ=function(t){return t instanceof T.Z},T.init=function(t,e){var r,i;if(!t)return T.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&p.test(t))r=T.fragment(t,RegExp.$1,e),t=null;else{if(void 0!==e)return n(e).find(t);r=T.qsa(l,t)}else{if(I(t))return n(l).ready(t);if(T.isZ(t))return t;if(N(t))i=t,r=u.call(i,(function(t){return null!=t}));else if(P(t))r=[t],t=null;else if(p.test(t))r=T.fragment(t.trim(),RegExp.$1,e),t=null;else{if(void 0!==e)return n(e).find(t);r=T.qsa(l,t)}}return T.Z(r,t)},(n=function(t,e){return T.init(t,e)}).extend=function(t){var e,n=c.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){B(t,n,e)})),t},T.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=C.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:c.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=l.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},n.type=j,n.isFunction=I,n.isWindow=L,n.isArray=N,n.isPlainObject=D,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},n.inArray=function(t,e,n){return s.indexOf.call(e,t,n)},n.camelCase=i,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.noop=function(){},n.map=function(t,e){var r,i,o,s,a=[];if(q(t))for(i=0;i<t.length;i++)null!=(r=e(t[i],i))&&a.push(r);else for(o in t)null!=(r=e(t[o],o))&&a.push(r);return(s=a).length>0?n.fn.concat.apply([],s):s},n.each=function(t,e){var n,r;if(q(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(r in t)if(!1===e.call(t[r],r,t[r]))return t;return t},n.grep=function(t,e){return u.call(t,e)},t.JSON&&(n.parseJSON=JSON.parse),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){A["[object "+e+"]"]=e.toLowerCase()})),n.fn={constructor:T.Z,length:0,forEach:s.forEach,reduce:s.reduce,push:s.push,sort:s.sort,splice:s.splice,indexOf:s.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=T.isZ(e)?e.toArray():e;return a.apply(T.isZ(this)?this.toArray():this,n)},map:function(t){return n(n.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return n(c.apply(this,arguments))},ready:function(t){return S.test(l.readyState)&&l.body?t(n):l.addEventListener("DOMContentLoaded",(function(){t(n)}),!1),this},get:function(t){return void 0===t?c.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return s.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return I(t)?this.not(this.not(t)):n(u.call(this,(function(e){return T.matches(e,t)})))},add:function(t,e){return n(o(this.concat(n(t,e))))},is:function(t){return this.length>0&&T.matches(this[0],t)},not:function(t){var e=[];if(I(t)&&void 0!==t.call)this.each((function(n){t.call(this,n)||e.push(this)}));else{var r="string"==typeof t?this.filter(t):q(t)&&I(t.item)?c.call(t):n(t);this.forEach((function(t){r.indexOf(t)<0&&e.push(t)}))}return n(e)},has:function(t){return this.filter((function(){return P(t)?n.contains(this,t):n(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!P(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!P(t)?t:n(t)},find:function(t){var e=this;return t?"object"==typeof t?n(t).filter((function(){var t=this;return s.some.call(e,(function(e){return n.contains(e,t)}))})):1==this.length?n(T.qsa(this[0],t)):this.map((function(){return T.qsa(this,t)})):n()},closest:function(t,e){var r=[],i="object"==typeof t&&n(t);return this.each((function(n,o){for(;o&&!(i?i.indexOf(o)>=0:T.matches(o,t));)o=o!==e&&!R(o)&&o.parentNode;o&&r.indexOf(o)<0&&r.push(o)})),n(r)},parents:function(t){for(var e=[],r=this;r.length>0;)r=n.map(r,(function(t){if((t=t.parentNode)&&!R(t)&&e.indexOf(t)<0)return e.push(t),t}));return U(e,t)},parent:function(t){return U(o(this.pluck("parentNode")),t)},children:function(t){return U(this.map((function(){return F(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||c.call(this.childNodes)}))},siblings:function(t){return U(this.map((function(t,e){return u.call(F(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return n.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){var t,e,n;"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=(t=this.nodeName,h[t]||(e=l.createElement(t),l.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),h[t]=n),h[t]))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=I(t);if(this[0]&&!e)var r=n(t).get(0),i=r.parentNode||this.length>1;return this.each((function(o){n(this).wrapAll(e?t.call(this,o):i?r.cloneNode(!0):r)}))},wrapAll:function(t){if(this[0]){var e;for(n(this[0]).before(t=n(t));(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=I(t);return this.each((function(r){var i=n(this),o=i.contents(),s=e?t.call(this,r):t;o.length?o.wrapAll(s):i.append(s)}))},unwrap:function(){return this.parent().each((function(){n(this).replaceWith(n(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var e=n(this);(void 0===t?"none"==e.css("display"):t)?e.show():e.hide()}))},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var r=this.innerHTML;n(this).empty().append(V(this,t,e,r))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=V(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,n){var r;return"string"!=typeof t||1 in arguments?this.each((function(r){if(1===this.nodeType)if(P(t))for(e in t)K(this,e,t[e]);else K(this,t,V(this,n,r,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(r=this[0].getAttribute(t))?r:void 0},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){K(this,t)}),this)}))},prop:function(t,e){return t=O[t]||t,1 in arguments?this.each((function(n){this[t]=V(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=O[t]||t,this.each((function(){delete this[t]}))},data:function(t,e){var n="data-"+t.replace(v,"-$1").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?W(r):void 0},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=V(this,t,e,this.value)}))):this[0]&&(this[0].multiple?n(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var r=n(this),i=V(this,e,t,r.offset()),o=r.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==r.css("position")&&(s.position="relative"),r.css(s)}));if(!this.length)return null;if(l.documentElement!==this[0]&&!n.contains(l.documentElement,this[0]))return{top:0,left:0};var r=this[0].getBoundingClientRect();return{left:r.left+t.pageXOffset,top:r.top+t.pageYOffset,width:Math.round(r.width),height:Math.round(r.height)}},css:function(t,r){if(arguments.length<2){var o=this[0];if("string"==typeof t){if(!o)return;return o.style[i(t)]||getComputedStyle(o,"").getPropertyValue(t)}if(N(t)){if(!o)return;var s={},a=getComputedStyle(o,"");return n.each(t,(function(t,e){s[e]=o.style[i(e)]||a.getPropertyValue(e)})),s}}var u="";if("string"==j(t))r||0===r?u=$(t)+":"+H(t,r):this.each((function(){this.style.removeProperty($(t))}));else for(e in t)t[e]||0===t[e]?u+=$(e)+":"+H(e,t[e])+";":this.each((function(){this.style.removeProperty($(e))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&s.some.call(this,(function(t){return this.test(J(t))}),M(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){r=[];var i=J(this);V(this,t,e,i).split(/\s+/g).forEach((function(t){n(this).hasClass(t)||r.push(t)}),this),r.length&&J(this,i+(i?" ":"")+r.join(" "))}})):this},removeClass:function(t){return this.each((function(e){if("className"in this){if(void 0===t)return J(this,"");r=J(this),V(this,t,e,r).split(/\s+/g).forEach((function(t){r=r.replace(M(t)," ")})),J(this,r.trim())}}))},toggleClass:function(t,e){return t?this.each((function(r){var i=n(this);V(this,t,r,J(this)).split(/\s+/g).forEach((function(t){(void 0===e?!i.hasClass(t):e)?i.addClass(t):i.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return void 0===t?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return void 0===t?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),r=this.offset(),i=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return r.top-=parseFloat(n(t).css("margin-top"))||0,r.left-=parseFloat(n(t).css("margin-left"))||0,i.top+=parseFloat(n(e[0]).css("border-top-width"))||0,i.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:r.top-i.top,left:r.left-i.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||l.body;t&&!y.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t}))}},n.fn.detach=n.fn.remove,["width","height"].forEach((function(t){var e=t.replace(/./,(function(t){return t[0].toUpperCase()}));n.fn[t]=function(r){var i,o=this[0];return void 0===r?L(o)?o["inner"+e]:R(o)?o.documentElement["scroll"+e]:(i=this.offset())&&i[t]:this.each((function(e){(o=n(this)).css(t,V(this,r,e,o[t]()))}))}})),["after","prepend","before","append"].forEach((function(e,r){var i=r%2;n.fn[e]=function(){var e,o,s=n.map(arguments,(function(t){var r=[];return"array"==(e=j(t))?(t.forEach((function(t){return void 0!==t.nodeType?r.push(t):n.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(T.fragment(t)))})),r):"object"==e||null==t?t:T.fragment(t)})),a=this.length>1;return s.length<1?this:this.each((function(e,u){o=i?u:u.parentNode,u=0==r?u.nextSibling:1==r?u.firstChild:2==r?u:null;var c=n.contains(l.documentElement,o);s.forEach((function(e){if(a)e=e.cloneNode(!0);else if(!o)return n(e).remove();o.insertBefore(e,u),c&&Q(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},n.fn[i?e+"To":"insert"+(r?"Before":"After")]=function(t){return n(t)[e](this),this}})),T.Z.prototype=z.prototype=n.fn,T.uniq=o,T.deserializeValue=W,n.zepto=T,n}();return function(e){var n=1,r=Array.prototype.slice,i=e.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};function h(t){return t._zid||(t._zid=n++)}function f(t,e,n,r){if((e=d(e)).ns)var i=(o=e.ns,new RegExp("(?:^| )"+o.replace(" "," .* ?")+"(?: |$)"));var o;return(s[h(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function p(t,e){return t.del&&!u&&t.e in c||!!e}function g(t){return l[t]||u&&c[t]||t}function m(t,n,r,i,o,a,u){var c=h(t),f=s[c]||(s[c]=[]);n.split(/\s/).forEach((function(n){if("ready"==n)return e(document).ready(r);var s=d(n);s.fn=r,s.sel=o,s.e in l&&(r=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return s.fn.apply(this,arguments)}),s.del=a;var c=a||r;s.proxy=function(e){if(!(e=x(e)).isImmediatePropagationStopped()){try{var n=Object.getOwnPropertyDescriptor(e,"data");n&&!n.writable||(e.data=i)}catch(e){}var r=c.apply(t,null==e._args?[e]:[e].concat(e._args));return!1===r&&(e.preventDefault(),e.stopPropagation()),r}},s.i=f.length,f.push(s),"addEventListener"in t&&t.addEventListener(g(s.e),s.proxy,p(s,u))}))}function y(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,r).forEach((function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,p(e,i))}))}))}a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",e.event={add:m,remove:y},e.proxy=function(t,n){var s=2 in arguments&&r.call(arguments,2);if(i(t)){var a=function(){return t.apply(n,s?s.concat(r.call(arguments)):arguments)};return a._zid=h(t),a}if(o(n))return s?(s.unshift(t[n],t),e.proxy.apply(null,s)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var v=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function x(t,n){return!n&&t.isDefaultPrevented||(n||(n=t),e.each(_,(function(e,r){var i=n[e];t[e]=function(){return this[r]=v,i&&i.apply(n,arguments)},t[r]=b})),t.timeStamp||(t.timeStamp=Date.now()),(void 0!==n.defaultPrevented?n.defaultPrevented:"returnValue"in n?!1===n.returnValue:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=v)),t}function S(t){var e,n={originalEvent:t};for(e in t)w.test(e)||void 0===t[e]||(n[e]=t[e]);return x(n,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,s,a,u){var c,l,h=this;return t&&!o(t)?(e.each(t,(function(t,e){h.on(t,n,s,e,u)})),h):(o(n)||i(a)||!1===a||(a=s,s=n,n=void 0),void 0!==a&&!1!==s||(a=s,s=void 0),!1===a&&(a=b),h.each((function(i,o){u&&(c=function(t){return y(o,t.type,a),a.apply(this,arguments)}),n&&(l=function(t){var i,s=e(t.target).closest(n,o).get(0);if(s&&s!==o)return i=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||a).apply(s,[i].concat(r.call(arguments,1)))}),m(o,t,a,s,n,l||c)})))},e.fn.off=function(t,n,r){var s=this;return t&&!o(t)?(e.each(t,(function(t,e){s.off(t,n,e)})),s):(o(n)||i(r)||!1===r||(r=n,n=void 0),!1===r&&(r=b),s.each((function(){y(this,t,r,n)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):x(t))._args=n,this.each((function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var r,i;return this.each((function(s,a){(r=S(o(t)?e.Event(t):t))._args=n,r.target=a,e.each(f(a,t.type||t),(function(t,e){if(i=e.proxy(r),r.isImmediatePropagationStopped())return!1}))})),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(a[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),x(n)}}(r),n=[],r.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,r=t.camelCase,i=t.expando="Zepto"+ +new Date,o=[];function s(n,s,a){var u=n[i]||(n[i]=++t.uuid),c=e[u]||(e[u]=function(e){var n={};return t.each(e.attributes||o,(function(e,i){0==i.name.indexOf("data-")&&(n[r(i.name.replace("data-",""))]=t.zepto.deserializeValue(i.value))})),n}(n));return void 0!==s&&(c[r(s)]=a),c}t.fn.data=function(o,a){return void 0===a?t.isPlainObject(o)?this.each((function(e,n){t.each(o,(function(t,e){s(n,t,e)}))})):0 in this?function(o,a){var u=o[i],c=u&&e[u];if(void 0===a)return c||s(o);if(c){if(a in c)return c[a];var l=r(a);if(l in c)return c[l]}return n.call(t(o),a)}(this[0],o):void 0:this.each((function(){s(this,o,a)}))},t.data=function(e,n,r){return t(e).data(n,r)},t.hasData=function(n){var r=n[i],o=r&&e[r];return!!o&&!t.isEmptyObject(o)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var o=this[i],s=o&&e[o];s&&t.each(n||s,(function(t){delete s[n?r(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(r),r}(n)},function(t,e,n){"use strict";var r=n(0),i=n(1);function o(t){t&&t.el||r.error("EventBus initialized without el"),this.$el=i.element(t.el)}r.mixin(o.prototype,{trigger:function(t){var e=[].slice.call(arguments,1),n=r.Event("autocomplete:"+t);return this.$el.trigger(n,e),n}}),t.exports=o},function(t,e,n){"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},function(t,e){t.exports="0.32.0"},function(t,e,n){"use strict";t.exports=function(t){var e=t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(15),o=(r=i)&&r.__esModule?r:{default:r};e.default=o.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default="2.6.1"},function(t,e,n){"use strict";var r,i=n(23),o=(r=i)&&r.__esModule?r:{default:r};t.exports=o.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=s(n(24)),i=s(n(25)),o=s(n(21));function s(t){return t&&t.__esModule?t:{default:t}}var a=(0,r.default)(i.default);a.version=o.default,e.default=a},function(t,e,n){"use strict";var r=Function.prototype.bind;t.exports=function(t){var e=function(){for(var e=arguments.length,n=Array(e),i=0;i<e;i++)n[i]=arguments[i];return new(r.apply(t,[null].concat(n)))};return e.__proto__=t,e.prototype=t.prototype,e}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),o=f(n(26)),s=f(n(29)),a=f(n(49)),u=f(n(64)),c=f(n(65)),l=f(n(21)),h=f(n(20));function f(t){return t&&t.__esModule?t:{default:t}}var d=function(){function t(e){var n=e.apiKey,i=e.indexName,o=e.inputSelector,c=e.appId,f=void 0===c?"BH4D9OD16A":c,d=e.debug,p=void 0!==d&&d,g=e.algoliaOptions,m=void 0===g?{}:g,y=e.autocompleteOptions,v=void 0===y?{debug:!1,hint:!1,autoselect:!0}:y,b=e.transformData,w=void 0!==b&&b,_=e.queryHook,x=void 0!==_&&_,S=e.handleSelected,C=void 0!==S&&S,A=e.enhancedSearchInput,E=void 0!==A&&A,T=e.layout,k=void 0===T?"collumns":T;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),t.checkArguments({apiKey:n,indexName:i,inputSelector:o,debug:p,algoliaOptions:m,autocompleteOptions:v,transformData:w,queryHook:x,handleSelected:C,enhancedSearchInput:E,layout:k}),this.apiKey=n,this.appId=f,this.indexName=i,this.input=t.getInputFromSelector(o),this.algoliaOptions=r({hitsPerPage:5},m);var O=!(!v||!v.debug)&&v.debug;v.debug=p||O,this.autocompleteOptions=v,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||"ds",C=C||this.handleSelected,this.isSimpleLayout="simple"===k,this.client=(0,s.default)(this.appId,this.apiKey),this.client.addAlgoliaAgent("docsearch.js "+l.default),E&&(this.input=t.injectSearchBox(this.input)),this.autocomplete=(0,a.default)(this.input,v,[{source:this.getAutocompleteSource(w,x),templates:{suggestion:t.getSuggestionTemplate(this.isSimpleLayout),footer:u.default.footer,empty:t.getEmptyTemplate()}}]),C&&(0,h.default)(".algolia-autocomplete").on("click",".ds-suggestions a",(function(t){t.preventDefault()})),this.autocomplete.on("autocomplete:selected",C.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on("autocomplete:shown",this.handleShown.bind(null,this.input)),E&&t.bindSearchBoxEvent()}return i(t,[{key:"getAutocompleteSource",value:function(e,n){var r=this;return function(i,o){n&&(i=n(i)||i),r.client.search([{indexName:r.indexName,query:i,params:r.algoliaOptions}]).then((function(n){var r=n.results[0].hits;e&&(r=e(r)||r),o(t.formatHits(r))}))}}},{key:"handleSelected",value:function(t,e,n){t.setVal(""),window.location.assign(n.url)}},{key:"handleShown",value:function(t){var e=t.offset().left+t.width()/2,n=(0,h.default)(document).width()/2;isNaN(n)&&(n=900);var r=e-n>=0?"algolia-autocomplete-right":"algolia-autocomplete-left",i=e-n<0?"algolia-autocomplete-right":"algolia-autocomplete-left",o=(0,h.default)(".algolia-autocomplete");o.hasClass(r)||o.addClass(r),o.hasClass(i)&&o.removeClass(i)}}],[{key:"checkArguments",value:function(e){if(!e.apiKey||!e.indexName)throw new Error("Usage:\n  documentationSearch({\n  apiKey,\n  indexName,\n  inputSelector,\n  [ appId ],\n  [ algoliaOptions.{hitsPerPage} ]\n  [ autocompleteOptions.{hint,debug} ]\n})");if("string"!=typeof e.inputSelector)throw new Error("Error: inputSelector:"+e.inputSelector+"  must be a string. Each selector must match only one element and separated by ','");if(!t.getInputFromSelector(e.inputSelector))throw new Error("Error: No input element in the page matches "+e.inputSelector)}},{key:"injectSearchBox",value:function(t){t.before(u.default.searchBox);var e=t.prev().prev().find("input");return t.remove(),e}},{key:"bindSearchBoxEvent",value:function(){(0,h.default)('.searchbox [type="reset"]').on("click",(function(){(0,h.default)("input#docsearch").focus(),(0,h.default)(this).addClass("hide"),a.default.autocomplete.setVal("")})),(0,h.default)("input#docsearch").on("keyup",(function(){var t=document.querySelector("input#docsearch"),e=document.querySelector('.searchbox [type="reset"]');e.className="searchbox__reset",0===t.value.length&&(e.className+=" hide")}))}},{key:"getInputFromSelector",value:function(t){var e=(0,h.default)(t).filter("input");return e.length?(0,h.default)(e[0]):null}},{key:"formatHits",value:function(e){var n=c.default.deepClone(e).map((function(t){return t._highlightResult&&(t._highlightResult=c.default.mergeKeyWithParent(t._highlightResult,"hierarchy")),c.default.mergeKeyWithParent(t,"hierarchy")})),r=c.default.groupBy(n,"lvl0");return h.default.each(r,(function(t,e){var n=c.default.groupBy(e,"lvl1"),i=c.default.flattenAndFlagFirst(n,"isSubCategoryHeader");r[t]=i})),(r=c.default.flattenAndFlagFirst(r,"isCategoryHeader")).map((function(e){var n=t.formatURL(e),r=c.default.getHighlightedValue(e,"lvl0"),i=c.default.getHighlightedValue(e,"lvl1")||r,o=c.default.compact([c.default.getHighlightedValue(e,"lvl2")||i,c.default.getHighlightedValue(e,"lvl3"),c.default.getHighlightedValue(e,"lvl4"),c.default.getHighlightedValue(e,"lvl5"),c.default.getHighlightedValue(e,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> › </span>'),s=c.default.getSnippetedValue(e,"content"),a=i&&""!==i||o&&""!==o,u=o&&""!==o&&o!==i,l=!u&&i&&""!==i&&i!==r;return{isLvl0:!l&&!u,isLvl1:l,isLvl2:u,isLvl1EmptyOrDuplicate:!i||""===i||i===r,isCategoryHeader:e.isCategoryHeader,isSubCategoryHeader:e.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:a,category:r,subcategory:i,title:o,text:s,url:n}}))}},{key:"formatURL",value:function(t){var e=t.url,n=t.anchor;return e?-1!==e.indexOf("#")?e:n?t.url+"#"+t.anchor:e:n?"#"+t.anchor:(console.warn("no anchor nor url for : ",JSON.stringify(t)),null)}},{key:"getEmptyTemplate",value:function(){return function(t){return o.default.compile(u.default.empty).render(t)}}},{key:"getSuggestionTemplate",value:function(t){var e=t?u.default.suggestionSimple:u.default.suggestion,n=o.default.compile(e);return function(t){return n.render(t)}}}]),t}();e.default=d},function(t,e,n){var r=n(27);r.Template=n(28).Template,r.template=r.Template,t.exports=r},function(t,e,n){!function(t){var e=/\S/,n=/\"/g,r=/\n/g,i=/\r/g,o=/\\/g,s=/\u2028/,a=/\u2029/;function u(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function c(t,e,n){if(e.charAt(n)!=t.charAt(0))return!1;for(var r=1,i=t.length;r<i;r++)if(e.charAt(n+r)!=t.charAt(r))return!1;return!0}t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(n,r){var i,o=n.length,s=0,a=null,l=null,h="",f=[],d=!1,p=0,g=0,m="{{",y="}}";function v(){h.length>0&&(f.push({tag:"_t",text:new String(h)}),h="")}function b(n,r){if(v(),n&&function(){for(var n=!0,r=g;r<f.length;r++)if(!(n=t.tags[f[r].tag]<t.tags._v||"_t"==f[r].tag&&null===f[r].text.match(e)))return!1;return n}())for(var i,o=g;o<f.length;o++)f[o].text&&((i=f[o+1])&&">"==i.tag&&(i.indent=f[o].text.toString()),f.splice(o,1));else r||f.push({tag:"\n"});d=!1,g=f.length}function w(t,e){var n="="+y,r=t.indexOf(n,e),i=u(t.substring(t.indexOf("=",e)+1,r)).split(" ");return m=i[0],y=i[i.length-1],r+n.length-1}for(r&&(r=r.split(" "),m=r[0],y=r[1]),p=0;p<o;p++)0==s?c(m,n,p)?(--p,v(),s=1):"\n"==n.charAt(p)?b(d):h+=n.charAt(p):1==s?(p+=m.length-1,"="==(a=(l=t.tags[n.charAt(p+1)])?n.charAt(p+1):"_v")?(p=w(n,p),s=0):(l&&p++,s=2),d=p):c(y,n,p)?(f.push({tag:a,n:u(h),otag:m,ctag:y,i:"/"==a?d-m.length:p+y.length}),h="",p+=y.length-1,s=0,"{"==a&&("}}"==y?p++:"}"===(i=f[f.length-1]).n.substr(i.n.length-1)&&(i.n=i.n.substring(0,i.n.length-1)))):h+=n.charAt(p);return b(d,!0),f};var l={_t:!0,"\n":!0,$:!0,"/":!0};function h(t,e){for(var n=0,r=e.length;n<r;n++)if(e[n].o==t.n)return t.tag="#",!0}function f(t,e,n){for(var r=0,i=n.length;r<i;r++)if(n[r].c==t&&n[r].o==e)return!0}function d(t){var e=[];for(var n in t.partials)e.push('"'+g(n)+'":{name:"'+g(t.partials[n].name)+'", '+d(t.partials[n])+"}");return"partials: {"+e.join(",")+"}, subs: "+function(t){var e=[];for(var n in t)e.push('"'+g(n)+'": function(c,p,t,i) {'+t[n]+"}");return"{ "+e.join(",")+" }"}(t.subs)}t.stringify=function(e,n,r){return"{code: function (c,p,i) { "+t.wrapMain(e.code)+" },"+d(e)+"}"};var p=0;function g(t){return t.replace(o,"\\\\").replace(n,'\\"').replace(r,"\\n").replace(i,"\\r").replace(s,"\\u2028").replace(a,"\\u2029")}function m(t){return~t.indexOf(".")?"d":"f"}function y(t,e){var n="<"+(e.prefix||"")+t.n+p++;return e.partials[n]={name:t.n,partials:{}},e.code+='t.b(t.rp("'+g(n)+'",c,p,"'+(t.indent||"")+'"));',n}function v(t,e){e.code+="t.b(t.t(t."+m(t.n)+'("'+g(t.n)+'",c,p,0)));'}function b(t){return"t.b("+t+");"}t.generate=function(e,n,r){p=0;var i={code:"",subs:{},partials:{}};return t.walk(e,i),r.asString?this.stringify(i,n,r):this.makeTemplate(i,n,r)},t.wrapMain=function(t){return'var t=this;t.b(i=i||"");'+t+"return t.fl();"},t.template=t.Template,t.makeTemplate=function(t,e,n){var r=this.makePartials(t);return r.code=new Function("c","p","i",this.wrapMain(t.code)),new this.template(r,e,this,n)},t.makePartials=function(t){var e,n={subs:{},partials:t.partials,name:t.name};for(e in n.partials)n.partials[e]=this.makePartials(n.partials[e]);for(e in t.subs)n.subs[e]=new Function("c","p","t","i",t.subs[e]);return n},t.codegen={"#":function(e,n){n.code+="if(t.s(t."+m(e.n)+'("'+g(e.n)+'",c,p,1),c,p,0,'+e.i+","+e.end+',"'+e.otag+" "+e.ctag+'")){t.rs(c,p,function(c,p,t){',t.walk(e.nodes,n),n.code+="});c.pop();}"},"^":function(e,n){n.code+="if(!t.s(t."+m(e.n)+'("'+g(e.n)+'",c,p,1),c,p,1,0,0,"")){',t.walk(e.nodes,n),n.code+="};"},">":y,"<":function(e,n){var r={partials:{},code:"",subs:{},inPartial:!0};t.walk(e.nodes,r);var i=n.partials[y(e,n)];i.subs=r.subs,i.partials=r.partials},$:function(e,n){var r={subs:{},code:"",partials:n.partials,prefix:e.n};t.walk(e.nodes,r),n.subs[e.n]=r.code,n.inPartial||(n.code+='t.sub("'+g(e.n)+'",c,p,i);')},"\n":function(t,e){e.code+=b('"\\n"'+(t.last?"":" + i"))},_v:function(t,e){e.code+="t.b(t.v(t."+m(t.n)+'("'+g(t.n)+'",c,p,0)));'},_t:function(t,e){e.code+=b('"'+g(t.text)+'"')},"{":v,"&":v},t.walk=function(e,n){for(var r,i=0,o=e.length;i<o;i++)(r=t.codegen[e[i].tag])&&r(e[i],n);return n},t.parse=function(e,n,r){return function e(n,r,i,o){var s,a=[],u=null,c=null;for(s=i[i.length-1];n.length>0;){if(c=n.shift(),s&&"<"==s.tag&&!(c.tag in l))throw new Error("Illegal content in < super tag.");if(t.tags[c.tag]<=t.tags.$||h(c,o))i.push(c),c.nodes=e(n,c.tag,i,o);else{if("/"==c.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+c.n);if(u=i.pop(),c.n!=u.n&&!f(c.n,u.n,o))throw new Error("Nesting error: "+u.n+" vs. "+c.n);return u.end=c.i,a}"\n"==c.tag&&(c.last=0==n.length||"\n"==n[0].tag)}a.push(c)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return a}(e,0,[],(r=r||{}).sectionTags||[])},t.cache={},t.cacheKey=function(t,e){return[t,!!e.asString,!!e.disableLambda,e.delimiters,!!e.modelGet].join("||")},t.compile=function(e,n){n=n||{};var r=t.cacheKey(e,n),i=this.cache[r];if(i){var o=i.partials;for(var s in o)delete o[s].instance;return i}return i=this.generate(this.parse(this.scan(e,n.delimiters),e,n),e,n),this.cache[r]=i}}(e)},function(t,e,n){!function(t){function e(t,e,n){var r;return e&&"object"==typeof e&&(void 0!==e[t]?r=e[t]:n&&e.get&&"function"==typeof e.get&&(r=e.get(t))),r}t.Template=function(t,e,n,r){t=t||{},this.r=t.code||this.r,this.c=n,this.options=r||{},this.text=e||"",this.partials=t.partials||{},this.subs=t.subs||{},this.buf=""},t.Template.prototype={r:function(t,e,n){return""},v:function(t){return t=u(t),a.test(t)?t.replace(n,"&amp;").replace(r,"&lt;").replace(i,"&gt;").replace(o,"&#39;").replace(s,"&quot;"):t},t:u,render:function(t,e,n){return this.ri([t],e||{},n)},ri:function(t,e,n){return this.r(t,e,n)},ep:function(t,e){var n=this.partials[t],r=e[n.name];if(n.instance&&n.base==r)return n.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[t].base=r,n.subs){for(key in e.stackText||(e.stackText={}),n.subs)e.stackText[key]||(e.stackText[key]=void 0!==this.activeSub&&e.stackText[this.activeSub]?e.stackText[this.activeSub]:this.text);r=function(t,e,n,r,i,o){function s(){}function a(){}var u;s.prototype=t,a.prototype=t.subs;var c=new s;for(u in c.subs=new a,c.subsText={},c.buf="",r=r||{},c.stackSubs=r,c.subsText=o,e)r[u]||(r[u]=e[u]);for(u in r)c.subs[u]=r[u];for(u in i=i||{},c.stackPartials=i,n)i[u]||(i[u]=n[u]);for(u in i)c.partials[u]=i[u];return c}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,e.stackText)}return this.partials[t].instance=r,r},rp:function(t,e,n,r){var i=this.ep(t,n);return i?i.ri(e,n,r):""},rs:function(t,e,n){var r=t[t.length-1];if(c(r))for(var i=0;i<r.length;i++)t.push(r[i]),n(t,e,this),t.pop();else n(t,e,this)},s:function(t,e,n,r,i,o,s){var a;return(!c(t)||0!==t.length)&&("function"==typeof t&&(t=this.ms(t,e,n,r,i,o,s)),a=!!t,!r&&a&&e&&e.push("object"==typeof t?t:e[e.length-1]),a)},d:function(t,n,r,i){var o,s=t.split("."),a=this.f(s[0],n,r,i),u=this.options.modelGet,l=null;if("."===t&&c(n[n.length-2]))a=n[n.length-1];else for(var h=1;h<s.length;h++)void 0!==(o=e(s[h],a,u))?(l=a,a=o):a="";return!(i&&!a)&&(i||"function"!=typeof a||(n.push(l),a=this.mv(a,n,r),n.pop()),a)},f:function(t,n,r,i){for(var o=!1,s=!1,a=this.options.modelGet,u=n.length-1;u>=0;u--)if(void 0!==(o=e(t,n[u],a))){s=!0;break}return s?(i||"function"!=typeof o||(o=this.mv(o,n,r)),o):!i&&""},ls:function(t,e,n,r,i){var o=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(u(t.call(e,r)),e,n)),this.options.delimiters=o,!1},ct:function(t,e,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(t,this.options).render(e,n)},b:function(t){this.buf+=t},fl:function(){var t=this.buf;return this.buf="",t},ms:function(t,e,n,r,i,o,s){var a,u=e[e.length-1],c=t.call(u);return"function"==typeof c?!!r||(a=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,n,a.substring(i,o),s)):c},mv:function(t,e,n){var r=e[e.length-1],i=t.call(r);return"function"==typeof i?this.ct(u(i.call(r)),r,n):i},sub:function(t,e,n,r){var i=this.subs[t];i&&(this.activeSub=t,i(e,n,this,r),this.activeSub=!1)}};var n=/&/g,r=/</g,i=/>/g,o=/\'/g,s=/\"/g,a=/[&<>\"\']/;function u(t){return String(null==t?"":t)}var c=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}(e)},function(t,e,n){"use strict";var r=n(30),i=n(41);t.exports=i(r,"(lite) ")},function(t,e,n){t.exports=u;var r=n(5),i=n(31),o=n(32),s=n(38),a=Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER&&parseInt(Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER,10)||12e4;function u(t,e,i){var o=n(8)("algoliasearch"),s=n(3),a=n(6),u=n(7),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(!0!==i._allowEmptyCredentials&&!t)throw new r.AlgoliaSearchError("Please provide an application ID. "+l);if(!0!==i._allowEmptyCredentials&&!e)throw new r.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=e,this.hosts={read:[],write:[]},i=i||{},this._timeouts=i.timeouts||{connect:1e3,read:2e3,write:3e4},i.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=i.timeout);var h=i.protocol||"https:";if(/:$/.test(h)||(h+=":"),"http:"!==h&&"https:"!==h)throw new r.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+i.protocol+"`)");if(this._checkAppIdData(),i.hosts)a(i.hosts)?(this.hosts.read=s(i.hosts),this.hosts.write=s(i.hosts)):(this.hosts.read=s(i.hosts.read),this.hosts.write=s(i.hosts.write));else{var f=u(this._shuffleResult,(function(e){return t+"-"+e+".algolianet.com"})),d=(!1===i.dsn?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+d].concat(f),this.hosts.write=[this.applicationID+".algolia.net"].concat(f)}this.hosts.read=u(this.hosts.read,c(h)),this.hosts.write=u(this.hosts.write,c(h)),this.extraHeaders={},this.cache=i._cache||{},this._ua=i._ua,this._useCache=!(void 0!==i._useCache&&!i._cache)||i._useCache,this._useRequestCache=this._useCache&&i._useRequestCache,this._useFallback=void 0===i.useFallback||i.useFallback,this._setTimeout=i._setTimeout,o("init done, %j",this)}function c(t){return function(e){return t+"//"+e.toLowerCase()}}function l(t){if(void 0===Array.prototype.toJSON)return JSON.stringify(t);var e=Array.prototype.toJSON;delete Array.prototype.toJSON;var n=JSON.stringify(t);return Array.prototype.toJSON=e,n}function h(t){var e={};for(var n in t){var r;Object.prototype.hasOwnProperty.call(t,n)&&(r="x-algolia-api-key"===n||"x-algolia-application-id"===n?"**hidden for security purposes**":t[n],e[n]=r)}return e}u.prototype.initIndex=function(t){return new o(this,t)},u.prototype.setExtraHeader=function(t,e){this.extraHeaders[t.toLowerCase()]=e},u.prototype.getExtraHeader=function(t){return this.extraHeaders[t.toLowerCase()]},u.prototype.unsetExtraHeader=function(t){delete this.extraHeaders[t.toLowerCase()]},u.prototype.addAlgoliaAgent=function(t){-1===this._ua.indexOf(";"+t)&&(this._ua+=";"+t)},u.prototype._jsonRequest=function(t){this._checkAppIdData();var e,o,s,a=n(8)("algoliasearch:"+t.url),u=t.additionalUA||"",c=t.cache,f=this,d=0,p=!1,g=f._useFallback&&f._request.fallback&&t.fallback;this.apiKey.length>500&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,s=this._computeRequestHeaders({additionalUA:u,withApiKey:!1,headers:t.headers})):s=this._computeRequestHeaders({additionalUA:u,headers:t.headers}),void 0!==t.body&&(e=l(t.body)),a("request start");var m=[];function y(t,e,n){return f._useCache&&t&&e&&void 0!==e[n]}function v(e,n){if(y(f._useRequestCache,c,o)&&e.catch((function(){delete c[o]})),"function"!=typeof t.callback)return e.then(n);e.then((function(e){i((function(){t.callback(null,n(e))}),f._setTimeout||setTimeout)}),(function(e){i((function(){t.callback(e)}),f._setTimeout||setTimeout)}))}if(f._useCache&&f._useRequestCache&&(o=t.url),f._useCache&&f._useRequestCache&&e&&(o+="_body_"+e),y(f._useRequestCache,c,o)){a("serving request from cache");var b=c[o];return v("function"!=typeof b.then?f._promise.resolve({responseText:b}):b,(function(t){return JSON.parse(t.responseText)}))}var w=function n(i,v){f._checkAppIdData();var b=new Date;if(f._useCache&&!f._useRequestCache&&(o=t.url),f._useCache&&!f._useRequestCache&&e&&(o+="_body_"+v.body),y(!f._useRequestCache,c,o)){a("serving response from cache");var w=c[o];return f._promise.resolve({body:JSON.parse(w),responseText:w})}if(d>=f.hosts[t.hostType].length)return!g||p?(a("could not get any response"),f._promise.reject(new r.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+f.applicationID,{debugData:m}))):(a("switching to fallback"),d=0,v.method=t.fallback.method,v.url=t.fallback.url,v.jsonBody=t.fallback.body,v.jsonBody&&(v.body=l(v.jsonBody)),s=f._computeRequestHeaders({additionalUA:u,headers:t.headers}),v.timeouts=f._getTimeoutsForRequest(t.hostType),f._setHostIndexByType(0,t.hostType),p=!0,n(f._request.fallback,v));var _=f._getHostByType(t.hostType),x=_+v.url,S={body:v.body,jsonBody:v.jsonBody,method:v.method,headers:s,timeouts:v.timeouts,debug:a,forceAuthHeaders:v.forceAuthHeaders};return a("method: %s, url: %s, headers: %j, timeouts: %d",S.method,x,S.headers,S.timeouts),i===f._request.fallback&&a("using fallback"),i.call(f,x,S).then((function(t){var n=t&&t.body&&t.body.message&&t.body.status||t.statusCode||t&&t.body&&200;a("received response: statusCode: %s, computed statusCode: %d, headers: %j",t.statusCode,n,t.headers);var i=2===Math.floor(n/100),u=new Date;if(m.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b,statusCode:n}),i)return f._useCache&&!f._useRequestCache&&c&&(c[o]=t.responseText),{responseText:t.responseText,body:t.body};if(4!==Math.floor(n/100))return d+=1,C();a("unrecoverable error");var l=new r.AlgoliaSearchError(t.body&&t.body.message,{debugData:m,statusCode:n});return f._promise.reject(l)}),(function(o){a("error: %s, stack: %s",o.message,o.stack);var u=new Date;return m.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b}),o instanceof r.AlgoliaSearchError||(o=new r.Unknown(o&&o.message,o)),d+=1,o instanceof r.Unknown||o instanceof r.UnparsableJSON||d>=f.hosts[t.hostType].length&&(p||!g)?(o.debugData=m,f._promise.reject(o)):o instanceof r.RequestTimeout?(a("retrying request with higher timeout"),f._incrementHostIndex(t.hostType),f._incrementTimeoutMultipler(),v.timeouts=f._getTimeoutsForRequest(t.hostType),n(i,v)):C()}));function C(){return a("retrying request"),f._incrementHostIndex(t.hostType),n(i,v)}}(f._request,{url:t.url,method:t.method,body:e,jsonBody:t.body,timeouts:f._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return f._useCache&&f._useRequestCache&&c&&(c[o]=w),v(w,(function(t){return t.body}))},u.prototype._getSearchParams=function(t,e){if(null==t)return e;for(var n in t)null!==n&&void 0!==t[n]&&t.hasOwnProperty(n)&&(e+=""===e?"":"&",e+=n+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(t[n])?l(t[n]):t[n]));return e},u.prototype._computeRequestHeaders=function(t){var e=n(2),r={"x-algolia-agent":t.additionalUA?this._ua+";"+t.additionalUA:this._ua,"x-algolia-application-id":this.applicationID};return!1!==t.withApiKey&&(r["x-algolia-api-key"]=this.apiKey),this.userToken&&(r["x-algolia-usertoken"]=this.userToken),this.securityTags&&(r["x-algolia-tagfilters"]=this.securityTags),e(this.extraHeaders,(function(t,e){r[e]=t})),t.headers&&e(t.headers,(function(t,e){r[e]=t})),r},u.prototype.search=function(t,e,r){var i=n(6),o=n(7);if(!i(t))throw new Error("Usage: client.search(arrayOfQueries[, callback])");"function"==typeof e?(r=e,e={}):void 0===e&&(e={});var s=this,a={requests:o(t,(function(t){var e="";return void 0!==t.query&&(e+="query="+encodeURIComponent(t.query)),{indexName:t.indexName,params:s._getSearchParams(t.params,e)}}))},u=o(a.requests,(function(t,e){return e+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(t.indexName)+"?"+t.params)})).join("&");return void 0!==e.strategy&&(a.strategy=e.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/*/queries",body:a,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:r})},u.prototype.searchForFacetValues=function(t){var e=n(6),r=n(7),i="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!e(t))throw new Error(i);var o=this;return o._promise.all(r(t,(function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(i);var e=n(3),r=n(14),s=t.indexName,a=t.params,u=a.facetName,c=r(e(a),(function(t){return"facetName"===t})),l=o._getSearchParams(c,"");return o._jsonRequest({cache:o.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(s)+"/facets/"+encodeURIComponent(u)+"/query",hostType:"read",body:{params:l}})})))},u.prototype.setSecurityTags=function(t){if("[object Array]"===Object.prototype.toString.call(t)){for(var e=[],n=0;n<t.length;++n)if("[object Array]"===Object.prototype.toString.call(t[n])){for(var r=[],i=0;i<t[n].length;++i)r.push(t[n][i]);e.push("("+r.join(",")+")")}else e.push(t[n]);t=e.join(",")}this.securityTags=t},u.prototype.setUserToken=function(t){this.userToken=t},u.prototype.clearCache=function(){this.cache={}},u.prototype.setRequestTimeout=function(t){t&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=t)},u.prototype.setTimeouts=function(t){this._timeouts=t},u.prototype.getTimeouts=function(){return this._timeouts},u.prototype._getAppIdData=function(){var t=s.get(this.applicationID);return null!==t&&this._cacheAppIdData(t),t},u.prototype._setAppIdData=function(t){return t.lastChange=(new Date).getTime(),this._cacheAppIdData(t),s.set(this.applicationID,t)},u.prototype._checkAppIdData=function(){var t=this._getAppIdData(),e=(new Date).getTime();return null===t||e-t.lastChange>a?this._resetInitialAppIdData(t):t},u.prototype._resetInitialAppIdData=function(t){var e=t||{};return e.hostIndexes={read:0,write:0},e.timeoutMultiplier=1,e.shuffleResult=e.shuffleResult||function(t){for(var e,n,r=t.length;0!==r;)n=Math.floor(Math.random()*r),e=t[r-=1],t[r]=t[n],t[n]=e;return t}([1,2,3]),this._setAppIdData(e)},u.prototype._cacheAppIdData=function(t){this._hostIndexes=t.hostIndexes,this._timeoutMultiplier=t.timeoutMultiplier,this._shuffleResult=t.shuffleResult},u.prototype._partialAppIdDataUpdate=function(t){var e=n(2),r=this._getAppIdData();return e(t,(function(t,e){r[e]=t})),this._setAppIdData(r)},u.prototype._getHostByType=function(t){return this.hosts[t][this._getHostIndexByType(t)]},u.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},u.prototype._getHostIndexByType=function(t){return this._hostIndexes[t]},u.prototype._setHostIndexByType=function(t,e){var r=n(3)(this._hostIndexes);return r[e]=t,this._partialAppIdDataUpdate({hostIndexes:r}),t},u.prototype._incrementHostIndex=function(t){return this._setHostIndexByType((this._getHostIndexByType(t)+1)%this.hosts[t].length,t)},u.prototype._incrementTimeoutMultipler=function(){var t=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:t})},u.prototype._getTimeoutsForRequest=function(t){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[t]*this._timeoutMultiplier}}},function(t,e){t.exports=function(t,e){e(t,0)}},function(t,e,n){var r=n(13),i=n(33),o=n(34);function s(t,e){this.indexName=e,this.as=t,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}t.exports=s,s.prototype.clearCache=function(){this.cache={}},s.prototype.search=r("query"),s.prototype.similarSearch=r("similarQuery"),s.prototype.browse=function(t,e,r){var i,o,s=n(35),a=this;0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(i=0,r=arguments[0],t=void 0):"number"==typeof arguments[0]?(i=arguments[0],"number"==typeof arguments[1]?o=arguments[1]:"function"==typeof arguments[1]&&(r=arguments[1],o=void 0),t=void 0,e=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(r=arguments[1]),e=arguments[0],t=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(r=arguments[1],e=void 0),e=s({},e||{},{page:i,hitsPerPage:o,query:t});var u=this.as._getSearchParams(e,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a.indexName)+"/browse",body:{params:u},hostType:"read",callback:r})},s.prototype.browseFrom=function(t,e){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:t},hostType:"read",callback:e})},s.prototype.searchForFacetValues=function(t,e){var r=n(3),i=n(14);if(void 0===t.facetName||void 0===t.facetQuery)throw new Error("Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])");var o=t.facetName,s=i(r(t),(function(t){return"facetName"===t})),a=this.as._getSearchParams(s,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(o)+"/query",hostType:"read",body:{params:a},callback:e})},s.prototype.searchFacet=i((function(t,e){return this.searchForFacetValues(t,e)}),o("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),s.prototype._search=function(t,e,n,r){return this.as._jsonRequest({cache:this.cache,method:"POST",url:e||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:t},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:t}},callback:n,additionalUA:r})},s.prototype.getObject=function(t,e,n){var r=this;1!==arguments.length&&"function"!=typeof e||(n=e,e=void 0);var i="";if(void 0!==e){i="?attributes=";for(var o=0;o<e.length;++o)0!==o&&(i+=","),i+=e[o]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(r.indexName)+"/"+encodeURIComponent(t)+i,hostType:"read",callback:n})},s.prototype.getObjects=function(t,e,r){var i=n(6),o=n(7),s="Usage: index.getObjects(arrayOfObjectIDs[, callback])";if(!i(t))throw new Error(s);var a=this;1!==arguments.length&&"function"!=typeof e||(r=e,e=void 0);var u={requests:o(t,(function(t){var n={indexName:a.indexName,objectID:t};return e&&(n.attributesToRetrieve=e.join(",")),n}))};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:u,callback:r})},s.prototype.as=null,s.prototype.indexName=null,s.prototype.typeAheadArgs=null,s.prototype.typeAheadValueOption=null},function(t,e){t.exports=function(t,e){var n=!1;return function(){return n||(console.warn(e),n=!0),t.apply(this,arguments)}}},function(t,e){t.exports=function(t,e){var n=t.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+t+"` was replaced by `"+e+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+n}},function(t,e,n){var r=n(2);t.exports=function t(e){var n=Array.prototype.slice.call(arguments);return r(n,(function(n){for(var r in n)n.hasOwnProperty(r)&&("object"==typeof e[r]&&"object"==typeof n[r]?e[r]=t({},e[r],n[r]):void 0!==n[r]&&(e[r]=n[r]))})),e}},function(t,e,n){"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=Array.prototype.slice,s=n(37),a=Object.prototype.propertyIsEnumerable,u=!a.call({toString:null},"toString"),c=a.call((function(){}),"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(t){var e=t.constructor;return e&&e.prototype===t},f={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!f["$"+t]&&r.call(window,t)&&null!==window[t]&&"object"==typeof window[t])try{h(window[t])}catch(t){return!0}}catch(t){return!0}return!1}(),p=function(t){var e=null!==t&&"object"==typeof t,n="[object Function]"===i.call(t),o=s(t),a=e&&"[object String]"===i.call(t),f=[];if(!e&&!n&&!o)throw new TypeError("Object.keys called on a non-object");var p=c&&n;if(a&&t.length>0&&!r.call(t,0))for(var g=0;g<t.length;++g)f.push(String(g));if(o&&t.length>0)for(var m=0;m<t.length;++m)f.push(String(m));else for(var y in t)p&&"prototype"===y||!r.call(t,y)||f.push(String(y));if(u)for(var v=function(t){if("undefined"==typeof window||!d)return h(t);try{return h(t)}catch(t){return!1}}(t),b=0;b<l.length;++b)v&&"constructor"===l[b]||!r.call(t,l[b])||f.push(l[b]);return f};p.shim=function(){if(Object.keys){if(!function(){return 2===(Object.keys(arguments)||"").length}(1,2)){var t=Object.keys;Object.keys=function(e){return s(e)?t(o.call(e)):t(e)}}}else Object.keys=p;return Object.keys||p},t.exports=p},function(t,e,n){"use strict";var r=Object.prototype.toString;t.exports=function(t){var e=r.call(t),n="[object Arguments]"===e;return n||(n="[object Array]"!==e&&null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===r.call(t.callee)),n}},function(t,e,n){(function(e){var r,i=n(8)("algoliasearch:src/hostIndexState.js"),o={state:{},set:function(t,e){return this.state[t]=e,this.state[t]},get:function(t){return this.state[t]||null}},s={set:function(t,n){o.set(t,n);try{var r=JSON.parse(e.localStorage["algoliasearch-client-js"]);return r[t]=n,e.localStorage["algoliasearch-client-js"]=JSON.stringify(r),r[t]}catch(e){return a(t,e)}},get:function(t){try{return JSON.parse(e.localStorage["algoliasearch-client-js"])[t]||null}catch(e){return a(t,e)}}};function a(t,n){return i("localStorage failed with",n),function(){try{e.localStorage.removeItem("algoliasearch-client-js")}catch(t){}}(),(r=o).get(t)}function u(t,e){return 1===arguments.length?r.get(t):r.set(t,e)}function c(){try{return"localStorage"in e&&null!==e.localStorage&&(e.localStorage["algoliasearch-client-js"]||e.localStorage.setItem("algoliasearch-client-js",JSON.stringify({})),!0)}catch(t){return!1}}r=c()?s:o,t.exports={get:u,set:u,supportsLocalStorage:c}}).call(e,n(4))},function(t,e,n){var r;function i(t){function n(){if(n.enabled){var t=n,i=+new Date,o=i-(r||i);t.diff=o,t.prev=r,t.curr=i,r=i;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var u=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=e.formatters[r];if("function"==typeof i){var o=s[u];n=i.call(t,o),s.splice(u,1),u--}return n})),e.formatArgs.call(t,s);var c=n.log||e.log||console.log.bind(console);c.apply(t,s)}}return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=function(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}(t),"function"==typeof e.init&&e.init(n),n}(e=t.exports=i.debug=i.default=i).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&("-"===(t=n[i].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1},e.humanize=n(40),e.names=[],e.skips=[],e.formatters={}},function(t,e){var n=1e3,r=6e4,i=60*r,o=24*i;function s(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}t.exports=function(t,e){e=e||{};var a,u=typeof t;if("string"===u&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var s=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"days":case"day":case"d":return s*o;case"hours":case"hour":case"hrs":case"hr":case"h":return s*i;case"minutes":case"minute":case"mins":case"min":case"m":return s*r;case"seconds":case"second":case"secs":case"sec":case"s":return s*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}(t);if("number"===u&&!1===isNaN(t))return e.long?s(a=t,o,"day")||s(a,i,"hour")||s(a,r,"minute")||s(a,n,"second")||a+" ms":function(t){return t>=o?Math.round(t/o)+"d":t>=i?Math.round(t/i)+"h":t>=r?Math.round(t/r)+"m":t>=n?Math.round(t/n)+"s":t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){"use strict";var r=n(42),i=r.Promise||n(43).Promise;t.exports=function(t,e){var o=n(12),s=n(5),a=n(44),u=n(46),c=n(47);function l(t,e,r){return(r=n(3)(r||{}))._ua=r._ua||l.ua,new f(t,e,r)}e=e||"",l.version=n(48),l.ua="Algolia for vanilla JavaScript "+e+l.version,l.initPlaces=c(l),r.__algolia={debug:n(8),algoliasearch:l};var h={hasXMLHttpRequest:"XMLHttpRequest"in r,hasXDomainRequest:"XDomainRequest"in r};function f(){t.apply(this,arguments)}return h.hasXMLHttpRequest&&(h.cors="withCredentials"in new XMLHttpRequest),o(f,t),f.prototype._request=function(t,e){return new i((function(n,r){if(h.cors||h.hasXDomainRequest){t=a(t,e.headers);var i,o,u=e.body,c=h.cors?new XMLHttpRequest:new XDomainRequest,l=!1;i=setTimeout(f,e.timeouts.connect),c.onprogress=function(){l||d()},"onreadystatechange"in c&&(c.onreadystatechange=function(){!l&&c.readyState>1&&d()}),c.onload=function(){if(!o){var t;clearTimeout(i);try{t={body:JSON.parse(c.responseText),responseText:c.responseText,statusCode:c.status,headers:c.getAllResponseHeaders&&c.getAllResponseHeaders()||{}}}catch(e){t=new s.UnparsableJSON({more:c.responseText})}t instanceof s.UnparsableJSON?r(t):n(t)}},c.onerror=function(t){o||(clearTimeout(i),r(new s.Network({more:t})))},c instanceof XMLHttpRequest?(c.open(e.method,t,!0),e.forceAuthHeaders&&(c.setRequestHeader("x-algolia-application-id",e.headers["x-algolia-application-id"]),c.setRequestHeader("x-algolia-api-key",e.headers["x-algolia-api-key"]))):c.open(e.method,t),h.cors&&(u&&("POST"===e.method?c.setRequestHeader("content-type","application/x-www-form-urlencoded"):c.setRequestHeader("content-type","application/json")),c.setRequestHeader("accept","application/json")),u?c.send(u):c.send()}else r(new s.Network("CORS not supported"));function f(){o=!0,c.abort(),r(new s.RequestTimeout)}function d(){l=!0,clearTimeout(i),i=setTimeout(f,e.timeouts.complete)}}))},f.prototype._request.fallback=function(t,e){return t=a(t,e.headers),new i((function(n,r){u(t,e,(function(t,e){t?r(t):n(e)}))}))},f.prototype._promise={reject:function(t){return i.reject(t)},resolve:function(t){return i.resolve(t)},delay:function(t){return new i((function(e){setTimeout(e,t)}))},all:function(t){return i.all(t)}},l}},function(t,e,n){(function(e){var n;n="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},t.exports=n}).call(e,n(4))},function(t,e,n){(function(e,n){
 /*!
  * @overview es6-promise - a tiny implementation of Promises/A+.
  * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
  * @license   Licensed under MIT license
  *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
  * @version   v4.2.4+314e4831
- */var r;r=function(){"use strict";function t(t){return"function"==typeof t}var r=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,a=function(t,e){d[i]=t,d[i+1]=e,2===(i+=2)&&(s?s(g):w())},u="undefined"!=typeof window?window:void 0,c=u||{},l=c.MutationObserver||c.WebKitMutationObserver,h="undefined"==typeof self&&void 0!==e&&"[object process]"==={}.toString.call(e),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function p(){var t=setTimeout;return function(){return t(g,1)}}var d=new Array(1e3);function g(){for(var t=0;t<i;t+=2)(0,d[t])(d[t+1]),d[t]=void 0,d[t+1]=void 0;i=0}var m,y,v,b,w=void 0;function _(t,e){var n=this,r=new this.constructor(C);void 0===r[S]&&D(r);var i=n._state;if(i){var o=arguments[i-1];a((function(){return R(i,r,o,n._result)}))}else I(n,r,t,e);return r}function x(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(C);return O(e,t),e}h?w=function(){return e.nextTick(g)}:l?(y=0,v=new l(g),b=document.createTextNode(""),v.observe(b,{characterData:!0}),w=function(){b.data=y=++y%2}):f?((m=new MessageChannel).port1.onmessage=g,w=function(){return m.port2.postMessage(0)}):w=void 0===u?function(){try{var t=Function("return this")().require("vertx");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(g)}:p()}catch(t){return p()}}():p();var S=Math.random().toString(36).substring(2);function C(){}var A={error:null};function E(t){try{return t.then}catch(t){return A.error=t,A}}function T(e,n,r){n.constructor===e.constructor&&r===_&&n.constructor.resolve===x?function(t,e){1===e._state?N(t,e._result):2===e._state?j(t,e._result):I(e,void 0,(function(e){return O(t,e)}),(function(e){return j(t,e)}))}(e,n):r===A?(j(e,A.error),A.error=null):void 0===r?N(e,n):t(r)?function(t,e,n){a((function(t){var r=!1,i=function(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}(n,e,(function(n){r||(r=!0,e!==n?O(t,n):N(t,n))}),(function(e){r||(r=!0,j(t,e))}),t._label);!r&&i&&(r=!0,j(t,i))}),t)}(e,n,r):N(e,n)}function O(t,e){var n,r;t===e?j(t,new TypeError("You cannot resolve a promise with itself")):(r=typeof(n=e),null===n||"object"!==r&&"function"!==r?N(t,e):T(t,e,E(e)))}function k(t){t._onerror&&t._onerror(t._result),L(t)}function N(t,e){void 0===t._state&&(t._result=e,t._state=1,0!==t._subscribers.length&&a(L,t))}function j(t,e){void 0===t._state&&(t._state=2,t._result=e,a(k,t))}function I(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+1]=n,i[o+2]=r,0===o&&t._state&&a(L,t)}function L(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,i=void 0,o=t._result,s=0;s<e.length;s+=3)r=e[s],i=e[s+n],r?R(n,r,i,o):i(o);t._subscribers.length=0}}function R(e,n,r,i){var o=t(r),s=void 0,a=void 0,u=void 0,c=void 0;if(o){if((s=function(t,e){try{return t(e)}catch(t){return A.error=t,A}}(r,i))===A?(c=!0,a=s.error,s.error=null):u=!0,n===s)return void j(n,new TypeError("A promises callback cannot return that same promise."))}else s=i,u=!0;void 0!==n._state||(o&&u?O(n,s):c?j(n,a):1===e?N(n,s):2===e&&j(n,s))}var P=0;function D(t){t[S]=P++,t._state=void 0,t._result=void 0,t._subscribers=[]}var q=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(C),this.promise[S]||D(this.promise),r(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&N(this.promise,this._result))):j(this.promise,new Error("Array Methods must be provided an Array"))}return t.prototype._enumerate=function(t){for(var e=0;void 0===this._state&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===x){var i=E(t);if(i===_&&void 0!==t._state)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===$){var o=new n(C);T(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;void 0===r._state&&(this._remaining--,2===t?j(r,n):this._result[e]=n),0===this._remaining&&N(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;I(t,void 0,(function(t){return n._settledAt(1,e,t)}),(function(t){return n._settledAt(2,e,t)}))},t}(),$=function(){function t(e){this[S]=P++,this._result=this._state=void 0,this._subscribers=[],C!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof t?function(t,e){try{e((function(e){O(t,e)}),(function(e){j(t,e)}))}catch(e){j(t,e)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var e=this.constructor;return this.then((function(n){return e.resolve(t()).then((function(){return n}))}),(function(n){return e.resolve(t()).then((function(){throw n}))}))},t}();return $.prototype.then=_,$.all=function(t){return new q(this,t).promise},$.race=function(t){var e=this;return r(t)?new e((function(n,r){for(var i=t.length,o=0;o<i;o++)e.resolve(t[o]).then(n,r)})):new e((function(t,e){return e(new TypeError("You must pass an array to race."))}))},$.resolve=x,$.reject=function(t){var e=new this(C);return j(e,t),e},$._setScheduler=function(t){s=t},$._setAsap=function(t){a=t},$._asap=a,$.polyfill=function(){var t=void 0;if(void 0!==n)t=n;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=$},$.Promise=$,$},t.exports=r()}).call(e,n(9),n(4))},function(t,e,n){"use strict";t.exports=function(t,e){return/\?/.test(t)?t+="&":t+="?",t+r(e)};var r=n(45)},function(t,e,n){"use strict";var r=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,a){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?o(s(t),(function(s){var a=encodeURIComponent(r(s))+n;return i(t[s])?o(t[s],(function(t){return a+encodeURIComponent(r(t))})).join(e):a+encodeURIComponent(r(t[s]))})).join(e):a?encodeURIComponent(r(a))+n+encodeURIComponent(r(t)):""};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function o(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r));return n}var s=Object.keys||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}},function(t,e,n){"use strict";t.exports=function(t,e,n){if("GET"===e.method){e.debug("JSONP: start");var o=!1,s=!1;i+=1;var a=document.getElementsByTagName("head")[0],u=document.createElement("script"),c="algoliaJSONP_"+i,l=!1;window[c]=function(t){!function(){try{delete window[c],delete window[c+"_loaded"]}catch(t){window[c]=window[c+"_loaded"]=void 0}}(),s?e.debug("JSONP: Late answer, ignoring"):(o=!0,p(),n(null,{body:t,responseText:JSON.stringify(t)}))},t+="&callback="+c,e.jsonBody&&e.jsonBody.params&&(t+="&"+e.jsonBody.params);var h=setTimeout((function(){e.debug("JSONP: Script timeout"),s=!0,p(),n(new r.RequestTimeout)}),e.timeouts.complete);u.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||f()},u.onload=f,u.onerror=function(){e.debug("JSONP: Script error"),l||s||(p(),n(new r.JSONPScriptError))},u.async=!0,u.defer=!0,u.src=t,a.appendChild(u)}else n(new Error("Method "+e.method+" "+t+" is not supported by JSONP."));function f(){e.debug("JSONP: success"),l||s||(l=!0,o||(e.debug("JSONP: Fail. Script loaded but did not call the callback"),p(),n(new r.JSONPScriptFail)))}function p(){clearTimeout(h),u.onload=null,u.onreadystatechange=null,u.onerror=null,a.removeChild(u)}};var r=n(5),i=0},function(t,e,n){t.exports=function(t){return function(e,i,o){var s=n(3);(o=o&&s(o)||{}).hosts=o.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof e&&void 0!==e||(e="",i="",o._allowEmptyCredentials=!0);var a=t(e,i,o),u=a.initIndex("places");return u.search=r("query","/1/places/query"),u.getObject=function(t,e){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(t),hostType:"read",callback:e})},u}};var r=n(13)},function(t,e,n){"use strict";t.exports="3.30.0"},function(t,e,n){"use strict";t.exports=n(50)},function(t,e,n){"use strict";var r=n(15);n(1).element=r;var i=n(0);i.isArray=r.isArray,i.isFunction=r.isFunction,i.isObject=r.isPlainObject,i.bind=r.proxy,i.each=function(t,e){r.each(t,(function(t,n){return e(n,t)}))},i.map=r.map,i.mixin=r.extend,i.Event=r.Event;var o=n(51),s=n(16);function a(t,e,n,a){n=i.isArray(n)?n:[].slice.call(arguments,2);var u=r(t).each((function(t,i){var u=r(i),c=new s({el:u}),l=a||new o({input:u,eventBus:c,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||i.getAttribute("aria-label")});u.data("aaAutocomplete",l)}));return u.autocomplete={},i.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){u.autocomplete[t]=function(){var e,n=arguments;return u.each((function(i,o){var s=r(o).data("aaAutocomplete");e=s[t].apply(s,n)})),e}})),u}a.sources=o.sources,a.escapeHighlightedString=i.escapeHighlightedString;var u="autocomplete"in window,c=window.autocomplete;a.noConflict=function(){return u?window.autocomplete=c:delete window.autocomplete,a},t.exports=a},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(16),s=n(52),a=n(59),u=n(17),c=n(11);function l(t){var e,n;if((t=t||{}).input||r.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=r.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=r.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",r.getUniqueId()].join("-");var s=function(t){var e,n,o,s;e=i.element(t.input),n=i.element(u.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var a,c=u.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=i.element(c).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(r.templatify(t.templates.dropdownMenu)()),(s=e.clone().css(t.css.hint).css((a=e,{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}))).val("").addClass(r.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),s.removeData&&s.removeData(),e.data("aaAttrs",{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(r.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(t){}return(n=t.appendTo?n.appendTo(i.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent()).prepend(t.hint?s:null).append(o),{wrapper:n,input:e,hint:s,menu:o}}(t);this.$node=s.wrapper;var a=this.$input=s.input;e=s.menu,n=s.hint,t.dropdownMenuContainer&&i.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),a.on("blur.aa",(function(t){var n=document.activeElement;r.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),r.defer((function(){a.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:a}),this.dropdown=new l.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new l.Input({input:a,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}r.mixin(l.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];r.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),i.element(document).keydown((function(t){var r=t.target||t.srcElement,i=r.tagName;if(!r.isContentEditable&&"INPUT"!==i&&"SELECT"!==i&&"TEXTAREA"!==i){var o=t.which||t.keyCode;-1!==n.indexOf(o)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),r=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(r),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var r=t.left-e.left;this.$node.css("left",r+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,r;n=this.dropdown.getDatumForCursor(),r=this.dropdown.getDatumForTopSuggestion();var i={selectionMethod:"enterKey"};n?(this._select(n,i),e.preventDefault()):this.autoselect&&r&&(this._select(r,i),e.preventDefault())},_onTabKeyed:function(t,e){var n;this.tabAutocomplete?(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0):this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,o;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=s.normalizeQuery(e),i=r.escapeRegExChars(n),(o=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+o[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,r,i;e=this.input.getHint(),n=this.input.getQuery(),r=t||this.input.isCursorAtEnd(),e&&n!==e&&r&&((i=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(i.value),this.eventBus.trigger("autocompleted",i.raw,i.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),r.defer(r.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=r.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){var t,e,n;this.input.destroy(),this.dropdown.destroy(),t=this.$node,e=this.cssClasses,n=t.find(r.className(e.prefix,e.input)),r.each(n.data("aaAttrs"),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(r.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData("aaAttrs"),t.remove(),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),l.Dropdown=a,l.Input=s,l.sources=n(61),t.exports=l},function(t,e,n){"use strict";var r;r={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=n(0),o=n(1),s=n(10);function a(t){var e,n,s,a,u,c=this;(t=t||{}).input||i.error("input is missing"),e=i.bind(this._onBlur,this),n=i.bind(this._onFocus,this),s=i.bind(this._onKeydown,this),a=i.bind(this._onInput,this),this.$hint=o.element(t.hint),this.$input=o.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",s),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){r[t.which||t.keyCode]||i.defer(i.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,o.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(a.prototype,s,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=r[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,r,i;switch(t){case"tab":r=this.getHint(),i=this.getInputValue(),n=r&&r!==i&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!u(e);break;default:n=!0}return n},_checkInputValue:function(){var t,e,n,r,i;t=this.getInputValue(),r=t,i=this.query,n=!(!(e=a.normalizeQuery(r)===a.normalizeQuery(i))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,i.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},function(t,e,n){"use strict";var r,i,o,s=[n(54),n(55),n(56),n(57),n(58)],a=-1,u=[],c=!1;function l(){r&&i&&(r=!1,i.length?u=i.concat(u):a=-1,u.length&&h())}function h(){if(!r){c=!1,r=!0;for(var t=u.length,e=setTimeout(l);t;){for(i=u,u=[];i&&++a<t;)i[a].run();a=-1,t=u.length}i=null,a=-1,r=!1,clearTimeout(e)}}for(var f=-1,p=s.length;++f<p;)if(s[f]&&s[f].test&&s[f].test()){o=s[f].install(h);break}function d(t,e){this.fun=t,this.array=e}d.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new d(t,e)),c||r||(c=!0,o())}},function(t,e,n){"use strict";(function(t){e.test=function(){return void 0!==t&&!t.browser},e.install=function(e){return function(){t.nextTick(e)}}}).call(e,n(9))},function(t,e,n){"use strict";(function(t){var n=t.MutationObserver||t.WebKitMutationObserver;e.test=function(){return n},e.install=function(e){var r=0,i=new n(e),o=t.document.createTextNode("");return i.observe(o,{characterData:!0}),function(){o.data=r=++r%2}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return!t.setImmediate&&void 0!==t.MessageChannel},e.install=function(e){var n=new t.MessageChannel;return n.port1.onmessage=e,function(){n.port2.postMessage(0)}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return"document"in t&&"onreadystatechange"in t.document.createElement("script")},e.install=function(e){return function(){var n=t.document.createElement("script");return n.onreadystatechange=function(){e(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},t.document.documentElement.appendChild(n),e}}}).call(e,n(4))},function(t,e,n){"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(10),s=n(60),a=n(11);function u(t){var e,n,o,s=this;(t=t||{}).menu||r.error("menu is required"),r.isArray(t.datasets)||r.isObject(t.datasets)||r.error("1 or more datasets required"),t.datasets||r.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=r.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=r.bind(this._onSuggestionClick,this),n=r.bind(this._onSuggestionMouseEnter,this),o=r.bind(this._onSuggestionMouseLeave,this);var c=r.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=i.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,o).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=r.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=r.templatify(t.templates.empty),this.$empty=i.element('<div class="'+r.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=r.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(r.mixin({$menu:t,cssClasses:n},e))}(s.$menu,e,t.cssClasses)})),r.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&s.$menu.append(e),t.onSync("rendered",s._onRendered,s)})),t.templates&&t.templates.footer&&(this.templates.footer=r.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;i.element(window).resize((function(){l._redraw()}))}r.mixin(u.prototype,o,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",i.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=i.element(t.currentTarget);if(!e.hasClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){t.relatedTarget&&i.element(t.relatedTarget).closest("."+r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0||(this._removeCursor(),this.trigger("cursorRemoved"))},_onRendered:function(t,e){if(this.isEmpty=r.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else r.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,r,i;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!=(r=((r=e.index(n)+t)+1)%(e.length+1)-1)?(r<-1&&(r=e.length-1),this._setCursor(i=e.eq(r),!0),this._ensureVisible(i)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,r,i;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),r=this.$menu.scrollTop(),i=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(r+e):i<n&&this.$menu.scrollTop(r+(n-i))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:s.extractDatum(t),value:s.extractValue(t),datasetName:s.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){r.each(this.datasets,(function(e){e.update(t)}))},empty:function(){r.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,r.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=s,t.exports=u},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(17),s=n(11),a=n(10);function u(t){var e,n,a,u;(t=t||{}).templates=t.templates||{},t.source||r.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&r.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?r.getUniqueId():t.name,this.source=t.source,this.displayFn=(n=(n=t.display||t.displayKey)||"value",r.isFunction(n)?n:function(t){return t[n]}),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=(a=t.templates,u=this.displayFn,{empty:a.empty&&r.templatify(a.empty),header:a.header&&r.templatify(a.header),footer:a.footer&&r.templatify(a.footer),suggestion:a.suggestion||function(t){return"<p>"+u(t)+"</p>"}}),this.css=r.mixin({},s,t.appendTo?s.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},s.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var c=r.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(c+"-"+this.name).length>0?i.element(t.$menu.find(c+"-"+this.name)[0]):i.element(o.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}u.extractDatasetName=function(t){return i.element(t).data("aaDataset")},u.extractValue=function(t){return i.element(t).data("aaValue")},u.extractDatum=function(t){var e=i.element(t).data("aaDatum");return"string"==typeof e&&(e=JSON.parse(e)),e},r.mixin(u.prototype,a,{_render:function(t,e){if(this.$el){var n,s=this,a=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(u.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(n)this.$el.html(c.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function u(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),s.templates.empty.apply(this,e)}function c(){var t,n,a=[].slice.call(arguments,0),u=this,c=o.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=i.element(c).css(this.css.suggestions),n=r.map(e,l),t.append.apply(t,n),t;function l(t){var e,n=o.suggestion.replace("%PREFIX%",u.cssClasses.prefix).replace("%SUGGESTION%",u.cssClasses.suggestion);return(e=i.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(s.templates.suggestion.apply(this,[t].concat(a)))).data("aaDataset",s.name),e.data("aaValue",s.displayFn(t)||void 0),e.data("aaDatum",JSON.stringify(t)),e.children().each((function(){i.element(this).css(u.css.suggestionChild)})),e}}function l(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.header.apply(this,e)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,r=function(){n.canceled||n.source(t,e.bind(n))};this.debounce?(clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,r()}),this.debounce)):r()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=u},function(t,e,n){"use strict";t.exports={hits:n(62),popularIn:n(63)}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e){var n=o(t.as._ua);return n&&n[0]>=3&&n[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),function(n,i){t.search(n,e,(function(t,e){t?r.error(t.message):i(e.hits,e)}))}}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e,n,s){var a=o(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),!n.source)return r.error("Missing 'source' key");var u=r.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return r.error("Missing 'index' key");var c=n.index;return s=s||{},function(a,l){t.search(a,e,(function(t,a){if(t)r.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],f=r.mixin({hitsPerPage:0},n);delete f.source,delete f.index;var p=o(c.as._ua);return p&&p[0]>=3&&p[1]>20&&(e.additionalUA="autocomplete.js "+i),void c.search(u(h),f,(function(t,e){if(t)r.error(t.message);else{var n=[];if(s.includeAll){var i=s.allTitle||"All departments";n.push(r.mixin({facet:{value:i,count:e.nbHits}},r.cloneDeep(h)))}r.each(e.facets,(function(t,e){r.each(t,(function(t,i){n.push(r.mixin({facet:{facet:e,value:i,count:t}},r.cloneDeep(h)))}))}));for(var o=1;o<a.hits.length;++o)n.push(a.hits[o]);l(n,a)}}))}l([])}}))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="algolia-docsearch-suggestion",i={suggestion:'\n  <a class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    "\n    aria-label="Link to the result"\n    href="{{{url}}}"\n    >\n    <div class="'+r+'--category-header">\n        <span class="'+r+'--category-header-lvl0">{{{category}}}</span>\n    </div>\n    <div class="'+r+'--wrapper">\n      <div class="'+r+'--subcategory-column">\n        <span class="'+r+'--subcategory-column-text">{{{subcategory}}}</span>\n      </div>\n      {{#isTextOrSubcategoryNonEmpty}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--subcategory-inline">{{{subcategory}}}</div>\n        <div class="'+r+'--title">{{{title}}}</div>\n        {{#text}}<div class="'+r+'--text">{{{text}}}</div>{{/text}}\n      </div>\n      {{/isTextOrSubcategoryNonEmpty}}\n    </div>\n  </a>\n  ',suggestionSimple:'\n  <div class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    suggestion-layout-simple\n  ">\n    <div class="'+r+'--category-header">\n        {{^isLvl0}}\n        <span class="'+r+"--category-header-lvl0 "+r+'--category-header-item">{{{category}}}</span>\n          {{^isLvl1}}\n          {{^isLvl1EmptyOrDuplicate}}\n          <span class="'+r+"--category-header-lvl1 "+r+'--category-header-item">\n              {{{subcategory}}}\n          </span>\n          {{/isLvl1EmptyOrDuplicate}}\n          {{/isLvl1}}\n        {{/isLvl0}}\n        <div class="'+r+"--title "+r+'--category-header-item">\n            {{#isLvl2}}\n                {{{title}}}\n            {{/isLvl2}}\n            {{#isLvl1}}\n                {{{subcategory}}}\n            {{/isLvl1}}\n            {{#isLvl0}}\n                {{{category}}}\n            {{/isLvl0}}\n        </div>\n    </div>\n    <div class="'+r+'--wrapper">\n      {{#text}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--text">{{{text}}}</div>\n      </div>\n      {{/text}}\n    </div>\n  </div>\n  ',footer:'\n    <div class="algolia-docsearch-footer">\n      Search by <a class="algolia-docsearch-footer--logo" href="https://www.algolia.com/docsearch">Algolia</a>\n    </div>\n  ',empty:'\n  <div class="'+r+'">\n    <div class="'+r+'--wrapper">\n        <div class="'+r+"--content "+r+'--no-results">\n            <div class="'+r+'--title">\n                <div class="'+r+'--text">\n                    No results found for query <b>"{{query}}"</b>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n  ',searchBox:'\n  <form novalidate="novalidate" onsubmit="return false;" class="searchbox">\n    <div role="search" class="searchbox__wrapper">\n      <input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>\n      <button type="submit" title="Submit your search query." class="searchbox__submit" >\n        <svg width=12 height=12 role="img" aria-label="Search">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>\n        </svg>\n      </button>\n      <button type="reset" title="Clear the search query." class="searchbox__reset hide">\n        <svg width=12 height=12 role="img" aria-label="Reset">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>\n        </svg>\n      </button>\n    </div>\n</form>\n\n<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">\n  <svg xmlns="http://www.w3.org/2000/svg">\n    <symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>\n    <symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>\n  </svg>\n</div>\n  '};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=n(20),s=(r=o)&&r.__esModule?r:{default:r},a={mergeKeyWithParent:function(t,e){if(void 0===t[e])return t;if("object"!==i(t[e]))return t;var n=s.default.extend({},t,t[e]);return delete n[e],n},groupBy:function(t,e){var n={};return s.default.each(t,(function(t,r){if(void 0===r[e])throw new Error("[groupBy]: Object has no key "+e);var i=r[e];"string"==typeof i&&(i=i.toLowerCase()),Object.prototype.hasOwnProperty.call(n,i)||(n[i]=[]),n[i].push(r)})),n},values:function(t){return Object.keys(t).map((function(e){return t[e]}))},flatten:function(t){var e=[];return t.forEach((function(t){Array.isArray(t)?t.forEach((function(t){e.push(t)})):e.push(t)})),e},flattenAndFlagFirst:function(t,e){var n=this.values(t).map((function(t){return t.map((function(t,n){return t[e]=0===n,t}))}));return this.flatten(n)},compact:function(t){var e=[];return t.forEach((function(t){t&&e.push(t)})),e},getHighlightedValue:function(t,e){return t._highlightResult&&t._highlightResult.hierarchy_camel&&t._highlightResult.hierarchy_camel[e]&&t._highlightResult.hierarchy_camel[e].matchLevel&&"none"!==t._highlightResult.hierarchy_camel[e].matchLevel&&t._highlightResult.hierarchy_camel[e].value?t._highlightResult.hierarchy_camel[e].value:t._highlightResult&&t._highlightResult&&t._highlightResult[e]&&t._highlightResult[e].value?t._highlightResult[e].value:t[e]},getSnippetedValue:function(t,e){if(!t._snippetResult||!t._snippetResult[e]||!t._snippetResult[e].value)return t[e];var n=t._snippetResult[e].value;return n[0]!==n[0].toUpperCase()&&(n="…"+n),-1===[".","!","?"].indexOf(n[n.length-1])&&(n+="…"),n},deepClone:function(t){return JSON.parse(JSON.stringify(t))}};e.default=a}])},t.exports=r()},function(t,e,n){n(0),n(9)},function(t,e,n){var r,i,o;!function(s,a){a=a.bind(null,s,s.document),t.exports?a(n(0)):(i=[n(0)],void 0===(o="function"==typeof(r=a)?r.apply(e,i):r)||(t.exports=o))}(window,(function(t,e,n){"use strict";var r,i,o={};function s(t,n,r){if(!o[t]){var i=e.createElement(n?"link":"script"),s=e.getElementsByTagName("script")[0];n?(i.rel="stylesheet",i.href=t):(i.onload=function(){i.onerror=null,i.onload=null,r()},i.onerror=i.onload,i.src=t),o[t]=!0,o[i.src||i.href]=!0,s.parentNode.insertBefore(i,s)}}e.addEventListener&&(i=/\(|\)|\s|'/,r=function(t,n){var r=e.createElement("img");r.onload=function(){r.onload=null,r.onerror=null,r=null,n()},r.onerror=r.onload,r.src=t,r&&r.complete&&r.onload&&r.onload()},addEventListener("lazybeforeunveil",(function(t){var e,o,a;if(t.detail.instance==n&&!t.defaultPrevented){var u=t.target;if("none"==u.preload&&(u.preload=u.getAttribute("data-preload")||"auto"),null!=u.getAttribute("data-autoplay"))if(u.getAttribute("data-expand")&&!u.autoplay)try{u.play()}catch(t){}else requestAnimationFrame((function(){u.setAttribute("data-expand","-10"),n.aC(u,n.cfg.lazyClass)}));(e=u.getAttribute("data-link"))&&s(e,!0),(e=u.getAttribute("data-script"))&&(t.detail.firesLoad=!0,s(e,null,(function(){t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(e=u.getAttribute("data-require"))&&(n.cfg.requireJs?n.cfg.requireJs([e]):s(e)),(o=u.getAttribute("data-bg"))&&(t.detail.firesLoad=!0,r(o,(function(){u.style.backgroundImage="url("+(i.test(o)?JSON.stringify(o):o)+")",t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(a=u.getAttribute("data-poster"))&&(t.detail.firesLoad=!0,r(a,(function(){u.poster=a,t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)})))}}),!1))}))},function(t,e){for(var n=document.getElementsByClassName("js-toggle"),r=0;r<n.length;r++)n[r].addEventListener("click",i,!1);function i(){for(var t=this.dataset.target.split(" "),e=document.querySelector(".mobilemenu:not(.dn)"),n=document.querySelector(".desktopmenu:not(.dn)"),r=document.querySelector(".desktopmenu:not(.dn)"),i=0;i<t.length;i++){var o=document.querySelectorAll(t[i]);[].forEach.call(o,(function(t){return t.classList.contains("dn")?t.classList.remove("dn"):t.classList.add("dn"),!1})),e&&e.classList.add("dn"),n&&n.classList.add("dn"),r&&r.classList.remove("db")}}},function(t,e,n){n(12)},function(t,e,n){var r,i;
-/**
-  scrolldir - Vertical scroll direction in CSS
-  @version v1.5.3
-  @link https://github.com/yowainwright/scrolldir.git
-  @author Patrick Fisher <patrick@pwfisher.com>, Jeffry Wainwright <yowainwright@gmail.com>
-  @license MIT
-**/void 0===(i="function"==typeof(r=function(){"use strict";var t,e,n="data-scrolldir",r="down",i=64,o=document.documentElement,s=window,a=document.body,u=Array(32),c=0;function l(){var l=s.scrollY||s.pageYOffset,h=t.timeStamp,f="down"===r?Math.max:Math.min,p=a.scrollHeight-s.innerHeight;if(l=Math.max(0,l),l=Math.min(p,l),u.unshift({y:l,t:h}),u.pop(),l===f(e,l))return c=h,void(e=l);var d=h-512;if(c<d){e=l;for(var g=0;g<32&&u[g]&&!(u[g].t<d);g+=1)e=f(e,u[g].y)}Math.abs(l-e)>i&&(e=l,c=h,r="down"===r?"up":"down",o.setAttribute(n,r))}function h(e){return t=e,s.requestAnimationFrame(l)}e=s.scrollY||s.pageYOffset,o.setAttribute(n,r),s.addEventListener("scroll",h)})?r.call(e,n,e,t):r)||(t.exports=i)},function(t,e){!function(){"use strict";if("querySelector"in document&&"addEventListener"in window&&Array.prototype.forEach){var t=document.querySelectorAll("#TableOfContents ul li a");[].forEach.call(t,(function(t){t.addEventListener("click",(function(e){e.preventDefault();var n=t.getAttribute("href"),r=document.querySelector(n),i=t.getAttribute("data-speed");r&&function(t,e){var n,r=window.pageYOffset,i=t.offsetTop,o=(i-r)/(e/16);n=o>=0?function(){var t=window.pageYOffset;(t>=i-o||window.innerHeight+t>=document.body.offsetHeight)&&clearInterval(s)}:function(){window.pageYOffset<=(i||0)&&clearInterval(s)};var s=setInterval((function(){window.scrollBy(0,o),n()}),16)}(r,i||500)}),!1)}))}}()},function(t,e){var n,r=document.querySelectorAll("[data-toggle-tab]"),i=document.querySelectorAll("[data-pane]");function o(t){if(t.target){t.preventDefault();var e=t.currentTarget.getAttribute("data-toggle-tab")}else e=t;window.localStorage&&window.localStorage.setItem("configLangPref",e);for(var n=document.querySelectorAll("[data-toggle-tab='"+e+"']"),o=document.querySelectorAll("[data-pane='"+e+"']"),s=0;s<r.length;s++)r[s].classList.remove("active"),i[s].classList.remove("active");for(s=0;s<n.length;s++)n[s].classList.add("active"),o[s].classList.add("active")}for(n=0;n<r.length;n++)r[n].addEventListener("click",o);window.localStorage.getItem("configLangPref")&&o(window.localStorage.getItem("configLangPref"))},function(t,e){document.documentElement.className=document.documentElement.className.replace(/\bno-js\b/,"js")}]);
\ No newline at end of file
+ */var r;r=function(){"use strict";function t(t){return"function"==typeof t}var r=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,a=function(t,e){p[i]=t,p[i+1]=e,2===(i+=2)&&(s?s(g):w())},u="undefined"!=typeof window?window:void 0,c=u||{},l=c.MutationObserver||c.WebKitMutationObserver,h="undefined"==typeof self&&void 0!==e&&"[object process]"==={}.toString.call(e),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(g,1)}}var p=new Array(1e3);function g(){for(var t=0;t<i;t+=2)(0,p[t])(p[t+1]),p[t]=void 0,p[t+1]=void 0;i=0}var m,y,v,b,w=void 0;function _(t,e){var n=this,r=new this.constructor(C);void 0===r[S]&&D(r);var i=n._state;if(i){var o=arguments[i-1];a((function(){return R(i,r,o,n._result)}))}else I(n,r,t,e);return r}function x(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(C);return k(e,t),e}h?w=function(){return e.nextTick(g)}:l?(y=0,v=new l(g),b=document.createTextNode(""),v.observe(b,{characterData:!0}),w=function(){b.data=y=++y%2}):f?((m=new MessageChannel).port1.onmessage=g,w=function(){return m.port2.postMessage(0)}):w=void 0===u?function(){try{var t=Function("return this")().require("vertx");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(g)}:d()}catch(t){return d()}}():d();var S=Math.random().toString(36).substring(2);function C(){}var A={error:null};function E(t){try{return t.then}catch(t){return A.error=t,A}}function T(e,n,r){n.constructor===e.constructor&&r===_&&n.constructor.resolve===x?function(t,e){1===e._state?N(t,e._result):2===e._state?j(t,e._result):I(e,void 0,(function(e){return k(t,e)}),(function(e){return j(t,e)}))}(e,n):r===A?(j(e,A.error),A.error=null):void 0===r?N(e,n):t(r)?function(t,e,n){a((function(t){var r=!1,i=function(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}(n,e,(function(n){r||(r=!0,e!==n?k(t,n):N(t,n))}),(function(e){r||(r=!0,j(t,e))}),t._label);!r&&i&&(r=!0,j(t,i))}),t)}(e,n,r):N(e,n)}function k(t,e){var n,r;t===e?j(t,new TypeError("You cannot resolve a promise with itself")):(r=typeof(n=e),null===n||"object"!==r&&"function"!==r?N(t,e):T(t,e,E(e)))}function O(t){t._onerror&&t._onerror(t._result),L(t)}function N(t,e){void 0===t._state&&(t._result=e,t._state=1,0!==t._subscribers.length&&a(L,t))}function j(t,e){void 0===t._state&&(t._state=2,t._result=e,a(O,t))}function I(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+1]=n,i[o+2]=r,0===o&&t._state&&a(L,t)}function L(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,i=void 0,o=t._result,s=0;s<e.length;s+=3)r=e[s],i=e[s+n],r?R(n,r,i,o):i(o);t._subscribers.length=0}}function R(e,n,r,i){var o=t(r),s=void 0,a=void 0,u=void 0,c=void 0;if(o){if((s=function(t,e){try{return t(e)}catch(t){return A.error=t,A}}(r,i))===A?(c=!0,a=s.error,s.error=null):u=!0,n===s)return void j(n,new TypeError("A promises callback cannot return that same promise."))}else s=i,u=!0;void 0!==n._state||(o&&u?k(n,s):c?j(n,a):1===e?N(n,s):2===e&&j(n,s))}var P=0;function D(t){t[S]=P++,t._state=void 0,t._result=void 0,t._subscribers=[]}var q=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(C),this.promise[S]||D(this.promise),r(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&N(this.promise,this._result))):j(this.promise,new Error("Array Methods must be provided an Array"))}return t.prototype._enumerate=function(t){for(var e=0;void 0===this._state&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===x){var i=E(t);if(i===_&&void 0!==t._state)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===$){var o=new n(C);T(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;void 0===r._state&&(this._remaining--,2===t?j(r,n):this._result[e]=n),0===this._remaining&&N(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;I(t,void 0,(function(t){return n._settledAt(1,e,t)}),(function(t){return n._settledAt(2,e,t)}))},t}(),$=function(){function t(e){this[S]=P++,this._result=this._state=void 0,this._subscribers=[],C!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof t?function(t,e){try{e((function(e){k(t,e)}),(function(e){j(t,e)}))}catch(e){j(t,e)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var e=this.constructor;return this.then((function(n){return e.resolve(t()).then((function(){return n}))}),(function(n){return e.resolve(t()).then((function(){throw n}))}))},t}();return $.prototype.then=_,$.all=function(t){return new q(this,t).promise},$.race=function(t){var e=this;return r(t)?new e((function(n,r){for(var i=t.length,o=0;o<i;o++)e.resolve(t[o]).then(n,r)})):new e((function(t,e){return e(new TypeError("You must pass an array to race."))}))},$.resolve=x,$.reject=function(t){var e=new this(C);return j(e,t),e},$._setScheduler=function(t){s=t},$._setAsap=function(t){a=t},$._asap=a,$.polyfill=function(){var t=void 0;if(void 0!==n)t=n;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=$},$.Promise=$,$},t.exports=r()}).call(e,n(9),n(4))},function(t,e,n){"use strict";t.exports=function(t,e){return/\?/.test(t)?t+="&":t+="?",t+r(e)};var r=n(45)},function(t,e,n){"use strict";var r=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,a){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?o(s(t),(function(s){var a=encodeURIComponent(r(s))+n;return i(t[s])?o(t[s],(function(t){return a+encodeURIComponent(r(t))})).join(e):a+encodeURIComponent(r(t[s]))})).join(e):a?encodeURIComponent(r(a))+n+encodeURIComponent(r(t)):""};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function o(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r));return n}var s=Object.keys||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}},function(t,e,n){"use strict";t.exports=function(t,e,n){if("GET"===e.method){e.debug("JSONP: start");var o=!1,s=!1;i+=1;var a=document.getElementsByTagName("head")[0],u=document.createElement("script"),c="algoliaJSONP_"+i,l=!1;window[c]=function(t){!function(){try{delete window[c],delete window[c+"_loaded"]}catch(t){window[c]=window[c+"_loaded"]=void 0}}(),s?e.debug("JSONP: Late answer, ignoring"):(o=!0,d(),n(null,{body:t,responseText:JSON.stringify(t)}))},t+="&callback="+c,e.jsonBody&&e.jsonBody.params&&(t+="&"+e.jsonBody.params);var h=setTimeout((function(){e.debug("JSONP: Script timeout"),s=!0,d(),n(new r.RequestTimeout)}),e.timeouts.complete);u.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||f()},u.onload=f,u.onerror=function(){e.debug("JSONP: Script error"),l||s||(d(),n(new r.JSONPScriptError))},u.async=!0,u.defer=!0,u.src=t,a.appendChild(u)}else n(new Error("Method "+e.method+" "+t+" is not supported by JSONP."));function f(){e.debug("JSONP: success"),l||s||(l=!0,o||(e.debug("JSONP: Fail. Script loaded but did not call the callback"),d(),n(new r.JSONPScriptFail)))}function d(){clearTimeout(h),u.onload=null,u.onreadystatechange=null,u.onerror=null,a.removeChild(u)}};var r=n(5),i=0},function(t,e,n){t.exports=function(t){return function(e,i,o){var s=n(3);(o=o&&s(o)||{}).hosts=o.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof e&&void 0!==e||(e="",i="",o._allowEmptyCredentials=!0);var a=t(e,i,o),u=a.initIndex("places");return u.search=r("query","/1/places/query"),u.getObject=function(t,e){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(t),hostType:"read",callback:e})},u}};var r=n(13)},function(t,e,n){"use strict";t.exports="3.30.0"},function(t,e,n){"use strict";t.exports=n(50)},function(t,e,n){"use strict";var r=n(15);n(1).element=r;var i=n(0);i.isArray=r.isArray,i.isFunction=r.isFunction,i.isObject=r.isPlainObject,i.bind=r.proxy,i.each=function(t,e){r.each(t,(function(t,n){return e(n,t)}))},i.map=r.map,i.mixin=r.extend,i.Event=r.Event;var o=n(51),s=n(16);function a(t,e,n,a){n=i.isArray(n)?n:[].slice.call(arguments,2);var u=r(t).each((function(t,i){var u=r(i),c=new s({el:u}),l=a||new o({input:u,eventBus:c,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth});u.data("aaAutocomplete",l)}));return u.autocomplete={},i.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){u.autocomplete[t]=function(){var e,n=arguments;return u.each((function(i,o){var s=r(o).data("aaAutocomplete");e=s[t].apply(s,n)})),e}})),u}a.sources=o.sources,a.escapeHighlightedString=i.escapeHighlightedString;var u="autocomplete"in window,c=window.autocomplete;a.noConflict=function(){return u?window.autocomplete=c:delete window.autocomplete,a},t.exports=a},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(16),s=n(52),a=n(59),u=n(17),c=n(11);function l(t){var e,n;if((t=t||{}).input||r.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=r.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=r.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",r.getUniqueId()].join("-");var s=function(t){var e,n,o,s;e=i.element(t.input),n=i.element(u.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var a,c=u.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=i.element(c).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(r.templatify(t.templates.dropdownMenu)()),(s=e.clone().css(t.css.hint).css((a=e,{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}))).val("").addClass(r.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),s.removeData&&s.removeData(),e.data("aaAttrs",{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(r.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(t){}return(n=t.appendTo?n.appendTo(i.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent()).prepend(t.hint?s:null).append(o),{wrapper:n,input:e,hint:s,menu:o}}(t);this.$node=s.wrapper;var a=this.$input=s.input;e=s.menu,n=s.hint,t.dropdownMenuContainer&&i.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),a.on("blur.aa",(function(t){var n=document.activeElement;r.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),r.defer((function(){a.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:a}),this.dropdown=new l.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new l.Input({input:a,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}r.mixin(l.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];r.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),i.element(document).keydown((function(t){var r=t.target||t.srcElement,i=r.tagName;if(!r.isContentEditable&&"INPUT"!==i&&"SELECT"!==i&&"TEXTAREA"!==i){var o=t.which||t.keyCode;-1!==n.indexOf(o)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n)},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),r=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(r),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var r=t.left-e.left;this.$node.css("left",r+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion(),this.debug||(this.autoselectOnBlur&&t?this._select(t):this.autoselectOnBlur&&e?this._select(e):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,r;n=this.dropdown.getDatumForCursor(),r=this.dropdown.getDatumForTopSuggestion(),n?(this._select(n),e.preventDefault()):this.autoselect&&r&&(this._select(r),e.preventDefault())},_onTabKeyed:function(t,e){var n;this.tabAutocomplete?(n=this.dropdown.getDatumForCursor())?(this._select(n),e.preventDefault()):this._autocomplete(!0):this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,o;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=s.normalizeQuery(e),i=r.escapeRegExChars(n),(o=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+o[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,r,i;e=this.input.getHint(),n=this.input.getQuery(),r=t||this.input.isCursorAtEnd(),e&&n!==e&&r&&((i=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(i.value),this.eventBus.trigger("autocompleted",i.raw,i.datasetName))},_select:function(t){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName).isDefaultPrevented()&&(this.dropdown.close(),r.defer(r.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=r.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){var t,e,n;this.input.destroy(),this.dropdown.destroy(),t=this.$node,e=this.cssClasses,n=t.find(r.className(e.prefix,e.input)),r.each(n.data("aaAttrs"),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(r.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData("aaAttrs"),t.remove(),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),l.Dropdown=a,l.Input=s,l.sources=n(61),t.exports=l},function(t,e,n){"use strict";var r;r={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=n(0),o=n(1),s=n(10);function a(t){var e,n,s,a,u,c=this;(t=t||{}).input||i.error("input is missing"),e=i.bind(this._onBlur,this),n=i.bind(this._onFocus,this),s=i.bind(this._onKeydown,this),a=i.bind(this._onInput,this),this.$hint=o.element(t.hint),this.$input=o.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",s),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){r[t.which||t.keyCode]||i.defer(i.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,o.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(a.prototype,s,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=r[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,r,i;switch(t){case"tab":r=this.getHint(),i=this.getInputValue(),n=r&&r!==i&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!u(e);break;default:n=!0}return n},_checkInputValue:function(){var t,e,n,r,i;t=this.getInputValue(),r=t,i=this.query,n=!(!(e=a.normalizeQuery(r)===a.normalizeQuery(i))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,i.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},function(t,e,n){"use strict";var r,i,o,s=[n(54),n(55),n(56),n(57),n(58)],a=-1,u=[],c=!1;function l(){r&&i&&(r=!1,i.length?u=i.concat(u):a=-1,u.length&&h())}function h(){if(!r){c=!1,r=!0;for(var t=u.length,e=setTimeout(l);t;){for(i=u,u=[];i&&++a<t;)i[a].run();a=-1,t=u.length}i=null,a=-1,r=!1,clearTimeout(e)}}for(var f=-1,d=s.length;++f<d;)if(s[f]&&s[f].test&&s[f].test()){o=s[f].install(h);break}function p(t,e){this.fun=t,this.array=e}p.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new p(t,e)),c||r||(c=!0,o())}},function(t,e,n){"use strict";(function(t){e.test=function(){return void 0!==t&&!t.browser},e.install=function(e){return function(){t.nextTick(e)}}}).call(e,n(9))},function(t,e,n){"use strict";(function(t){var n=t.MutationObserver||t.WebKitMutationObserver;e.test=function(){return n},e.install=function(e){var r=0,i=new n(e),o=t.document.createTextNode("");return i.observe(o,{characterData:!0}),function(){o.data=r=++r%2}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return!t.setImmediate&&void 0!==t.MessageChannel},e.install=function(e){var n=new t.MessageChannel;return n.port1.onmessage=e,function(){n.port2.postMessage(0)}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return"document"in t&&"onreadystatechange"in t.document.createElement("script")},e.install=function(e){return function(){var n=t.document.createElement("script");return n.onreadystatechange=function(){e(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},t.document.documentElement.appendChild(n),e}}}).call(e,n(4))},function(t,e,n){"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(10),s=n(60),a=n(11);function u(t){var e,n,o,s=this;(t=t||{}).menu||r.error("menu is required"),r.isArray(t.datasets)||r.isObject(t.datasets)||r.error("1 or more datasets required"),t.datasets||r.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=r.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=r.bind(this._onSuggestionClick,this),n=r.bind(this._onSuggestionMouseEnter,this),o=r.bind(this._onSuggestionMouseLeave,this);var c=r.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=i.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,o).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=r.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=r.templatify(t.templates.empty),this.$empty=i.element('<div class="'+r.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=r.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(r.mixin({$menu:t,cssClasses:n},e))}(s.$menu,e,t.cssClasses)})),r.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&s.$menu.append(e),t.onSync("rendered",s._onRendered,s)})),t.templates&&t.templates.footer&&(this.templates.footer=r.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;i.element(window).resize((function(){l._redraw()}))}r.mixin(u.prototype,o,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",i.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=i.element(t.currentTarget);if(!e.hasClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){t.relatedTarget&&i.element(t.relatedTarget).closest("."+r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0||(this._removeCursor(),this.trigger("cursorRemoved"))},_onRendered:function(t,e){if(this.isEmpty=r.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else r.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,r,i;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!=(r=((r=e.index(n)+t)+1)%(e.length+1)-1)?(r<-1&&(r=e.length-1),this._setCursor(i=e.eq(r),!0),this._ensureVisible(i)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,r,i;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),r=this.$menu.scrollTop(),i=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(r+e):i<n&&this.$menu.scrollTop(r+(n-i))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:s.extractDatum(t),value:s.extractValue(t),datasetName:s.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){r.each(this.datasets,(function(e){e.update(t)}))},empty:function(){r.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,r.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=s,t.exports=u},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(17),s=n(11),a=n(10);function u(t){var e,n,a,u;(t=t||{}).templates=t.templates||{},t.source||r.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&r.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?r.getUniqueId():t.name,this.source=t.source,this.displayFn=(n=(n=t.display||t.displayKey)||"value",r.isFunction(n)?n:function(t){return t[n]}),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=(a=t.templates,u=this.displayFn,{empty:a.empty&&r.templatify(a.empty),header:a.header&&r.templatify(a.header),footer:a.footer&&r.templatify(a.footer),suggestion:a.suggestion||function(t){return"<p>"+u(t)+"</p>"}}),this.css=r.mixin({},s,t.appendTo?s.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},s.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var c=r.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(c+"-"+this.name).length>0?i.element(t.$menu.find(c+"-"+this.name)[0]):i.element(o.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}u.extractDatasetName=function(t){return i.element(t).data("aaDataset")},u.extractValue=function(t){return i.element(t).data("aaValue")},u.extractDatum=function(t){var e=i.element(t).data("aaDatum");return"string"==typeof e&&(e=JSON.parse(e)),e},r.mixin(u.prototype,a,{_render:function(t,e){if(this.$el){var n,s=this,a=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(u.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(n)this.$el.html(c.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function u(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),s.templates.empty.apply(this,e)}function c(){var t,n,a=[].slice.call(arguments,0),u=this,c=o.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=i.element(c).css(this.css.suggestions),n=r.map(e,l),t.append.apply(t,n),t;function l(t){var e,n=o.suggestion.replace("%PREFIX%",u.cssClasses.prefix).replace("%SUGGESTION%",u.cssClasses.suggestion);return(e=i.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(s.templates.suggestion.apply(this,[t].concat(a)))).data("aaDataset",s.name),e.data("aaValue",s.displayFn(t)||void 0),e.data("aaDatum",JSON.stringify(t)),e.children().each((function(){i.element(this).css(u.css.suggestionChild)})),e}}function l(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.header.apply(this,e)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,r=function(){n.canceled||n.source(t,e.bind(n))};this.debounce?(clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,r()}),this.debounce)):r()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=u},function(t,e,n){"use strict";t.exports={hits:n(62),popularIn:n(63)}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e){var n=o(t.as._ua);return n&&n[0]>=3&&n[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),function(n,i){t.search(n,e,(function(t,e){t?r.error(t.message):i(e.hits,e)}))}}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e,n,s){var a=o(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),!n.source)return r.error("Missing 'source' key");var u=r.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return r.error("Missing 'index' key");var c=n.index;return s=s||{},function(a,l){t.search(a,e,(function(t,a){if(t)r.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],f=r.mixin({hitsPerPage:0},n);delete f.source,delete f.index;var d=o(c.as._ua);return d&&d[0]>=3&&d[1]>20&&(e.additionalUA="autocomplete.js "+i),void c.search(u(h),f,(function(t,e){if(t)r.error(t.message);else{var n=[];if(s.includeAll){var i=s.allTitle||"All departments";n.push(r.mixin({facet:{value:i,count:e.nbHits}},r.cloneDeep(h)))}r.each(e.facets,(function(t,e){r.each(t,(function(t,i){n.push(r.mixin({facet:{facet:e,value:i,count:t}},r.cloneDeep(h)))}))}));for(var o=1;o<a.hits.length;++o)n.push(a.hits[o]);l(n,a)}}))}l([])}}))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="algolia-docsearch-suggestion",i={suggestion:'\n  <a class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    "\n    aria-label="Link to the result"\n    href="{{{url}}}"\n    >\n    <div class="'+r+'--category-header">\n        <span class="'+r+'--category-header-lvl0">{{{category}}}</span>\n    </div>\n    <div class="'+r+'--wrapper">\n      <div class="'+r+'--subcategory-column">\n        <span class="'+r+'--subcategory-column-text">{{{subcategory}}}</span>\n      </div>\n      {{#isTextOrSubcategoryNonEmpty}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--subcategory-inline">{{{subcategory}}}</div>\n        <div class="'+r+'--title">{{{title}}}</div>\n        {{#text}}<div class="'+r+'--text">{{{text}}}</div>{{/text}}\n      </div>\n      {{/isTextOrSubcategoryNonEmpty}}\n    </div>\n  </a>\n  ',suggestionSimple:'\n  <div class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    suggestion-layout-simple\n  ">\n    <div class="'+r+'--category-header">\n        {{^isLvl0}}\n        <span class="'+r+"--category-header-lvl0 "+r+'--category-header-item">{{{category}}}</span>\n          {{^isLvl1}}\n          {{^isLvl1EmptyOrDuplicate}}\n          <span class="'+r+"--category-header-lvl1 "+r+'--category-header-item">\n              {{{subcategory}}}\n          </span>\n          {{/isLvl1EmptyOrDuplicate}}\n          {{/isLvl1}}\n        {{/isLvl0}}\n        <div class="'+r+"--title "+r+'--category-header-item">\n            {{#isLvl2}}\n                {{{title}}}\n            {{/isLvl2}}\n            {{#isLvl1}}\n                {{{subcategory}}}\n            {{/isLvl1}}\n            {{#isLvl0}}\n                {{{category}}}\n            {{/isLvl0}}\n        </div>\n    </div>\n    <div class="'+r+'--wrapper">\n      {{#text}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--text">{{{text}}}</div>\n      </div>\n      {{/text}}\n    </div>\n  </div>\n  ',footer:'\n    <div class="algolia-docsearch-footer">\n      Search by <a class="algolia-docsearch-footer--logo" href="https://www.algolia.com/docsearch">Algolia</a>\n    </div>\n  ',empty:'\n  <div class="'+r+'">\n    <div class="'+r+'--wrapper">\n        <div class="'+r+"--content "+r+'--no-results">\n            <div class="'+r+'--title">\n                <div class="'+r+'--text">\n                    No results found for query <b>"{{query}}"</b>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n  ',searchBox:'\n  <form novalidate="novalidate" onsubmit="return false;" class="searchbox">\n    <div role="search" class="searchbox__wrapper">\n      <input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>\n      <button type="submit" title="Submit your search query." class="searchbox__submit" >\n        <svg width=12 height=12 role="img" aria-label="Search">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>\n        </svg>\n      </button>\n      <button type="reset" title="Clear the search query." class="searchbox__reset hide">\n        <svg width=12 height=12 role="img" aria-label="Reset">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>\n        </svg>\n      </button>\n    </div>\n</form>\n\n<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">\n  <svg xmlns="http://www.w3.org/2000/svg">\n    <symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>\n    <symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>\n  </svg>\n</div>\n  '};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=n(20),s=(r=o)&&r.__esModule?r:{default:r},a={mergeKeyWithParent:function(t,e){if(void 0===t[e])return t;if("object"!==i(t[e]))return t;var n=s.default.extend({},t,t[e]);return delete n[e],n},groupBy:function(t,e){var n={};return s.default.each(t,(function(t,r){if(void 0===r[e])throw new Error("[groupBy]: Object has no key "+e);var i=r[e];"string"==typeof i&&(i=i.toLowerCase()),Object.prototype.hasOwnProperty.call(n,i)||(n[i]=[]),n[i].push(r)})),n},values:function(t){return Object.keys(t).map((function(e){return t[e]}))},flatten:function(t){var e=[];return t.forEach((function(t){Array.isArray(t)?t.forEach((function(t){e.push(t)})):e.push(t)})),e},flattenAndFlagFirst:function(t,e){var n=this.values(t).map((function(t){return t.map((function(t,n){return t[e]=0===n,t}))}));return this.flatten(n)},compact:function(t){var e=[];return t.forEach((function(t){t&&e.push(t)})),e},getHighlightedValue:function(t,e){return t._highlightResult&&t._highlightResult.hierarchy_camel&&t._highlightResult.hierarchy_camel[e]&&t._highlightResult.hierarchy_camel[e].matchLevel&&"none"!==t._highlightResult.hierarchy_camel[e].matchLevel&&t._highlightResult.hierarchy_camel[e].value?t._highlightResult.hierarchy_camel[e].value:t._highlightResult&&t._highlightResult&&t._highlightResult[e]&&t._highlightResult[e].value?t._highlightResult[e].value:t[e]},getSnippetedValue:function(t,e){if(!t._snippetResult||!t._snippetResult[e]||!t._snippetResult[e].value)return t[e];var n=t._snippetResult[e].value;return n[0]!==n[0].toUpperCase()&&(n="…"+n),-1===[".","!","?"].indexOf(n[n.length-1])&&(n+="…"),n},deepClone:function(t){return JSON.parse(JSON.stringify(t))}};e.default=a}])},t.exports=r()},function(t,e,n){n(0),n(9)},function(t,e,n){var r,i,o;!function(s,a){a=a.bind(null,s,s.document),t.exports?a(n(0)):(i=[n(0)],void 0===(o="function"==typeof(r=a)?r.apply(e,i):r)||(t.exports=o))}(window,(function(t,e,n){"use strict";var r,i,o={};function s(t,n,r){if(!o[t]){var i=e.createElement(n?"link":"script"),s=e.getElementsByTagName("script")[0];n?(i.rel="stylesheet",i.href=t):(i.onload=function(){i.onerror=null,i.onload=null,r()},i.onerror=i.onload,i.src=t),o[t]=!0,o[i.src||i.href]=!0,s.parentNode.insertBefore(i,s)}}e.addEventListener&&(i=/\(|\)|\s|'/,r=function(t,n){var r=e.createElement("img");r.onload=function(){r.onload=null,r.onerror=null,r=null,n()},r.onerror=r.onload,r.src=t,r&&r.complete&&r.onload&&r.onload()},addEventListener("lazybeforeunveil",(function(t){var e,o,a;if(t.detail.instance==n&&!t.defaultPrevented){var u=t.target;if("none"==u.preload&&(u.preload=u.getAttribute("data-preload")||"auto"),null!=u.getAttribute("data-autoplay"))if(u.getAttribute("data-expand")&&!u.autoplay)try{u.play()}catch(t){}else requestAnimationFrame((function(){u.setAttribute("data-expand","-10"),n.aC(u,n.cfg.lazyClass)}));(e=u.getAttribute("data-link"))&&s(e,!0),(e=u.getAttribute("data-script"))&&(t.detail.firesLoad=!0,s(e,null,(function(){t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(e=u.getAttribute("data-require"))&&(n.cfg.requireJs?n.cfg.requireJs([e]):s(e)),(o=u.getAttribute("data-bg"))&&(t.detail.firesLoad=!0,r(o,(function(){u.style.backgroundImage="url("+(i.test(o)?JSON.stringify(o):o)+")",t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(a=u.getAttribute("data-poster"))&&(t.detail.firesLoad=!0,r(a,(function(){u.poster=a,t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)})))}}),!1))}))},function(t,e){for(var n=document.getElementsByClassName("js-toggle"),r=0;r<n.length;r++)n[r].addEventListener("click",i,!1);function i(){for(var t=this.dataset.target.split(" "),e=document.querySelector(".mobilemenu:not(.dn)"),n=document.querySelector(".desktopmenu:not(.dn)"),r=document.querySelector(".desktopmenu:not(.dn)"),i=0;i<t.length;i++){var o=document.querySelectorAll(t[i]);[].forEach.call(o,(function(t){return t.classList.contains("dn")?t.classList.remove("dn"):t.classList.add("dn"),!1})),e&&e.classList.add("dn"),n&&n.classList.add("dn"),r&&r.classList.remove("db")}}},function(t,e,n){n(12)},function(t,e,n){!function(){"use strict";var t,e,n="data-scrolldir",r="down",i=document.documentElement,o=window,s=document.body,a=Array(32),u=0;function c(){var c=o.scrollY||o.pageYOffset,l=t.timeStamp,h="down"===r?Math.max:Math.min,f=s.scrollHeight-o.innerHeight;if(c=Math.max(0,c),c=Math.min(f,c),a.unshift({y:c,t:l}),a.pop(),c===h(e,c))return u=l,void(e=c);var d=l-512;if(u<d){e=c;for(var p=0;p<32&&a[p]&&!(a[p].t<d);p+=1)e=h(e,a[p].y)}Math.abs(c-e)>64&&(e=c,u=l,r="down"===r?"up":"down",i.setAttribute(n,r))}function l(e){return t=e,o.requestAnimationFrame(c)}e=o.scrollY||o.pageYOffset,i.setAttribute(n,r),o.addEventListener("scroll",l)}()},function(t,e){!function(){"use strict";if("querySelector"in document&&"addEventListener"in window&&Array.prototype.forEach){var t=document.querySelectorAll("#TableOfContents ul li a");[].forEach.call(t,(function(t){t.addEventListener("click",(function(e){e.preventDefault();var n=t.getAttribute("href"),r=document.querySelector(n),i=t.getAttribute("data-speed");r&&function(t,e){var n,r=window.pageYOffset,i=t.offsetTop,o=(i-r)/(e/16);n=o>=0?function(){var t=window.pageYOffset;(t>=i-o||window.innerHeight+t>=document.body.offsetHeight)&&clearInterval(s)}:function(){window.pageYOffset<=(i||0)&&clearInterval(s)};var s=setInterval((function(){window.scrollBy(0,o),n()}),16)}(r,i||500)}),!1)}))}}()},function(t,e){var n,r=document.querySelectorAll("[data-toggle-tab]"),i=document.querySelectorAll("[data-pane]");function o(t){if(t.target){t.preventDefault();var e=t.currentTarget.getAttribute("data-toggle-tab")}else e=t;window.localStorage&&window.localStorage.setItem("configLangPref",e);for(var n=document.querySelectorAll("[data-toggle-tab='"+e+"']"),o=document.querySelectorAll("[data-pane='"+e+"']"),s=0;s<r.length;s++)r[s].classList.remove("active"),i[s].classList.remove("active");for(s=0;s<n.length;s++)n[s].classList.add("active"),o[s].classList.add("active")}for(n=0;n<r.length;n++)r[n].addEventListener("click",o);window.localStorage.getItem("configLangPref")&&o(window.localStorage.getItem("configLangPref"))},function(t,e){document.documentElement.className=document.documentElement.className.replace(/\bno-js\b/,"js")}]);
\ No newline at end of file
index 749c699e6cff32da0cab604e046493acdbcaeee1..f387d66f3dd5fb3c59812370fbda7849d030f436 100644 (file)
@@ -30,9 +30,9 @@
       {{- partial "site-search.html" . -}}
     </div>
 
-    <span class="absolute mt1 mt2-l pr3 right-0 top-0">
+    <div class="absolute mt1 mt2-l pr3 right-0 top-0 flex items-start">
       {{- partialCached "social-follow.html" . -}}
-    </span>
+    </div>
 
   </div>
 </nav>
index 7b517dbb4121ac01b0867f7c448a7fc529aa5f52..5c7430759adad8b6b1803add6589c3501fbedf02 100644 (file)
@@ -1,7 +1,9 @@
-<!-- TODO: Add follow intents where available TODO: Revisit color and hover color -->
-{{ with .Site.Social.twitter }}
+{{/*
+  Disable Twitter for now as we lost access to the account.
+  with .Site.Social.twitter }}
   <a href="https://twitter.com/intent/follow?screen_name={{ . }}" title="Follow on Twitter" class="link-transition twitter link dib z-999 pt3 pt0-l mr2">
     {{ partial "svg/twitter.svg" (dict "size" "32px") }}
   </a>
-{{ end }}
-<a class="github-button needs-js link primary-color-dark" href="https://github.com/gohugoio/hugo" data-size="large" data-show-count="false" aria-label="Star gohugoio/hugo on GitHub">Star</a>
+{{ end */}}
+  <a rel="me" class="mstdn mr3" href="https://fosstodon.org/@gohugoio" target="_blank">gohugoio</a>
+  <a class="github-button needs-js link primary-color-dark" href="https://github.com/gohugoio/hugo" data-size="large" data-show-count="false" aria-label="Star gohugoio/hugo on GitHub">Star</a>
index d434e89f80d9287778389dcd92c0cd885ac6cbae..4d5e6890353fd02450ba0880584181e6bd50eb36 100644 (file)
@@ -1 +1 @@
-# github.com/gohugoio/gohugoioTheme v0.0.0-20230812102551-06f8256e7ee5
+# github.com/gohugoio/gohugoioTheme v0.0.0-20230927165800-342e2c850f18
index 891458daa865e4ed7a3ef5d14f52ad3bd259e632..cb0e7c930ef37d309b85c3d81ff4577c58023a7b 100644 (file)
@@ -1,11 +1,14 @@
 ---
-title: {{ replace .Name "-" " " | title }}
-description: ""
-signature: []
+title: {{ replace .File.ContentBaseName "-" " " | title }}
+description:
 categories: [functions]
 keywords: []
 menu:
   docs:
     parent: functions
-relatedfuncs: []
+function:
+  aliases: []
+  returnType:
+  signatures: []
+relatedFunctions: []
 ---
index 42e207e6a09f86d13e6fdfec71aa9b141a7370a3..fcc5b58350936c28c244991ad3b174d8c8ef21e3 100644 (file)
@@ -1,6 +1,5 @@
 ---
-title: "{{ replace .Name "-" " " | title }}"
-description: ""
+title: {{ replace .File.ContentBaseName "-" " " | title }}
+description:
 date: {{ .Date }}
 ---
-
index a21bb97264fd758c9a666102199cbd08d6e49a86..04d4545756f5091dae25f849dd40d60b4814b34d 100644 (file)
@@ -1,9 +1,9 @@
 ---
 
-title: {{ replace .Name "-" " " | title }}
+title: {{ replace .File.ContentBaseName "-" " " | title }}
 date: {{ now.Format "2006-01-02" }}
 
-description: "A short description of this page."
+description: A short description of this page.
 
 # The URL to the site on the internet.
 siteURL: https://gohugo.io/
@@ -34,4 +34,3 @@ bio.md
 
 featured.png
 : A reasonably sized screenshot of your website. It can be named anything, but the name must start with "featured". The sample image is `1500x750` (2:1 aspect ratio).
-
diff --git a/content/en/about/security-model.md b/content/en/about/security-model.md
new file mode 100644 (file)
index 0000000..3b93167
--- /dev/null
@@ -0,0 +1,63 @@
+---
+title: Hugo's security model
+description: A summary of Hugo's security model.
+layout: single
+keywords: ["Security", "Privacy"]
+menu:
+  docs:
+    parent: about
+    weight: 50
+weight: 50
+aliases: [/security/]
+toc: true
+---
+
+## Runtime security
+
+Hugo produces static output, so once built, the runtime is the browser (assuming the output is HTML) and any server (API) that you integrate with.
+
+But when developing and building your site, the runtime is the `hugo` executable. Securing a runtime can be [a real challenge](https://blog.logrocket.com/how-to-protect-your-node-js-applications-from-malicious-dependencies-5f2e60ea08f9/).
+
+**Hugo's main approach is that of sandboxing and a security policy with strict defaults:**
+
+* Hugo has a virtual file system and only the main project (not third-party components) is allowed to mount directories or files outside the project root.
+* Only the main project can walk symbolic links.
+* User-defined components have read-only access to the filesystem.
+* We shell out to some external binaries to support [Asciidoctor](/content-management/formats/#list-of-content-formats) and similar, but those binaries and their flags are predefined and disabled by default (see [Security Policy](#security-policy)). General functions to run arbitrary external OS commands have been [discussed](https://github.com/gohugoio/hugo/issues/796), but not implemented because of security concerns.
+
+## Security policy
+
+Hugo has a built-in security policy that restricts access to [os/exec](https://pkg.go.dev/os/exec), remote communication and similar.
+
+The default configuration is listed below. Any build using features not in the allow list of the security policy will fail with a detailed message about what needs to be done. Most of these settings are allow lists (string or slice, [Regular Expressions](https://pkg.go.dev/regexp) or `none` which matches nothing).
+
+{{< code-toggle config="security" />}}
+
+Note that these and other configuration settings in Hugo can be overridden by the OS environment. If you want to block all remote HTTP fetching of data:
+
+```txt
+HUGO_SECURITY_HTTP_URLS=none hugo
+```
+
+## Dependency security
+
+Hugo is built as a static binary using [Go Modules](https://github.com/golang/go/wiki/Modules) to manage its dependencies. Go Modules have several safeguards, one of them being the `go.sum` file. This is a database of the expected cryptographic checksums of all of your dependencies, including transitive dependencies.
+
+[Hugo Modules](/hugo-modules/) is a feature built on top of the functionality of Go Modules. Like Go Modules, a Hugo project using Hugo Modules will have a `go.sum` file. We recommend that you commit this file to your version control system. The Hugo build will fail if there is a checksum mismatch, which would be an indication of [dependency tampering](https://julienrenaux.fr/2019/12/20/github-actions-security-risk/).
+
+## Web application security
+
+These are the security threats as defined by [OWASP](https://en.wikipedia.org/wiki/OWASP).
+
+For HTML output, this is the core security model:
+
+<https://pkg.go.dev/html/template#hdr-Security_Model>
+
+In short:
+
+Template and configuration authors (you) are trusted, but the data you send in is not.
+This is why you sometimes need to use the _safe_ functions, such as `safeHTML`, to avoid escaping of data you know is safe.
+There is one exception to the above, as noted in the documentation: If you enable inline shortcodes, you also say that the shortcodes and data handling in content files are trusted, as those macros are treated as pure text.
+It may be worth adding that Hugo is a static site generator with no concept of dynamic user input.
+
+For content, the default Markdown renderer is [configured](/getting-started/configuration-markup) to remove or escape potentially unsafe content. This behavior can be reconfigured if you trust your content.
diff --git a/content/en/about/security-model/hugo-security-model-featured.png b/content/en/about/security-model/hugo-security-model-featured.png
deleted file mode 100644 (file)
index 5592d10..0000000
Binary files a/content/en/about/security-model/hugo-security-model-featured.png and /dev/null differ
diff --git a/content/en/about/security-model/index.md b/content/en/about/security-model/index.md
deleted file mode 100644 (file)
index 3b93167..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: Hugo's security model
-description: A summary of Hugo's security model.
-layout: single
-keywords: ["Security", "Privacy"]
-menu:
-  docs:
-    parent: about
-    weight: 50
-weight: 50
-aliases: [/security/]
-toc: true
----
-
-## Runtime security
-
-Hugo produces static output, so once built, the runtime is the browser (assuming the output is HTML) and any server (API) that you integrate with.
-
-But when developing and building your site, the runtime is the `hugo` executable. Securing a runtime can be [a real challenge](https://blog.logrocket.com/how-to-protect-your-node-js-applications-from-malicious-dependencies-5f2e60ea08f9/).
-
-**Hugo's main approach is that of sandboxing and a security policy with strict defaults:**
-
-* Hugo has a virtual file system and only the main project (not third-party components) is allowed to mount directories or files outside the project root.
-* Only the main project can walk symbolic links.
-* User-defined components have read-only access to the filesystem.
-* We shell out to some external binaries to support [Asciidoctor](/content-management/formats/#list-of-content-formats) and similar, but those binaries and their flags are predefined and disabled by default (see [Security Policy](#security-policy)). General functions to run arbitrary external OS commands have been [discussed](https://github.com/gohugoio/hugo/issues/796), but not implemented because of security concerns.
-
-## Security policy
-
-Hugo has a built-in security policy that restricts access to [os/exec](https://pkg.go.dev/os/exec), remote communication and similar.
-
-The default configuration is listed below. Any build using features not in the allow list of the security policy will fail with a detailed message about what needs to be done. Most of these settings are allow lists (string or slice, [Regular Expressions](https://pkg.go.dev/regexp) or `none` which matches nothing).
-
-{{< code-toggle config="security" />}}
-
-Note that these and other configuration settings in Hugo can be overridden by the OS environment. If you want to block all remote HTTP fetching of data:
-
-```txt
-HUGO_SECURITY_HTTP_URLS=none hugo
-```
-
-## Dependency security
-
-Hugo is built as a static binary using [Go Modules](https://github.com/golang/go/wiki/Modules) to manage its dependencies. Go Modules have several safeguards, one of them being the `go.sum` file. This is a database of the expected cryptographic checksums of all of your dependencies, including transitive dependencies.
-
-[Hugo Modules](/hugo-modules/) is a feature built on top of the functionality of Go Modules. Like Go Modules, a Hugo project using Hugo Modules will have a `go.sum` file. We recommend that you commit this file to your version control system. The Hugo build will fail if there is a checksum mismatch, which would be an indication of [dependency tampering](https://julienrenaux.fr/2019/12/20/github-actions-security-risk/).
-
-## Web application security
-
-These are the security threats as defined by [OWASP](https://en.wikipedia.org/wiki/OWASP).
-
-For HTML output, this is the core security model:
-
-<https://pkg.go.dev/html/template#hdr-Security_Model>
-
-In short:
-
-Template and configuration authors (you) are trusted, but the data you send in is not.
-This is why you sometimes need to use the _safe_ functions, such as `safeHTML`, to avoid escaping of data you know is safe.
-There is one exception to the above, as noted in the documentation: If you enable inline shortcodes, you also say that the shortcodes and data handling in content files are trusted, as those macros are treated as pure text.
-It may be worth adding that Hugo is a static site generator with no concept of dynamic user input.
-
-For content, the default Markdown renderer is [configured](/getting-started/configuration-markup) to remove or escape potentially unsafe content. This behavior can be reconfigured if you trust your content.
index 9e28346ddb3ff0d7323cd9c643f4dff1d9c63000..be564233ff28c31403a3f6501f581c12c2eca960 100644 (file)
@@ -36,13 +36,13 @@ Hugo is for people building a blog, a company site, a portfolio site, documentat
 [@spf13]: https://twitter.com/spf13
 [Amazon S3]: https://aws.amazon.com/s3/
 [Azure]: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website
-[CloudFront]: https://aws.amazon.com/cloudfront/ "Amazon CloudFront"
+[CloudFront]: https://aws.amazon.com/cloudfront/
 [DreamHost]: https://www.dreamhost.com/
-[Firebase]: https://firebase.google.com/docs/hosting/ "Firebase static hosting"
+[Firebase]: https://firebase.google.com/docs/hosting/
 [GitHub Pages]: https://pages.github.com/
 [GitLab Pages]: https://about.gitlab.com/features/pages/
 [Go language]: https://go.dev/
-[GoDaddy]: https://www.godaddy.com/ "GoDaddy.com Hosting"
+[GoDaddy]: https://www.godaddy.com/
 [Google Cloud Storage]: https://cloud.google.com/storage/
 [Heroku]: https://www.heroku.com/
 [Jekyll]: https://jekyllrb.com/
index d811bbac28193dc7aa961b5c1eaf5ecdbba98b25..fe460f91ff4d5cd3172aad3052bf522d7724da1a 100644 (file)
@@ -68,7 +68,7 @@ If none of these exists, Hugo uses a built-in default archetype.
 
 ## Functions and context
 
-You can use any [template function] within an archetype. As shown above, the default archetype uses the [`replace`](/functions/replace/) function to replace hyphens with spaces when populating the title in front matter.
+You can use any [template function] within an archetype. As shown above, the default archetype uses the [`replace`](/functions/strings/replace) function to replace hyphens with spaces when populating the title in front matter.
 
 Archetypes receive the following objects and values in [context]:
 
index f85c304cf438efc883eef9fe931ceaa074876540..ccc45b943fcc1814950acbf01396eb8efd8b5efc 100644 (file)
@@ -49,7 +49,7 @@ Hugo passes reasonable default arguments to these external helpers by default:
 Because additional formats are external commands, generation performance will rely heavily on the performance of the external tool you are using. As this feature is still in its infancy, feedback is welcome.
 {{% /note %}}
 
-### External helper Asciidoctor
+### Asciidoctor
 
 The Asciidoctor community offers a wide set of tools for the AsciiDoc format that can be installed additionally to Hugo.
 [See the Asciidoctor docs for installation instructions](https://asciidoctor.org/docs/install-toolchain/). Make sure that also all
@@ -59,52 +59,9 @@ optional extensions like `asciidoctor-diagram` or `asciidoctor-html5s` are insta
 External `asciidoctor` command requires Hugo rendering to _disk_ to a specific destination directory. It is required to run Hugo with the command option `--destination`.
 {{% /note %}}
 
-Some [Asciidoctor](https://asciidoctor.org/man/asciidoctor/) parameters can be customized in Hugo:
+Some Asciidoctor parameters can be customized in Hugo. See [details].
 
-Parameter | Comment
---- | ---
-backend | Don't change this unless you know what you are doing.
-doctype | Currently, the only document type supported in Hugo is `article`.
-extensions | Possible extensions are `asciidoctor-html5s`, `asciidoctor-bibtex`, `asciidoctor-diagram`, `asciidoctor-interdoc-reftext`, `asciidoctor-katex`, `asciidoctor-latex`, `asciidoctor-mathematical`, `asciidoctor-question`.
-attributes | Variables to be referenced in your AsciiDoc file. This is a list of variable name/value maps. See [Asciidoctor's attributes](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#attributes-and-substitutions).
-noHeaderOrFooter | Output an embeddable document, which excludes the header, the footer, and everything outside the body of the document. Don't change this unless you know what you are doing.
-safeMode | Safe mode level `unsafe`, `safe`, `server` or `secure`. Don't change this unless you know what you are doing.
-sectionNumbers | Auto-number section titles.
-verbose | Verbosely print processing information and configuration file checks to stderr.
-trace | Include backtrace information on errors.
-failureLevel | The minimum logging level that triggers a non-zero exit code (failure).
-
-Hugo provides additional settings that don't map directly to Asciidoctor's CLI options:
-
-workingFolderCurrent
-: Sets the working directory to be the same as that of the AsciiDoc file being processed, so that [include](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files) will work with relative paths. This setting uses the `asciidoctor` cli parameter `--base-dir` and attribute `outdir=`. For rendering diagrams with [asciidoctor-diagram](https://asciidoctor.org/docs/asciidoctor-diagram/), `workingFolderCurrent` must be set to `true`.
-
-preserveTOC
-: By default, Hugo removes the table of contents generated by Asciidoctor and provides it through the built-in variable [`.TableOfContents`](/content-management/toc/) to enable further customization and better integration with the various Hugo themes. This option can be set to `true` to preserve Asciidoctor's TOC in the generated page.
-
-Below are all the AsciiDoc related settings in Hugo with their default values:
-
-{{< code-toggle config="markup.asciidocExt" />}}
-
-Notice that for security concerns only extensions that do not have path separators (either `\`, `/` or `.`) are allowed. That means that extensions can only be invoked if they are in one's ruby's `$LOAD_PATH` (ie. most likely, the extension has been installed by the user). Any extension declared relative to the website's path will not be accepted.
-
-Example of how to set extensions and attributes:
-
-```yml
-[markup.asciidocExt]
-    extensions = ["asciidoctor-html5s", "asciidoctor-diagram"]
-    workingFolderCurrent = true
-    [markup.asciidocExt.attributes]
-        my-base-url = "https://example.com/"
-        my-attribute-name = "my value"
-```
-
-In a complex Asciidoctor environment it is sometimes helpful to debug the exact call to your external helper with all
-parameters. Run Hugo with `-v`. You will get an output like
-
-```txt
-INFO 2019/12/22 09:08:48 Rendering book-as-pdf.adoc with C:\Ruby26-x64\bin\asciidoctor.bat using asciidoc args [--no-header-footer -r asciidoctor-html5s -b html5s -r asciidoctor-diagram --base-dir D:\prototypes\hugo_asciidoc_ddd\docs -a outdir=D:\prototypes\hugo_asciidoc_ddd\build -] ...
-```
+[details]: /getting-started/configuration-markup/#asciidoc
 
 ## Learn markdown
 
@@ -115,7 +72,6 @@ Markdown syntax is simple enough to learn in a single sitting. The following are
 * [Markdown Tutorial (Interactive), Garen Torikian][mdtutorial]
 * [The Markdown Guide, Matt Cone][mdguide]
 
-[`emojify` function]: /functions/emojify/
 [ascii]: https://asciidoctor.org/
 [config]: /getting-started/configuration/
 [developer tools]: /tools/
index abb6f6ef2ec1ab640288d300eb2bba9df0d9e840..9cce9070a37b00061ed2a3e67860e6402f9a65c0 100644 (file)
@@ -101,12 +101,45 @@ Example 4: Skips rendering if there's problem accessing a remote resource.
 
 ## Image processing methods
 
-The `image` resource implements the  [`Resize`], [`Fit`], [`Fill`], [`Crop`], [`Filter`], [`Colors`] and [`Exif`] methods.
+The `image` resource implements the  [`Process`],  [`Resize`], [`Fit`], [`Fill`], [`Crop`], [`Filter`], [`Colors`] and [`Exif`] methods.
 
 {{% note %}}
 Metadata (EXIF, IPTC, XMP, etc.) is not preserved during image transformation. Use the [`Exif`] method with the _original_ image to extract EXIF metadata from JPEG or TIFF images.
 {{% /note %}}
 
+### Process
+
+{{< new-in "0.119.0" >}}
+
+{{% note %}}
+The `Process` method is also available as a filter, which is more effective if need to apply multiple filters to an image. See [Process filter](/functions/images/#process).
+{{% /note %}}
+
+Process processes the image with the given specification. The specification can contain an optional action, one of `resize`, `crop`, `fit` or `fill`. This means that you can use this method instead of [`Resize`], [`Fit`], [`Fill`], or [`Crop`].
+
+See [Options](#image-processing-options) for available options.
+
+You can also use this method apply image processing that does not need any scaling, e.g. format conversions:
+
+```go-html-template
+{{/* Convert the image from JPG to PNG. */}}
+{{ $png := $jpg.Process "png" }}
+```
+
+Some more examples:
+
+```go-html-template
+{{/* Rotate the image 90 degrees counter-clockwise. */}}
+{{ $image := $image.Process "r90" }}
+
+{{/* Scaling actions. */}}
+{{ $image := $image.Process "resize 600x" }}
+{{ $image := $image.Process "crop 600x400" }}
+{{ $image := $image.Process "fit 600x400" }}
+{{ $image := $image.Process "fill 600x400" }}
+```
+
+
 ### Resize
 
 Resize an image to the specified width and/or height.
@@ -468,15 +501,16 @@ If you change image processing methods or options, or if you rename or remove im
 hugo --gc
 ```
 
-[time.Format]: /functions/dateformat
+[time.Format]: /functions/time/format
 [`anchor`]: /content-management/image-processing#anchor
 [mounted]: /hugo-modules/configuration#module-configuration-mounts
 [page bundle]: /content-management/page-bundles
-[`lang.FormatNumber`]: /functions/lang
+[`lang.FormatNumber`]: /functions/lang/formatnumber
 [filters]: /functions/images
 [github.com/disintegration/imaging]: <https://github.com/disintegration/imaging#image-resizing>
 [Smartcrop]: <https://github.com/muesli/smartcrop#smartcrop>
 [Exif]: <https://en.wikipedia.org/wiki/Exif>
+[`Process`]: #process
 [`Colors`]: #colors
 [`Crop`]: #crop
 [`Exif`]: #exif
@@ -485,4 +519,4 @@ hugo --gc
 [`Fit`]: #fit
 [`Resize`]: #resize
 [site configuration]: #processing-options
-[`with`]: /functions/with/
+[`with`]: /functions/go-template/with/
index ec187d663554eedd7a74277dd8d1d2961084bac2..6e787c526dd1ad22d0fd45890c0a9bdd89ec5916 100644 (file)
@@ -468,7 +468,7 @@ English|Wednesday, November 3, 2021
 Français|mercredi 3 novembre 2021
 Deutsch|Mittwoch, 3. November 2021
 
-See [time.Format] for details.
+See [`time.Format`] for details.
 
 ### Currency
 
@@ -526,11 +526,86 @@ See [lang.FormatPercent] for details.
 
 ## Menus
 
-Localization of menu entries depends on the how you define them:
+Localization of menu entries depends on how you define them:
 
 - When you define menu entries [automatically] using the section pages menu, you must use translation tables to localize each entry.
 - When you define menu entries [in front matter], they are already localized based on the front matter itself. If the front matter values are insufficient, use translation tables to localize each entry.
-- When you define menu entries [in site configuration], you can (a) use translation tables, or (b) create language-specific menu entries under each language key.
+- When you define menu entries [in site configuration], you must create language-specific menu entries under each language key. If the names of the menu entries are insufficent, use translation tables to localize each entry.
+
+### Create language-specific menu entries
+
+#### Method 1 -- Use a single configuration file
+
+For a simple menu with a small number of entries, use a single configuration file. For example:
+
+{{< code-toggle file="hugo" copy=false >}}
+[languages.de]
+languageCode = 'de-DE'
+languageName = 'Deutsch'
+weight = 1
+
+[[languages.de.menu.main]]
+name = 'Produkte'
+pageRef = '/products'
+weight = 10
+
+[[languages.de.menu.main]]
+name = 'Leistungen'
+pageRef = '/services'
+weight = 20
+
+[languages.en]
+languageCode = 'en-US'
+languageName = 'English'
+weight = 2
+
+[[languages.en.menu.main]]
+name = 'Products'
+pageRef = '/products'
+weight = 10
+
+[[languages.en.menu.main]]
+name = 'Services'
+pageRef = '/services'
+weight = 20
+{{< /code-toggle >}}
+
+#### Method 2 -- Use a configuration directory
+
+With a more complex menu structure, create a [configuration directory] and split the menu entries into multiple files, one file per language. For example:
+
+```text
+config/
+└── _default/
+    ├── menus/
+    │  ├── menu.de.toml
+    │  └── menu.en.toml
+    └── hugo.toml
+```
+
+{{< code-toggle file="config/_default/menus/menu.de" copy=false >}}
+[[main]]
+name = 'Produkte'
+pageRef = '/products'
+weight = 10
+[[main]]
+name = 'Leistungen'
+pageRef = '/services'
+weight = 20
+{{< /code-toggle >}}
+
+{{< code-toggle file="config/_default/menus/menu.en" copy=false >}}
+[[main]]
+name = 'Products'
+pageRef = '/products'
+weight = 10
+[[main]]
+name = 'Services'
+pageRef = '/services'
+weight = 20
+{{< /code-toggle >}}
+
+[configuration directory]: /getting-started/configuration/#configuration-directory
 
 ### Use translation tables
 
@@ -574,44 +649,6 @@ services = 'Leistungen'
 [in front matter]: /content-management/menus/#define-in-front-matter
 [in site configuration]: /content-management/menus/#define-in-site-configuration
 
-### Create language-specific menu entries
-
-For example:
-
-{{< code-toggle file="hugo" copy=false >}}
-[languages.de]
-languageCode = 'de-DE'
-languageName = 'Deutsch'
-weight = 1
-
-[[languages.de.menu.main]]
-name = 'Produkte'
-pageRef = '/products'
-weight = 10
-
-[[languages.de.menu.main]]
-name = 'Leistungen'
-pageRef = '/services'
-weight = 20
-
-[languages.en]
-languageCode = 'en-US'
-languageName = 'English'
-weight = 2
-
-[[languages.en.menu.main]]
-name = 'Products'
-pageRef = '/products'
-weight = 10
-
-[[languages.en.menu.main]]
-name = 'Services'
-pageRef = '/services'
-weight = 20
-{{< /code-toggle >}}
-
-For a simple menu with two languages, these menu entries are easy to create and maintain. For a larger menu, or with more than two languages, using translation tables as described above is preferable.
-
 ## Missing translations
 
 If a string does not have a translation for the current language, Hugo will use the value from the default language. If no default value is set, an empty string will be shown.
@@ -636,7 +673,7 @@ i18n|MISSING_TRANSLATION|en|wordCount
 To support Multilingual mode in your themes, some considerations must be taken for the URLs in the templates. If there is more than one language, URLs must meet the following criteria:
 
 * Come from the built-in `.Permalink` or `.RelPermalink`
-* Be constructed with the [`relLangURL` template function][rellangurl] or the [`absLangURL` template function][abslangurl] **OR** be prefixed with `{{ .LanguagePrefix }}`
+* Be constructed with the [`relLangURL`] or [`absLangURL`] template function, or be prefixed with `{{ .LanguagePrefix }}`
 
 If there is more than one language defined, the `LanguagePrefix` variable will equal `/en` (or whatever your `CurrentLanguage` is). If not enabled, it will be an empty string (and is therefore harmless for single-language Hugo websites).
 
@@ -657,23 +694,23 @@ hugo new content content/en/post/test.md
 hugo new content content/de/post/test.md
 ```
 
-[abslangurl]: /functions/abslangurl
+[`abslangurl`]: /functions/urls/abslangurl
 [config]: /getting-started/configuration/
 [contenttemplate]: /templates/single-page-templates/
 [go-i18n-source]: https://github.com/nicksnyder/go-i18n
 [go-i18n]: https://github.com/nicksnyder/go-i18n
 [homepage]: /templates/homepage/
 [Hugo Multilingual Part 1: Content translation]: https://regisphilibert.com/blog/2018/08/hugo-multilingual-part-1-managing-content-translation/
-[i18func]: /functions/i18n/
-[lang.FormatAccounting]: /functions/lang
-[lang.FormatCurrency]: /functions/lang
-[lang.FormatNumber]: /functions/lang
-[lang.FormatNumberCustom]: /functions/lang
-[lang.FormatPercent]: /functions/lang
-[lang.Merge]: /functions/lang.merge/
+[i18func]: /functions/lang/translate
+[lang.FormatAccounting]: /functions/lang/formataccounting
+[lang.FormatCurrency]: /functions/lang/formatcurrency
+[lang.FormatNumber]: /functions/lang/formatnumber
+[lang.FormatNumberCustom]: /functions/lang/formatnumbercustom
+[lang.FormatPercent]: /functions/lang/formatpercent
+[lang.Merge]: /functions/lang/merge/
 [menus]: /content-management/menus/
 [OS environment]: /getting-started/configuration/#configure-with-environment-variables
-[rellangurl]: /functions/rellangurl
+[`rellangurl`]: /functions/urls/rellangurl
 [RFC 5646]: https://tools.ietf.org/html/rfc5646
 [single page templates]: /templates/single-page-templates/
-[time.Format]: /functions/dateformat
+[`time.Format`]: /functions/time/format
index 670c5acc8d1fda821ba845f878a62a1fd712c87c..b1e32d90206bd5847883f04a601db43870dc19a6 100644 (file)
@@ -187,7 +187,7 @@ Rendered:
 
 To specify one or more [highlighting options], include a quotation-encapsulated, comma-separated list:
 
-[highlighting options]: /functions/highlight/
+[highlighting options]: /functions/transform/highlight/
 
 ```text
 {{</* highlight go-html-template "lineNos=inline, lineNoStart=42" */>}}
@@ -391,7 +391,7 @@ To learn more about creating custom shortcodes, see the [shortcode template docu
 [`figure` shortcode]: #figure
 [contentmanagementsection]: /content-management/formats/
 [examplegist]: https://gist.github.com/spf13/7896402
-[figureelement]: https://html5doctor.com/the-figure-figcaption-elements/ "An article from HTML5 doctor discussing the fig and figcaption elements."
+[figureelement]: https://html5doctor.com/the-figure-figcaption-elements/
 [Hugo and the GDPR]: /about/hugo-and-gdpr/
 [Instagram]: https://www.instagram.com/
 [pagevariables]: /variables/page/
index 44dece2df3206ba25b6c788a9453655f62e73606..39fef0f9b5621ef0dae4848ac5e388a360dea1ac 100644 (file)
@@ -92,7 +92,7 @@ Gives this:
 
 ## Highlight template function
 
-See [Highlight](/functions/highlight/).
+See [Highlight](/functions/transform/highlight/).
 
 ## Highlighting in code fences
 
index 14a467390bab7a703eeb30ad95386dcfe85cfc38..af8297876560e845961f58e777abe2c6d0622598 100644 (file)
@@ -191,12 +191,11 @@ title: "Bruce Willis"
 wikipedia: "https://en.wikipedia.org/wiki/Bruce_Willis"
 {{< /code-toggle >}}
 
-[`urlize` template function]: /functions/urlize/
 [content section]: /content-management/sections/
 [content type]: /content-management/types/
 [documentation on archetypes]: /content-management/archetypes/
 [front matter]: /content-management/front-matter/
 [taxonomy list templates]: /templates/taxonomy-templates/#taxonomy-list-templates
 [taxonomy templates]: /templates/taxonomy-templates/
-[terms within the taxonomy]: /templates/taxonomy-templates/#taxonomy-terms-templates "See how to order terms associated with a taxonomy"
-[configuration]: /getting-started/configuration/
+[terms within the taxonomy]: /templates/taxonomy-templates/#taxonomy-terms-templates
+[site configuration]: /getting-started/configuration/
diff --git a/content/en/functions/AddDate.md b/content/en/functions/AddDate.md
new file mode 100644 (file)
index 0000000..7f5b39b
--- /dev/null
@@ -0,0 +1,41 @@
+---
+title: .AddDate
+description: Returns the time corresponding to adding the given number of years, months, and days to the given time.Time value.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: time.Time
+  signatures: [.AddDate YEARS MONTHS DAYS]
+relatedFunctions: []
+---
+
+```go-html-template
+{{ $d := "2022-01-01" | time.AsTime }}
+
+{{ $d.AddDate 0 0 1 | time.Format "2006-01-02" }} → 2022-01-02
+{{ $d.AddDate 0 1 1 | time.Format "2006-01-02" }} → 2022-02-02
+{{ $d.AddDate 1 1 1 | time.Format "2006-01-02" }} → 2023-02-02
+
+{{ $d.AddDate -1 -1 -1 | time.Format "2006-01-02" }} → 2020-11-30
+```
+
+{{% note %}}
+When adding months or years, Hugo normalizes the final `time.Time` value if the resulting day does not exist. For example, adding one month to 31 January produces 2 March or 3 March, depending on the year.
+
+See [this explanation](https://github.com/golang/go/issues/31145#issuecomment-479067967) from the Go team.
+{{% /note %}}
+
+```go-html-template
+{{ $d := "2023-01-31" | time.AsTime }}
+{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} → 2023-03-03
+
+{{ $d := "2024-01-31" | time.AsTime }}
+{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} → 2024-03-02
+
+{{ $d := "2024-02-29" | time.AsTime }}
+{{ $d.AddDate 1 0 0 | time.Format "2006-01-02" }} → 2025-03-01
+```
diff --git a/content/en/functions/Format.md b/content/en/functions/Format.md
new file mode 100644 (file)
index 0000000..e679cb2
--- /dev/null
@@ -0,0 +1,90 @@
+---
+title: .Format
+description: Returns a formatted time.Time value.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [.Format LAYOUT]
+relatedFunctions: []
+toc: true
+---
+
+```go-template
+{{ $t := "2023-01-27T23:44:58-08:00" }}
+{{ $t = time.AsTime $t }}
+{{ $format := "2 Jan 2006" }}
+
+{{ $t.Format $format }} → 27 Jan 2023
+```
+
+{{% note %}}
+To return a formatted and localized `time.Time` value, use the [`time.Format`] function instead.
+
+[`time.Format`]: /functions/time/format
+{{% /note %}}
+
+Use the `.Format` method with any `time.Time` value, including the four predefined front matter dates:
+
+```go-html-template
+{{ $format := "2 Jan 2006" }}
+
+{{ .Date.Format $format }}
+{{ .PublishDate.Format $format }}
+{{ .ExpiryDate.Format $format }}
+{{ .Lastmod.Format $format }}
+```
+
+## Layout string
+
+{{% readfile file="/functions/_common/time-layout-string.md" %}}
+
+## Examples
+
+Given this front matter:
+
+{{< code-toggle fm=true copy=false >}}
+title = "About time"
+date = 2023-01-27T23:44:58-08:00
+{{< /code-toggle >}}
+
+The examples below were rendered in the `America/Los_Angeles` time zone:
+
+Format string|Result
+:--|:--
+`Monday, January 2, 2006`|`Friday, January 27, 2023`
+`Mon Jan 2 2006`|`Fri Jan 27 2023`
+`January 2006`|`January 2023`
+`2006-01-02`|`2023-01-27`
+`Monday`|`Friday`
+`02 Jan 06 15:04 MST`|`27 Jan 23 23:44 PST`
+`Mon, 02 Jan 2006 15:04:05 MST`|`Fri, 27 Jan 2023 23:44:58 PST`
+`Mon, 02 Jan 2006 15:04:05 -0700`|`Fri, 27 Jan 2023 23:44:58 -0800`
+
+## UTC and local time
+
+Convert and format any `time.Time` value to either Coordinated Universal Time (UTC) or local time.
+
+```go-html-template
+{{ $t := "2023-01-27T23:44:58-08:00" }}
+{{ $t = time.AsTime $t }}
+{{ $format := "2 Jan 2006 3:04:05 PM MST" }}
+
+{{ $t.UTC.Format $format }} → 28 Jan 2023 7:44:58 AM UTC
+{{ $t.Local.Format $format }} → 27 Jan 2023 11:44:58 PM PST
+```
+
+## Ordinal representation
+
+Use the [`humanize`](/functions/inflect/humanize) function to render the day of the month as an ordinal number:
+
+```go-html-template
+{{ $t := "2023-01-27T23:44:58-08:00" }}
+{{ $t = time.AsTime $t }}
+
+{{ humanize $t.Day }} of {{ $t.Format "January 2006" }} → 27th of January 2023
+```
diff --git a/content/en/functions/Get.md b/content/en/functions/Get.md
new file mode 100644 (file)
index 0000000..142e981
--- /dev/null
@@ -0,0 +1,26 @@
+---
+title: .Get
+description: Accesses positional and ordered parameters in shortcode declaration.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: any
+  signatures:
+    - .Get INDEX
+    - .Get KEY
+relatedFunctions: []
+---
+
+`.Get` is specifically used when creating your own [shortcode template][sc], to access the [positional and named](/templates/shortcode-templates/#positional-vs-named-parameters) parameters passed to it. When used with a numeric INDEX, it queries positional parameters (starting with 0). With a string KEY, it queries named parameters.
+
+When accessing named or positional parameters that do not exist, `.Get` returns an empty string instead of interrupting the build. This allows you to chain `.Get` with `if`, `with`, `default` or `cond` to check for parameter existence. For example:
+
+```go-html-template
+{{ $quality := default "100" (.Get 1) }}
+```
+
+[sc]: /templates/shortcode-templates/
index 17d2bd9727b70b7a656b109e156dfb94dc8e5ad9..4afebaca7beea816384bb6fb7fa6e159dd120328 100644 (file)
@@ -1,13 +1,16 @@
 ---
 title: .GetPage
-description: "Gets a `Page` of a given `path`."
+description: Gets a `Page` of a given `path`.
 categories: [functions]
+keywords: []
 menu:
   docs:
     parent: functions
-keywords: [sections,lists,indexes]
-signature: [".GetPage PATH"]
-relatedfuncs: []
+function:
+  aliases: []
+  returnType:
+  signatures: [.GetPage PATH]
+relatedFunctions: []
 ---
 
 `.GetPage` returns a page of a given `path`. Both `Site` and `Page` implements this method. The `Page` variant will, if given a relative path -- i.e. a path without a leading `/` -- try look for the page relative to the current page.
diff --git a/content/en/functions/HasMenuCurrent.md b/content/en/functions/HasMenuCurrent.md
new file mode 100644 (file)
index 0000000..5b4200c
--- /dev/null
@@ -0,0 +1,35 @@
+---
+title: .HasMenuCurrent
+description: Reports whether the given page object matches the page object associated with one of the child menu entries under the given menu entry in the given menu.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [PAGE.HasMenuCurrent MENU MENUENTRY]
+relatedFunctions:
+  - .HasMenuCurrent
+  - .IsMenuCurrent
+---
+
+If the page object associated with the menu entry is a section, this method also returns `true` for any descendant of that section.
+
+```go-html-template
+{{ $currentPage := . }}
+{{ range site.Menus.main }}
+  {{ if $currentPage.IsMenuCurrent .Menu . }}
+    <a class="active" aria-current="page" href="{{ .URL }}">{{ .Name }}</a>
+  {{ else if $currentPage.HasMenuCurrent .Menu . }}
+    <a class="ancestor" aria-current="true" href="{{ .URL }}">{{ .Name }}</a>
+  {{ else }}
+    <a href="{{ .URL }}">{{ .Name }}</a>
+  {{ end }}
+{{ end }}
+```
+
+See [menu templates] for a complete example.
+
+[menu templates]: /templates/menu-templates/#example
diff --git a/content/en/functions/IsMenuCurrent.md b/content/en/functions/IsMenuCurrent.md
new file mode 100644 (file)
index 0000000..c9980b3
--- /dev/null
@@ -0,0 +1,33 @@
+---
+title: .IsMenuCurrent
+description: Reports whether the given page object matches the page object associated with the given menu entry in the given menu.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [PAGE.IsMenuCurrent MENU MENUENTRY]
+relatedFunctions:
+  - .HasMenuCurrent
+  - .IsMenuCurrent
+---
+
+```go-html-template
+{{ $currentPage := . }}
+{{ range site.Menus.main }}
+  {{ if $currentPage.IsMenuCurrent .Menu . }}
+    <a class="active" aria-current="page" href="{{ .URL }}">{{ .Name }}</a>
+  {{ else if $currentPage.HasMenuCurrent .Menu . }}
+    <a class="ancestor" aria-current="true" href="{{ .URL }}">{{ .Name }}</a>
+  {{ else }}
+    <a href="{{ .URL }}">{{ .Name }}</a>
+  {{ end }}
+{{ end }}
+```
+
+See [menu templates] for a complete example.
+
+[menu templates]: /templates/menu-templates/#example
diff --git a/content/en/functions/Param.md b/content/en/functions/Param.md
new file mode 100644 (file)
index 0000000..a2826a3
--- /dev/null
@@ -0,0 +1,50 @@
+---
+title: .Param
+description: Returns a page parameter, falling back to a site parameter if present.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: any
+  signatures: [.Param KEY]
+relatedFunctions: []
+---
+
+The `.Param` method on `.Page` looks for the given `KEY` in page parameters, and returns the corresponding value. If it cannot find the `KEY` in page parameters, it looks for the `KEY` in site parameters. If it cannot find the `KEY` in either location, the `.Param` method returns `nil`. 
+
+Site and theme developers commonly set parameters at the site level, allowing content authors to override those parameters at the page level.
+
+For example, to show a table of contents on every page, but allow authors to hide the table of contents as needed:
+
+**Configuration**
+
+{{< code-toggle file="hugo" copy=false >}}
+[params]
+display_toc = true
+{{< /code-toggle >}}
+
+**Content**
+
+{{< code-toggle file="content/example.md" fm=true copy=false >}}
+title = 'Example'
+date = 2023-01-01
+draft = false
+display_toc = false
+{{< /code-toggle >}}
+
+**Template**
+
+{{< code file="layouts/_default/single.html" copy=false >}}
+{{ if .Param "display_toc" }}
+  {{ .TableOfContents }}
+{{ end }}
+{{< /code >}}
+
+The `.Param` method returns the value associated with the given `KEY`, regardless of whether the value is truthy or falsy. If you need to ignore falsy values, use this construct instead:
+
+{{< code file="layouts/_default/single.html" copy=false >}}
+{{ or .Params.foo site.Params.foo }}
+{{< /code >}}
diff --git a/content/en/functions/Render.md b/content/en/functions/Render.md
new file mode 100644 (file)
index 0000000..0256784
--- /dev/null
@@ -0,0 +1,28 @@
+---
+title: .Render
+description: Takes a view to apply when rendering content.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: template.HTML
+  signatures: [.Render LAYOUT]
+relatedFunctions: []
+---
+
+The view is an alternative layout and should be a file name that points to a template in one of the locations specified in the documentation for [Content Views](/templates/views).
+
+This function is only available when applied to a single piece of content within a [list context].
+
+This example could render a piece of content using the content view located at `/layouts/_default/summary.html`:
+
+```go-html-template
+{{ range .Pages }}
+  {{ .Render "summary" }}
+{{ end }}
+```
+
+[list context]: /templates/lists/
index 47c914ca4a4c9648e43023650661b9a85a44293f..91414d6a0a74f1df41b5f1f3ca4066cfb2c011ae 100644 (file)
@@ -1,12 +1,15 @@
 ---
 title: .RenderString
-description: "Renders markup to HTML."
+description: Renders markup to HTML.
 categories: [functions]
+keywords: []
 menu:
   docs:
     parent: functions
-keywords: [markdown,goldmark,render]
-signature: [".RenderString MARKUP"]
+function:
+  aliases: []
+  returnType: template.HTML
+  signatures: ['.RenderString MARKUP [OPTIONS]']
 ---
 
 `.RenderString` is a method on `Page` that renders some markup to HTML using the content renderer defined for that page (if not set in the options).
@@ -29,4 +32,4 @@ Some examples:
 {{ "/italic org mode/" | $p.RenderString  $optOrg }}
 ```
 
-{{< new-in "0.93.0" >}} **Note**: [markdownify](/functions/markdownify/) uses this function in order to support [Render Hooks](/getting-started/configuration-markup/#markdown-render-hooks).
+{{< new-in "0.93.0" >}} **Note**: [markdownify](/functions/transform/markdownify) uses this function in order to support [Render Hooks](/getting-started/configuration-markup/#markdown-render-hooks).
diff --git a/content/en/functions/Scratch.md b/content/en/functions/Scratch.md
new file mode 100644 (file)
index 0000000..0640d6b
--- /dev/null
@@ -0,0 +1,151 @@
+---
+title: .Scratch
+description: Acts as a "scratchpad" to store and manipulate data.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType:
+  signatures: []
+relatedFunctions:
+  - .Store
+  - .Scratch
+aliases: [/extras/scratch/,/doc/scratch/]
+---
+
+Scratch is a Hugo feature designed to conveniently manipulate data in a Go Template world. It is either a Page or Shortcode method for which the resulting data will be attached to the given context, or it can live as a unique instance stored in a variable.
+
+{{% note %}}
+Note that Scratch was initially created as a workaround for a [Go template scoping limitation](https://github.com/golang/go/issues/10608) that affected Hugo versions prior to 0.48. For a detailed analysis of `.Scratch` and contextual use cases, see [this blog post](https://regisphilibert.com/blog/2017/04/hugo-scratch-explained-variable/).
+{{% /note %}}
+
+### Contexted `.Scratch` vs. local `newScratch`
+
+Since Hugo 0.43, there are two different ways of using Scratch:
+
+#### The Page's `.Scratch`
+
+`.Scratch` is available as a Page method or a Shortcode method and attaches the "scratched" data to the given page. Either a Page or a Shortcode context is required to use `.Scratch`.
+
+```go-html-template
+{{ .Scratch.Set "greeting" "bonjour" }}
+{{ range .Pages }}
+  {{ .Scratch.Set "greeting" (print "bonjour" .Title) }}
+{{ end }}
+```
+
+#### The local `newScratch`
+
+A Scratch instance can also be assigned to any variable using the `newScratch` function. In this case, no Page or Shortcode context is required and the scope of the scratch is only local. The methods detailed below are available from the variable the Scratch instance was assigned to.
+
+```go-html-template
+{{ $data := newScratch }}
+{{ $data.Set "greeting" "hola" }}
+```
+
+### Methods
+
+A Scratch has the following methods:
+
+{{% note %}}
+Note that the following examples assume a [local Scratch instance](#the-local-newscratch) has been stored in `$scratch`.
+{{% /note %}}
+
+#### .Set
+
+Set the value of a given key.
+
+```go-html-template
+{{ $scratch.Set "greeting" "Hello" }}
+```
+
+#### .Get
+
+Get the value of a given key.
+
+```go-html-template
+{{ $scratch.Set "greeting" "Hello" }}
+----
+{{ $scratch.Get "greeting" }} > Hello
+```
+
+#### .Add
+
+Add a given value to existing value(s) of the given key.
+
+For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be [appended](/functions/collections/append/) to that list.
+
+```go-html-template
+{{ $scratch.Add "greetings" "Hello" }}
+{{ $scratch.Add "greetings" "Welcome" }}
+----
+{{ $scratch.Get "greetings" }} > HelloWelcome
+```
+
+```go-html-template
+{{ $scratch.Add "total" 3 }}
+{{ $scratch.Add "total" 7 }}
+----
+{{ $scratch.Get "total" }} > 10
+```
+
+```go-html-template
+{{ $scratch.Add "greetings" (slice "Hello") }}
+{{ $scratch.Add "greetings" (slice "Welcome" "Cheers") }}
+----
+{{ $scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"}
+```
+
+#### .SetInMap
+
+Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
+
+```go-html-template
+{{ $scratch.SetInMap "greetings" "english" "Hello" }}
+{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
+----
+{{ $scratch.Get "greetings" }} > map[french:Bonjour english:Hello]
+```
+
+#### .DeleteInMap
+Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
+
+```go-html-template
+{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
+{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
+----
+{{ .Scratch.DeleteInMap "greetings" "english" }}
+----
+{{ .Scratch.Get "greetings" }} > map[french:Bonjour]
+```
+
+#### .GetSortedMapValues
+
+Return an array of values from `key` sorted by `mapKey`.
+
+```go-html-template
+{{ $scratch.SetInMap "greetings" "english" "Hello" }}
+{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
+----
+{{ $scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour]
+```
+
+#### .Delete
+
+Remove the given key.
+
+```go-html-template
+{{ $scratch.Set "greeting" "Hello" }}
+----
+{{ $scratch.Delete "greeting" }}
+```
+
+#### .Values
+
+Return the raw backing map. Note that you should only use this method on the locally scoped Scratch instances you obtain via [`newScratch`](#the-local-newscratch), not `.Page.Scratch` etc., as that will lead to concurrency issues.
+
+
+[pagevars]: /variables/page/
diff --git a/content/en/functions/Store.md b/content/en/functions/Store.md
new file mode 100644 (file)
index 0000000..49b3818
--- /dev/null
@@ -0,0 +1,111 @@
+---
+title: .Store
+description: Returns a Scratch that is not reset on server rebuilds.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType:
+  signatures: []
+relatedFunctions:
+  - .Store
+  - .Scratch
+---
+
+The `.Store` method on `.Page` returns a [Scratch] to store and manipulate data. In contrast to the `.Scratch` method, this Scratch is not reset on server rebuilds.
+
+[Scratch]: /functions/scratch/
+
+### Methods
+
+#### .Set
+
+Sets the value of a given key.
+
+```go-html-template
+{{ .Store.Set "greeting" "Hello" }}
+```
+
+#### .Get
+
+Gets the value of a given key.
+
+```go-html-template
+{{ .Store.Set "greeting" "Hello" }}
+
+{{ .Store.Get "greeting" }} → Hello
+```
+
+#### .Add
+
+Adds a given value to existing value(s) of the given key.
+
+For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
+
+```go-html-template
+{{ .Store.Add "greetings" "Hello" }}
+{{ .Store.Add "greetings" "Welcome" }}
+
+{{ .Store.Get "greetings" }} → HelloWelcome
+```
+
+```go-html-template
+{{ .Store.Add "total" 3 }}
+{{ .Store.Add "total" 7 }}
+
+{{ .Store.Get "total" }} → 10
+```
+
+```go-html-template
+{{ .Store.Add "greetings" (slice "Hello") }}
+{{ .Store.Add "greetings" (slice "Welcome" "Cheers") }}
+
+{{ .Store.Get "greetings" }} → []interface {}{"Hello", "Welcome", "Cheers"}
+```
+
+#### .SetInMap
+
+Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
+
+```go-html-template
+{{ .Store.SetInMap "greetings" "english" "Hello" }}
+{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
+
+{{ .Store.Get "greetings" }} → map[french:Bonjour english:Hello]
+```
+
+#### .DeleteInMap
+
+Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
+
+```go-html-template
+{{ .Store.SetInMap "greetings" "english" "Hello" }}
+{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
+{{ .Store.DeleteInMap "greetings" "english" }}
+
+{{ .Store.Get "greetings" }} → map[french:Bonjour]
+```
+
+#### .GetSortedMapValues
+
+Returns an array of values from `key` sorted by `mapKey`.
+
+```go-html-template
+{{ .Store.SetInMap "greetings" "english" "Hello" }}
+{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
+
+{{ .Store.GetSortedMapValues "greetings" }} → [Hello Bonjour]
+```
+
+#### .Delete
+
+Removes the given key.
+
+```go-html-template
+{{ .Store.Set "greeting" "Hello" }}
+
+{{ .Store.Delete "greeting" }}
+```
diff --git a/content/en/functions/Unix.md b/content/en/functions/Unix.md
new file mode 100644 (file)
index 0000000..ed49b72
--- /dev/null
@@ -0,0 +1,36 @@
+---
+title: .Unix
+description: Converts a time.Time value to the number of seconds elapsed since the Unix epoch, excluding leap seconds. The Unix epoch is 00:00:00&nbsp;UTC on 1 January 1970.
+categories: [functions]
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: int64
+  signatures:
+    - .Unix
+    - .UnixMilli
+    - .UnixMicro
+    - .UnixNano
+relatedFunctions: []
+---
+
+The `Milli`, `Micro`, and `Nano` variants return the number of milliseconds, microseconds, and nanoseconds (respectively) elapsed since the Unix epoch.
+
+```go-html-template
+.Date.Unix        → 1637259694
+.ExpiryDate.Unix  → 1672559999
+.Lastmod.Unix     → 1637361786
+.PublishDate.Unix → 1637421261
+
+("1970-01-01T00:00:00-00:00" | time.AsTime).Unix → 0
+("1970-01-01T00:00:42-00:00" | time.AsTime).Unix → 42
+("1970-04-11T01:48:29-08:00" | time.AsTime).Unix → 8675309
+("2026-05-02T20:09:31-07:00" | time.AsTime).Unix → 1777777771
+
+now.Unix      → 1637447841
+now.UnixMilli → 1637447841347
+now.UnixMicro → 1637447841347378
+now.UnixNano  → 1637447841347378799
+```
diff --git a/content/en/functions/_common/go-template-functions.md b/content/en/functions/_common/go-template-functions.md
new file mode 100644 (file)
index 0000000..b872274
--- /dev/null
@@ -0,0 +1,3 @@
+See Go's [text/template] documentation for more details.
+
+[text/template]: https://pkg.go.dev/text/template
diff --git a/content/en/functions/_common/index.md b/content/en/functions/_common/index.md
new file mode 100644 (file)
index 0000000..cbb7365
--- /dev/null
@@ -0,0 +1,3 @@
++++
+headless = true
++++
diff --git a/content/en/functions/_common/locales.md b/content/en/functions/_common/locales.md
new file mode 100644 (file)
index 0000000..259231c
--- /dev/null
@@ -0,0 +1,3 @@
+Localization of dates, currencies, numbers, and percentages is performed by the [gohugoio/locales] package. The language tag of the current site must match one of the listed locales.
+
+[gohugoio/locales]: https://github.com/gohugoio/locales
diff --git a/content/en/functions/_common/regular-expressions.md b/content/en/functions/_common/regular-expressions.md
new file mode 100644 (file)
index 0000000..9da3408
--- /dev/null
@@ -0,0 +1,8 @@
+When specifying the regular expression, use a raw [string literal] (backticks) instead of an interpreted string literal (double quotes) to simplify the syntax. With an interpreted string literal you must escape backslashes.
+
+Go's regular expression package implements the [RE2 syntax]. The RE2 syntax is a subset of that accepted by [PCRE], roughly speaking, and with various [caveats]. Note that the RE2 `\C` escape sequence is not supported.
+
+[caveats]: https://swtch.com/~rsc/regexp/regexp3.html#caveats
+[PCRE]: https://www.pcre.org/
+[RE2 syntax]: https://github.com/google/re2/wiki/Syntax/
+[string literal]: https://go.dev/ref/spec#String_literals
diff --git a/content/en/functions/_common/time-layout-string.md b/content/en/functions/_common/time-layout-string.md
new file mode 100644 (file)
index 0000000..40932f8
--- /dev/null
@@ -0,0 +1,42 @@
+Format a `time.Time` value based on [Go's reference time]:
+
+[Go's reference time]: https://pkg.go.dev/time#pkg-constants
+
+```text {copy=false}
+Mon Jan 2 15:04:05 MST 2006
+```
+
+Create a format string using these components:
+
+Description|Valid components
+:--|:--
+Year|`"2006" "06"`
+Month|`"Jan" "January" "01" "1"`
+Day of the week|`"Mon" "Monday"`
+Day of the month|`"2" "_2" "02"`
+Day of the year|`"__2" "002"`
+Hour|`"15" "3" "03"`
+Minute|`"4" "04"`
+Second|`"5" "05"`
+AM/PM mark|`"PM"`
+Time zone offsets|`"-0700" "-07:00" "-07" "-070000" "-07:00:00"`
+
+Replace the sign in the format string with a Z to print Z instead of an offset for the UTC zone.
+
+Description|Valid components
+:--|:--
+Time zone offsets|`"Z0700" "Z07:00" "Z07" "Z070000" "Z07:00:00"`
+
+```go-html-template
+{{ $t := "2023-01-27T23:44:58-08:00" }}
+{{ $t = time.AsTime $t }}
+{{ $t = $t.Format "Jan 02, 2006 3:04 PM Z07:00" }}
+
+{{ $t }} → Jan 27, 2023 11:44 PM -08:00 
+```
+
+Strings such as `PST` and `CET` are not time zones. They are time zone _abbreviations_.
+
+Strings such as `-07:00` and `+01:00` are not time zones. They are time zone _offsets_.
+
+A time zone is a geographic area with the same local time. For example, the time zone abbreviated by `PST` and `PDT` (depending on Daylight Savings Time) is `America/Los_Angeles`.
diff --git a/content/en/functions/abslangurl.md b/content/en/functions/abslangurl.md
deleted file mode 100644 (file)
index 2e1996f..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: absLangURL
-description: Returns an absolute URL with a language prefix, if any.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls, multilingual,i18n]
-signature: ["absLangURL INPUT"]
----
-
-Use this function with both monolingual and multilingual configurations. The URL returned by this function depends on:
-
-- Whether the input begins with a slash
-- The `baseURL` in site configuration
-- The language prefix, if any
-
-In examples that follow, the project is multilingual with content in both Español (`es`) and English (`en`). The default language is Español. The returned values are from the English site.
-
-### Input does not begin with a slash
-
-If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ absLangURL "" }}           →   https://example.org/en/
-{{ absLangURL "articles" }}   →   https://example.org/en/articles
-{{ absLangURL "style.css" }}  →   https://example.org/en/style.css
-```
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ absLangURL "" }}           →   https://example.org/docs/en/
-{{ absLangURL "articles" }}   →   https://example.org/docs/en/articles
-{{ absLangURL "style.css" }}  →   https://example.org/docs/en/style.css
-```
-
-### Input begins with a slash
-
-If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ absLangURL "/" }}          →   https://example.org/en/
-{{ absLangURL "/articles" }}  →   https://example.org/en/articles
-{{ absLangURL "/style.css" }} →   https://example.org/en/style.css
-```
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ absLangURL "/" }}          →   https://example.org/en/
-{{ absLangURL "/articles" }}  →   https://example.org/en/articles
-{{ absLangURL "/style.css" }} →   https://example.org/en/style.css
-```
-
-{{% note %}}
-The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
-{{% /note %}}
diff --git a/content/en/functions/absurl.md b/content/en/functions/absurl.md
deleted file mode 100644 (file)
index efea2df..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: absURL
-description: Returns an absolute URL.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls]
-signature: ["absURL INPUT"]
----
-
-With multilingual configurations, use the [`absLangURL`] function instead.  The URL returned by this function depends on:
-
-- Whether the input begins with a slash
-- The `baseURL` in site configuration
-
-### Input does not begin with a slash
-
-If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ absURL "" }}           →   https://example.org/
-{{ absURL "articles" }}   →   https://example.org/articles
-{{ absURL "style.css" }}  →   https://example.org/style.css
-```
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ absURL "" }}           →   https://example.org/docs/
-{{ absURL "articles" }}   →   https://example.org/docs/articles
-{{ absURL "style.css" }}  →   https://example.org/docs/style.css
-```
-
-### Input begins with a slash
-
-If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ absURL "/" }}          →   https://example.org/
-{{ absURL "/articles" }}  →   https://example.org/articles
-{{ absURL "/style.css" }} →   https://example.org/style.css
-```
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ absURL "/" }}          →   https://example.org/
-{{ absURL "/articles" }}  →   https://example.org/articles
-{{ absURL "/style.css" }} →   https://example.org/style.css
-```
-
-{{% note %}}
-The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
-{{% /note %}}
-
-[`absLangURL`]: /functions/abslangurl/
diff --git a/content/en/functions/adddate.md b/content/en/functions/adddate.md
deleted file mode 100644 (file)
index cae270f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: .AddDate
-description: Returns the time corresponding to adding the given number of years, months, and days to the given time.Time value.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [dates,time]
-signature: [".AddDate YEARS MONTHS DAYS"]
-relatedfuncs: [now]
----
-
-```go-html-template
-{{ $d := "2022-01-01" | time.AsTime }}
-
-{{ $d.AddDate 0 0 1 | time.Format "2006-01-02" }} → 2022-01-02
-{{ $d.AddDate 0 1 1 | time.Format "2006-01-02" }} → 2022-02-02
-{{ $d.AddDate 1 1 1 | time.Format "2006-01-02" }} → 2023-02-02
-
-{{ $d.AddDate -1 -1 -1 | time.Format "2006-01-02" }} → 2020-11-30
-```
-
-{{% note %}}
-When adding months or years, Hugo normalizes the final `time.Time` value if the resulting day does not exist. For example, adding one month to 31 January produces 2 March or 3 March, depending on the year.
-
-See [this explanation](https://github.com/golang/go/issues/31145#issuecomment-479067967) from the Go team.
-{{% /note %}}
-
-```go-html-template
-{{ $d := "2023-01-31" | time.AsTime }}
-{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} → 2023-03-03
-
-{{ $d := "2024-01-31" | time.AsTime }}
-{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} → 2024-03-02
-
-{{ $d := "2024-02-29" | time.AsTime }}
-{{ $d.AddDate 1 0 0 | time.Format "2006-01-02" }} → 2025-03-01
-```
diff --git a/content/en/functions/after.md b/content/en/functions/after.md
deleted file mode 100644 (file)
index 85aa610..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: after
-description: "`after` slices an array to only the items after the <em>N</em>th item."
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [iteration]
-signature: ["after INDEX COLLECTION"]
-relatedfuncs: [last,first,seq]
----
-
-The following shows `after` being used in conjunction with the [`slice` function][slice]:
-
-```go-html-template
-{{ $data := slice "one" "two" "three" "four" }}
-{{ range after 2 $data }}
-    {{ . }}
-{{ end }}
-→ ["three", "four"]
-```
-
-## Example of `after` with `first`: 2nd&ndash;4th most recent articles
-
-You can use `after` in combination with the [`first` function] and Hugo's [powerful sorting methods][lists]. Let's assume you have a list page at `example.com/articles`. You have 10 articles, but you want your templating for the [list/section page] to show only two rows:
-
-1. The top row is titled "Featured" and shows only the most recently published article (i.e. by `publishdate` in the content files' front matter).
-2. The second row is titled "Recent Articles" and shows only the 2nd- to 4th-most recently published articles.
-
-{{< code file="layouts/section/articles.html" >}}
-{{ define "main" }}
-<section class="row featured-article">
-  <h2>Featured Article</h2>
-  {{ range first 1 .Pages.ByPublishDate.Reverse }}
-  <header>
-      <h3><a href="{{ .Permalink }}">{{ .Title }}</a></h3>
-  </header>
-  <p>{{ .Description }}</p>
-{{ end }}
-</section>
-<div class="row recent-articles">
-  <h2>Recent Articles</h2>
-  {{ range first 3 (after 1 .Pages.ByPublishDate.Reverse) }}
-    <section class="recent-article">
-      <header>
-          <h3><a href="{{ .Permalink }}">{{ .Title }}</a></h3>
-      </header>
-      <p>{{ .Description }}</p>
-    </section>
-  {{ end }}
-</div>
-{{ end }}
-{{< /code >}}
-
-[`first` function]: /functions/first/
-[list/section page]: /templates/section-templates/
-[lists]: /templates/lists/#order-content
-[slice]: /functions/slice/
diff --git a/content/en/functions/anchorize.md b/content/en/functions/anchorize.md
deleted file mode 100644 (file)
index 91d6b4f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: anchorize
-description: Takes a string and sanitizes it the same way as the [`defaultMarkdownHandler`](/getting-started/configuration-markup#default-configuration) does for markdown headers.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [markdown,strings]
-signature: ["anchorize INPUT"]
-relatedfuncs: [humanize]
----
-
-If [Goldmark](/getting-started/configuration-markup#goldmark) is set as `defaultMarkdownHandler`, the sanitizing logic adheres to the setting [`markup.goldmark.parser.autoHeadingIDType`](/getting-started/configuration-markup#goldmark).
-
-Since the `defaultMarkdownHandler` and this template function use the same sanitizing logic, you can use the latter to determine the ID of a header for linking with anchor tags.
-
-```go-html-template
-{{ anchorize "This is a header" }} → "this-is-a-header"
-{{ anchorize "This is also    a header" }} → "this-is-also----a-header"
-{{ anchorize "main.go" }} → "maingo"
-{{ anchorize "Article 123" }} → "article-123"
-{{ anchorize "<- Let's try this, shall we?" }} → "--lets-try-this-shall-we"
-{{ anchorize "Hello, 世界" }} → "hello-世界"
-```
diff --git a/content/en/functions/append.md b/content/en/functions/append.md
deleted file mode 100644 (file)
index e734eac..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
----
-title: append
-description: Appends one or more elements to a slice and returns the resulting slice.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections]
-signature: ["COLLECTION | append ELEMENT [ELEMENT]...", "COLLECTION | append COLLECTION"]
-relatedfuncs: [last,first,where,slice]
----
-
-This function appends all elements, excluding the last, to the last element. This allows [pipe](/getting-started/glossary/#pipeline) constructs as shown below.
-
-Append a single element to a slice:
-
-```go-html-template
-{{ $s := slice "a" "b" }}
-{{ $s }} → [a b]
-
-{{ $s = $s | append "c" }}
-{{ $s }} → [a b c]
-```
-
-Append two elements to a slice:
-
-```go-html-template
-{{ $s := slice "a" "b" }}
-{{ $s }} → [a b]
-
-{{ $s = $s | append "c" "d" }}
-{{ $s }} → [a b c d]
-```
-
-Append two elements, as a slice, to a slice. This produces the same result as the previous example:
-
-```go-html-template
-{{ $s := slice "a" "b" }}
-{{ $s }} → [a b]
-
-{{ $s = $s | append (slice "c" "d") }}
-{{ $s }} → [a b c d]
-```
-
-Start with an empty slice:
-
-```go-html-template
-{{ $s := slice }}
-{{ $s }} → []
-
-{{ $s = $s | append "a" }}
-{{ $s }} → [a]
-
-{{ $s = $s | append "b" "c" }}
-{{ $s }} → [a b c]
-
-{{ $s = $s | append (slice "d" "e") }}
-{{ $s }} → [a b c d e]
-```
-
-If you start with a slice of a slice:
-
-```go-html-template
-{{ $s := slice (slice "a" "b") }}
-{{ $s }} → [[a b]]
-
-{{ $s = $s | append (slice "c" "d") }}
-{{ $s }} → [[a b] [c d]]
-```
-
-To create a slice of slices, starting with an empty slice:
-
-```go-html-template
-{{ $s := slice }}
-{{ $s }} → []
-
-{{ $s = $s | append (slice (slice "a" "b")) }}
-{{ $s }} → [[a b]]
-
-{{ $s = $s | append  (slice "c" "d") }}
-{{ $s }} → [[a b] [c d]]
-```
-
-
-
-Although the elements in the examples above are strings, you can use the `append` function with any data type, including Pages. For example, on the home page of a corporate site, to display links to the two most recent press releases followed by links to the four most recent articles:
-
-```go-html-template
-{{ $p := where site.RegularPages "Type" "press-releases" | first 2 }}
-{{ $p = $p | append (where site.RegularPages "Type" "articles" | first 4) }}
-
-{{ with $p }}
-  <ul>
-    {{ range . }}
-      <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
-    {{ end }}
-  </ul>
-{{ end }}
-```
diff --git a/content/en/functions/apply.md b/content/en/functions/apply.md
deleted file mode 100644 (file)
index c507a35..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: apply
-description: Given an array or slice, `apply` returns a new slice with a function applied over it.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [advanced]
-signature: ["apply COLLECTION FUNCTION [PARAM...]"]
-relatedfuncs: []
----
-
-`apply` expects at least three arguments, depending on the function being applied.
-
-1. The first argument is the sequence to operate on.
-2. The second argument is the name of the function as a string, which must be the name of a valid [Hugo function][functions].
-3. After that, the arguments to the applied function are provided, with the string `"."` standing in for each element of the sequence the function is to be applied against.
-
-Here is an example of a content file with `names:` as a front matter field:
-
-{{< code-toggle file="content/example.md" fm=true copy=false >}}
-title: Example
-names: [ "Derek Perkins", "Joe Bergevin", "Tanner Linsley" ]
-{{< /code-toggle >}}
-
-You can then use `apply` as follows:
-
-```go-html-template
-{{ apply .Params.names "urlize" "." }}
-```
-
-Which will result in the following:
-
-```
-"derek-perkins", "joe-bergevin", "tanner-linsley"
-```
-
-This is *roughly* equivalent to using the following with [range]:
-
-```go-html-template
-{{ range .Params.names }}{{ . | urlize }}{{ end }}
-```
-
-However, it is not possible to provide the output of a range to the [`delimit` function][delimit], so you need to `apply` it.
-
-If you have `post-tag-list.html` and `post-tag-link.html` as [partials], you *could* use the following snippets, respectively:
-
-{{< code file="layouts/partials/post-tag-list.html" copy=false >}}
-{{ with .Params.tags }}
-  <div class="tags-list">
-    Tags:
-    {{ $len := len . }}
-    {{ if eq $len 1 }}
-      {{ partial "post-tag-link.html" (index . 0) }}
-    {{ else }}
-      {{ $last := sub $len 1 }}
-      {{ range first $last . }}
-        {{ partial "post-tag-link.html" . }},
-      {{ end }}
-      {{ partial "post-tag-link.html" (index . $last) }}
-    {{ end }}
-  </div>
-{{ end }}
-{{< /code >}}
-
-{{< code file="layouts/partials/post-tag-link.html" copy=false >}}
-<a class="post-tag post-tag-{{ . | urlize }}" href="/tags/{{ . | urlize }}">{{ . }}</a>
-{{< /code >}}
-
-This works, but the complexity of `post-tag-list.html` is fairly high. The Hugo template needs to perform special behavior for the case where there’s only one tag, and it has to treat the last tag as special. Additionally, the tag list will be rendered something like `Tags: tag1 , tag2 , tag3` because of the way that the HTML is generated and then interpreted by a browser.
-
-This first version of `layouts/partials/post-tag-list.html` separates all of the operations for ease of reading. The combined and DRYer version is shown next:
-
-```go-html-template
-{{ with .Params.tags }}
-  <div class="tags-list">
-    Tags:
-    {{ $sort := sort . }}
-    {{ $links := apply $sort "partial" "post-tag-link.html" "." }}
-    {{ $clean := apply $links "chomp" "." }}
-    {{ delimit $clean ", " }}
-  </div>
-{{ end }}
-```
-
-Now in the completed version, you can sort the tags, convert the tags to links with `layouts/partials/post-tag-link.html`, [chomp] off stray newlines, and join the tags together in a delimited list for presentation. Here is an even DRYer version of the preceding example:
-
-{{< code file="layouts/partials/post-tag-list.html" >}}
-{{ with .Params.tags }}
-  <div class="tags-list">
-    Tags:
-    {{ delimit (apply (apply (sort .) "partial" "post-tag-link.html" ".") "chomp" ".") ", " }}
-  </div>
-{{ end }}
-{{< /code >}}
-
-{{% note %}}
-`apply` does not work when receiving the sequence as an argument through a pipeline.
-{{% /note %}}
-
-[chomp]: /functions/chomp/ "See documentation for the chomp function"
-[delimit]: /functions/delimit/ "See documentation for the delimit function"
-[functions]: /functions/ "See the full list of Hugo functions to see what can be passed as an argument to the apply function."
-[partials]: /templates/partials/
-[range]: /functions/range/ "Learn the importance of the range function, a fundamental keyword in both Hugo templates and the Go programming language."
diff --git a/content/en/functions/base64.md b/content/en/functions/base64.md
deleted file mode 100644 (file)
index a6de64b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: base64
-description: "`base64Encode` and `base64Decode` let you easily decode content with a base64 encoding and vice versa through pipes."
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-relatedfuncs: []
-signature: ["base64Decode INPUT", "base64Encode INPUT"]
----
-
-```go-html-template
-{{ "Hugo" | base64Encode }} → "SHVnbw=="
-{{ "SHVnbw==" | base64Decode }} → "Hugo"
-```
-
-## `base64` with APIs
-
-Using base64 to decode and encode becomes really powerful if we have to handle
-responses from APIs.
-
-```go-html-template
-{{ $resp := getJSON "https://api.github.com/repos/gohugoio/hugo/readme" }}
-{{ $resp.content | base64Decode | markdownify }}
-```
-
-The response of the GitHub API contains the base64-encoded version of the [README.md](https://github.com/gohugoio/hugo/blob/master/README.md) in the Hugo repository. Now we can decode it and parse the Markdown. The final output will look similar to the rendered version on GitHub.
diff --git a/content/en/functions/cast/ToFloat.md b/content/en/functions/cast/ToFloat.md
new file mode 100644 (file)
index 0000000..acf70bc
--- /dev/null
@@ -0,0 +1,53 @@
+---
+title: cast.ToFloat
+linkTitle: float
+description: Casts a value to a decimal (base 10) floating point value.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [float]
+  returnType: float64
+  signatures: [cast.ToFloat INPUT]
+relatedFunctions:
+  - cast.ToFloat
+  - cast.ToInt
+  - cast.ToString
+aliases: [/functions/float]
+---
+
+With a decimal (base 10) input:
+
+```go-html-template
+{{ float 11 }} → 11 (float64)
+{{ float "11" }} → 11 (float64)
+
+{{ float 11.1 }} → 11.1 (float64)
+{{ float "11.1" }} → 11.1 (float64)
+
+{{ float 11.9 }} → 11.9 (float64)
+{{ float "11.9" }} → 11.9 (float64)
+```
+
+With a binary (base 2) input:
+
+```go-html-template
+{{ float 0b11 }} → 3 (float64)
+```
+
+With an octal (base 8) input (use either notation):
+
+```go-html-template
+{{ float 011 }} → 9 (float64)
+{{ float "011" }} → 11 (float64)
+
+{{ float 0o11 }} → 9 (float64)
+```
+
+With a hexadecimal (base 16) input:
+
+```go-html-template
+{{ float 0x11 }} → 17 (float64)
+```
diff --git a/content/en/functions/cast/ToInt.md b/content/en/functions/cast/ToInt.md
new file mode 100644 (file)
index 0000000..b4a37cb
--- /dev/null
@@ -0,0 +1,59 @@
+---
+title: cast.ToInt
+linkTitle: int
+description: Casts a value to a decimal (base 10) integer.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [int]
+  returnType: int
+  signatures: [cast.ToInt INPUT]
+relatedFunctions:
+  - cast.ToFloat
+  - cast.ToInt
+  - cast.ToString
+aliases: [/functions/int]
+---
+
+With a decimal (base 10) input:
+
+```go-html-template
+{{ int 11 }} → 11 (int)
+{{ int "11" }} → 11 (int)
+
+{{ int 11.1 }} → 11 (int)
+{{ int 11.9 }} → 11 (int)
+```
+
+With a binary (base 2) input:
+
+```go-html-template
+{{ int 0b11 }} → 3 (int)
+{{ int "0b11" }} → 3 (int)
+```
+
+With an octal (base 8) input (use either notation):
+
+```go-html-template
+{{ int 011 }} → 9 (int)
+{{ int "011" }} → 9 (int)
+
+{{ int 0o11 }} → 9 (int)
+{{ int "0o11" }} → 9 (int)
+```
+
+With a hexadecimal (base 16) input:
+
+```go-html-template
+{{ int 0x11 }} → 17 (int)
+{{ int "0x11" }} → 17 (int)
+```
+
+{{% note %}}
+Values with a leading zero are octal (base 8). When casting a string representation of a decimal (base 10) number, remove leading zeros:
+
+`{{ strings.TrimLeft "0" "0011" | int }} → 11`
+{{% /note %}}
diff --git a/content/en/functions/cast/ToString.md b/content/en/functions/cast/ToString.md
new file mode 100644 (file)
index 0000000..d677ecd
--- /dev/null
@@ -0,0 +1,56 @@
+---
+title: cast.ToString
+linkTitle: string
+description: Cast a value to a string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [string]
+  returnType: string
+  signatures: [cast.ToString INPUT]
+relatedFunctions:
+  - cast.ToFloat
+  - cast.ToInt
+  - cast.ToString
+aliases: [/functions/string]
+---
+
+With a decimal (base 10) input:
+
+```go-html-template
+{{ string 11 }} → 11 (string)
+{{ string "11" }} → 11 (string)
+
+{{ string 11.1 }} → 11.1 (string)
+{{ string "11.1" }} → 11.1 (string)
+
+{{ string 11.9 }} → 11.9 (string)
+{{ string "11.9" }} → 11.9 (string)
+```
+
+With a binary (base 2) input:
+
+```go-html-template
+{{ string 0b11 }} → 3 (string)
+{{ string "0b11" }} → 0b11 (string)
+```
+
+With an octal (base 8) input (use either notation):
+
+```go-html-template
+{{ string 011 }} → 9 (string)
+{{ string "011" }} → 011 (string)
+
+{{ string 0o11 }} → 9 (string)
+{{ string "0o11" }} → 0o11 (string)
+```
+
+With a hexadecimal (base 16) input:
+
+```go-html-template
+{{ string 0x11 }} → 17 (string)
+{{ string "0x11" }} → 0x11 (string)
+```
diff --git a/content/en/functions/chomp.md b/content/en/functions/chomp.md
deleted file mode 100644 (file)
index 861e7ec..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: chomp
-toc: true
-description: Removes any trailing newline characters.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [trim]
-signature:
-  - "chomp INPUT"
-  - "strings.Chomp INPUT"
-relatedfuncs: [truncate]
----
-
-Useful in a pipeline to remove newlines added by other processing (e.g., [`markdownify`](/functions/markdownify/)).
-
-```go-html-template
-{{ chomp "<p>Blockhead</p>\n" }} → "<p>Blockhead</p>"
-```
diff --git a/content/en/functions/collections/After.md b/content/en/functions/collections/After.md
new file mode 100644 (file)
index 0000000..e27c150
--- /dev/null
@@ -0,0 +1,66 @@
+---
+title: collections.After
+linkTitle: after
+description: Slices an array to the items after the Nth item.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [after]
+  returnType: any
+  signatures: [collections.After INDEX COLLECTION]
+relatedFunctions:
+  - collections.After
+  - collections.First
+  - collections.Last
+aliases: [/functions/after]
+---
+
+The following shows `after` being used in conjunction with the [`slice`]function:
+
+```go-html-template
+{{ $data := slice "one" "two" "three" "four" }}
+{{ range after 2 $data }}
+    {{ . }}
+{{ end }}
+→ ["three", "four"]
+```
+
+## Example of `after` with `first`: 2nd&ndash;4th most recent articles
+
+You can use `after` in combination with the [`first`] function and Hugo's [powerful sorting methods][lists]. Let's assume you have a list page at `example.com/articles`. You have 10 articles, but you want your templating for the [list/section page] to show only two rows:
+
+1. The top row is titled "Featured" and shows only the most recently published article (i.e. by `publishdate` in the content files' front matter).
+2. The second row is titled "Recent Articles" and shows only the 2nd- to 4th-most recently published articles.
+
+{{< code file="layouts/section/articles.html" >}}
+{{ define "main" }}
+<section class="row featured-article">
+  <h2>Featured Article</h2>
+  {{ range first 1 .Pages.ByPublishDate.Reverse }}
+  <header>
+      <h3><a href="{{ .Permalink }}">{{ .Title }}</a></h3>
+  </header>
+  <p>{{ .Description }}</p>
+{{ end }}
+</section>
+<div class="row recent-articles">
+  <h2>Recent Articles</h2>
+  {{ range first 3 (after 1 .Pages.ByPublishDate.Reverse) }}
+    <section class="recent-article">
+      <header>
+          <h3><a href="{{ .Permalink }}">{{ .Title }}</a></h3>
+      </header>
+      <p>{{ .Description }}</p>
+    </section>
+  {{ end }}
+</div>
+{{ end }}
+{{< /code >}}
+
+[`first`]: /functions/collections/first
+[list/section page]: /templates/section-templates
+[lists]: /templates/lists/#order-content
+[`slice`]: /functions/collections/slice/
diff --git a/content/en/functions/collections/Append.md b/content/en/functions/collections/Append.md
new file mode 100644 (file)
index 0000000..3165728
--- /dev/null
@@ -0,0 +1,107 @@
+---
+title: collections.Append
+linkTitle: append
+description: Appends one or more elements to a slice and returns the resulting slice.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [append]
+  returnType: any
+  signatures:
+    - COLLECTION | collections.Append ELEMENT [ELEMENT]...
+    - COLLECTION | collections.Append COLLECTION
+relatedFunctions:
+  - collections.Append
+  - collections.Merge
+  - collections.Slice
+aliases: [/functions/append]
+---
+
+This function appends all elements, excluding the last, to the last element. This allows [pipe](/getting-started/glossary/#pipeline) constructs as shown below.
+
+Append a single element to a slice:
+
+```go-html-template
+{{ $s := slice "a" "b" }}
+{{ $s }} → [a b]
+
+{{ $s = $s | append "c" }}
+{{ $s }} → [a b c]
+```
+
+Append two elements to a slice:
+
+```go-html-template
+{{ $s := slice "a" "b" }}
+{{ $s }} → [a b]
+
+{{ $s = $s | append "c" "d" }}
+{{ $s }} → [a b c d]
+```
+
+Append two elements, as a slice, to a slice. This produces the same result as the previous example:
+
+```go-html-template
+{{ $s := slice "a" "b" }}
+{{ $s }} → [a b]
+
+{{ $s = $s | append (slice "c" "d") }}
+{{ $s }} → [a b c d]
+```
+
+Start with an empty slice:
+
+```go-html-template
+{{ $s := slice }}
+{{ $s }} → []
+
+{{ $s = $s | append "a" }}
+{{ $s }} → [a]
+
+{{ $s = $s | append "b" "c" }}
+{{ $s }} → [a b c]
+
+{{ $s = $s | append (slice "d" "e") }}
+{{ $s }} → [a b c d e]
+```
+
+If you start with a slice of a slice:
+
+```go-html-template
+{{ $s := slice (slice "a" "b") }}
+{{ $s }} → [[a b]]
+
+{{ $s = $s | append (slice "c" "d") }}
+{{ $s }} → [[a b] [c d]]
+```
+
+To create a slice of slices, starting with an empty slice:
+
+```go-html-template
+{{ $s := slice }}
+{{ $s }} → []
+
+{{ $s = $s | append (slice (slice "a" "b")) }}
+{{ $s }} → [[a b]]
+
+{{ $s = $s | append  (slice "c" "d") }}
+{{ $s }} → [[a b] [c d]]
+```
+
+Although the elements in the examples above are strings, you can use the `append` function with any data type, including Pages. For example, on the home page of a corporate site, to display links to the two most recent press releases followed by links to the four most recent articles:
+
+```go-html-template
+{{ $p := where site.RegularPages "Type" "press-releases" | first 2 }}
+{{ $p = $p | append (where site.RegularPages "Type" "articles" | first 4) }}
+
+{{ with $p }}
+  <ul>
+    {{ range . }}
+      <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
+    {{ end }}
+  </ul>
+{{ end }}
+```
diff --git a/content/en/functions/collections/Apply.md b/content/en/functions/collections/Apply.md
new file mode 100644 (file)
index 0000000..d740190
--- /dev/null
@@ -0,0 +1,115 @@
+---
+title: collections.Apply
+linkTitle: apply
+description: Given an array or slice, `apply` returns a new slice with a function applied over it.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [apply]
+  returnType: any
+  signatures: ['collections.Apply COLLECTION FUNCTION [PARAM...]']
+relatedFunctions:
+  - collections.Apply
+  - collections.Delimit
+  - collections.In
+  - collections.Reverse
+  - collections.Seq
+  - collections.Slice
+aliases: [/functions/apply]
+---
+
+`apply` expects at least three arguments, depending on the function being applied.
+
+1. The first argument is the sequence to operate on.
+2. The second argument is the name of the function as a string, which must be the name of a valid [template function].
+3. After that, the arguments to the applied function are provided, with the string `"."` standing in for each element of the sequence the function is to be applied against.
+
+Here is an example of a content file with `names:` as a front matter field:
+
+{{< code-toggle file="content/example.md" fm=true copy=false >}}
+title: Example
+names: [ "Derek Perkins", "Joe Bergevin", "Tanner Linsley" ]
+{{< /code-toggle >}}
+
+You can then use `apply` as follows:
+
+```go-html-template
+{{ apply .Params.names "urlize" "." }}
+```
+
+Which will result in the following:
+
+```
+"derek-perkins", "joe-bergevin", "tanner-linsley"
+```
+
+This is *roughly* equivalent to using the following with [`range`]:
+
+```go-html-template
+{{ range .Params.names }}{{ . | urlize }}{{ end }}
+```
+
+However, it is not possible to provide the output of a range to the [`delimit`]function, so you need to `apply` it.
+
+If you have `post-tag-list.html` and `post-tag-link.html` as [partials], you *could* use the following snippets, respectively:
+
+{{< code file="layouts/partials/post-tag-list.html" copy=false >}}
+{{ with .Params.tags }}
+  <div class="tags-list">
+    Tags:
+    {{ $len := len . }}
+    {{ if eq $len 1 }}
+      {{ partial "post-tag-link.html" (index . 0) }}
+    {{ else }}
+      {{ $last := sub $len 1 }}
+      {{ range first $last . }}
+        {{ partial "post-tag-link.html" . }},
+      {{ end }}
+      {{ partial "post-tag-link.html" (index . $last) }}
+    {{ end }}
+  </div>
+{{ end }}
+{{< /code >}}
+
+{{< code file="layouts/partials/post-tag-link.html" copy=false >}}
+<a class="post-tag post-tag-{{ . | urlize }}" href="/tags/{{ . | urlize }}">{{ . }}</a>
+{{< /code >}}
+
+This works, but the complexity of `post-tag-list.html` is fairly high. The Hugo template needs to perform special behavior for the case where there’s only one tag, and it has to treat the last tag as special. Additionally, the tag list will be rendered something like `Tags: tag1 , tag2 , tag3` because of the way that the HTML is generated and then interpreted by a browser.
+
+This first version of `layouts/partials/post-tag-list.html` separates all of the operations for ease of reading. The combined and DRYer version is shown next:
+
+```go-html-template
+{{ with .Params.tags }}
+  <div class="tags-list">
+    Tags:
+    {{ $sort := sort . }}
+    {{ $links := apply $sort "partial" "post-tag-link.html" "." }}
+    {{ $clean := apply $links "chomp" "." }}
+    {{ delimit $clean ", " }}
+  </div>
+{{ end }}
+```
+
+Now in the completed version, you can sort the tags, convert the tags to links with `layouts/partials/post-tag-link.html`, [`chomp`] stray newlines, and join the tags together in a delimited list for presentation. Here is an even DRYer version of the preceding example:
+
+{{< code file="layouts/partials/post-tag-list.html" >}}
+{{ with .Params.tags }}
+  <div class="tags-list">
+    Tags:
+    {{ delimit (apply (apply (sort .) "partial" "post-tag-link.html" ".") "chomp" ".") ", " }}
+  </div>
+{{ end }}
+{{< /code >}}
+
+{{% note %}}
+`apply` does not work when receiving the sequence as an argument through a pipeline.
+{{% /note %}}
+
+[`chomp`]: /functions/strings/chomp/
+[`delimit`]: /functions/collections/delimit/
+[template function]: /functions/
+[`range`]: /functions/go-template/range/
diff --git a/content/en/functions/collections/Complement.md b/content/en/functions/collections/Complement.md
new file mode 100644 (file)
index 0000000..28b7ded
--- /dev/null
@@ -0,0 +1,86 @@
+---
+title: collections.Complement
+linkTitle: complement
+description: Returns the elements of the last collection that are not in any of the others.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [complement]
+  returnType: any
+  signatures: ['collections.Complement COLLECTION [COLLECTION]...']
+relatedFunctions:
+  - collections.Complement
+  - collections.Intersect
+  - collections.SymDiff
+  - collections.Union
+aliases: [/functions/complement]
+---
+
+To find the elements within `$c3` that do not exist in `$c1` or `$c2`:
+
+```go-html-template
+{{ $c1 := slice 3 }}
+{{ $c2 := slice 4 5 }}
+{{ $c3 := slice 1 2 3 4 5 }}
+
+{{ complement $c1 $c2 $c3 }} → [1 2]
+```
+
+{{% note %}}
+Make your code simpler to understand by using a [chained pipeline]:
+
+[chained pipeline]: https://pkg.go.dev/text/template#hdr-Pipelines
+{{% /note %}}
+
+
+```go-html-template
+{{ $c3 | complement $c1 $c2 }} → [1 2]
+```
+
+You can also use the `complement` function with page collections. Let's say your site has five content types:
+
+```text
+content/
+├── blog/
+├── books/
+├── faqs/
+├── films/
+└── songs/
+```
+
+To list everything except blog articles (`blog`) and frequently asked questions (`faqs`):
+
+```go-html-template
+{{ $blog := where site.RegularPages "Type" "blog" }}
+{{ $faqs := where site.RegularPages "Type" "faqs" }}
+{{ range site.RegularPages | complement $blog $faqs }}
+  <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
+{{ end }}
+```
+
+{{% note %}}
+Although the example above demonstrates the `complement` function, you could use the [`where`] function as well:
+
+[`where`]: /functions/collections/where
+{{% /note %}} 
+
+```go-html-template
+{{ range where site.RegularPages "Type" "not in" (slice "blog" "faqs") }}
+  <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
+{{ end }}
+```
+
+In this example we use the `complement` function to remove [stop words] from a sentence:
+
+```go-html-template
+{{ $text := "The quick brown fox jumps over the lazy dog" }}
+{{ $stopWords := slice "a" "an" "in" "over" "the" "under" }}
+{{ $filtered := split $text " " | complement $stopWords }}
+
+{{ delimit $filtered " " }} → The quick brown fox jumps lazy dog
+```
+
+[stop words]: https://en.wikipedia.org/wiki/Stop_word
diff --git a/content/en/functions/collections/Delimit.md b/content/en/functions/collections/Delimit.md
new file mode 100644 (file)
index 0000000..0fc3ef5
--- /dev/null
@@ -0,0 +1,43 @@
+---
+title: collections.Delimit
+linkTitle: delimit
+description: Loops through any array, slice, or map and returns a string of all the values separated by a delimiter.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [delimit]
+  returnType: template.HTML
+  signatures: ['collections.Delimit COLLECTION DELIMITER [LAST]']
+relatedFunctions:
+  - collections.Apply
+  - collections.Delimit
+  - collections.In
+  - collections.Reverse
+  - collections.Seq
+  - collections.Slice
+  - strings.Split
+aliases: [/functions/delimit]
+---
+
+Delimit a slice:
+
+```go-html-template
+{{ $s := slice "b" "a" "c" }}
+{{ delimit $s ", " }} → "b, a, c"
+{{ delimit $s ", " " and "}} → "b, a and c"
+```
+
+Delimit a map:
+
+{{% note %}}
+The `delimit` function sorts maps by key, returning the values.
+{{% /note %}}
+
+```go-html-template
+{{ $m := dict "b" 2 "a" 1 "c" 3 }}
+{{ delimit $m ", " }} → "1, 2, 3"
+{{ delimit $m ", " " and "}} → "1, 2 and 3"
+```
diff --git a/content/en/functions/collections/Dictionary.md b/content/en/functions/collections/Dictionary.md
new file mode 100644 (file)
index 0000000..28c3877
--- /dev/null
@@ -0,0 +1,52 @@
+---
+title: collections.Dictionary
+linkTitle: dict
+description: Creates a map from a list of key and value pairs.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [dict]
+  returnType: mapany
+  signatures: ['collections.Dictionary KEY VALUE [KEY VALUE]...']
+relatedFunctions:
+  - collections.Dictionary
+  - collections.Group
+  - collections.Index
+  - collections.IsSet
+  - collections.Where
+aliases: [/functions/dict]
+---
+
+`dict` is especially useful for passing more than one value to a partial template.
+
+Note that the `key` can be either a `string` or a `string slice`. The latter is useful to create a deeply nested structure, e.g.:
+
+```go-text-template
+{{ $m := dict (slice "a" "b" "c") "value" }}
+```
+
+## Example: using `dict` to pass multiple values to a `partial`
+
+The partial below creates an SVG and expects `fill`, `height` and `width` from the caller:
+
+### Partial definition
+
+{{< code file="layouts/partials/svgs/external-links.svg" >}}
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+fill="{{ .fill }}" width="{{ .width }}" height="{{ .height }}" viewBox="0 0 32 32" aria-label="External Link">
+<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path>
+</svg>
+{{< /code >}}
+
+### Partial call
+
+The `fill`, `height` and `width` values can be stored in one object with `dict` and passed to the partial:
+
+{{< code file="layouts/_default/list.html" >}}
+{{ partial "svgs/external-links.svg" (dict "fill" "#01589B" "width" 10 "height" 20 ) }}
+{{< /code >}}
+
+[partials]: /templates/partials/
diff --git a/content/en/functions/collections/EchoParam.md b/content/en/functions/collections/EchoParam.md
new file mode 100644 (file)
index 0000000..7617eed
--- /dev/null
@@ -0,0 +1,40 @@
+---
+title: collections.EchoParam
+linkTitle: echoParam
+description: Prints a parameter if it is set.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [echoParam]
+  returnType: any
+  signatures: [collections.EchoParam COLLECTION KEY]
+relatedFunctions: []
+aliases: [/functions/echoparam]
+---
+
+For example, consider this site configuration:
+
+{{< code-toggle file=hugo copy=false >}}
+[params.footer]
+poweredBy = 'Hugo'
+{{< /code-toggle >}}
+
+To print the value of `poweredBy`:
+
+```go-html-template
+{{ echoParam site.Params.footer "poweredby" }} → Hugo
+```
+
+{{% note %}}
+When using the `echoParam` function you must reference the key using lower case. See the previous example.
+
+The `echoParam` function will be deprecated in a future release. Instead, use either of the constructs below.
+{{% /note %}}
+
+```go-html-template
+{{ site.Params.footer.poweredBy }} → Hugo
+{{ index site.Params.footer "poweredBy" }} → Hugo
+```
diff --git a/content/en/functions/collections/First.md b/content/en/functions/collections/First.md
new file mode 100644 (file)
index 0000000..ddb0453
--- /dev/null
@@ -0,0 +1,53 @@
+---
+title: collections.First
+linkTitle: first
+description: Slices an array to the first N elements.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [first]
+  returnType: any
+  signatures: [collections.First LIMIT COLLECTION]
+relatedFunctions:
+  - collections.After
+  - collections.First
+  - collections.Last
+aliases: [/functions/first]
+---
+
+`first` works in a similar manner to the [`limit` keyword in
+SQL][limitkeyword]. It reduces the array to only the `first N`
+elements. It takes the array and number of elements as input.
+
+`first` takes two arguments:
+1. `number of elements`
+2. `array` *or* `slice of maps or structs`
+
+{{< code file="layout/_default/section.html" >}}
+{{ range first 10 .Pages }}
+    {{ .Render "summary" }}
+{{ end }}
+{{< /code >}}
+
+*Note: Exclusive to `first`, LIMIT can be '0' to return an empty array.*
+
+## `first` and `where` Together
+
+Using `first` and [`where`] together can be very
+powerful. Below snippet gets a list of posts only from [main
+sections], sorts it by the `title` parameter, and then
+ranges through only the first 5 posts in that list:
+
+{{< code file="first-and-where-together.html" >}}
+{{ range first 5 (where site.RegularPages "Type" "in" site.Params.mainSections).ByTitle }}
+   {{ .Content }}
+{{ end }}
+{{< /code >}}
+
+
+[limitkeyword]: https://www.techonthenet.com/sql/select_limit.php
+[`where`]: /functions/collections/where
+[main sections]: /functions/collections/where#mainsections
diff --git a/content/en/functions/collections/Group.md b/content/en/functions/collections/Group.md
new file mode 100644 (file)
index 0000000..29220f1
--- /dev/null
@@ -0,0 +1,40 @@
+---
+title: collections.Group
+linkTitle: group
+description: Groups a list of pages.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [group]
+  returnType: any
+  signatures: [PAGES | collections.Group KEY]
+relatedFunctions:
+  - collections.Dictionary
+  - collections.Group
+  - collections.Index
+  - collections.IsSet
+  - collections.Where
+aliases: [/functions/group]
+---
+
+{{< code file="layouts/partials/groups.html" >}}
+{{ $new := .Site.RegularPages | first 10 | group "New" }}
+{{ $old := .Site.RegularPages | last 10 | group "Old" }}
+{{ $groups := slice $new $old }}
+{{ range $groups }}
+  <h3>{{ .Key }}{{/* Prints "New", "Old" */}}</h3>
+  <ul>
+    {{ range .Pages }}
+      <li>
+        <a href="{{ .Permalink }}">{{ .Title }}</a>
+        <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
+      </li>
+    {{ end }}
+  </ul>
+{{ end }}
+{{< /code >}}
+
+The page group you get from `group` is of the same type you get from the built-in [group methods](/templates/lists#group-content) in Hugo. The above example can be [paginated](/templates/pagination/#list-paginator-pages).
diff --git a/content/en/functions/collections/In.md b/content/en/functions/collections/In.md
new file mode 100644 (file)
index 0000000..57ffbd6
--- /dev/null
@@ -0,0 +1,38 @@
+---
+title: collections.In
+linkTitle: in
+description: Reports whether an element is in an array or slice, or if a substring is in a string.
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [in]
+  returnType: bool
+  signatures: [collections.In SET ITEM]
+relatedFunctions:
+  - collections.Slice
+aliases: [/functions/in]
+---
+
+
+
+```go-html-template
+{{ $s := slice "a" "b" "c" }}
+{{ in $s "b" }} → true
+```
+
+```go-html-template
+{{ $s := slice 1 2 3 }}
+{{ in $s 2 }} → true
+```
+
+```go-html-template
+{{ $s := slice 1.11 2.22 3.33 }}
+{{ in $s 2.22 }} → true
+```
+
+```go-html-template
+{{ $s := "abc" }}
+{{ in $s "b" }} → true
+```
diff --git a/content/en/functions/collections/IndexFunction.md b/content/en/functions/collections/IndexFunction.md
new file mode 100644 (file)
index 0000000..cd063f3
--- /dev/null
@@ -0,0 +1,104 @@
+---
+title: collections.Index
+linkTitle: index
+description: Looks up the index(es) or key(s) of the data structure passed into it.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [index]
+  returnType: any
+  signatures:
+    - collections.Index COLLECTION INDEXES
+    - collections.Index COLLECTION KEYS
+relatedFunctions:
+  - collections.Dictionary
+  - collections.EchoParam
+  - collections.Group
+  - collections.Index
+  - collections.IsSet
+  - collections.Where
+aliases: [/functions/index,/functions/index-function]
+---
+
+The `index` functions returns the result of indexing its first argument by the following arguments. Each indexed item must be a map or a slice, e.g.:
+
+```go-text-template
+{{ $slice := slice "a" "b" "c" }}
+{{ index $slice 1 }} => b
+{{ $map := dict "a" 100 "b" 200 }}
+{{ index $map "b" }} => 200
+```
+
+The function takes multiple indices as arguments, and this can be used to get nested values, e.g.:
+
+```go-text-template
+{{ $map := dict "a" 100 "b" 200 "c" (slice 10 20 30) }}
+{{ index $map "c" 1 }} => 20
+{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
+{{ index $map "c" "e" }} => 20
+```
+
+You may write multiple indices as a slice:
+
+```go-text-template
+{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
+{{ $slice := slice "c" "e" }}
+{{ index $map $slice }} => 20
+```
+
+## Example: load data from a path based on front matter parameters
+
+Assume you want to add a `location = ""` field to your front matter for every article written in `content/vacations/`. You want to use this field to populate information about the location at the bottom of the article in your `single.html` template. You also have a directory in `data/locations/` that looks like the following:
+
+```
+.
+└── data
+    └── locations
+        ├── abilene.toml
+        ├── chicago.toml
+        ├── oslo.toml
+        └── provo.toml
+```
+
+Here is an example:
+
+{{< code-toggle file="data/locations/oslo" copy=false >}}
+website = "https://www.oslo.kommune.no"
+pop_city = 658390
+pop_metro = 1717900
+{{< /code-toggle >}}
+
+The example we will use will be an article on Oslo, whose front matter should be set to exactly the same name as the corresponding file name in `data/locations/`:
+
+{{< code-toggle file="content/articles/oslo.md" fm=true copy=false >}}
+title = "My Norwegian Vacation"
+location = "oslo"
+{{< /code-toggle >}}
+
+The content of `oslo.toml` can be accessed from your template using the following node path: `.Site.Data.locations.oslo`. However, the specific file you need is going to change according to the front matter.
+
+This is where the `index` function is needed. `index` takes 2 arguments in this use case:
+
+1. The node path
+2. A string corresponding to the desired data; e.g.&mdash;
+
+```go-html-template
+{{ index .Site.Data.locations "oslo" }}
+```
+
+The variable for `.Params.location` is a string and can therefore replace `oslo` in the example above:
+
+```go-html-template
+{{ index .Site.Data.locations .Params.location }}
+=> map[website:https://www.oslo.kommune.no pop_city:658390 pop_metro:1717900]
+```
+
+Now the call will return the specific file according to the location specified in the content's front matter, but you will likely want to write specific properties to the template. You can do this by continuing down the node path via dot notation (`.`):
+
+```go-html-template
+{{ (index .Site.Data.locations .Params.location).pop_city }}
+=> 658390
+```
diff --git a/content/en/functions/collections/Intersect.md b/content/en/functions/collections/Intersect.md
new file mode 100644 (file)
index 0000000..6a2c131
--- /dev/null
@@ -0,0 +1,37 @@
+---
+title: collections.Intersect
+linkTitle: intersect
+description: Returns the common elements of two arrays or slices, in the same order as the first array.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [intersect]
+  returnType: any
+  signatures: [collections.Intersect SET1 SET2]
+relatedFunctions:
+  - collections.Complement
+  - collections.Intersect
+  - collections.SymDiff
+  - collections.Union
+aliases: [/functions/intersect]
+---
+A useful example is to use it as `AND` filters when combined with where:
+
+## AND filter in where query
+
+```go-html-template
+{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }}
+{{ $pages := $pages | union (where .Site.RegularPages "Params.pinned" true) }}
+{{ $pages := $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }}
+```
+
+The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page parameters.
+
+See [union](/functions/collections/union) for `OR`.
+
+
+[partials]: /templates/partials/
+[single]: /templates/single-page-templates/
diff --git a/content/en/functions/collections/IsSet.md b/content/en/functions/collections/IsSet.md
new file mode 100644 (file)
index 0000000..93fb9f8
--- /dev/null
@@ -0,0 +1,52 @@
+---
+title: collections.IsSet
+linkTitle: isset
+description: Reports whether the key exists within the collection.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [isset]
+  returnType: bool
+  signatures: [collections.IsSet COLLECTION KEY]
+relatedFunctions:
+  - collections.Dictionary
+  - collections.Group
+  - collections.Index
+  - collections.IsSet
+  - collections.Where
+aliases: [/functions/isset]
+---
+
+For example, consider this site configuration:
+
+{{< code-toggle file=hugo copy=false >}}
+[params]
+showHeroImage = false
+{{< /code-toggle >}}
+
+It the value of `showHeroImage` is `true`, we can detect that it exists using either `if` or `with`:
+
+```go-html-template
+{{ if site.Params.showHeroImage }}
+  {{ site.Params.showHeroImage }} → true
+{{ end }}
+
+{{ with site.Params.showHeroImage }}
+  {{ . }} → true
+{{ end }}
+```
+
+But if the value of `showHeroImage` is `false`, we can't use either `if` or `with` to detect its existence. In this case, you must use the `isset` function:
+
+```go-html-template
+{{ if isset site.Params "showheroimage" }}
+  <p>The showHeroImage parameter is set to {{ site.Params.showHeroImage }}.<p>
+{{ end }}
+```
+
+{{% note %}}
+When using the `isset` function you must reference the key using lower case. See the previous example.
+{{% /note %}}
diff --git a/content/en/functions/collections/KeyVals.md b/content/en/functions/collections/KeyVals.md
new file mode 100644 (file)
index 0000000..f3e0c55
--- /dev/null
@@ -0,0 +1,45 @@
+---
+title: collections.KeyVals
+linkTitle: keyVals
+description: Returns a KeyVals struct.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [keyVals]
+  returnType: KeyValues
+  signatures: [collections.KeyVals KEY VALUES...]
+relatedFunctions: []
+aliases: [/functions/keyvals]
+---
+
+The primary application for this function is the definition of the `namedSlices` parameter in the options map passed to the `.Related` method on the `Page` object.
+
+See [related content](/content-management/related).
+
+```go-html-template
+{{ $kv := keyVals "foo" "a" "b" "c" }}
+```
+
+The resulting data structure is:
+
+```json
+{
+  "Key": "foo",
+  "Values": [
+    "a",
+    "b",
+    "c"
+  ]
+}
+```
+
+To extract the key and values:
+
+```go-html-template
+
+{{ $kv.Key }} → foo
+{{ $kv.Values }} → [a b c]
+```
diff --git a/content/en/functions/collections/Last.md b/content/en/functions/collections/Last.md
new file mode 100644 (file)
index 0000000..3f84963
--- /dev/null
@@ -0,0 +1,25 @@
+---
+title: collections.Last
+linkTitle: last
+description: Slices an array to the last N elements.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [last]
+  returnType: any
+  signatures: [collections.Last INDEX COLLECTION]
+relatedFunctions:
+  - collections.After
+  - collections.First
+  - collections.Last
+aliases: [/functions/last]
+---
+
+```go-html-template
+{{ range last 10 .Pages }}
+  {{ .Render "summary" }}
+{{ end }}
+```
diff --git a/content/en/functions/collections/Merge.md b/content/en/functions/collections/Merge.md
new file mode 100644 (file)
index 0000000..908f173
--- /dev/null
@@ -0,0 +1,74 @@
+---
+title: collections.Merge
+linkTitle: merge
+description: Returns the result of merging two or more maps.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [merge]
+  returnType: any
+  signatures: [collections.Merge MAP MAP...]
+relatedFunctions:
+  - collections.Append
+  - collections.Merge
+aliases: [/functions/merge]
+---
+
+Returns the result of merging two or more maps from left to right. If a key already exists, `merge` updates its value. If a key is absent, `merge` inserts the value under the new key.
+
+Key handling is case-insensitive.
+
+The following examples use these map definitions:
+
+```go-html-template
+{{ $m1 := dict "x" "foo" }}
+{{ $m2 := dict "x" "bar" "y" "wibble" }}
+{{ $m3 := dict "x" "baz" "y" "wobble" "z" (dict "a" "huey") }}
+```
+
+Example 1
+
+```go-html-template
+{{ $merged := merge $m1 $m2 $m3 }}
+
+{{ $merged.x }}   → baz
+{{ $merged.y }}   → wobble
+{{ $merged.z.a }} → huey
+```
+
+Example 2
+
+```go-html-template
+{{ $merged := merge $m3 $m2 $m1 }}
+
+{{ $merged.x }}   → foo
+{{ $merged.y }}   → wibble
+{{ $merged.z.a }} → huey
+```
+
+Example 3
+
+```go-html-template
+{{ $merged := merge $m2 $m3 $m1 }}
+
+{{ $merged.x }}   → foo
+{{ $merged.y }}   → wobble
+{{ $merged.z.a }} → huey
+```
+
+Example 4
+
+```go-html-template
+{{ $merged := merge $m1 $m3 $m2 }}
+
+{{ $merged.x }}   → bar
+{{ $merged.y }}   → wibble
+{{ $merged.z.a }} → huey
+```
+
+{{% note %}}
+Regardless of depth, merging only applies to maps. For slices, use [append](/functions/collections/append).
+{{% /note %}}
diff --git a/content/en/functions/collections/NewScratch.md b/content/en/functions/collections/NewScratch.md
new file mode 100644 (file)
index 0000000..0df90bb
--- /dev/null
@@ -0,0 +1,22 @@
+---
+title: collections.NewScratch
+linkTitle: newScratch
+description: Creates a new Scratch which can be used to store values in a thread safe way.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [newScratch]
+  returnType: Scratch
+  signatures: [collections.NewScratch ]
+relatedFunctions: []
+---
+
+```go-html-template
+{{ $scratch := newScratch }}
+{{ $scratch.Add "b" 2 }}
+{{ $scratch.Add "b" 2 }}
+{{ $scratch.Get "b" }} → 4
+```
diff --git a/content/en/functions/collections/Querify.md b/content/en/functions/collections/Querify.md
new file mode 100644 (file)
index 0000000..c94d511
--- /dev/null
@@ -0,0 +1,37 @@
+---
+title: collections.Querify
+linkTitle: querify
+description: Takes a set or slice of key-value pairs and returns a query string to be appended to URLs.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [querify]
+  returnType: string
+  signatures:
+    - collections.Querify KEY VALUE [KEY VALUE]...
+    - collections.Querify COLLECTION
+relatedFunctions:
+  - collections.Querify
+  - urlquery
+aliases: [/functions/querify]
+---
+
+`querify` takes a set or slice of key-value pairs and returns a [query string](https://en.wikipedia.org/wiki/Query_string) that can be appended to a URL.
+
+The following examples create a link to a search results page on Google.
+
+```go-html-template
+<a href="https://www.google.com?{{ (querify "q" "test" "page" 3) | safeURL }}">Search</a>
+
+{{ $qs := slice "q" "test" "page" 3 }}
+<a href="https://www.google.com?{{ (querify $qs) | safeURL }}">Search</a>
+```
+
+Both of these examples render the following HTML:
+
+```html
+<a href="https://www.google.com?page=3&q=test">Search</a>
+```
diff --git a/content/en/functions/collections/Reverse.md b/content/en/functions/collections/Reverse.md
new file mode 100644 (file)
index 0000000..521adc6
--- /dev/null
@@ -0,0 +1,26 @@
+---
+title: collections.Reverse
+description: Reverses the order of a collection.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: any
+  signatures: [collections.Reverse COLLECTION]
+relatedFunctions:
+  - collections.Apply
+  - collections.Delimit
+  - collections.In
+  - collections.Reverse
+  - collections.Seq
+  - collections.Slice
+aliases: [/functions/collections.reverse]
+---
+
+
+```go-html-template
+{{ slice 2 1 3 | collections.Reverse }} → [3 1 2]
+```
diff --git a/content/en/functions/collections/Seq.md b/content/en/functions/collections/Seq.md
new file mode 100644 (file)
index 0000000..65ff143
--- /dev/null
@@ -0,0 +1,42 @@
+---
+title: collections.Seq
+linkTitle: seq
+description: Returns a slice of integers.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [seq]
+  returnType: '[]int'
+  signatures:
+    - collections.Seq LAST
+    - collections.Seq FIRST LAST
+    - collections.Seq FIRST INCREMENT LAST
+relatedFunctions:
+  - collections.Apply
+  - collections.Delimit
+  - collections.In
+  - collections.Reverse
+  - collections.Seq
+  - collections.Slice
+aliases: [/functions/seq]
+---
+
+```go-html-template
+{{ seq 2 }} → [1 2]
+{{ seq 0 2 }} → [0 1 2]
+{{ seq -2 2 }} → [-2 -1 0 1 2]
+{{ seq -2 2 2 }} → [-2 0 2]
+```
+
+Iterate over a sequence of integers:
+
+```go-html-template
+{{ $product := 1 }}
+{{ range seq 4 }}
+  {{ $product = mul $product . }}
+{{ end }}
+{{ $product }} → 24
+```
diff --git a/content/en/functions/collections/Shuffle.md b/content/en/functions/collections/Shuffle.md
new file mode 100644 (file)
index 0000000..8388d53
--- /dev/null
@@ -0,0 +1,28 @@
+---
+title: collections.Shuffle
+linkTitle: shuffle
+description: Returns a random permutation of a given array or slice.
+keywords: [ordering]
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [shuffle]
+  returnType: any
+  signatures: [collections.Shuffle COLLECTION]
+relatedFunctions:
+  - collections.Reverse
+  - collections.Shuffle
+  - collections.Sort
+  - collections.Uniq
+aliases: [/functions/shuffle]
+---
+
+```go-html-template
+{{ shuffle (seq 1 2 3) }} → [3 1 2] 
+{{ shuffle (slice "a" "b" "c") }} → [b a c] 
+```
+
+The result will vary from one build to the next.
diff --git a/content/en/functions/collections/Slice.md b/content/en/functions/collections/Slice.md
new file mode 100644 (file)
index 0000000..a30800e
--- /dev/null
@@ -0,0 +1,30 @@
+---
+title: collections.Slice
+linkTitle: slice
+description: Creates a slice (array) of all passed arguments.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [slice]
+  returnType: any
+  signatures: [collections.Slice ITEM...]
+relatedFunctions:
+  - collections.Append
+  - collections.Apply
+  - collections.Delimit
+  - collections.In
+  - collections.Reverse
+  - collections.Seq
+  - collections.Slice
+aliases: [/functions/slice]
+---
+
+One use case is the concatenation of elements in combination with the [`delimit` function]:
+
+```go-html-template
+{{ $s := slice "a" "b" "c" }}
+{{ $s }} → [a b c]
+```
diff --git a/content/en/functions/collections/Sort.md b/content/en/functions/collections/Sort.md
new file mode 100644 (file)
index 0000000..bb0f82c
--- /dev/null
@@ -0,0 +1,135 @@
+---
+title: collections.Sort
+linkTitle: sort
+description: Sorts slices, maps, and page collections.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [sort]
+  returnType: any
+  signatures: ['collections.Sort COLLECTION [KEY] [ORDER]']
+relatedFunctions:
+  - collections.Reverse
+  - collections.Shuffle
+  - collections.Sort
+  - collections.Uniq
+aliases: [/functions/sort]
+---
+
+The `KEY` is optional when sorting slices in ascending order, otherwise it is required. When sorting slices, use the literal `value` in place of the `KEY`. See examples below.
+
+The `ORDER` may be either `asc` (ascending) or `desc` (descending). The default sort order is ascending.
+
+## Sort a slice
+
+The examples below assume this site configuration:
+
+{{< code-toggle file="hugo" copy=false >}}
+[params]
+grades = ['b','a','c']
+{{< /code-toggle >}}
+
+### Ascending order {#slice-ascending-order}
+
+Sort slice elements in ascending order using either of these constructs:
+
+{{< code file="layouts/_default/single.html" copy=false >}}
+{{ sort site.Params.grades }} → [a b c]
+{{ sort site.Params.grades "value" "asc" }} → [a b c]
+{{< /code >}}
+
+In the examples above, `value` is the `KEY` representing the value of the slice element.
+
+### Descending order {#slice-descending-order}
+
+Sort slice elements in descending order:
+
+{{< code file="layouts/_default/single.html" copy=false >}}
+{{ sort site.Params.grades "value" "desc" }} → [c b a]
+{{< /code >}}
+
+In the example above, `value` is the `KEY` representing the value of the slice element.
+
+## Sort a map
+
+The examples below assume this site configuration:
+
+{{< code-toggle file="hugo" copy=false >}}
+[params.authors.a]
+firstName = "Marius"
+lastName  = "Pontmercy"
+[params.authors.b]
+firstName = "Victor"
+lastName  = "Hugo"
+[params.authors.c]
+firstName = "Jean"
+lastName  = "Valjean"
+{{< /code-toggle >}}
+
+{{% note %}}
+When sorting maps, the `KEY` argument must be lowercase.
+{{% /note %}}
+
+### Ascending order {#map-ascending-order}
+
+Sort map objects in ascending order using either of these constructs:
+
+{{< code file="layouts/_default/single.html" copy=false >}}
+{{ range sort site.Params.authors "firstname" }}
+  {{ .firstName }}
+{{ end }}
+
+{{ range sort site.Params.authors "firstname" "asc" }}
+  {{ .firstName }}
+{{ end }}
+{{< /code >}}
+
+These produce:
+
+```text
+Jean Marius Victor
+```
+
+### Descending order {#map-descending-order}
+
+Sort map objects in descending order:
+
+{{< code file="layouts/_default/single.html" copy=false >}}
+{{ range sort site.Params.authors "firstname" "desc" }}
+  {{ .firstName }}
+{{ end }}
+{{< /code >}}
+
+This produces:
+
+```text
+Victor Marius Jean
+```
+
+## Sort a page collection
+
+Although you can use the `sort` function to sort a page collection, Hugo provides [built-in methods for sorting page collections] by:
+
+- weight
+- linktitle
+- title
+- front matter parameter
+- date
+- expiration date
+- last modified date
+- publish date
+- length
+
+In this contrived example, sort the site's regular pages by `.Type` in descending order:
+
+{{< code file="layouts/_default/home.html" copy=false >}}
+{{ range sort site.RegularPages "Type" "desc" }}
+  <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
+{{ end }}
+{{< /code >}}
+
+
+[built-in methods for sorting page collections]: /templates/lists/#order-content
diff --git a/content/en/functions/collections/SymDiff.md b/content/en/functions/collections/SymDiff.md
new file mode 100644 (file)
index 0000000..ea9f201
--- /dev/null
@@ -0,0 +1,28 @@
+---
+title: collections.SymDiff
+linkTitle: symdiff
+description: Returns the symmetric difference of two collections.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [symdiff]
+  returnType: any
+  signatures: [COLLECTION | collections.SymDiff COLLECTION]
+relatedFunctions:
+  - collections.Complement
+  - collections.Intersect
+  - collections.SymDiff
+  - collections.Union
+aliases: [/functions/symdiff]
+---
+
+Example:
+
+```go-html-template
+{{ slice 1 2 3 | symdiff (slice 3 4) }} → [1 2 4]
+```
+
+Also see https://en.wikipedia.org/wiki/Symmetric_difference
diff --git a/content/en/functions/collections/Union.md b/content/en/functions/collections/Union.md
new file mode 100644 (file)
index 0000000..119da6f
--- /dev/null
@@ -0,0 +1,50 @@
+---
+title: collections.Union
+linkTitle: union
+description: Given two arrays or slices, returns a new array that contains the elements or objects that belong to either or both arrays/slices.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [union]
+  returnType: any
+  signatures: [collections.Union SET1 SET2]
+relatedFunctions:
+  - collections.Complement
+  - collections.Intersect
+  - collections.SymDiff
+  - collections.Union
+aliases: [/functions/union] 
+---
+
+Given two arrays (or slices) A and B, this function will return a new array that contains the elements or objects that belong to either A or to B or to both. The elements supported are strings, integers, and floats (only float64).
+
+```go-html-template
+{{ union (slice 1 2 3) (slice 3 4 5) }}
+<!-- returns [1 2 3 4 5] -->
+
+{{ union (slice 1 2 3) nil }}
+<!-- returns [1 2 3] -->
+
+{{ union nil (slice 1 2 3) }}
+<!-- returns [1 2 3] -->
+
+{{ union nil nil }}
+<!-- returns an error because both arrays/slices have to be of the same type -->
+```
+
+## OR filter in where query
+
+This is also very useful to use as `OR` filters when combined with where:
+
+```go-html-template
+{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }}
+{{ $pages = $pages | union (where .Site.RegularPages "Params.pinned" true) }}
+{{ $pages = $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }}
+```
+
+The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page parameters.
+
+See [intersect](/functions/collections/intersect) for `AND`.
diff --git a/content/en/functions/collections/Uniq.md b/content/en/functions/collections/Uniq.md
new file mode 100644 (file)
index 0000000..1b0a8f8
--- /dev/null
@@ -0,0 +1,25 @@
+---
+title: collections.Uniq
+linkTitle: uniq
+description: Takes in a slice or array and returns a slice with duplicate elements removed.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [uniq]
+  returnType: any
+  signatures: [collections.Uniq COLLECTION]
+relatedFunctions:
+  - collections.Reverse
+  - collections.Shuffle
+  - collections.Sort
+  - collections.Uniq
+aliases: [/functions/uniq]
+---
+
+
+```go-html-template
+{{ slice 1 3 2 1 | uniq }} → [1 3 2]
+```
diff --git a/content/en/functions/collections/Where.md b/content/en/functions/collections/Where.md
new file mode 100644 (file)
index 0000000..df6cec8
--- /dev/null
@@ -0,0 +1,190 @@
+---
+title: collections.Where 
+linkTitle: where
+description: Filters an array to only the elements containing a matching value for a given field.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [where]
+  returnType: any
+  signatures: ['collections.Where COLLECTION KEY [OPERATOR] MATCH']
+relatedFunctions:
+  - collections.Dictionary
+  - collections.Group
+  - collections.Index
+  - collections.IsSet
+  - collections.Where 
+aliases: [/functions/where]
+toc: true
+---
+
+`where` filters an array to only the elements containing a matching
+value for a given field.
+
+It works in a similar manner to the [`where` keyword in
+SQL][wherekeyword].
+
+```go-html-template
+{{ range where .Pages "Section" "foo" }}
+  {{ .Content }}
+{{ end }}
+```
+
+It can be used by dot-chaining the second argument to refer to a nested element of a value.
+
+{{< code-toggle file="content/example.md" fm=true copy=false >}}
+title: Example
+series: golang
+{{< /code-toggle >}}
+
+```go-html-template
+{{ range where .Site.Pages "Params.series" "golang" }}
+   {{ .Content }}
+{{ end }}
+```
+
+It can also be used with the logical operators `!=`, `>=`, `in`, etc. Without an operator, `where` compares a given field with a matching value equivalent to `=`.
+
+```go-html-template
+{{ range where .Pages "Section" "!=" "foo" }}
+   {{ .Content }}
+{{ end }}
+```
+
+The following logical operators are available with `where`:
+
+`=`, `==`, `eq`
+: `true` if a given field value equals a matching value
+
+`!=`, `<>`, `ne`
+: `true` if a given field value doesn't equal a matching value
+
+`>=`, `ge`
+: `true` if a given field value is greater than or equal to a matching value
+
+`>`, `gt`
+: `true` if a given field value is greater than a matching value
+
+`<=`, `le`
+: `true` if a given field value is lesser than or equal to a matching value
+
+`<`, `lt`
+: `true` if a given field value is lesser than a matching value
+
+`in`
+: `true` if a given field value is included in a matching value; a matching value must be an array or a slice
+
+`not in`
+: `true` if a given field value isn't included in a matching value; a matching value must be an array or a slice
+
+`intersect`
+: `true` if a given field value that is a slice/array of strings or integers contains elements in common with the matching value; it follows the same rules as the [`intersect` function][intersect].
+
+`like`
+: `true` if a given field value matches a regular expression. Use the `like` operator to compare `string` values. Returns `false` when comparing other data types to the regular expression.
+
+## Use `where` with boolean values
+When using booleans you should not put quotation marks.
+```go-html-template
+{{ range where .Pages "Draft" true }}
+        <p>{{ .Title }}</p>
+{{ end }}
+```
+
+## Use `where` with `intersect`
+
+```go-html-template
+{{ range where .Site.Pages "Params.tags" "intersect" .Params.tags }}
+  {{ if ne .Permalink $.Permalink }}
+    {{ .Render "summary" }}
+  {{ end }}
+{{ end }}
+```
+
+You can also put the returned value of the `where` clauses into a variable:
+
+{{< code file="where-intersect-variables.html" >}}
+{{ $v1 := where .Site.Pages "Params.a" "v1" }}
+{{ $v2 := where .Site.Pages "Params.b" "v2" }}
+{{ $filtered := $v1 | intersect $v2 }}
+{{ range $filtered }}
+{{ end }}
+{{< /code >}}
+
+## Use `where` with `like`
+
+This example matches pages where the "foo" parameter begins with "ab":
+
+```go-html-template
+{{ range where site.RegularPages "Params.foo" "like" `^ab` }}
+  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+{{ end }}
+```
+
+{{% readfile file="/functions/_common/regular-expressions.md" %}}
+
+## Use `where` with `first`
+
+Using `first` and `where` together can be very
+powerful. Below snippet gets a list of posts only from [**main
+sections**](#mainsections), sorts it using the [default
+ordering](/templates/lists/) for lists (i.e., `weight => date`), and
+then ranges through only the first 5 posts in that list:
+
+{{< code file="first-and-where-together.html" >}}
+{{ range first 5 (where site.RegularPages "Type" "in" site.Params.mainSections) }}
+   {{ .Content }}
+{{ end }}
+{{< /code >}}
+
+## Nest `where` clauses
+
+You can also nest `where` clauses to drill down on lists of content by more than one parameter. The following first grabs all pages in the "blog" section and then ranges through the result of the first `where` clause and finds all pages that are *not* featured:
+
+```go-html-template
+{{ range where (where .Pages "Section" "blog" ) "Params.featured" "!=" true }}
+```
+
+## Unset fields
+
+Filtering only works for set fields. To check whether a field is set or exists, you can use the operand `nil`.
+
+This can be useful to filter a small amount of pages from a large pool. Instead of setting a field on all pages, you can set that field on required pages only.
+
+Only the following operators are available for `nil`
+
+* `=`, `==`, `eq`: True if the given field is not set.
+* `!=`, `<>`, `ne`: True if the given field is set.
+
+```go-html-template
+{{ range where .Pages "Params.specialpost" "!=" nil }}
+   {{ .Content }}
+{{ end }}
+```
+
+## Portable `where` filters -- `site.Params.mainSections` {#mainsections}
+
+**This is especially important for themes.**
+
+To list the most relevant pages on the front page or similar, you
+should use the `site.Params.mainSections` list instead of comparing
+section names to hard-coded values like `"posts"` or `"post"`.
+
+```go-html-template
+{{ $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
+```
+
+If the user has not set this configuration parameter in their site configuration, it will default to the *section with the most pages*.
+
+The user can override the default:
+
+{{< code-toggle file="hugo" >}}
+[params]
+  mainSections = ["blog", "docs"]
+{{< /code-toggle >}}
+
+[intersect]: /functions/collections/intersect
+[wherekeyword]: https://www.techonthenet.com/sql/where.php
diff --git a/content/en/functions/common/index.md b/content/en/functions/common/index.md
deleted file mode 100644 (file)
index cbb7365..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-+++
-headless = true
-+++
diff --git a/content/en/functions/common/regular-expressions.md b/content/en/functions/common/regular-expressions.md
deleted file mode 100644 (file)
index 9da3408..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-When specifying the regular expression, use a raw [string literal] (backticks) instead of an interpreted string literal (double quotes) to simplify the syntax. With an interpreted string literal you must escape backslashes.
-
-Go's regular expression package implements the [RE2 syntax]. The RE2 syntax is a subset of that accepted by [PCRE], roughly speaking, and with various [caveats]. Note that the RE2 `\C` escape sequence is not supported.
-
-[caveats]: https://swtch.com/~rsc/regexp/regexp3.html#caveats
-[PCRE]: https://www.pcre.org/
-[RE2 syntax]: https://github.com/google/re2/wiki/Syntax/
-[string literal]: https://go.dev/ref/spec#String_literals
diff --git a/content/en/functions/compare/Cond.md b/content/en/functions/compare/Cond.md
new file mode 100644 (file)
index 0000000..4b92a89
--- /dev/null
@@ -0,0 +1,47 @@
+---
+title: compare.Conditional
+linkTitle: cond
+description: Returns one of two arguments depending on the value of the control argument.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [cond]
+  returnType: any
+  signatures: [compare.Conditional CONTROL ARG1 ARG2]
+relatedFunctions:
+  - compare.Conditional
+  - compare.Default
+aliases: [/functions/cond]
+---
+
+The CONTROL argument is a boolean value that indicates whether the function should return ARG1 or ARG2. If CONTROL is `true`, the function returns ARG1. Otherwise, the function returns ARG2.
+
+```go-html-template
+{{ $qty := 42 }}
+{{ cond (le $qty 3) "few" "many" }} → "many"
+```
+
+The CONTROL argument must be either `true` or `false`. To cast a non-boolean value to boolean, pass it through the `not` operator twice.
+
+```go-html-template
+{{ cond (42 | not | not) "truthy" "falsy" }} → "truthy"
+{{ cond ("" | not | not) "truthy" "falsy" }} → "falsy"
+```
+
+{{% note %}}
+Unlike [ternary operators] in other languages, the `cond` function does not perform [short-circuit evaluation]. The function evaluates both ARG1 and ARG2, regardless of the CONTROL value.
+
+[short-circuit evaluation]: https://en.wikipedia.org/wiki/Short-circuit_evaluation
+[ternary operators]: https://en.wikipedia.org/wiki/Ternary_conditional_operator
+{{% /note %}}
+
+
+Due to the absence of short-circuit evaluation, these examples throw an error:
+
+```go-html-template
+{{ cond true "true" (div 1 0) }}
+{{ cond false (div 1 0) "false" }}
+```
diff --git a/content/en/functions/compare/Default.md b/content/en/functions/compare/Default.md
new file mode 100644 (file)
index 0000000..24ad37e
--- /dev/null
@@ -0,0 +1,88 @@
+---
+title: compare.Default
+linkTitle: default
+description: Allows setting a default value that can be returned if a first value is not set.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [default]
+  returnType: any
+  signatures: [compare.Default DEFAULT INPUT]
+relatedFunctions:
+  - compare.Conditional
+  - compare.Default
+aliases: [/functions/default]
+---
+
+`default` checks whether a given value is set and returns a default value if it is not. *Set* in this context means different things depending on the data type:
+
+* non-zero for numeric types and times
+* non-zero length for strings, arrays, slices, and maps
+* any boolean or struct value
+* non-nil for any other types
+
+`default` function examples reference the following content page:
+
+{{< code file="content/posts/default-function-example.md" >}}
+---
+title: Sane Defaults
+seo_title:
+date: 2017-02-18
+font:
+oldparam: The default function helps make your templating DRYer.
+newparam:
+---
+{{< /code >}}
+
+`default` can be written in more than one way:
+
+```go-html-template
+{{ .Params.font | default "Roboto" }}
+{{ default "Roboto" .Params.font }}
+```
+
+Both of the above `default` function calls return `Roboto`.
+
+A `default` value, however, does not need to be hard coded like the previous example. The `default` value can be a variable or pulled directly from the front matter using dot notation:
+
+```go-html-template
+{{ $old := .Params.oldparam }}
+<p>{{ .Params.newparam | default $old }}</p>
+```
+
+Which would return:
+
+```html
+<p>The default function helps make your templating DRYer.</p>
+```
+
+And then using dot notation
+
+```go-html-template
+<title>{{ .Params.seo_title | default .Title }}</title>
+```
+
+Which would return
+
+```html
+<title>Sane Defaults</title>
+```
+
+The following have equivalent return values but are far less terse. This demonstrates the utility of `default`:
+
+Using `if`:
+
+```go-html-template
+<title>{{ if .Params.seo_title }}{{ .Params.seo_title }}{{ else }}{{ .Title }}{{ end }}</title>
+=> Sane Defaults
+```
+
+Using `with`:
+
+```go-html-template
+<title>{{ with .Params.seo_title }}{{ . }}{{ else }}{{ .Title }}{{ end }}</title>
+=> Sane Defaults
+```
diff --git a/content/en/functions/compare/Eq.md b/content/en/functions/compare/Eq.md
new file mode 100644 (file)
index 0000000..010fc51
--- /dev/null
@@ -0,0 +1,32 @@
+---
+title: compare.Eq
+linkTitle: eq
+description: Returns the boolean truth of arg1 == arg2 || arg1 == arg3.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [eq]
+  returnType: bool
+  signatures: ['compare.Eq ARG1 ARG2 [ARG...]']
+relatedFunctions:
+  - compare.Eq
+  - compare.Ge
+  - compare.Gt
+  - compare.Le
+  - compare.Lt
+  - compare.Ne
+aliases: [/functions/eq]
+---
+
+```go-html-template
+{{ eq 1 1 }} → true
+{{ eq 1 2 }} → false
+
+{{ eq 1 1 1 }} → true
+{{ eq 1 1 2 }} → true
+{{ eq 1 2 1 }} → true
+{{ eq 1 2 2 }} → false
+```
diff --git a/content/en/functions/compare/Ge.md b/content/en/functions/compare/Ge.md
new file mode 100644 (file)
index 0000000..6bb48dd
--- /dev/null
@@ -0,0 +1,37 @@
+---
+title: compare.Ge
+linkTitle: ge
+description: Returns the boolean truth of arg1 >= arg2 && arg1 >= arg3.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [ge]
+  returnType: bool
+  signatures: ['compare.Ge ARG1 ARG2 [ARG...]']
+relatedFunctions:
+  - compare.Eq
+  - compare.Ge
+  - compare.Gt
+  - compare.Le
+  - compare.Lt
+  - compare.Ne
+aliases: [/functions/ge]
+---
+
+```go-html-template
+{{ ge 1 1 }} → true
+{{ ge 1 2 }} → false
+{{ ge 2 1 }} → true
+
+{{ ge 1 1 1 }} → true
+{{ ge 1 1 2 }} → false
+{{ ge 1 2 1 }} → false
+{{ ge 1 2 2 }} → false
+
+{{ ge 2 1 1 }} → true
+{{ ge 2 1 2 }} → true
+{{ ge 2 2 1 }} → true
+```
diff --git a/content/en/functions/compare/Gt.md b/content/en/functions/compare/Gt.md
new file mode 100644 (file)
index 0000000..4691718
--- /dev/null
@@ -0,0 +1,37 @@
+---
+title: compare.Gt
+linkTitle: gt
+description: Returns the boolean truth of arg1 > arg2 && arg1 > arg3.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [gt]
+  returnType: bool
+  signatures: ['compare.Gt ARG1 ARG2 [ARG...]']
+relatedFunctions:
+  - compare.Eq
+  - compare.Ge
+  - compare.Gt
+  - compare.Le
+  - compare.Lt
+  - compare.Ne
+aliases: [/functions/gt]
+---
+
+```go-html-template
+{{ gt 1 1 }} → false
+{{ gt 1 2 }} → false
+{{ gt 2 1 }} → true
+
+{{ gt 1 1 1 }} → false
+{{ gt 1 1 2 }} → false
+{{ gt 1 2 1 }} → false
+{{ gt 1 2 2 }} → false
+
+{{ gt 2 1 1 }} → true
+{{ gt 2 1 2 }} → false
+{{ gt 2 2 1 }} → false
+```
diff --git a/content/en/functions/compare/Le.md b/content/en/functions/compare/Le.md
new file mode 100644 (file)
index 0000000..792ea6c
--- /dev/null
@@ -0,0 +1,37 @@
+---
+title: compare.Le
+linkTitle: le
+description: Returns the boolean truth of arg1 <= arg2 && arg1 <= arg3.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [le]
+  returnType: bool
+  signatures: ['compare.Le ARG1 ARG2 [ARG...]']
+relatedFunctions:
+  - compare.Eq
+  - compare.Ge
+  - compare.Gt
+  - compare.Le
+  - compare.Lt
+  - compare.Ne
+aliases: [/functions/le]
+---
+
+```go-html-template
+{{ le 1 1 }} → true
+{{ le 1 2 }} → true
+{{ le 2 1 }} → false
+
+{{ le 1 1 1 }} → true
+{{ le 1 1 2 }} → true
+{{ le 1 2 1 }} → true
+{{ le 1 2 2 }} → true
+
+{{ le 2 1 1 }} → false
+{{ le 2 1 2 }} → false
+{{ le 2 2 1 }} → false
+```
diff --git a/content/en/functions/compare/Lt.md b/content/en/functions/compare/Lt.md
new file mode 100644 (file)
index 0000000..537c23b
--- /dev/null
@@ -0,0 +1,37 @@
+---
+title: compare.Lt
+linkTitle: lt
+description: Returns the boolean truth of arg1 < arg2 && arg1 < arg3.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [lt]
+  returnType: bool
+  signatures: ['compare.Lt ARG1 ARG2 [ARG...]']
+relatedFunctions:
+  - compare.Eq
+  - compare.Ge
+  - compare.Gt
+  - compare.Le
+  - compare.Lt
+  - compare.Ne
+aliases: [/functions/lt]
+---
+
+```go-html-template
+{{ lt 1 1 }} → false
+{{ lt 1 2 }} → true
+{{ lt 2 1 }} → false
+
+{{ lt 1 1 1 }} → false
+{{ lt 1 1 2 }} → false
+{{ lt 1 2 1 }} → false
+{{ lt 1 2 2 }} → true
+
+{{ lt 2 1 1 }} → false
+{{ lt 2 1 2 }} → false
+{{ lt 2 2 1 }} → false
+```
diff --git a/content/en/functions/compare/Ne.md b/content/en/functions/compare/Ne.md
new file mode 100644 (file)
index 0000000..412f43d
--- /dev/null
@@ -0,0 +1,32 @@
+---
+title: compare.Ne
+linkTitle: ne
+description: Returns the boolean truth of arg1 != arg2 && arg1 != arg3.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [ne]
+  returnType: bool
+  signatures: ['compare.Ne ARG1 ARG2 [ARG...]']
+relatedFunctions:
+  - compare.Eq
+  - compare.Ge
+  - compare.Gt
+  - compare.Le
+  - compare.Lt
+  - compare.Ne
+aliases: [/functions/ne]
+---
+
+```go-html-template
+{{ ne 1 1 }} → false
+{{ ne 1 2 }} → true
+
+{{ ne 1 1 1 }} → false
+{{ ne 1 1 2 }} → false
+{{ ne 1 2 1 }} → false
+{{ ne 1 2 2 }} → true
+```
diff --git a/content/en/functions/complement.md b/content/en/functions/complement.md
deleted file mode 100644 (file)
index e4cf01e..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: complement
-description: Returns the elements of the last collection that are not in any of the others.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections]
-signature:
-- "complement COLLECTION [COLLECTION]..."
-- "collections.Complement COLLECTION [COLLECTION]..."
-relatedfuncs: [intersect,symdiff,union]
----
-
-To find the elements within `$c3` that do not exist in `$c1` or `$c2`:
-
-```go-html-template
-{{ $c1 := slice 3 }}
-{{ $c2 := slice 4 5 }}
-{{ $c3 := slice 1 2 3 4 5 }}
-
-{{ complement $c1 $c2 $c3 }} → [1 2]
-```
-
-{{% note %}}
-Make your code simpler to understand by using a [chained pipeline]:
-
-[chained pipeline]: https://pkg.go.dev/text/template#hdr-Pipelines
-{{% /note %}}
-
-
-```go-html-template
-{{ $c3 | complement $c1 $c2 }} → [1 2]
-```
-
-You can also use the `complement` function with page collections. Let's say your site has five content types:
-
-```text
-content/
-├── blog/
-├── books/
-├── faqs/
-├── films/
-└── songs/
-```
-
-To list everything except blog articles (`blog`) and frequently asked questions (`faqs`):
-
-```go-html-template
-{{ $blog := where site.RegularPages "Type" "blog" }}
-{{ $faqs := where site.RegularPages "Type" "faqs" }}
-{{ range site.RegularPages | complement $blog $faqs }}
-  <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
-{{ end }}
-```
-
-{{% note %}}
-Although the example above demonstrates the `complement` function, you could use the [`where`] function as well:
-
-[`where`]: /functions/where/
-{{% /note %}} 
-
-```go-html-template
-{{ range where site.RegularPages "Type" "not in" (slice "blog" "faqs") }}
-  <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
-{{ end }}
-```
-
-In this example we use the `complement` function to remove [stop words] from a sentence:
-
-```go-html-template
-{{ $text := "The quick brown fox jumps over the lazy dog" }}
-{{ $stopWords := slice "a" "an" "in" "over" "the" "under" }}
-{{ $filtered := split $text " " | complement $stopWords }}
-
-{{ delimit $filtered " " }} → The quick brown fox jumps lazy dog
-```
-
-[stop words]: https://en.wikipedia.org/wiki/Stop_word
diff --git a/content/en/functions/cond.md b/content/en/functions/cond.md
deleted file mode 100644 (file)
index 9bd0a0e..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: cond
-description: Returns one of two arguments depending on the value of the control argument.
-categories: [functions]
-keywords: [conditional, ternary]
-menu:
-  docs:
-    parent: functions
-signature: [cond CONTROL ARG1 ARG2]
-relatedfuncs: [default]
----
-
-The CONTROL argument is a boolean value that indicates whether the function should return ARG1 or ARG2. If CONTROL is `true`, the function returns ARG1. Otherwise, the function returns ARG2.
-
-```go-html-template
-{{ $qty := 42 }}
-{{ cond (le $qty 3) "few" "many" }} → "many"
-```
-
-The CONTROL argument must be either `true` or `false`. To cast a non-boolean value to boolean, pass it through the `not` operator twice.
-
-```go-html-template
-{{ cond (42 | not | not) "truthy" "falsy" }} → "truthy"
-{{ cond ("" | not | not) "truthy" "falsy" }} → "falsy"
-```
-
-{{% note %}}
-Unlike [ternary operators] in other languages, the `cond` function does not perform [short-circuit evaluation]. The function evaluates both ARG1 and ARG2, regardless of the CONTROL value.
-
-[short-circuit evaluation]: https://en.wikipedia.org/wiki/Short-circuit_evaluation
-[ternary operators]: https://en.wikipedia.org/wiki/Ternary_conditional_operator
-{{% /note %}}
-
-
-Due to the absence of short-circuit evaluation, these examples throw an error:
-
-```go-html-template
-{{ cond true "true" (div 1 0) }}
-{{ cond false (div 1 0) "false" }}
-```
diff --git a/content/en/functions/countrunes.md b/content/en/functions/countrunes.md
deleted file mode 100644 (file)
index 0d89af8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: countrunes
-description: Determines the number of runes in a string excluding any whitespace.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [counting, word count]
-signature:
-  - "countrunes INPUT"
-  - "strings.CountRunes INPUT"
-relatedfuncs: []
----
-
-In contrast with `countwords` function, which counts every word in a string, the `countrunes` function determines the number of runes in the content and excludes any whitespace. This has specific utility if you are dealing with CJK-like languages.
-
-```go-html-template
-{{ "Hello, 世界" | countrunes }}
-<!-- outputs a content length of 8 runes. -->
-```
-
-[pagevars]: /variables/page/
diff --git a/content/en/functions/countwords.md b/content/en/functions/countwords.md
deleted file mode 100644 (file)
index 33dcbca..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: countwords
-description: Counts the number of words in a string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [counting, word count]
-signature: ["countwords INPUT"]
-relatedfuncs: [countrunes]
----
-
-The template function works similar to the [.WordCount page variable][pagevars].
-
-```go-html-template
-{{ "Hugo is a static site generator." | countwords }}
-<!-- outputs a content length of 6 words.  -->
-```
-
-
-[pagevars]: /variables/page/
diff --git a/content/en/functions/crypto.FNV32a.md b/content/en/functions/crypto.FNV32a.md
deleted file mode 100644 (file)
index 9bcfff2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: crypto.FNV32a
-description: Returns the FNV (Fowler–Noll–Vo) 32 bit hash of a given string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [crypto hash FNV32 Fowler-Noll-Vo]
-signature: ["crypto.FNV32a STRING"]
----
-
-This function calculates the 32 bit [FNV1a hash](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash) of a given string according to the [specification](https://datatracker.ietf.org/doc/html/draft-eastlake-fnv-12):
-
-    {{ crypto.FNV32a "Hello world" }} → 1498229191
diff --git a/content/en/functions/crypto/FNV32a.md b/content/en/functions/crypto/FNV32a.md
new file mode 100644 (file)
index 0000000..7a7fe30
--- /dev/null
@@ -0,0 +1,26 @@
+---
+title: crypto.FNV32a
+description: Returns the FNV (Fowler–Noll–Vo) 32 bit hash of a given string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: int
+  signatures: [crypto.FNV32a STRING]
+relatedFunctions:
+  - crypto.FNV32a
+  - crypto.HMAC
+  - crypto.MD5
+  - crypto.SHA1
+  - crypto.SHA256
+aliases: [/functions/crypto.fnv32a]
+---
+
+This function calculates the 32 bit [FNV1a hash](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash) of a given string according to the [specification](https://datatracker.ietf.org/doc/html/draft-eastlake-fnv-12):
+
+```go-html-template
+{{ crypto.FNV32a "Hello world" }} → 1498229191
+```
diff --git a/content/en/functions/crypto/HMAC.md b/content/en/functions/crypto/HMAC.md
new file mode 100644 (file)
index 0000000..e58619b
--- /dev/null
@@ -0,0 +1,36 @@
+---
+title: crypto.HMAC
+linkTitle: hmac
+description: Returns a cryptographic hash that uses a key to sign a message.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [hmac]
+  returnType: string
+  signatures: ['crypto.HMAC HASH_TYPE KEY MESSAGE [ENCODING]']
+relatedFunctions:
+  - crypto.FNV32a
+  - crypto.HMAC
+  - crypto.MD5
+  - crypto.SHA1
+  - crypto.SHA256
+aliases: [/functions/hmac]
+---
+
+Set the `HASH_TYPE` argument to `md5`, `sha1`, `sha256`, or `sha512`.
+
+Set the optional `ENCODING` argument to either `hex` (default) or `binary`.
+
+```go-html-template
+{{ hmac "sha256" "Secret key" "Secret message" }}
+5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84
+
+{{ hmac "sha256" "Secret key" "Secret message" "hex" }}
+5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84
+
+{{ hmac "sha256" "Secret key" "Secret message" "binary" | base64Encode }}
+XM60kfRfixVOIPOwow7Tpv8wJ9Nz+Fx4/+iYMYCwPIQ=
+```
diff --git a/content/en/functions/crypto/MD5.md b/content/en/functions/crypto/MD5.md
new file mode 100644 (file)
index 0000000..9415e01
--- /dev/null
@@ -0,0 +1,32 @@
+---
+title: crypto.MD5
+linkTitle: md5
+description: hashes the given input and returns its MD5 checksum.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [md5]
+  returnType: string
+  signatures: [crypto.MD5 INPUT]
+relatedFunctions:
+  - crypto.FNV32a
+  - crypto.HMAC
+  - crypto.MD5
+  - crypto.SHA1
+  - crypto.SHA256
+aliases: [/functions/md5]
+---
+
+```go-html-template
+{{ md5 "Hello world" }} → 3e25960a79dbc69b674cd4ec67a72c62
+
+```
+
+This can be useful if you want to use [Gravatar](https://en.gravatar.com/) for generating a unique avatar:
+
+```html
+<img src="https://www.gravatar.com/avatar/{{ md5 "your@email.com" }}?s=100&d=identicon">
+```
diff --git a/content/en/functions/crypto/SHA1.md b/content/en/functions/crypto/SHA1.md
new file mode 100644 (file)
index 0000000..6269efe
--- /dev/null
@@ -0,0 +1,25 @@
+---
+title: crypto.SHA1
+linkTitle: sha1
+description: Hashes the given input and returns its SHA1 checksum.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [sha1]
+  returnType: string
+  signatures: [crypto.SHA1 INPUT]
+relatedFunctions:
+  - crypto.FNV32a
+  - crypto.HMAC
+  - crypto.MD5
+  - crypto.SHA1
+  - crypto.SHA256
+aliases: [/functions/sha,/functions/sha1]
+---
+
+```go-html-template
+{{ sha1 "Hello world" }} → 7b502c3a1f48c8609ae212cdfb639dee39673f5e
+```
diff --git a/content/en/functions/crypto/SHA256.md b/content/en/functions/crypto/SHA256.md
new file mode 100644 (file)
index 0000000..3019432
--- /dev/null
@@ -0,0 +1,25 @@
+---
+title: crypto.SHA256
+linkTitle: sha256
+description: Hashes the given input and returns its SHA256 checksum.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [sha256]
+  returnType: string
+  signatures: [crypto.SHA256 INPUT]
+relatedFunctions:
+  - crypto.FNV32a
+  - crypto.HMAC
+  - crypto.MD5
+  - crypto.SHA1
+  - crypto.SHA256
+aliases: [/functions/sha256]
+---
+
+```go-html-template
+{{ sha256 "Hello world" }} → 64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c
+```
diff --git a/content/en/functions/data/GetCSV.md b/content/en/functions/data/GetCSV.md
new file mode 100644 (file)
index 0000000..e02c158
--- /dev/null
@@ -0,0 +1,117 @@
+---
+title: data.GetCSV
+linkTitle: getCSV
+description: Returns an array of arrays from a local or remote CSV file, or an error if the file does not exist.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [getCSV]
+  returnType: '[]string'
+  signatures: [data.GetCSV SEPARATOR PATHPART...]
+relatedFunctions:
+  - data.GetCSV
+  - data.GetJSON
+toc: true
+---
+
+Given the following directory structure:
+
+```text
+my-project/
+└── other-files/
+    └── pets.csv
+```
+
+Access the data with either of the following:
+
+```go-html-template
+{{ $data := getCSV "," "other-files/pets.csv" }}
+{{ $data := getCSV "," "other-files/" "pets.csv" }}
+```
+
+Access remote data with either of the following:
+
+```go-html-template
+{{ $data := getCSV "," "https://example.org/pets.csv" }}
+{{ $data := getCSV "," "https://example.org/" "pets.csv" }}
+```
+
+The resulting data structure is an array of arrays:
+
+```json
+[
+  ["name","type","breed","age"],
+  ["Spot","dog","Collie","3"],
+  ["Felix","cat","Malicious","7"]
+]
+```
+
+## Global resource alternative
+
+Consider using `resources.Get` with [`transform.Unmarshal`] when accessing a global resource.
+
+```text
+my-project/
+└── assets/
+    └── data/
+        └── pets.csv
+```
+
+```go-html-template
+{{ $data := "" }}
+{{ $p := "data/pets.csv" }}
+{{ with resources.Get $p }}
+  {{ $opts := dict "delimiter" "," }}
+  {{ $data = . | transform.Unmarshal $opts }}
+{{ else }}
+  {{ errorf "Unable to get resource %q" $p }}
+{{ end }}
+```
+
+## Page resource alternative
+
+Consider using `.Resources.Get` with [`transform.Unmarshal`] when accessing a page resource.
+
+```text
+my-project/
+└── content/
+    └── posts/
+        └── my-pets/
+            ├── index.md
+            └── pets.csv
+```
+
+```go-html-template
+{{ $data := "" }}
+{{ $p := "pets.csv" }}
+{{ with .Resources.Get $p }}
+  {{ $opts := dict "delimiter" "," }}
+  {{ $data = . | transform.Unmarshal $opts }}
+{{ else }}
+  {{ errorf "Unable to get resource %q" $p }}
+{{ end }}
+```
+
+## Remote resource alternative
+
+Consider using `resources.GetRemote` with [`transform.Unmarshal`] for improved error handling when accessing a remote resource.
+
+```go-html-template
+{{ $data := "" }}
+{{ $u := "https://example.org/pets.csv" }}
+{{ with resources.GetRemote $u }}
+  {{ with .Err }}
+    {{ errorf "%s" . }}
+  {{ else }}
+    {{ $opts := dict "delimiter" "," }}
+    {{ $data = . | transform.Unmarshal $opts }}
+  {{ end }}
+{{ else }}
+  {{ errorf "Unable to get remote resource %q" $u }}
+{{ end }}
+```
+
+[`transform.Unmarshal`]: /functions/transform/unmarshal
diff --git a/content/en/functions/data/GetJSON.md b/content/en/functions/data/GetJSON.md
new file mode 100644 (file)
index 0000000..37ee8e9
--- /dev/null
@@ -0,0 +1,124 @@
+---
+title: data.GetJSON
+linkTitle: getJSON
+description: Returns a JSON object from a local or remote JSON file, or an error if the file does not exist.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [getJSON]
+  returnType: any
+  signatures: [data.GetJSON PATHPART...]
+relatedFunctions:
+  - data.GetCSV
+  - data.GetJSON
+toc: true
+---
+
+Given the following directory structure:
+
+```text
+my-project/
+└── other-files/
+    └── books.json
+```
+
+Access the data with either of the following:
+
+```go-html-template
+{{ $data := getCSV "," "other-files/books.json" }}
+{{ $data := getCSV "," "other-files/" "books.json" }}
+```
+
+Access remote data with either of the following:
+
+```go-html-template
+{{ $data := getCSV "," "https://example.org/books.json" }}
+{{ $data := getCSV "," "https://example.org/" "books.json" }}
+```
+
+The resulting data structure is a JSON object:
+
+```json
+[
+  {
+    "author": "Victor Hugo",
+    "rating": 5,
+    "title": "Les Misérables"
+  },
+  {
+    "author": "Victor Hugo",
+    "rating": 4,
+    "title": "The Hunchback of Notre Dame"
+  }
+]
+```
+
+## Global resource alternative
+
+Consider using `resources.Get` with [`transform.Unmarshal`] when accessing a global resource.
+
+```text
+my-project/
+└── assets/
+    └── data/
+        └── books.json
+```
+
+```go-html-template
+{{ $data := "" }}
+{{ $p := "data/books.json" }}
+{{ with resources.Get $p }}
+  {{ $opts := dict "delimiter" "," }}
+  {{ $data = . | transform.Unmarshal $opts }}
+{{ else }}
+  {{ errorf "Unable to get resource %q" $p }}
+{{ end }}
+```
+
+## Page resource alternative
+
+Consider using `.Resources.Get` with [`transform.Unmarshal`] when accessing a page resource.
+
+```text
+my-project/
+└── content/
+    └── posts/
+        └── reading-list/
+            ├── books.json
+            └── index.md
+```
+
+```go-html-template
+{{ $data := "" }}
+{{ $p := "books.json" }}
+{{ with .Resources.Get $p }}
+  {{ $opts := dict "delimiter" "," }}
+  {{ $data = . | transform.Unmarshal $opts }}
+{{ else }}
+  {{ errorf "Unable to get resource %q" $p }}
+{{ end }}
+```
+
+## Remote resource alternative
+
+Consider using `resources.GetRemote` with [`transform.Unmarshal`] for improved error handling when accessing a remote resource.
+
+```go-html-template
+{{ $data := "" }}
+{{ $u := "https://example.org/books.json" }}
+{{ with resources.GetRemote $u }}
+  {{ with .Err }}
+    {{ errorf "%s" . }}
+  {{ else }}
+    {{ $opts := dict "delimiter" "," }}
+    {{ $data = . | transform.Unmarshal $opts }}
+  {{ end }}
+{{ else }}
+  {{ errorf "Unable to get remote resource %q" $u }}
+{{ end }}
+```
+
+[`transform.Unmarshal`]: /functions/transform/unmarshal
diff --git a/content/en/functions/dateformat.md b/content/en/functions/dateformat.md
deleted file mode 100644 (file)
index ddfb612..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: time.Format
-description: Converts a date/time to a localized string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [dates,time,strings]
-signature:
-  - "time.Format LAYOUT INPUT"
-  - "dateFormat LAYOUT INPUT"
-relatedfuncs: [Format,now,Unix,time]
----
-
-`time.Format` (alias `dateFormat`) converts either a `time.Time` object (e.g. `.Date`) or a timestamp string `INPUT` into the format specified by the `LAYOUT` string.
-
-```go-html-template
-{{ time.Format "Monday, Jan 2, 2006" "2015-01-21" }} → "Wednesday, Jan 21, 2015"
-```
-
-`time.Format` returns a localized string for the current language.
-
-The `LAYOUT` string can be either:
-
-* [Go’s Layout String](/functions/format/#gos-layout-string) to learn about how the `LAYOUT` string has to be formatted. There are also some useful examples.
-* A custom Hugo layout identifier (see full list below)
-
-See the [`time` function](/functions/time/) to convert a timestamp string to a Go `time.Time` type value.
-
-
-## Date/time formatting layouts
-
-Go's date layout strings can be hard to reason about, especially with multiple languages. You can alternatively use some predefined layout identifiers that will output localized dates or times:
-
-```go-html-template
-{{ .Date | time.Format ":date_long" }}
-```
-
-The full list of custom layouts with examples for English:
-
-* `:date_full` => `Wednesday, June 6, 2018`
-* `:date_long` => `June 6, 2018`
-* `:date_medium` => `Jun 6, 2018`
-* `:date_short` => `6/6/18`
-
-* `:time_full` => `2:09:37 am UTC`
-* `:time_long` => `2:09:37 am UTC`
-* `:time_medium` => `2:09:37 am`
-* `:time_short` => `2:09 am`
diff --git a/content/en/functions/debug/Dump.md b/content/en/functions/debug/Dump.md
new file mode 100644 (file)
index 0000000..ff505a7
--- /dev/null
@@ -0,0 +1,50 @@
+---
+title: debug.Dump
+description: Returns an object dump as a string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [debug.Dump VALUE]
+relatedFunctions: []
+---
+
+```go-html-template
+{{ $data := "" }}
+{{ $p := "data/books.json" }}
+{{ with resources.Get $p }}
+  {{ $opts := dict "delimiter" "," }}
+  {{ $data = . | transform.Unmarshal $opts }}
+{{ else }}
+  {{ errorf "Unable to get resource %q" $p }}
+{{ end }}
+```
+
+```go-html-template
+<pre>{{ debug.Dump $data }}</pre>
+```
+
+```text
+[]interface {}{
+  map[string]interface {}{
+    "author": "Victor Hugo",
+    "rating": 5.0,
+    "title": "Les Misérables",
+  },
+  map[string]interface {}{
+    "author": "Victor Hugo",
+    "rating": 4.0,
+    "title": "The Hunchback of Notre Dame",
+  },
+}
+```
+
+
+
+{{% note %}}
+Output from this function may change from one release to the next. Use for debugging only.
+{{% /note %}}
diff --git a/content/en/functions/default.md b/content/en/functions/default.md
deleted file mode 100644 (file)
index b0e5173..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: default
-description: Allows setting a default value that can be returned if a first value is not set.
-qref: "Returns a default value if a value is not set when checked."
-keywords: [defaults]
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-toc:
-signature: ["default DEFAULT INPUT"]
-relatedfuncs: []
----
-
-`default` checks whether a given value is set and returns a default value if it is not. *Set* in this context means different things depending on the data type:
-
-* non-zero for numeric types and times
-* non-zero length for strings, arrays, slices, and maps
-* any boolean or struct value
-* non-nil for any other types
-
-`default` function examples reference the following content page:
-
-{{< code file="content/posts/default-function-example.md" >}}
----
-title: Sane Defaults
-seo_title:
-date: 2017-02-18
-font:
-oldparam: The default function helps make your templating DRYer.
-newparam:
----
-{{< /code >}}
-
-`default` can be written in more than one way:
-
-```go-html-template
-{{ .Params.font | default "Roboto" }}
-{{ default "Roboto" .Params.font }}
-```
-
-Both of the above `default` function calls return `Roboto`.
-
-A `default` value, however, does not need to be hard coded like the previous example. The `default` value can be a variable or pulled directly from the front matter using dot notation:
-
-```go-html-template
-{{ $old := .Params.oldparam }}
-<p>{{ .Params.newparam | default $old }}</p>
-```
-
-Which would return:
-
-```html
-<p>The default function helps make your templating DRYer.</p>
-```
-
-And then using dot notation
-
-```go-html-template
-<title>{{ .Params.seo_title | default .Title }}</title>
-```
-
-Which would return
-
-```html
-<title>Sane Defaults</title>
-```
-
-The following have equivalent return values but are far less terse. This demonstrates the utility of `default`:
-
-Using `if`:
-
-```go-html-template
-<title>{{ if .Params.seo_title }}{{ .Params.seo_title }}{{ else }}{{ .Title }}{{ end }}</title>
-=> Sane Defaults
-```
-
-Using `with`:
-
-```go-html-template
-<title>{{ with .Params.seo_title }}{{ . }}{{ else }}{{ .Title }}{{ end }}</title>
-=> Sane Defaults
-```
diff --git a/content/en/functions/delimit.md b/content/en/functions/delimit.md
deleted file mode 100644 (file)
index cc02935..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: delimit
-description: Loops through any array, slice, or map and returns a string of all the values separated by a delimiter.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [iteration]
-signature: ["delimit COLLECTION DELIMITER [LAST]"]
-relatedfuncs: []
----
-
-Delimit a slice:
-
-```go-html-template
-{{ $s := slice "b" "a" "c" }}
-{{ delimit $s ", " }} → "b, a, c"
-{{ delimit $s ", " " and "}} → "b, a and c"
-```
-
-Delimit a map:
-
-{{% note %}}
-The `delimit` function sorts maps by key, returning the values.
-{{% /note %}}
-
-```go-html-template
-{{ $m := dict "b" 2 "a" 1 "c" 3 }}
-{{ delimit $m ", " }} → "1, 2, 3"
-{{ delimit $m ", " " and "}} → "1, 2 and 3"
-```
diff --git a/content/en/functions/dict.md b/content/en/functions/dict.md
deleted file mode 100644 (file)
index 0fc2c53..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: dict
-description: Creates a map from a list of key and value pairs.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections]
-signature: ["dict KEY VALUE [KEY VALUE]..."]
-relatedfuncs: []
----
-
-`dict` is especially useful for passing more than one value to a partial template.
-
-Note that the `key` can be either a `string` or a `string slice`. The latter is useful to create a deeply nested structure, e.g.:
-
-```go-text-template
-{{ $m := dict (slice "a" "b" "c") "value" }}
-```
-
-## Example: using `dict` to pass multiple values to a `partial`
-
-The partial below creates an SVG and expects `fill`, `height` and `width` from the caller:
-
-### Partial definition
-
-{{< code file="layouts/partials/svgs/external-links.svg" >}}
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
-fill="{{ .fill }}" width="{{ .width }}" height="{{ .height }}" viewBox="0 0 32 32" aria-label="External Link">
-<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path>
-</svg>
-{{< /code >}}
-
-### Partial call
-
-The `fill`, `height` and `width` values can be stored in one object with `dict` and passed to the partial:
-
-{{< code file="layouts/_default/list.html" >}}
-{{ partial "svgs/external-links.svg" (dict "fill" "#01589B" "width" 10 "height" 20 ) }}
-{{< /code >}}
-
-[partials]: /templates/partials/
diff --git a/content/en/functions/duration.md b/content/en/functions/duration.md
deleted file mode 100644 (file)
index 4dc365a..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: duration
-description: Returns a `time.Duration` structure, using the given time unit and duration number.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [time duration]
-signature: ["duration TIME_UNIT DURATION_NUMBER"]
----
-
-`time.Duration` converts a given number into a [`time.Duration`](https://pkg.go.dev/time#Duration) structure so you can access its fields. E.g. you can perform [time operations](https://pkg.go.dev/time#Duration) on the returned `time.Duration` value:
-
-    {{ printf "There are %.0f seconds in one day." (duration "hour" 24).Seconds }}
-    <!-- Output: There are 86400 seconds in one day. -->
-
-Make your code simpler to understand by using a [chained pipeline](https://pkg.go.dev/text/template#hdr-Pipelines):
-
-    {{ mul 7.75 60 | duration "minute" }} → 7h45m0s
-    {{ mul 120 60 | mul 1000 | duration "millisecond" }} → 2h0m0s
-
-You have to specify a time unit for the number given to the function. Valid time units are:
-
-Duration|Valid time units
-:--|:--
-hours|`hour`, `h`
-minutes|`minute`, `m`
-seconds|`second`, `s`
-milliseconds|`millisecond`, `ms`
-microseconds|`microsecond`, `us`, `µs`
-nanoseconds|`nanosecond`, `ns`
diff --git a/content/en/functions/echoparam.md b/content/en/functions/echoparam.md
deleted file mode 100644 (file)
index 7b80e14..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: echoParam
-description: Prints a parameter if it is set.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["echoParam MAP KEY"]
-relatedfuncs: []
----
-
-
-```go-html-template
-{{ echoParam .Params "project_url" }}
-```
diff --git a/content/en/functions/emojify.md b/content/en/functions/emojify.md
deleted file mode 100644 (file)
index beded71..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: emojify
-description: Runs a string through the Emoji emoticons processor.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings,emojis]
-signature: ["emojify INPUT"]
-relatedfuncs: []
----
-
-`emojify` runs a passed string through the Emoji emoticons processor.
-
-See the [Emoji cheat sheet][emojis] for available emoticons.
-
-The `emojify` function can be called in your templates but not directly in your content files by default. For emojis in content files, set `enableEmoji` to `true` in your site's [configuration]. Then you can write emoji shorthand directly into your content files; e.g. <code>I :</code><code>heart</code><code>: Hugo!</code>:
-
-I :heart: Hugo!
-
-
-[configuration]: /getting-started/configuration/
-[emojis]: https://www.webfx.com/tools/emoji-cheat-sheet/
-[sc]: /templates/shortcode-templates/
-[scsource]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes
diff --git a/content/en/functions/encoding/Base64Decode.md b/content/en/functions/encoding/Base64Decode.md
new file mode 100644 (file)
index 0000000..8bd554c
--- /dev/null
@@ -0,0 +1,45 @@
+---
+title: encoding.Base64Decode
+linkTitle: base64Decode
+description: Returns the base64 decoding of the given content.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [base64Decode]
+  returnType: string
+  signatures: [encoding.Base64Decode INPUT]
+signatures:
+  - 
+  - base64Decode INPUT
+aliases: [/functions/base64Decode]
+---
+
+```go-html-template
+{{ "SHVnbw==" | base64Decode }} → "Hugo"
+```
+
+Use the `base64Decode` function to decode responses from APIs. For example, the result of this call to GitHub's API contains the base64-encoded representation of the repository's README file:
+
+```text
+https://api.github.com/repos/gohugoio/hugo/readme
+```
+
+To retrieve and render the content:
+
+```go-html-template
+{{ $u := "https://api.github.com/repos/gohugoio/hugo/readme" }}
+{{ with resources.GetRemote $u }}
+  {{ with .Err }}
+    {{ errorf "%s" . }}
+  {{ else }}
+    {{ with . | transform.Unmarshal }}
+      {{ .content | base64Decode | markdownify }}
+    {{ end }}
+  {{ end }}
+{{ else }}
+  {{ errorf "Unable to get remote resource %q" $u }}
+{{ end }}
+```
diff --git a/content/en/functions/encoding/Base64Encode.md b/content/en/functions/encoding/Base64Encode.md
new file mode 100644 (file)
index 0000000..d548aca
--- /dev/null
@@ -0,0 +1,22 @@
+---
+title: encoding.Base64Encode
+linkTitle: base64Encode
+description: Returns the base64 decoding of the given content.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [base64Encode]
+  returnType: string
+  signatures: [encoding.Base64Encode INPUT]
+relatedFunctions:
+  - encoding.Base64Decode
+  - encoding.Base64Encode
+aliases: [/functions/base64, /functions/base64Encode]
+---
+
+```go-html-template
+{{ "Hugo" | base64Encode }} → "SHVnbw=="
+```
diff --git a/content/en/functions/encoding/Jsonify.md b/content/en/functions/encoding/Jsonify.md
new file mode 100644 (file)
index 0000000..0b9cb2e
--- /dev/null
@@ -0,0 +1,48 @@
+---
+title: encoding.Jsonify
+linkTitle: jsonify
+description: Encodes a given object to JSON.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [jsonify]
+  returnType: template.HTML
+  signatures:
+    - encoding.Jsonify INPUT
+    - encoding.Jsonify OPTIONS INPUT
+relatedFunctions:
+  - encoding.Jsonify
+  - transform.Remarshal
+  - transform.Unmarshal
+aliases: [/functions/jsonify]
+---
+
+To customize the printing of the JSON, pass a map of options as the first
+argument.  Supported options are "prefix" and "indent".  Each JSON element in
+the output will begin on a new line beginning with *prefix* followed by one or
+more copies of *indent* according to the indentation nesting.
+
+
+```go-html-template
+{{ dict "title" .Title "content" .Plain | jsonify }}
+{{ dict "title" .Title "content" .Plain | jsonify (dict "indent" "  ") }}
+{{ dict "title" .Title "content" .Plain | jsonify (dict "prefix" " " "indent" "  ") }}
+```
+
+## Options
+
+indent ("")
+: Indentation to use.
+
+prefix ("")
+: Indentation prefix.
+
+noHTMLEscape (false)
+: Disable escaping of problematic HTML characters inside JSON quoted strings. The default behavior is to escape &, <, and > to \u0026, \u003c, and \u003e to avoid certain safety problems that can arise when embedding JSON in HTML.
+
+See also the `.PlainWords`, `.Plain`, and `.RawContent` [page variables][pagevars].
+
+[pagevars]: /variables/page/
diff --git a/content/en/functions/eq.md b/content/en/functions/eq.md
deleted file mode 100644 (file)
index d10539e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: eq
-description: Returns the boolean truth of arg1 == arg2 || arg1 == arg3.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [comparison,operators,logic]
-signature: ["eq ARG1 ARG2 [ARG...]"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ eq 1 1 }} → true
-{{ eq 1 2 }} → false
-
-{{ eq 1 1 1 }} → true
-{{ eq 1 1 2 }} → true
-{{ eq 1 2 1 }} → true
-{{ eq 1 2 2 }} → false
-```
diff --git a/content/en/functions/errorf.md b/content/en/functions/errorf.md
deleted file mode 100644 (file)
index 8caaf05..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: errorf and warnf
-description: Log ERROR or WARNING from the templates.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings, log, error]
-signature: ["errorf FORMAT INPUT"]
-relatedfuncs: [printf]
----
-
-`errorf` or `warnf` will evaluate a format string, then output the result to the ERROR or WARNING log (and only once per error message to avoid flooding the log).
-
-Any ERROR will also cause the build to fail (the `hugo` command will `exit -1`).
-
-Both functions return an empty string, so the messages are only printed to the console.
-
-```go-html-template
-{{ errorf "Failed to handle page %q" .Path }}
-```
-
-```go-html-template
-{{ warnf "You should update the shortcodes in %q" .Path }}
-```
-
-Note that `errorf`, `erroridf`, and `warnf` support all the formatting verbs of the [fmt](https://pkg.go.dev/fmt) package.
-
-## Suppress errors
-
-Sometimes it may make sense to let the user suppress an ERROR and make the build succeed.
-
-You can do this by using the `erroridf` function. This functions takes an error ID as the first argument.
-
-```go-html-template
-{{ erroridf "my-custom-error" "You should consider fixing this." }}
-```  
-
-This will produce:
-
-```
-ERROR 2021/06/07 17:47:38 You should consider fixing this.
-If you feel that this should not be logged as an ERROR, you can ignore it by adding this to your site configuration:
-ignoreErrors = ["my-custom-error"]
-```
diff --git a/content/en/functions/fileExists.md b/content/en/functions/fileExists.md
deleted file mode 100644 (file)
index f7b5c37..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: fileExists
-description: Checks for file or directory existence.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-signature: ["os.FileExists PATH","fileExists PATH"]
-relatedfuncs: ['os.ReadDir','os.ReadFile','os.Stat']
----
-The `os.FileExists` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
-
-With this directory structure:
-
-```text
-content/
-├── about.md
-├── contact.md
-└── news/
-    ├── article-1.md
-    └── article-2.md
-```
-
-The function returns these values:
-
-```go-html-template
-{{ os.FileExists "content" }} → true
-{{ os.FileExists "content/news" }} → true
-{{ os.FileExists "content/news/article-1" }} → false
-{{ os.FileExists "content/news/article-1.md" }} → true
-{{ os.FileExists "news" }} → true
-{{ os.FileExists "news/article-1" }} → false
-{{ os.FileExists "news/article-1.md" }} → true
-```
diff --git a/content/en/functions/findRe.md b/content/en/functions/findRe.md
deleted file mode 100644 (file)
index 104db0f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: findRE
-description: Returns a slice of strings that match the regular expression.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [regex]
-signature:
-  - "findRE PATTERN INPUT [LIMIT]"
-  - "strings.FindRE PATTERN INPUT [LIMIT]"
-relatedfuncs: [findRESubmatch, replaceRE]
----
-By default, `findRE` finds all matches. You can limit the number of matches with an optional LIMIT argument.
-
-{{% readfile file="/functions/common/regular-expressions.md" %}}
-
-This example returns a slice of all second level headings (`h2` elements) within the rendered `.Content`:
-
-```go-html-template
-{{ findRE `(?s)<h2.*?>.*?</h2>` .Content }}
-```
-
-The `s` flag causes `.` to match `\n` as well, allowing us to find an `h2` element that contains newlines.
-
-To limit the number of matches to one:
-
-```go-html-template
-{{ findRE `(?s)<h2.*?>.*?</h2>` .Content 1 }}
-```
-
-{{% note %}}
-You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
-{{% /note %}}
diff --git a/content/en/functions/findresubmatch.md b/content/en/functions/findresubmatch.md
deleted file mode 100644 (file)
index f51ccdb..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: findRESubmatch
-description: Returns a slice of all successive matches of the regular expression. Each element is a slice of strings holding the text of the leftmost match of the regular expression and the matches, if any, of its subexpressions.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [regex]
-signature:
-  - "findRESubmatch PATTERN INPUT [LIMIT]"
-  - "strings.FindRESubmatch PATTERN INPUT [LIMIT]"
-relatedfuncs: [findRE, replaceRE]
----
-
-By default, `findRESubmatch` finds all matches. You can limit the number of matches with an optional LIMIT argument. A return value of nil indicates no match.
-
-{{% readfile file="/functions/common/regular-expressions.md" %}}
-
-## Demonstrative examples
-
-```go-html-template
-{{ findRESubmatch `a(x*)b` "-ab-" }} → [["ab" ""]]
-{{ findRESubmatch `a(x*)b` "-axxb-" }} → [["axxb" "xx"]]
-{{ findRESubmatch `a(x*)b` "-ab-axb-" }} → [["ab" ""] ["axb" "x"]]
-{{ findRESubmatch `a(x*)b` "-axxb-ab-" }} → [["axxb" "xx"] ["ab" ""]]
-{{ findRESubmatch `a(x*)b` "-axxb-ab-" 1 }} → [["axxb" "xx"]]
-```
-
-## Practical example
-
-This markdown:
-
-```text
-- [Example](https://example.org)
-- [Hugo](https://gohugo.io)
-```
-
-Produces this HTML:
-
-```html
-<ul>
-  <li><a href="https://example.org">Example</a></li>
-  <li><a href="https://gohugo.io">Hugo</a></li>
-</ul>
-```
-
-To match the anchor elements, capturing the link destination and text:
-
-```go-html-template
-{{ $regex := `<a\s*href="(.+?)">(.+?)</a>` }}
-{{ $matches := findRESubmatch $regex .Content }}
-```
-
-Viewed as JSON, the data structure of `$matches` in the code above is:
-
-```json
-[
-  [
-    "<a href=\"https://example.org\"></a>Example</a>",
-    "https://example.org",
-    "Example"
-  ],
-  [
-    "<a href=\"https://gohugo.io\">Hugo</a>",
-    "https://gohugo.io",
-    "Hugo"
-  ]
-]
-```
-
-To render the `href` attributes:
-
-```go-html-template
-{{ range $matches }}
-  {{ index . 1 }}
-{{ end }}
-```
-
-Result:
-
-```text
-https://example.org
-https://gohugo.io
-```
-
-{{% note %}}
-You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
-{{% /note %}}
diff --git a/content/en/functions/first.md b/content/en/functions/first.md
deleted file mode 100644 (file)
index 118c9c5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: first
-description: "Slices an array to only the first _N_ elements."
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [iteration]
-signature: ["first LIMIT COLLECTION"]
-relatedfuncs: [after,last]
----
-
-`first` works in a similar manner to the [`limit` keyword in
-SQL][limitkeyword]. It reduces the array to only the `first N`
-elements. It takes the array and number of elements as input.
-
-`first` takes two arguments:
-1. `number of elements`
-2. `array` *or* `slice of maps or structs`
-
-{{< code file="layout/_default/section.html" >}}
-{{ range first 10 .Pages }}
-    {{ .Render "summary" }}
-{{ end }}
-{{< /code >}}
-
-*Note: Exclusive to `first`, LIMIT can be '0' to return an empty array.*
-
-## `first` and `where` Together
-
-Using `first` and [`where`][wherefunction] together can be very
-powerful. Below snippet gets a list of posts only from [**main
-sections**][mainsections], sorts it by the `title` parameter, and then
-ranges through only the first 5 posts in that list:
-
-{{< code file="first-and-where-together.html" >}}
-{{ range first 5 (where site.RegularPages "Type" "in" site.Params.mainSections).ByTitle }}
-   {{ .Content }}
-{{ end }}
-{{< /code >}}
-
-
-[limitkeyword]: https://www.techonthenet.com/sql/select_limit.php
-[wherefunction]: /functions/where/
-[mainsections]: /functions/where/#mainsections
diff --git a/content/en/functions/float.md b/content/en/functions/float.md
deleted file mode 100644 (file)
index e95b3ae..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: float
-description: Casts a value to a decimal (base 10) floating point value.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [cast,strings,floats]
-signature: ["float INPUT"]
-relatedfuncs: []
----
-
-With a decimal (base 10) input:
-
-```go-html-template
-{{ float 11 }} → 11 (float64)
-{{ float "11" }} → 11 (float64)
-
-{{ float 11.1 }} → 11.1 (float64)
-{{ float "11.1" }} → 11.1 (float64)
-
-{{ float 11.9 }} → 11.9 (float64)
-{{ float "11.9" }} → 11.9 (float64)
-```
-
-With a binary (base 2) input:
-
-```go-html-template
-{{ float 0b11 }} → 3 (float64)
-```
-
-With an octal (base 8) input (use either notation):
-
-```go-html-template
-{{ float 011 }} → 9 (float64)
-{{ float "011" }} → 11 (float64)
-
-{{ float 0o11 }} → 9 (float64)
-```
-
-With a hexadecimal (base 16) input:
-
-```go-html-template
-{{ float 0x11 }} → 17 (float64)
-```
diff --git a/content/en/functions/fmt/Errorf.md b/content/en/functions/fmt/Errorf.md
new file mode 100644 (file)
index 0000000..da98450
--- /dev/null
@@ -0,0 +1,33 @@
+---
+title: fmt.Errorf
+linkTitle: errorf
+description: Log an ERROR from a template.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [errorf]
+  returnType: string
+  signatures: ['fmt.Errorf FORMAT [INPUT]']
+relatedFunctions:
+  - fmt.Errorf
+  - fmt.Erroridf
+  - fmt.Warnf
+aliases: [/functions/errorf]
+---
+
+The documentation for [Go's fmt package] describes the structure and content of the format string.
+
+Like the  [`printf`] function, the `errorf` function evaluates the format string. It then prints the result to the ERROR log and fails the build. Hugo prints each unique message once to avoid flooding the log with duplicate errors.
+
+```go-html-template
+{{ errorf "The %q shortcode requires a src parameter. See %s" .Name .Position }}
+```
+
+Use the [`erroridf`] function to allow optional suppression of specific errors.
+
+[`erroridf`]: /functions/fmt/erroridf
+[`printf`]: /functions/fmt/printf
+[Go's fmt package]: https://pkg.go.dev/fmt
diff --git a/content/en/functions/fmt/Erroridf.md b/content/en/functions/fmt/Erroridf.md
new file mode 100644 (file)
index 0000000..9868104
--- /dev/null
@@ -0,0 +1,48 @@
+---
+title: fmt.Erroridf
+linkTitle: erroridf
+description: Log a suppressable ERROR from a template.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [erroridf]
+  returnType: string
+  signatures: ['fmt.Erroridf ID FORMAT [INPUT]']
+relatedFunctions:
+  - fmt.Errorf
+  - fmt.Erroridf
+  - fmt.Warnf
+aliases: [/functions/erroridf]
+---
+
+The documentation for [Go's fmt package] describes the structure and content of the format string.
+
+Like the  [`errorf`] function, the `erroridf` function evaluates the format string, prints the result to the ERROR log, then fails the build. Hugo prints each unique message once to avoid flooding the log with duplicate errors.
+
+Unlike the `errorf` function, you may suppress errors logged by the `erroridf` function by adding the message ID to the `ignoreErrors` array in your site configuration.
+
+This template code:
+
+```go-html-template
+{{ erroridf "error-42" "You should consider fixing this." }}
+```
+
+Produces this console log:
+
+```text
+ERROR You should consider fixing this.
+If you feel that this should not be logged as an ERROR, you can ignore it by adding this to your site config:
+ignoreErrors = ["error-42"]
+```
+
+To suppress this message:
+
+{{< code-toggle file=hugo copy=false >}}
+ignoreErrors = ["error-42"]
+{{< /code-toggle >}}
+
+[`errorf`]: /functions/fmt/errorf
+[Go's fmt package]: https://pkg.go.dev/fmt
diff --git a/content/en/functions/fmt/Print.md b/content/en/functions/fmt/Print.md
new file mode 100644 (file)
index 0000000..f9ff885
--- /dev/null
@@ -0,0 +1,25 @@
+---
+title: fmt.Print
+linkTitle: print
+description: Prints the default representation of the given arguments using the standard `fmt.Print` function.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [print]
+  returnType: string
+  signatures: [fmt.Print INPUT]
+relatedFunctions:
+  - fmt.Print
+  - fmt.Printf
+  - fmt.Println
+aliases: [/functions/print]
+---
+
+```go-html-template
+{{ print "foo" }} → "foo"
+{{ print "foo" "bar" }} → "foobar"
+{{ print (slice 1 2 3) }} → [1 2 3]
+```
diff --git a/content/en/functions/fmt/Printf.md b/content/en/functions/fmt/Printf.md
new file mode 100644 (file)
index 0000000..06b7222
--- /dev/null
@@ -0,0 +1,46 @@
+---
+title: fmt.Printf
+linkTitle: printf
+description: Formats a string using the standard `fmt.Sprintf` function.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [printf]
+  returnType: string
+  signatures: ['fmt.Printf FORMAT [INPUT]']
+relatedFunctions:
+  - fmt.Print
+  - fmt.Printf
+  - fmt.Println
+aliases: [/functions/printf]
+---
+
+The documentation for [Go's fmt package] describes the structure and content of the format string.
+
+[Go's fmt package]: https://pkg.go.dev/fmt
+
+```go-html-template
+{{ $var := "world" }}
+{{ printf "Hello %s." $var }} → Hello world.
+```
+
+```go-html-template
+{{ $pi := 3.14159265 }}
+{{ printf "Pi is approximately %.2f." $pi }} → 3.14
+```
+
+Use the `printf` function with the `safeHTMLAttr` function:
+
+```go-html-template
+{{ $desc := "Eat at Joe's" }}
+<meta name="description" {{ printf "content=%q" $desc | safeHTMLAttr }}>
+```
+
+Hugo renders this to:
+
+```html
+<meta name="description" content="Eat at Joe's">
+```
diff --git a/content/en/functions/fmt/Println.md b/content/en/functions/fmt/Println.md
new file mode 100644 (file)
index 0000000..358b5f8
--- /dev/null
@@ -0,0 +1,23 @@
+---
+title: fmt.Println
+linkTitle: println
+description: Prints the default representation of the given argument using the standard `fmt.Print` function and enforces a linebreak.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [println]
+  returnType: string
+  signatures: [fmt.Println INPUT]
+relatedFunctions:
+  - fmt.Print
+  - fmt.Printf
+  - fmt.Println
+aliases: [/functions/println]
+---
+
+```go-html-template
+{{ println "foo" }} → "foo\n"
+```
diff --git a/content/en/functions/fmt/Warnf.md b/content/en/functions/fmt/Warnf.md
new file mode 100644 (file)
index 0000000..be579a2
--- /dev/null
@@ -0,0 +1,30 @@
+---
+title: fmt.Warnf
+linkTitle: warnf
+description: Log a WARNING from a template.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [warnf]
+  returnType: string
+  signatures: ['fmt.Warnf FORMAT [INPUT]']
+relatedFunctions:
+  - fmt.Errorf
+  - fmt.Erroridf
+  - fmt.Warnf
+aliases: [/functions/warnf]
+---
+
+The documentation for [Go's fmt package] describes the structure and content of the format string.
+
+Like the  [`printf`] function, the `warnf` function evaluates the format string. It then prints the result to the WARNING log. Hugo prints each unique message once to avoid flooding the log with duplicate warnings.
+
+```go-html-template
+{{ warnf "Copyright notice missing from site configuration" }}
+```
+
+[`printf`]: /functions/fmt/printf
+[Go's fmt package]: https://pkg.go.dev/fmt
diff --git a/content/en/functions/format.md b/content/en/functions/format.md
deleted file mode 100644 (file)
index d30f0bd..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
----
-title: .Format
-description: Formats built-in Hugo dates---`.Date`, `.PublishDate`, and `.Lastmod`---according to Go's layout string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [dates,time]
-signature: [".Format FORMAT"]
-relatedfuncs: [dateFormat,now,Unix,time]
-toc: true
----
-
-`.Format` will format date values defined in your front matter and can be used as a property on the following [page variables][pagevars]:
-
-* `.PublishDate`
-* `.Date`
-* `.Lastmod`
-
-Assuming a key-value of `date: 2017-03-03` in a content file's front matter, your can run the date through `.Format` followed by a layout string for your desired output at build time:
-
-```go-html-template
-{{ .PublishDate.Format "January 2, 2006" }} => March 3, 2017
-```
-
-For formatting *any* string representations of dates defined in your front matter, see the [`dateFormat` function][dateFormat], which will still leverage the Go layout string explained below but uses a slightly different syntax.
-
-## Go's layout string
-
-Hugo templates [format your dates][time] via layout strings that point to a specific reference time:
-
-```
-Mon Jan 2 15:04:05 MST 2006
-```
-
-While this may seem arbitrary, the numerical value of `MST` is `07`, thus making the layout string a sequence of numbers.
-
-Here is a visual explanation [taken directly from the Go docs][gdex]:
-
-```
- Jan 2 15:04:05 2006 MST
-=> 1 2  3  4  5    6  -7
-```
-
-### Hugo date and time templating reference
-
-The following examples show the layout string followed by the rendered output.
-
-The examples were rendered and tested in [CST] and all point to the same field in a content file's front matter:
-
-```
-date: 2017-03-03T14:15:59-06:00
-```
-
-`.Date` (i.e. called via [page variable][pagevars])
-: **Returns**: `2017-03-03 14:15:59 -0600 CST`
-
-`"Monday, January 2, 2006"`
-: **Returns**: `Friday, March 3, 2017`
-
-`"Mon Jan 2 2006"`
-: **Returns**: `Fri Mar 3 2017`
-
-`"January 2006"`
-: **Returns**: `March 2017`
-
-`"2006-01-02"`
-: **Returns**: `2017-03-03`
-
-`"Monday"`
-: **Returns**: `Friday`
-
-`"02 Jan 06 15:04 MST"` (RFC822)
-: **Returns**: `03 Mar 17 14:15 CST`
-
-`"02 Jan 06 15:04 -0700"` (RFC822Z)
-: **Returns**: `03 Mar 17 14:15 -0600`
-
-`"Mon, 02 Jan 2006 15:04:05 MST"` (RFC1123)
-: **Returns**: `Fri, 03 Mar 2017 14:15:59 CST`
-
-`"Mon, 02 Jan 2006 15:04:05 -0700"` (RFC1123Z)
-: **Returns**: `Fri, 03 Mar 2017 14:15:59 -0600`
-
-More examples can be found in Go's [documentation for the time package][timeconst].
-
-### Cardinal s
-
-Spelled-out cardinal numbers (e.g. "one", "two", and "three") are not currently supported.
-
-Use the [`humanize`](/functions/humanize) function to render the day of the month as an ordinal number:
-
-```go-html-template
-{{ humanize .Date.Day }} of {{ .Date.Format "January 2006" }}
-```
-
-This will output:
-
-```
-5th of March 2017
-```
-
-
-### Use `.Local` and `.UTC`
-
-In conjunction with the [`dateFormat` function][dateFormat], you can also convert your dates to `UTC` or to local timezones:
-
-`{{ dateFormat "02 Jan 06 15:04 MST" .Date.UTC }}`
-: **Returns**: `03 Mar 17 20:15 UTC`
-
-`{{ dateFormat "02 Jan 06 15:04 MST" .Date.Local }}`
-: **Returns**: `03 Mar 17 14:15 CST`
-
-[CST]: https://en.wikipedia.org/wiki/Central_Time_Zone
-[dateFormat]: /functions/dateformat/
-[gdex]: https://golang.org/pkg/time/#example_Time_Format
-[pagevars]: /variables/page/
-[time]: https://golang.org/pkg/time/
-[timeconst]: https://golang.org/pkg/time/#ANSIC
diff --git a/content/en/functions/ge.md b/content/en/functions/ge.md
deleted file mode 100644 (file)
index e59b0f9..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: ge
-description: Returns the boolean truth of arg1 >= arg2 && arg1 >= arg3.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [comparison,operators,logic]
-signature: ["ge ARG1 ARG2 [ARG...]"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ ge 1 1 }} → true
-{{ ge 1 2 }} → false
-{{ ge 2 1 }} → true
-
-{{ ge 1 1 1 }} → true
-{{ ge 1 1 2 }} → false
-{{ ge 1 2 1 }} → false
-{{ ge 1 2 2 }} → false
-
-{{ ge 2 1 1 }} → true
-{{ ge 2 1 2 }} → true
-{{ ge 2 2 1 }} → true
-```
diff --git a/content/en/functions/get.md b/content/en/functions/get.md
deleted file mode 100644 (file)
index 561a794..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: .Get
-description: Accesses positional and ordered parameters in shortcode declaration.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [shortcodes]
-signature: [".Get INDEX", ".Get KEY"]
-relatedfuncs: []
----
-
-`.Get` is specifically used when creating your own [shortcode template][sc], to access the [positional and named](/templates/shortcode-templates/#positional-vs-named-parameters) parameters passed to it. When used with a numeric INDEX, it queries positional parameters (starting with 0). With a string KEY, it queries named parameters.
-
-When accessing named or positional parameters that do not exist, `.Get` returns an empty string instead of interrupting the build. This allows you to chain `.Get` with `if`, `with`, `default` or `cond` to check for parameter existence. For example:
-
-```go-html-template
-{{ $quality := default "100" (.Get 1) }}
-```
-
-[sc]: /templates/shortcode-templates/
diff --git a/content/en/functions/getenv.md b/content/en/functions/getenv.md
deleted file mode 100644 (file)
index daeeb65..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: getenv
-description: Returns the value of an environment variable, or an empty string if the environment variable is not set.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["os.Getenv VARIABLE", "getenv VARIABLE"]
-relatedfuncs: []
----
-Examples:
-
-```go-html-template
-{{ os.Getenv "HOME" }} → /home/victor
-{{ os.Getenv "USER" }} → victor
-```
-
-You can pass values when building your site:
-
-```bash
-MY_VAR1=foo MY_VAR2=bar hugo
-
-OR
-
-export MY_VAR1=foo
-export MY_VAR2=bar
-hugo
-```
-
-And then retrieve the values within a template:
-
-```go-html-template
-{{ os.Getenv "MY_VAR1" }} → foo
-{{ os.Getenv "MY_VAR2" }} → bar
-```
-
-With Hugo v0.91.0 and later, you must explicitly allow access to environment variables. For details, review [Hugo's Security Policy](/about/security-model/#security-policy). By default, environment variables beginning with `HUGO_` are allowed when using the `os.Getenv` function.
diff --git a/content/en/functions/go-template/len.md b/content/en/functions/go-template/len.md
new file mode 100644 (file)
index 0000000..b8be621
--- /dev/null
@@ -0,0 +1,55 @@
+---
+title: len
+description: Returns the length of a string, slice, map, or collection.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: int
+  signatures: [len INPUT]
+relatedFunctions:
+  - len
+  - strings.Count
+  - strings.CountRunes
+  - strings.CountWords
+  - strings.RuneCount
+aliases: [/functions/len]
+---
+
+{{% readfile file="/functions/_common/go-template-functions.md" %}}
+
+With a string:
+
+```go-html-template
+{{ "ab" | len }} → 2
+{{ "" | len }} → 0
+```
+
+With a slice:
+
+```go-html-template
+{{ slice "a" "b" | len }} → 2
+{{ slice | len }} → 0
+```
+
+With a map:
+
+```go-html-template
+{{ dict "a" 1 "b" 2  | len }} → 2
+{{ dict | len }} → 0
+```
+
+With a collection:
+
+```go-html-template
+{{ site.RegularPages | len }} → 42
+```
+
+You may also determine the number of pages in a collection with:
+
+```go-html-template
+{{ site.RegularPages.Len }} → 42
+```
diff --git a/content/en/functions/go-template/range.md b/content/en/functions/go-template/range.md
new file mode 100644 (file)
index 0000000..cf01633
--- /dev/null
@@ -0,0 +1,159 @@
+---
+title: range
+description: Iterates over slices, maps, and page collections.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: 
+  signatures: [range COLLECTION]
+relatedFunctions:
+  - with
+  - range
+aliases: [/functions/range]
+toc: true
+---
+
+{{% readfile file="/functions/_common/go-template-functions.md" %}}
+
+## Slices
+
+Template:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+  <p>{{ . }}</p>
+{{ end }}
+```
+
+Result:
+
+```html
+<p>foo</p>
+<p>bar</p>
+<p>baz</p>
+```
+
+Template:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $v := $s }}
+  <p>{{ $v }}</p>
+{{ end }}
+```
+
+Result:
+
+```html
+<p>foo</p>
+<p>bar</p>
+<p>baz</p>
+```
+
+Template:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $k, $v := $s }}
+  <p>{{ $k }}: {{ $v }}</p>
+{{ end }}
+```
+
+Result:
+
+```html
+<p>0: foo</p>
+<p>1: bar</p>
+<p>2: baz</p>
+```
+
+## Maps
+
+Template:
+
+```go-html-template
+{{ $m := slice
+  (dict "name" "John" "age" 30)
+  (dict "name" "Will" "age" 28)
+  (dict "name" "Joey" "age" 24)
+}}
+{{ range $m }}
+  <p>{{ .name }} is {{ .age }}</p>
+{{ end }}
+```
+
+Result:
+
+```html
+<p>John is 30</p>
+<p>Will is 28</p>
+<p>Joey is 24</p>
+```
+
+## Page collections
+
+Template:
+
+```go-html-template
+{{ range where site.RegularPages "Type" "articles" }}
+  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+{{ end }}
+```
+
+Result:
+
+```html
+<h2><a href="/articles/article-3/">Article 3</a></h2>
+<h2><a href="/articles/article-2/">Article 2</a></h2>
+<h2><a href="/articles/article-1/">Article 1</a></h2>
+```
+
+## Break
+
+Use the `break` statement to stop the innermost iteration and bypass all remaining iterations.
+
+Template:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+  {{ if eq . "bar" }}
+    {{ break }}
+  {{ end }}
+  <p>{{ . }}</p>
+{{ end }}
+```
+
+Result:
+
+```html
+<p>foo</p>
+```
+
+## Continue
+
+Use the `continue` statement to stop the innermost iteration and continue to the next iteration.
+
+Template:
+
+```go-html-template
+{{ $s := slice "foo" "bar" "baz" }}
+{{ range $s }}
+  {{ if eq . "bar" }}
+    {{ continue }}
+  {{ end }}
+  <p>{{ . }}</p>
+{{ end }}
+```
+
+Result:
+
+```html
+<p>foo</p>
+<p>baz</p>
+```
diff --git a/content/en/functions/go-template/urlquery.md b/content/en/functions/go-template/urlquery.md
new file mode 100644 (file)
index 0000000..cbbfdfa
--- /dev/null
@@ -0,0 +1,32 @@
+---
+title: urlquery
+description: Returns the escaped value of the textual representation of its arguments in a form suitable for embedding in a URL query.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: ['urlquery INPUT [INPUT]...']
+relatedFunctions:
+  - collections.Querify
+  - urlquery
+aliases: [/functions/urlquery]
+---
+
+{{% readfile file="/functions/_common/go-template-functions.md" %}}
+
+This template code:
+
+```go-html-template
+{{ $u := urlquery "https://" "example.com" | safeURL }}
+<a href="https://example.org?url={{ $u }}">Link</a>
+```
+
+Is rendered to:
+
+```html
+<a href="https://example.org?url=https%3A%2F%2Fexample.com">Link</a>
+```
diff --git a/content/en/functions/go-template/with.md b/content/en/functions/go-template/with.md
new file mode 100644 (file)
index 0000000..06ca381
--- /dev/null
@@ -0,0 +1,35 @@
+---
+title: with
+description: Rebinds the context (`.`) within its scope and skips the block if the variable is absent or empty.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: any
+  signatures: [with PIPELINE]
+relatedFunctions:
+  - with
+  - range
+aliases: [/functions/with]
+---
+
+{{% readfile file="/functions/_common/go-template-functions.md" %}}
+
+An alternative way of writing an `if` statement and then referencing the same value is to use `with` instead. `with` rebinds the context (`.`) within its scope and skips the block if the variable is absent, unset or empty.
+
+The set of *empty* values is defined by [the Go templates package](https://golang.org/pkg/text/template/). Empty values include `false`, the number zero, and the empty string.
+
+If you want to render a block if an index or key is present in a slice, array, channel or map, regardless of whether the value is empty, you should use [`isset`](/functions/collections/isset) instead.
+
+The following example checks for a [user-defined site variable](/variables/site/) called `twitteruser`. If the key-value is not set, the following will render nothing:
+
+{{< code file="layouts/partials/twitter.html" >}}
+{{ with .Site.Params.twitteruser }}<span class="twitter">
+<a href="https://twitter.com/{{ . }}" rel="author">
+<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{ . }}"
+ alt="Twitter"></a>
+</span>{{ end }}
+{{< /code >}}
diff --git a/content/en/functions/group.md b/content/en/functions/group.md
deleted file mode 100644 (file)
index 617dcbb..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: group
-description: "`group` groups a list of pages."
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections]
-signature: ["PAGES | group KEY"]
----
-
-{{< code file="layouts/partials/groups.html" >}}
-{{ $new := .Site.RegularPages | first 10 | group "New" }}
-{{ $old := .Site.RegularPages | last 10 | group "Old" }}
-{{ $groups := slice $new $old }}
-{{ range $groups }}
-<h3>{{ .Key }}{{/* Prints "New", "Old" */}}</h3>
-<ul>
-    {{ range .Pages }}
-    <li>
-    <a href="{{ .Permalink }}">{{ .Title }}</a>
-    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
-    </li>
-    {{ end }}
-</ul>
-{{ end }}
-{{< /code >}}
-
-The page group you get from `group` is of the same type you get from the built-in [group methods](/templates/lists#group-content) in Hugo. The above example can even be [paginated](/templates/pagination/#list-paginator-pages).
diff --git a/content/en/functions/gt.md b/content/en/functions/gt.md
deleted file mode 100644 (file)
index dac1986..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: gt
-description: Returns the boolean truth of arg1 > arg2 && arg1 > arg3.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [comparison,operators,logic]
-signature: ["gt ARG1 ARG2 [ARG...]"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ gt 1 1 }} → false
-{{ gt 1 2 }} → false
-{{ gt 2 1 }} → true
-
-{{ gt 1 1 1 }} → false
-{{ gt 1 1 2 }} → false
-{{ gt 1 2 1 }} → false
-{{ gt 1 2 2 }} → false
-
-{{ gt 2 1 1 }} → true
-{{ gt 2 1 2 }} → false
-{{ gt 2 2 1 }} → false
-```
diff --git a/content/en/functions/hasmenucurrent.md b/content/en/functions/hasmenucurrent.md
deleted file mode 100644 (file)
index 8605cf3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: .HasMenuCurrent
-description:
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [menus]
-signature: ["PAGE.HasMenuCurrent MENU MENUENTRY"]
-relatedfuncs: ["IsMenuCurrent"]
----
-
-`.HasMenuCurrent` is a method in `Page` object returning a _boolean_ value. It
-returns `true` if the PAGE is the same object as the `.Page` in one of the
-**children menu entries** under MENUENTRY in a given MENU.
-
-If MENUENTRY's `.Page` is a [section](/content-management/sections/) then, from Hugo `0.86.0`, this method also returns true for any descendant of that section..
-
-You can find its example use in [menu templates](/templates/menu-templates/).
diff --git a/content/en/functions/highlight.md b/content/en/functions/highlight.md
deleted file mode 100644 (file)
index f91c1f5..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
----
-title: highlight
-description: Renders code with a syntax highlighter.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [highlighting,code blocks,syntax]
-signature: ["transform.Highlight INPUT LANG [OPTIONS]","highlight INPUT LANG [OPTIONS]"]
-relatedfuncs: []
-toc: true
----
-The `highlight` function uses the [Chroma] syntax highlighter, supporting over 200 languages with more than 40 available styles.
-
-## Arguments
-
-INPUT
-: The code to highlight.
-
-LANG
-: The language of the code to highlight. Choose from one of the [supported languages]. Case-insensitive.
-
-OPTIONS
-: An optional, comma-separated list of zero or more [options]. Set default values in [site configuration].
-
-## Options
-
-lineNos
-: Boolean. Default is `false`.\
-Display a number at the beginning of each line.
-
-lineNumbersInTable
-: Boolean. Default is `true`.\
-Render the highlighted code in an HTML table with two cells. The left table cell contains the line numbers. The right table cell contains the code, allowing a user to select and copy the code without line numbers. Irrelevant if `lineNos` is `false`.
-
-anchorLineNos
-: Boolean. Default is `false`.\
-Render each line number as an HTML anchor element, and set the `id` attribute of the surrounding `<span>` to the line number. Irrelevant if `lineNos` is `false`.
-
-lineAnchors
-: String. Default is `""`.\
-When rendering a line number as an HTML anchor element, prepend this value to the `id` attribute of the surrounding `<span>`. This provides unique `id` attributes when a page contains two or more code blocks. Irrelevant if `lineNos` or `anchorLineNos` is `false`.
-
-lineNoStart
-: Integer. Default is `1`.\
-The number to display at the beginning of the first line. Irrelevant if `lineNos` is `false`.
-
-hl_Lines
-: String. Default is `""`.\
-A space-separated list of lines to emphasize within the highlighted code. To emphasize lines 2, 3, 4, and 7, set this value to `2-4 7`. This option is independent of the `lineNoStart` option.
-
-hl_inline
-: Boolean. Default is `false`.\
-Render the highlighted code without a wrapping container.
-
-style
-: String. Default is `monokai`.\
-The CSS styles to apply to the highlighted code. See the [style gallery] for examples. Case-sensitive.
-
-noClasses
-: Boolean. Default is `true`.\
-Use inline CSS styles instead of an external CSS file. To use an external CSS file, set this value to `false` and [generate the file with the hugo client][hugo client].
-
-tabWidth
-: Integer. Default is `4`.\
-Substitute this number of spaces for each tab character in your highlighted code. Irrelevant if `noClasses` is `false`.
-
-guessSyntax
-: Boolean. Default is `false`.\
-If the `LANG` argument is blank or an unrecognized language, auto-detect the language if possible, otherwise use a fallback language.
-
-{{% note %}}
-Instead of specifying both `lineNos` and `lineNumbersInTable`, you can use the following shorthand notation:
-
-`lineNos=inline`
-: equivalent to `lineNos=true` and `lineNumbersInTable=false`
-
-`lineNos=table`
-: equivalent to `lineNos=true` and `lineNumbersInTable=true`
-{{% /note %}}
-
-## Examples
-
-```go-html-template
-{{ $input := `fmt.Println("Hello World!")` }}
-{{ transform.Highlight $input "go" }}
-
-{{ $input := `console.log('Hello World!');` }}
-{{ $lang := "js" }}
-{{ transform.Highlight $input $lang "lineNos=table, style=api" }}
-
-{{ $input := `echo "Hello World!"` }}
-{{ $lang := "bash" }}
-{{ $options := dict "lineNos" "table" "style" "dracula" }}
-{{ transform.Highlight $input $lang $options }}
-```
-
-[Chroma]: https://github.com/alecthomas/chroma
-[hugo client]: /commands/hugo_gen_chromastyles
-[options]: #options
-[site configuration]: /getting-started/configuration-markup#highlight
-[style gallery]: https://xyproto.github.io/splash/docs/
-[supported languages]: /content-management/syntax-highlighting#list-of-chroma-highlighting-languages
diff --git a/content/en/functions/hmac.md b/content/en/functions/hmac.md
deleted file mode 100644 (file)
index 3b9675a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: hmac
-description: Returns a cryptographic hash that uses a key to sign a message.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [hmac,checksum]
-signature: ["crypto.HMAC HASH_TYPE KEY MESSAGE [ENCODING]","hmac HASH_TYPE KEY MESSAGE [ENCODING]" ]
-relatedfuncs: [hmac]
----
-
-Set the `HASH_TYPE` argument to `md5`, `sha1`, `sha256`, or `sha512`.
-
-Set the optional `ENCODING` argument to either `hex` (default) or `binary`.
-
-```go-html-template
-{{ hmac "sha256" "Secret key" "Secret message" }}
-5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84
-
-{{ hmac "sha256" "Secret key" "Secret message" "hex" }}
-5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84
-
-{{ hmac "sha256" "Secret key" "Secret message" "binary" | base64Encode }}
-XM60kfRfixVOIPOwow7Tpv8wJ9Nz+Fx4/+iYMYCwPIQ=
-```
diff --git a/content/en/functions/htmlEscape.md b/content/en/functions/htmlEscape.md
deleted file mode 100644 (file)
index 0ee8fa4..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: htmlEscape
-description: Returns the given string with the reserved HTML codes escaped.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings, html]
-signature: ["htmlEscape INPUT"]
-relatedfuncs: [htmlUnescape]
----
-
-In the result `&` becomes `&amp;` and so on. It escapes only: `<`, `>`, `&`, `'` and `"`.
-
-```go-html-template
-{{ htmlEscape "Hugo & Caddy > WordPress & Apache" }} → "Hugo &amp; Caddy &gt; WordPress &amp; Apache"
-```
diff --git a/content/en/functions/htmlUnescape.md b/content/en/functions/htmlUnescape.md
deleted file mode 100644 (file)
index e4646b6..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: htmlUnescape
-description: Returns the given string with HTML escape codes un-escaped.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["htmlUnescape INPUT"]
-relatedfuncs: [htmlEscape]
----
-
-`htmlUnescape` returns the given string with HTML escape codes un-escaped.
-
-Remember to pass the output of this to `safeHTML` if fully un-escaped characters are desired. Otherwise, the output will be escaped again as normal.
-
-```go-html-template
-{{ htmlUnescape "Hugo &amp; Caddy &gt; WordPress &amp; Apache" }} → "Hugo & Caddy > WordPress & Apache"
-```
diff --git a/content/en/functions/hugo.md b/content/en/functions/hugo.md
deleted file mode 100644 (file)
index 78d658c..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: hugo
-description: The `hugo` function provides easy access to Hugo-related data.
-keywords: []
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-toc:
-signature: ["hugo"]
-relatedfuncs: []
----
-
-`hugo` returns an instance that contains the following functions:
-
-`hugo.BuildDate`
-: (`string`) The compile date of the current Hugo binary formatted per [RFC&nbsp;3339](https://datatracker.ietf.org/doc/html/rfc3339) (e.g., `2023-05-23T08:14:20Z`).
-
-`hugo.CommitHash`
-: (`string`) The Git commit hash of the Hugo binary (e.g., `0a95d6704a8ac8d41cc5ca8fffaad8c5c7a3754a`).
-
-`hugo.Deps`
-: (`[]*hugo.Dependency`) See [hugo.Deps](#hugodeps).
-
-`hugo.Environment`
-: (`string`) The current running environment as defined through the `--environment` CLI flag (e.g., `development`, `production`).
-
-`hugo.Generator`
-: (`template.HTML`) Renders an HTML `meta` element identifying the software that generated the site (e.g., `<meta name="generator" content="Hugo 0.112.0">`).
-
-`hugo.GoVersion`
-: (`string`) The Go version used to compile the Hugo binary (e.g., `go1.20.4`). {{< new-in "0.101.0" >}}
-
-`hugo.IsExtended`
-: (`bool`) Returns `true` if the Hugo binary is the extended version.
-
-`hugo.IsProduction`
-: (`bool`) Returns `true` if `hugo.Environment` is set to the production environment.
-
-`hugo.Version`
-: (`hugo.VersionString`) The current version of the Hugo binary (e.g., `0.112.1`).
-
-`hugo.WorkingDir`
-: (`string`) The project working directory (e.g., `/home/user/projects/my-hugo-site`). {{< new-in "0.112.0" >}}
-
-## hugo.Deps
-
-{{< new-in "0.92.0" >}}
-
-`hugo.Deps` returns a list of dependencies for a project (either Hugo Modules or local theme components).
-
-Each dependency contains:
-
-Owner
-: (`*hugo.Dependency`) In the dependency tree, this is the first module that defines this module as a dependency (e.g., `github.com/gohugoio/hugo-mod-bootstrap-scss/v5`).
-
-Path
-: (`string`) The module path or the path below your `themes` directory (e.g., `github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2`).
-
-Replace
-: (`*hugo.Dependency`) Replaced by this dependency.
-
-Time
-: (`time.Time`) The time that the version was created (e.g., `2022-02-13 15:11:28 +0000 UTC`).
-
-Vendor
-: (`bool`) Returns `true` if the dependency is vendored.
-
-Version
-: (`string`) The module version (e.g., `v2.21100.20000`).
-
-An example table listing the dependencies:
-
-```html
-<h2>Dependencies</h2>
-<table class="table table-dark">
-  <thead>
-    <tr>
-      <th scope="col">#</th>
-      <th scope="col">Owner</th>
-      <th scope="col">Path</th>
-      <th scope="col">Version</th>
-      <th scope="col">Time</th>
-      <th scope="col">Vendor</th>
-    </tr>
-  </thead>
-  <tbody>
-    {{ range $index, $element := hugo.Deps }}
-    <tr>
-      <th scope="row">{{ add $index 1 }}</th>
-      <td>{{ with $element.Owner }}{{ .Path }}{{ end }}</td>
-      <td>
-        {{ $element.Path }}
-        {{ with $element.Replace }}
-        => {{ .Path }}
-        {{ end }}
-      </td>
-      <td>{{ $element.Version }}</td>
-      <td>{{ with $element.Time }}{{ . }}{{ end }}</td>
-      <td>{{ $element.Vendor }}</td>
-    </tr>
-    {{ end }}
-  </tbody>
-</table>
-```
diff --git a/content/en/functions/hugo/index.md b/content/en/functions/hugo/index.md
new file mode 100644 (file)
index 0000000..208ea39
--- /dev/null
@@ -0,0 +1,111 @@
+---
+title: hugo
+description: Provides global access to Hugo-related data.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: 
+  signatures: [hugo]
+relatedFunctions:
+  - hugo
+  - page
+  - site
+aliases: [/functions/hugo]
+---
+
+`hugo` returns an instance that contains the following functions:
+
+`hugo.BuildDate`
+: (`string`) The compile date of the current Hugo binary formatted per [RFC&nbsp;3339](https://datatracker.ietf.org/doc/html/rfc3339) (e.g., `2023-05-23T08:14:20Z`).
+
+`hugo.CommitHash`
+: (`string`) The Git commit hash of the Hugo binary (e.g., `0a95d6704a8ac8d41cc5ca8fffaad8c5c7a3754a`).
+
+`hugo.Deps`
+: (`[]*hugo.Dependency`) See [hugo.Deps](#hugodeps).
+
+`hugo.Environment`
+: (`string`) The current running environment as defined through the `--environment` CLI flag (e.g., `development`, `production`).
+
+`hugo.Generator`
+: (`template.HTML`) Renders an HTML `meta` element identifying the software that generated the site (e.g., `<meta name="generator" content="Hugo 0.112.0">`).
+
+`hugo.GoVersion`
+: (`string`) The Go version used to compile the Hugo binary (e.g., `go1.20.4`). {{< new-in "0.101.0" >}}
+
+`hugo.IsExtended`
+: (`bool`) Returns `true` if the Hugo binary is the extended version.
+
+`hugo.IsProduction`
+: (`bool`) Returns `true` if `hugo.Environment` is set to the production environment.
+
+`hugo.Version`
+: (`hugo.VersionString`) The current version of the Hugo binary (e.g., `0.112.1`).
+
+`hugo.WorkingDir`
+: (`string`) The project working directory (e.g., `/home/user/projects/my-hugo-site`). {{< new-in "0.112.0" >}}
+
+## hugo.Deps
+
+{{< new-in "0.92.0" >}}
+
+`hugo.Deps` returns a list of dependencies for a project (either Hugo Modules or local theme components).
+
+Each dependency contains:
+
+Owner
+: (`*hugo.Dependency`) In the dependency tree, this is the first module that defines this module as a dependency (e.g., `github.com/gohugoio/hugo-mod-bootstrap-scss/v5`).
+
+Path
+: (`string`) The module path or the path below your `themes` directory (e.g., `github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2`).
+
+Replace
+: (`*hugo.Dependency`) Replaced by this dependency.
+
+Time
+: (`time.Time`) The time that the version was created (e.g., `2022-02-13 15:11:28 +0000 UTC`).
+
+Vendor
+: (`bool`) Returns `true` if the dependency is vendored.
+
+Version
+: (`string`) The module version (e.g., `v2.21100.20000`).
+
+An example table listing the dependencies:
+
+```html
+<h2>Dependencies</h2>
+<table class="table table-dark">
+  <thead>
+    <tr>
+      <th scope="col">#</th>
+      <th scope="col">Owner</th>
+      <th scope="col">Path</th>
+      <th scope="col">Version</th>
+      <th scope="col">Time</th>
+      <th scope="col">Vendor</th>
+    </tr>
+  </thead>
+  <tbody>
+    {{ range $index, $element := hugo.Deps }}
+    <tr>
+      <th scope="row">{{ add $index 1 }}</th>
+      <td>{{ with $element.Owner }}{{ .Path }}{{ end }}</td>
+      <td>
+        {{ $element.Path }}
+        {{ with $element.Replace }}
+        => {{ .Path }}
+        {{ end }}
+      </td>
+      <td>{{ $element.Version }}</td>
+      <td>{{ with $element.Time }}{{ . }}{{ end }}</td>
+      <td>{{ $element.Vendor }}</td>
+    </tr>
+    {{ end }}
+  </tbody>
+</table>
+```
diff --git a/content/en/functions/humanize.md b/content/en/functions/humanize.md
deleted file mode 100644 (file)
index 6cbd858..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: humanize
-description: Returns the humanized version of an argument with the first letter capitalized.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings,casing]
-signature: ["humanize INPUT"]
-relatedfuncs: [anchorize]
----
-
-If the input is either an int64 value or the string representation of an integer, humanize returns the number with the proper ordinal appended.
-
-
-```go-html-template
-{{ humanize "my-first-post" }} → "My first post"
-{{ humanize "myCamelPost" }} → "My camel post"
-{{ humanize "52" }} → "52nd"
-{{ humanize 103 }} → "103rd"
-```
diff --git a/content/en/functions/i18n.md b/content/en/functions/i18n.md
deleted file mode 100644 (file)
index 13f3a6f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: i18n
-description: Translates a piece of content based on your i18n configuration files.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [internationalization,i18n,multilingual]
-signature:
-  - "i18n KEY"
-  - "T KEY"
-  - "lang.Translate KEY"
-relatedfuncs: []
----
-
-This translates a piece of content based on your `i18n/en-US.toml` files. You can use the [go-i18n](https://github.com/nicksnyder/go-i18n) tools to manage your translations. The translations can exist in both the theme and at the root of your repository.
-
-```go-html-template
-{{ i18n "translation_id" }}
-```
-
-{{% note %}}
-`T` is an alias to `i18n`. E.g. `{{ T "translation_id" }}`.
-{{% /note %}}
-
-### Query a flexible translation with variables
-
-Often you will want to use the page variables in the translation strings. To do so, pass the `.` context when calling `i18n`:
-
-```go-html-template
-{{ i18n "wordCount" . }}
-```
-
-The function will pass the `.` context to the `"wordCount"` id:
-
-{{< code-toggle file="i18n/en-US" >}}
-[wordCount]
-other = "This article has {{ .WordCount }} words."
-{{< /code-toggle >}}
-
-Assume `.WordCount` in the context has value is 101. The result will be:
-
-```
-This article has 101 words.
-```
-
-For more information about string translations, see [Translation of Strings in Multilingual Mode][multistrings].
-
-[multistrings]: /content-management/multilingual/#translation-of-strings
index e42f4cdd8ab3afd0c20404235a55fa486aa0509e..a71c2b61c1b102b4a4ba84393f0eadf9687cb80b 100644 (file)
@@ -2,6 +2,7 @@
 title: Image filters
 description: The images namespace provides a list of filters and other image related functions.
 categories: [functions]
+keywords: []
 aliases: [/functions/imageconfig/]
 menu:
   docs:
@@ -12,6 +13,27 @@ toc: true
 
 See [images.Filter](#filter) for how to apply these filters to an image.
 
+## Process
+
+{{< new-in "0.119.0" >}}
+
+{{% funcsig %}}
+images.Process SRC SPEC
+{{% /funcsig %}}
+
+A general purpose image processing function.
+
+This filter has all the same options as the [Process](/content-management/image-processing/#process) method, but using it as a filter may be more effective if you need to apply multiple filters to an image:
+
+```go-html-template
+{{ $filters := slice 
+  images.Grayscale
+  (images.GaussianBlur 8)
+  (images.Process "resize 200x jpg q30") 
+}}
+{{ $img = $img | images.Filter $filters }}
+```
+
 ## Overlay
 
 {{% funcsig %}}
@@ -34,6 +56,30 @@ A shorter version of the above, if you only need to apply the filter once:
 
 The above will overlay `$logo` in the upper left corner of `$img` (at position `x=50, y=50`).
 
+## Opacity
+
+{{< new-in "0.119.0" >}}
+
+{{% funcsig %}}
+images.Opacity SRC OPACITY
+{{% /funcsig %}}
+
+Opacity creates a filter that changes the opacity of an image.
+The OPACITY parameter must be in range (0, 1).
+
+```go-html-template
+{{ $img := $img.Filter (images.Opacity 0.5 )}}
+```
+
+This filter is most useful for target formats that support transparency, e.g. PNG. If the source image is e.g. JPG, the most effective way would be to combine it with the [`Process`] filter:
+
+```go-html-template
+{{ $png := $jpg.Filter 
+  (images.Opacity 0.5)
+  (images.Process "png") 
+}}
+```
+
 ## Text
 
 Using the `Text` filter, you can add text to an image.
@@ -224,3 +270,5 @@ images.ImageConfig PATH
 favicon.ico: {{ .Width }} x {{ .Height }}
 {{ end }}
 ```
+
+[`Process`]: #process
diff --git a/content/en/functions/in.md b/content/en/functions/in.md
deleted file mode 100644 (file)
index 1baf7ce..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: in
-description: Checks if an element is in an array or slice--or a substring in a string---and returns a boolean.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["in SET ITEM"]
-relatedfuncs: []
----
-
-The elements supported are strings, integers and floats, although only float64 will match as expected.
-
-In addition, `in` can also check if a substring exists in a string.
-
-```go-html-template
-{{ if in .Params.tags "Git" }}Follow me on GitHub!{{ end }}
-```
-
-
-```go-html-template
-{{ if in "this string contains a substring" "substring" }}Substring found!{{ end }}
-```
diff --git a/content/en/functions/index-function.md b/content/en/functions/index-function.md
deleted file mode 100644 (file)
index b2193c9..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
----
-title: index
-description: Looks up the index(es) or key(s) of the data structure passed into it.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["index COLLECTION INDEXES", "index COLLECTION KEYS"]
-relatedfuncs: []
-aliases: [/functions/index/]
----
-
-The `index` functions returns the result of indexing its first argument by the following arguments. Each indexed item must be a map or a slice, e.g.:
-
-```go-text-template
-{{ $slice := slice "a" "b" "c" }}
-{{ index $slice 1 }} => b
-{{ $map := dict "a" 100 "b" 200 }}
-{{ index $map "b" }} => 200
-```
-
-The function takes multiple indices as arguments, and this can be used to get nested values, e.g.:
-
-```go-text-template
-{{ $map := dict "a" 100 "b" 200 "c" (slice 10 20 30) }}
-{{ index $map "c" 1 }} => 20
-{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
-{{ index $map "c" "e" }} => 20
-```
-
-You may write multiple indices as a slice:
-
-```go-text-template
-{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
-{{ $slice := slice "c" "e" }}
-{{ index $map $slice }} => 20
-```
-
-## Example: load data from a path based on front matter parameters
-
-Assume you want to add a `location = ""` field to your front matter for every article written in `content/vacations/`. You want to use this field to populate information about the location at the bottom of the article in your `single.html` template. You also have a directory in `data/locations/` that looks like the following:
-
-```
-.
-└── data
-    └── locations
-        ├── abilene.toml
-        ├── chicago.toml
-        ├── oslo.toml
-        └── provo.toml
-```
-
-Here is an example:
-
-{{< code-toggle file="data/locations/oslo" copy=false >}}
-website = "https://www.oslo.kommune.no"
-pop_city = 658390
-pop_metro = 1717900
-{{< /code-toggle >}}
-
-The example we will use will be an article on Oslo, whose front matter should be set to exactly the same name as the corresponding file name in `data/locations/`:
-
-{{< code-toggle file="content/articles/oslo.md" fm=true copy=false >}}
-title = "My Norwegian Vacation"
-location = "oslo"
-{{< /code-toggle >}}
-
-The content of `oslo.toml` can be accessed from your template using the following node path: `.Site.Data.locations.oslo`. However, the specific file you need is going to change according to the front matter.
-
-This is where the `index` function is needed. `index` takes 2 arguments in this use case:
-
-1. The node path
-2. A string corresponding to the desired data; e.g.&mdash;
-
-```go-html-template
-{{ index .Site.Data.locations "oslo" }}
-```
-
-The variable for `.Params.location` is a string and can therefore replace `oslo` in the example above:
-
-```go-html-template
-{{ index .Site.Data.locations .Params.location }}
-=> map[website:https://www.oslo.kommune.no pop_city:658390 pop_metro:1717900]
-```
-
-Now the call will return the specific file according to the location specified in the content's front matter, but you will likely want to write specific properties to the template. You can do this by continuing down the node path via dot notation (`.`):
-
-```go-html-template
-{{ (index .Site.Data.locations .Params.location).pop_city }}
-=> 658390
-```
diff --git a/content/en/functions/inflect/Humanize.md b/content/en/functions/inflect/Humanize.md
new file mode 100644 (file)
index 0000000..74d24f3
--- /dev/null
@@ -0,0 +1,29 @@
+---
+title: inflect.Humanize
+linkTitle: humanize
+description: Returns the humanized version of an argument with the first letter capitalized.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [humanize]
+  returnType: string
+  signatures: [inflect.Humanize INPUT]
+relatedFunctions:
+  - inflect.Humanize
+  - inflect.Pluralize
+  - inflect.Singularize
+aliases: [/functions/humanize]
+---
+
+If the input is either an int64 value or the string representation of an integer, humanize returns the number with the proper ordinal appended.
+
+
+```go-html-template
+{{ humanize "my-first-post" }} → "My first post"
+{{ humanize "myCamelPost" }} → "My camel post"
+{{ humanize "52" }} → "52nd"
+{{ humanize 103 }} → "103rd"
+```
diff --git a/content/en/functions/inflect/Pluralize.md b/content/en/functions/inflect/Pluralize.md
new file mode 100644 (file)
index 0000000..5bb4441
--- /dev/null
@@ -0,0 +1,23 @@
+---
+title: inflect.Pluralize
+linkTitle: pluralize
+description: Pluralizes the given word according to a set of common English pluralization rules
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [pluralize]
+  returnType: string
+  signatures: [inflect.Pluralize INPUT]
+relatedFunctions:
+  - inflect.Humanize
+  - inflect.Pluralize
+  - inflect.Singularize
+aliases: [/functions/pluralize]
+---
+
+```go-html-template
+{{ "cat" | pluralize }} → "cats"
+```
diff --git a/content/en/functions/inflect/Singularize.md b/content/en/functions/inflect/Singularize.md
new file mode 100644 (file)
index 0000000..5aba4e4
--- /dev/null
@@ -0,0 +1,25 @@
+---
+title: inflect.Singularize
+linkTitle: singularize
+description: Converts a word according to a set of common English singularization rules.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [singularize]
+  returnType: string
+  signatures: [inflect.Singularize INPUT]
+relatedFunctions:
+  - inflect.Humanize
+  - inflect.Pluralize
+  - inflect.Singularize
+aliases: [/functions/singularize]
+---
+
+```go-html-template
+{{ "cats" | singularize }} → "cat"
+```
+
+See also the `.Data.Singular` [taxonomy variable](/variables/taxonomy/) for singularizing taxonomy names.
diff --git a/content/en/functions/int.md b/content/en/functions/int.md
deleted file mode 100644 (file)
index 1d91c9f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: int
-description: Casts a value to a decimal (base 10) integer.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [cast,strings,integers]
-signature: ["int INPUT"]
-relatedfuncs: []
----
-
-With a decimal (base 10) input:
-
-```go-html-template
-{{ int 11 }} → 11 (int)
-{{ int "11" }} → 11 (int)
-
-{{ int 11.1 }} → 11 (int)
-{{ int 11.9 }} → 11 (int)
-```
-
-With a binary (base 2) input:
-
-```go-html-template
-{{ int 0b11 }} → 3 (int)
-{{ int "0b11" }} → 3 (int)
-```
-
-With an octal (base 8) input (use either notation):
-
-```go-html-template
-{{ int 011 }} → 9 (int)
-{{ int "011" }} → 9 (int)
-
-{{ int 0o11 }} → 9 (int)
-{{ int "0o11" }} → 9 (int)
-```
-
-With a hexadecimal (base 16) input:
-
-```go-html-template
-{{ int 0x11 }} → 17 (int)
-{{ int "0x11" }} → 17 (int)
-```
-
-{{% note %}}
-Values with a leading zero are octal (base 8). When casting a string representation of a decimal (base 10) number, remove leading zeros:
-
-`{{ strings.TrimLeft "0" "0011" | int }} → 11`
-{{% /note %}}
diff --git a/content/en/functions/intersect.md b/content/en/functions/intersect.md
deleted file mode 100644 (file)
index 9c3ed62..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: intersect
-description: Returns the common elements of two arrays or slices, in the same order as the first array.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections,intersect,union,complement,symdiff]
-signature: ["intersect SET1 SET2"]
-relatedfuncs: []
----
-A useful example is to use it as `AND` filters when combined with where:
-
-## AND filter in where query
-
-```go-html-template
-{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }}
-{{ $pages := $pages | union (where .Site.RegularPages "Params.pinned" true) }}
-{{ $pages := $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }}
-```
-
-The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page parameters.
-
-See [union](/functions/union) for `OR`.
-
-
-[partials]: /templates/partials/
-[single]: /templates/single-page-templates/
diff --git a/content/en/functions/ismenucurrent.md b/content/en/functions/ismenucurrent.md
deleted file mode 100644 (file)
index a27a174..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: .IsMenuCurrent
-description:
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [menus]
-signature: ["PAGE.IsMenuCurrent MENU MENUENTRY"]
-relatedfuncs: ["HasMenuCurrent"]
----
-
-`.IsMenuCurrent` is a method in `Page` object returning a _boolean_ value. It
-returns `true` if the PAGE is the same object as the `.Page` in MENUENTRY in a
-given MENU.
-
-You can find its example use in [menu templates](/templates/menu-templates/).
diff --git a/content/en/functions/isset.md b/content/en/functions/isset.md
deleted file mode 100644 (file)
index 0a8de73..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: isset
-description: Returns true if the parameter is set.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["isset COLLECTION INDEX", "isset COLLECTION KEY"]
-relatedfuncs: []
----
-
-Takes either a slice, array, or channel and an index or a map and a key as input.
-
-```go-html-template
-{{ if isset .Params "project_url" }} {{ index .Params "project_url" }}{{ end }}
-```
-
-{{% note %}}
-All site-level configuration keys are stored as lower case. Therefore, a `myParam` key-value set in your [site configuration file](/getting-started/configuration/) needs to be accessed with `{{ if isset .Site.Params "myparam" }}` and *not* with `{{ if isset .Site.Params "myParam" }}`. Note that you can still access the same configuration key with `.Site.Params.myParam` *or* `.Site.Params.myparam`, for example, when using [`with`](/functions/with).
-This restriction also applies when accessing page-level front matter keys from within [shortcodes](/content-management/shortcodes/).
-{{% /note %}}
diff --git a/content/en/functions/jsonify.md b/content/en/functions/jsonify.md
deleted file mode 100644 (file)
index e94fb7c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: jsonify
-description: Encodes a given object to JSON.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings,json]
-signature: ["jsonify INPUT", "jsonify OPTIONS INPUT"]
-relatedfuncs: [plainify]
----
-
-To customize the printing of the JSON, pass a map of options as the first
-argument.  Supported options are "prefix" and "indent".  Each JSON element in
-the output will begin on a new line beginning with *prefix* followed by one or
-more copies of *indent* according to the indentation nesting.
-
-
-```go-html-template
-{{ dict "title" .Title "content" .Plain | jsonify }}
-{{ dict "title" .Title "content" .Plain | jsonify (dict "indent" "  ") }}
-{{ dict "title" .Title "content" .Plain | jsonify (dict "prefix" " " "indent" "  ") }}
-```
-
-## Jsonify options
-
-indent ("")
-: Indentation to use.
-
-prefix ("")
-: Indentation prefix.
-
-noHTMLEscape (false)
-: Disable escaping of problematic HTML characters inside JSON quoted strings. The default behavior is to escape &, <, and > to \u0026, \u003c, and \u003e to avoid certain safety problems that can arise when embedding JSON in HTML.
-
-See also the `.PlainWords`, `.Plain`, and `.RawContent` [page variables][pagevars].
-
-[pagevars]: /variables/page/
diff --git a/content/en/functions/lang.Merge.md b/content/en/functions/lang.Merge.md
deleted file mode 100644 (file)
index ab3e619..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: lang.Merge
-description: "Merge missing translations from other languages."
-categories: [functions]
-keywords: [multilingual]
-menu:
-  docs:
-    parent: functions
-signature: ["lang.Merge FROM TO"]
-relatedfuncs: []
-comments:
----
-
-As an example:
-
-```bash
-{{ $pages := .Site.RegularPages | lang.Merge $frSite.RegularPages | lang.Merge $enSite.RegularPages }}
-```
-
-Will "fill in the gaps" in the current site with, from left to right, content from the French site, and lastly the English.
-
-
-A more practical example is to fill in the missing translations from the other languages:
-
-```bash
-{{ $pages := .Site.RegularPages }}
-{{ range .Site.Home.Translations }}
-{{ $pages = $pages | lang.Merge .Site.RegularPages }}
-{{ end }}
- ```
diff --git a/content/en/functions/lang.md b/content/en/functions/lang.md
deleted file mode 100644 (file)
index af55c92..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: lang
-package: lang
-description: "TODO.."
-categories: [functions]
-keywords: [numbers]
-menu:
-  docs:
-    parent: functions
-signature: ["lang.NumFmt PRECISION NUMBER [OPTIONS [DELIMITER]]"]
-aliases: ['/functions/numfmt/']
-type: 'template-func'
----
diff --git a/content/en/functions/lang/FormatAccounting.md b/content/en/functions/lang/FormatAccounting.md
new file mode 100644 (file)
index 0000000..974dc4a
--- /dev/null
@@ -0,0 +1,27 @@
+---
+title: lang.FormatAccounting
+description: Returns a currency representation of a number for the given currency and precision for the current language in accounting notation.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [lang.FormatAccounting PRECISION CURRENCY NUMBER]
+relatedFunctions:
+  - lang.FormatAccounting
+  - lang.FormatCurrency
+  - lang.FormatNumber
+  - lang.FormatNumberCustom
+  - lang.FormatPercent
+---
+
+```go-html-template
+{{ 512.5032 | lang.FormatAccounting 2 "NOK" }} → NOK512.50
+```
+
+{{% note %}}
+{{% readfile file="/functions/_common/locales.md" %}}
+{{% /note %}}
diff --git a/content/en/functions/lang/FormatCurrency.md b/content/en/functions/lang/FormatCurrency.md
new file mode 100644 (file)
index 0000000..b29a807
--- /dev/null
@@ -0,0 +1,27 @@
+---
+title: lang.FormatCurrency
+description: Returns a currency representation of a number for the given currency and precision for the current language.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [lang.FormatAccounting PRECISION CURRENCY NUMBER]
+relatedFunctions:
+  - lang.FormatAccounting
+  - lang.FormatCurrency
+  - lang.FormatNumber
+  - lang.FormatNumberCustom
+  - lang.FormatPercent
+---
+
+```go-html-template
+{{ 512.5032 | lang.FormatCurrency 2 "USD" }} → $512.50
+```
+
+{{% note %}}
+{{% readfile file="/functions/_common/locales.md" %}}
+{{% /note %}}
diff --git a/content/en/functions/lang/FormatNumber.md b/content/en/functions/lang/FormatNumber.md
new file mode 100644 (file)
index 0000000..dd878fd
--- /dev/null
@@ -0,0 +1,27 @@
+---
+title: lang.FormatNumber
+description: Returns a numeric representation of a number with the given precision for the current language.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [lang.FormatNumber PRECISION NUMBER]
+relatedFunctions:
+  - lang.FormatAccounting
+  - lang.FormatCurrency
+  - lang.FormatNumber
+  - lang.FormatNumberCustom
+  - lang.FormatPercent
+---
+
+```go-html-template
+{{ 512.5032 | lang.FormatNumber 2 }} → 512.50
+```
+
+{{% note %}}
+{{% readfile file="/functions/_common/locales.md" %}}
+{{% /note %}}
diff --git a/content/en/functions/lang/FormatNumberCustom.md b/content/en/functions/lang/FormatNumberCustom.md
new file mode 100644 (file)
index 0000000..97b0225
--- /dev/null
@@ -0,0 +1,41 @@
+---
+title: lang.FormatNumberCustom
+description: Returns a numeric representation of a number with the given precision using negative, decimal, and grouping options.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: ['lang.FormatNumberCustom PRECISION NUMBER [OPTIONS...]']
+relatedFunctions:
+  - lang.FormatAccounting
+  - lang.FormatCurrency
+  - lang.FormatNumber
+  - lang.FormatNumberCustom
+  - lang.FormatPercent
+aliases: ['/functions/numfmt/']
+---
+
+This function formats a number with the given precision. The first options parameter is a space-delimited string of characters to represent negativity, the decimal point, and grouping. The default value is `- . ,`. The second options parameter defines an alternate delimiting character.
+
+Note that numbers are rounded up at 5 or greater. So, with precision set to 0, 1.5 becomes 2, and 1.4 becomes 1.
+
+For a simpler function that adapts to the current language, see [`lang.FormatNumber`].
+
+
+```go-html-template
+{{ lang.FormatNumberCustom 2 12345.6789 }} → 12,345.68
+{{ lang.FormatNumberCustom 2 12345.6789 "- , ." }} → 12.345,68
+{{ lang.FormatNumberCustom 6 -12345.6789 "- ." }} → -12345.678900
+{{ lang.FormatNumberCustom 0 -12345.6789 "- . ," }} → -12,346
+{{ lang.FormatNumberCustom 0 -12345.6789 "-|.| " "|" }} → -12 346
+```
+
+{{% note %}}
+{{% readfile file="/functions/_common/locales.md" %}}
+{{% /note %}}
+
+[`lang.FormatNumber`]: /functions/lang/formatnumber
diff --git a/content/en/functions/lang/FormatPercent.md b/content/en/functions/lang/FormatPercent.md
new file mode 100644 (file)
index 0000000..dd20424
--- /dev/null
@@ -0,0 +1,27 @@
+---
+title: lang.FormatPercent
+description: Returns a percentage representation of a number with the given precision for the current language.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [lang.FormatPercent PRECISION NUMBER]
+relatedFunctions:
+  - lang.FormatAccounting
+  - lang.FormatCurrency
+  - lang.FormatNumber
+  - lang.FormatNumberCustom
+  - lang.FormatPercent
+---
+
+```go-html-template
+{{ 512.5032 | lang.FormatPercent 2 }} → 512.50%
+```
+
+{{% note %}}
+{{% readfile file="/functions/_common/locales.md" %}}
+{{% /note %}}
diff --git a/content/en/functions/lang/Merge.md b/content/en/functions/lang/Merge.md
new file mode 100644 (file)
index 0000000..b3d21cd
--- /dev/null
@@ -0,0 +1,33 @@
+---
+title: lang.Merge
+description: Merge missing translations from other languages.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: any
+  signatures: [lang.Merge FROM TO]
+relatedFunctions: []
+aliases: [/functions/lang.merge]
+---
+
+As an example:
+
+```bash
+{{ $pages := .Site.RegularPages | lang.Merge $frSite.RegularPages | lang.Merge $enSite.RegularPages }}
+```
+
+Will "fill in the gaps" in the current site with, from left to right, content from the French site, and lastly the English.
+
+
+A more practical example is to fill in the missing translations from the other languages:
+
+```bash
+{{ $pages := .Site.RegularPages }}
+{{ range .Site.Home.Translations }}
+{{ $pages = $pages | lang.Merge .Site.RegularPages }}
+{{ end }}
+ ```
diff --git a/content/en/functions/lang/Translate.md b/content/en/functions/lang/Translate.md
new file mode 100644 (file)
index 0000000..718d8cf
--- /dev/null
@@ -0,0 +1,126 @@
+---
+title: lang.Translate
+linkTitle: i18n
+description: Translates a string using the translation tables in the i18n directory.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [i18n,T]
+  returnType: string
+  signatures: ['lang.Translate KEY [CONTEXT]']
+relatedFunctions: []
+aliases: [/functions/i18n]
+---
+
+Let's say your multilingual site supports two languages, English and Polish. Create a translation table for each language in the `i18n` directory.
+
+```
+i18n/
+├── en.toml
+└── pl.toml
+```
+
+The translation tables can contain both:
+
+- Simple translations
+- Translations with pluralization
+
+The Unicode [CLDR Plural Rules chart] describes the pluralization categories for each language.
+
+[CLDR Plural Rules chart]: https://www.unicode.org/cldr/charts/43/supplemental/language_plural_rules.html
+
+The English translation table:
+
+{{< code-toggle file=i18n/en copy=false >}}
+# simple translations
+privacy = 'privacy'
+security = 'security'
+
+# translations with pluralization
+[day]
+one = 'day'
+other = 'days'
+
+[day_with_count]
+one = '{{ . }} day'
+other = '{{ . }} days'
+{{< /code-toggle >}}
+
+The Polish translation table:
+
+{{< code-toggle file=i18n/pl copy=false >}}
+# simple translations
+privacy = 'prywatność'
+security = 'bezpieczeństwo'
+
+# translations with pluralization
+[day]
+one = 'miesiąc'
+few = 'miesiące'
+many = 'miesięcy'
+other = 'miesiąca'
+
+[day_with_count]
+one = '{{ . }} miesiąc'
+few = '{{ . }} miesiące'
+many = '{{ . }} miesięcy'
+other = '{{ . }} miesiąca'
+{{< /code-toggle >}}
+
+{{% note %}}
+The examples below use the `T` alias for brevity.
+{{% /note %}}
+
+When viewing the English language site:
+
+```go-html-template
+{{ T "privacy" }} → privacy
+{{ T "security" }} → security
+
+{{ T "day" 0 }} → days
+{{ T "day" 1 }} → day
+{{ T "day" 2 }} → days
+{{ T "day" 5 }} → days
+
+{{ T "day_with_count" 0 }} → 0 days
+{{ T "day_with_count" 1 }} → 1 day
+{{ T "day_with_count" 2 }} → 2 days
+{{ T "day_with_count" 5 }} → 5 days
+````
+
+When viewing the Polish language site:
+
+```go-html-template
+{{ T "privacy" }} → prywatność
+{{ T "security" }} → bezpieczeństwo
+
+{{ T "day" 0 }} → miesięcy
+{{ T "day" 1 }} → miesiąc
+{{ T "day" 2 }} → miesiące
+{{ T "day" 5 }} → miesięcy
+
+{{ T "day_with_count" 0 }} → 0 miesięcy
+{{ T "day_with_count" 1 }} → 1 miesiąc
+{{ T "day_with_count" 2 }} → 2 miesiące
+{{ T "day_with_count" 5 }} → 5 miesięcy
+```
+
+In the pluralization examples above, we passed an integer in context (the second argument). You can also pass a map in context, creating a `count` key to control pluralization.
+
+Translation table:
+
+{{< code-toggle file=i18n/en copy=false >}}
+[age]
+one = '{{ .name }} is {{ .count }} year old.'
+other = '{{ .name }} is {{ .count }} years old.'
+{{< /code-toggle >}}
+
+Template:
+
+```go-html-template
+{{ T "age" (dict "name" "Will" "count" 1) }} → Will is 1 year old.
+{{ T "age" (dict "name" "John" "count" 3) }} → John is 3 years old.
+```
diff --git a/content/en/functions/last.md b/content/en/functions/last.md
deleted file mode 100644 (file)
index 72e6a4c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: last
-description: "slices an array to only the last <em>N</em>th elements."
-keywords: []
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-toc:
-signature: ["last INDEX COLLECTION"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ range last 10 .Pages }}
-  {{ .Render "summary" }}
-{{ end }}
-```
diff --git a/content/en/functions/le.md b/content/en/functions/le.md
deleted file mode 100644 (file)
index 1953bfa..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: le
-description: Returns the boolean truth of arg1 <= arg2 && arg1 <= arg3.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [comparison,operators,logic]
-signature: ["le ARG1 ARG2 [ARG...]"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ le 1 1 }} → true
-{{ le 1 2 }} → true
-{{ le 2 1 }} → false
-
-{{ le 1 1 1 }} → true
-{{ le 1 1 2 }} → true
-{{ le 1 2 1 }} → true
-{{ le 1 2 2 }} → true
-
-{{ le 2 1 1 }} → false
-{{ le 2 1 2 }} → false
-{{ le 2 2 1 }} → false
-```
diff --git a/content/en/functions/len.md b/content/en/functions/len.md
deleted file mode 100644 (file)
index cdf3cf4..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: len
-description: Returns the length of a string, slice, map, or collection.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [length]
-signature: ["len INPUT"]
-relatedfuncs: []
----
-
-With a string:
-
-```go-html-template
-{{ "ab" | len }} → 2
-{{ "" | len }} → 0
-```
-
-With a slice:
-
-```go-html-template
-{{ slice "a" "b" | len }} → 2
-{{ slice | len }} → 0
-```
-
-With a map:
-
-```go-html-template
-{{ dict "a" 1 "b" 2  | len }} → 2
-{{ dict | len }} → 0
-```
-
-With a collection:
-
-```go-html-template
-{{ site.RegularPages | len }} → 42
-```
-
-You may also determine the number of pages in a collection with:
-
-```go-html-template
-{{ site.RegularPages.Len }} → 42
-```
diff --git a/content/en/functions/lower.md b/content/en/functions/lower.md
deleted file mode 100644 (file)
index 9accf99..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: lower
-description: Converts all characters in the provided string to lowercase.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings,casing]
-signature:
-  - "lower INPUT"
-  - "strings.ToLower INPUT"
-relatedfuncs: []
----
-
-
-Note that `lower` can be applied in your templates in more than one way:
-
-```go-html-template
-{{ lower "BatMan" }} → "batman"
-{{ "BatMan" | lower }} → "batman"
-```
diff --git a/content/en/functions/lt.md b/content/en/functions/lt.md
deleted file mode 100644 (file)
index 9a86515..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: lt
-description: Returns the boolean truth of arg1 < arg2 && arg1 < arg3.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [comparison,operators,logic]
-signature: ["lt ARG1 ARG2 [ARG...]"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ lt 1 1 }} → false
-{{ lt 1 2 }} → true
-{{ lt 2 1 }} → false
-
-{{ lt 1 1 1 }} → false
-{{ lt 1 1 2 }} → false
-{{ lt 1 2 1 }} → false
-{{ lt 1 2 2 }} → true
-
-{{ lt 2 1 1 }} → false
-{{ lt 2 1 2 }} → false
-{{ lt 2 2 1 }} → false
-```
diff --git a/content/en/functions/markdownify.md b/content/en/functions/markdownify.md
deleted file mode 100644 (file)
index 9f1f332..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: markdownify
-description: Renders markdown to HTML.
-keywords: [markdown,content]
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-signature: ["markdownify INPUT"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ .Title | markdownify }}
-```
-
-If the resulting HTML is a single paragraph, Hugo removes the wrapping `p` tags to produce inline HTML as required per the example above.
-
-To keep the wrapping `p` tags for a single paragraph, use the [`.Page.RenderString`] method, setting the `display` option to `block`.
-
-If the resulting HTML is two or more paragraphs, Hugo leaves the wrapping `p` tags in place.
-
-[`.Page.RenderString`]: /functions/renderstring/
-
-{{% note %}}
-Although the `markdownify` function honors [markdown render hooks] when rendering markdown to HTML, use the `.Page.RenderString` method instead of `markdownify` if a render hook accesses `.Page` context. See issue [#9692] for details.
-
-[markdown render hooks]: /templates/render-hooks/
-[#9692]: https://github.com/gohugoio/hugo/issues/9692
-{{% /note %}}
diff --git a/content/en/functions/math.md b/content/en/functions/math.md
deleted file mode 100644 (file)
index 708921f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Math
-description: Hugo provides mathematical operators in templates.
-keywords: [math, operators]
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-toc:
-signature: []
-relatedfuncs: []
----
-
-| Function        | Description                                                                 | Example                                           |
-|-----------------|-----------------------------------------------------------------------------|---------------------------------------------------|
-| `add`           | Adds two or more numbers.                                                   | `{{ add 12 3 2 }}` &rarr; `17`                    |
-|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ add 1.1 2 }}` &rarr; `3.1`                    |
-| `sub`           | Subtracts one or more numbers from the first number.                        | `{{ sub 12 3 2 }}` &rarr; `7`                     |
-|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ sub 3 2.5 }}` &rarr; `0.5`                    |
-| `mul`           | Multiplies two or more numbers.                                             | `{{ mul 12 3 2 }}` &rarr; `72`                    |
-|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ mul 2 3.1 }}` &rarr; `6.2`                    |
-| `div`           | Divides the first number by one or more numbers.                            | `{{ div 12 3 2 }}` &rarr; `2`                     |
-|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ div 6 4.0 }}` &rarr; `1.5`                    |
-| `mod`           | Modulus of two integers.                                                    | `{{ mod 15 3 }}` &rarr; `0`                       |
-| `modBool`       | Boolean of modulus of two integers. Evaluates to `true` if result equals 0. | `{{ modBool 15 3 }}` &rarr; `true`                |
-| `math.Abs`      | Returns the absolute value of the given number.                             | `{{ math.Abs -2.1 }}` &rarr; `2.1`                |
-| `math.Ceil`     | Returns the least integer value greater than or equal to the given number.  | `{{ math.Ceil 2.1 }}` &rarr; `3`                  |
-| `math.Floor`    | Returns the greatest integer value less than or equal to the given number.  | `{{ math.Floor 1.9 }}` &rarr; `1`                 |
-| `math.Log`      | Returns the natural logarithm of the given number.                          | `{{ math.Log 42 }}` &rarr; `3.737`                |
-| `math.Max`      | Returns the greater of all numbers. Accepts scalars, slices, or both.       | `{{ math.Max 1 (slice 2 3) 4 }}` &rarr; `4`       |
-| `math.Min`      | Returns the smaller of all numbers. Accepts scalars, slices, or both.       | `{{ math.Min 1 (slice 2 3) 4 }}` &rarr; `1`       |
-| `math.Product`  | Returns the product of all numbers. Accepts scalars, slices, or both.       | `{{ math.Product 1 (slice 2 3) 4 }}` &rarr; `24`  |
-| `math.Pow`      | Returns the first number raised to the power of the second number.          | `{{ math.Pow 2 3 }}` &rarr; `8`                   |
-| `math.Round`    | Returns the nearest integer, rounding half away from zero.                  | `{{ math.Round 1.5 }}` &rarr; `2`                 |
-| `math.Sqrt`     | Returns the square root of the given number.                                | `{{ math.Sqrt 81 }}` &rarr; `9`                   |
-| `math.Sum`      | Returns the sum of all numbers. Accepts scalars, slices, or both.           | `{{ math.Sum 1 (slice 2 3) 4 }}` &rarr; `10`      |
diff --git a/content/en/functions/math/index.md b/content/en/functions/math/index.md
new file mode 100644 (file)
index 0000000..fd4d10a
--- /dev/null
@@ -0,0 +1,39 @@
+---
+title: math
+description: Hugo provides mathematical operators in templates.
+categories: [functions]
+keywords: []
+
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType:
+  signatures: []
+relatedFunctions: []
+---
+
+| Function        | Description                                                                 | Example                                           |
+|-----------------|-----------------------------------------------------------------------------|---------------------------------------------------|
+| `add`           | Adds two or more numbers.                                                   | `{{ add 12 3 2 }}` &rarr; `17`                    |
+|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ add 1.1 2 }}` &rarr; `3.1`                    |
+| `sub`           | Subtracts one or more numbers from the first number.                        | `{{ sub 12 3 2 }}` &rarr; `7`                     |
+|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ sub 3 2.5 }}` &rarr; `0.5`                    |
+| `mul`           | Multiplies two or more numbers.                                             | `{{ mul 12 3 2 }}` &rarr; `72`                    |
+|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ mul 2 3.1 }}` &rarr; `6.2`                    |
+| `div`           | Divides the first number by one or more numbers.                            | `{{ div 12 3 2 }}` &rarr; `2`                     |
+|                 | *If one of the numbers is a float, the result is a float.*                  | `{{ div 6 4.0 }}` &rarr; `1.5`                    |
+| `mod`           | Modulus of two integers.                                                    | `{{ mod 15 3 }}` &rarr; `0`                       |
+| `modBool`       | Boolean of modulus of two integers. Evaluates to `true` if result equals 0. | `{{ modBool 15 3 }}` &rarr; `true`                |
+| `math.Abs`      | Returns the absolute value of the given number.                             | `{{ math.Abs -2.1 }}` &rarr; `2.1`                |
+| `math.Ceil`     | Returns the least integer value greater than or equal to the given number.  | `{{ math.Ceil 2.1 }}` &rarr; `3`                  |
+| `math.Floor`    | Returns the greatest integer value less than or equal to the given number.  | `{{ math.Floor 1.9 }}` &rarr; `1`                 |
+| `math.Log`      | Returns the natural logarithm of the given number.                          | `{{ math.Log 42 }}` &rarr; `3.737`                |
+| `math.Max`      | Returns the greater of all numbers. Accepts scalars, slices, or both.       | `{{ math.Max 1 (slice 2 3) 4 }}` &rarr; `4`       |
+| `math.Min`      | Returns the smaller of all numbers. Accepts scalars, slices, or both.       | `{{ math.Min 1 (slice 2 3) 4 }}` &rarr; `1`       |
+| `math.Product`  | Returns the product of all numbers. Accepts scalars, slices, or both.       | `{{ math.Product 1 (slice 2 3) 4 }}` &rarr; `24`  |
+| `math.Pow`      | Returns the first number raised to the power of the second number.          | `{{ math.Pow 2 3 }}` &rarr; `8`                   |
+| `math.Round`    | Returns the nearest integer, rounding half away from zero.                  | `{{ math.Round 1.5 }}` &rarr; `2`                 |
+| `math.Sqrt`     | Returns the square root of the given number.                                | `{{ math.Sqrt 81 }}` &rarr; `9`                   |
+| `math.Sum`      | Returns the sum of all numbers. Accepts scalars, slices, or both.           | `{{ math.Sum 1 (slice 2 3) 4 }}` &rarr; `10`      |
diff --git a/content/en/functions/md5.md b/content/en/functions/md5.md
deleted file mode 100644 (file)
index cc5fd31..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: md5
-description: hashes the given input and returns its MD5 checksum.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["md5 INPUT"]
-relatedfuncs: [sha]
----
-
-```go-html-template
-{{ md5 "Hello world, gophers!" }}
-<!-- returns the string "b3029f756f98f79e7f1b7f1d1f0dd53b" -->
-```
-
-This can be useful if you want to use [Gravatar](https://en.gravatar.com/) for generating a unique avatar:
-
-```html
-<img src="https://www.gravatar.com/avatar/{{ md5 "your@email.com" }}?s=100&d=identicon">
-```
diff --git a/content/en/functions/merge.md b/content/en/functions/merge.md
deleted file mode 100644 (file)
index 5fef261..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: merge
-description: "Returns the result of merging two or more maps."
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections]
-signature: ["collections.Merge MAP MAP...", "merge MAP MAP..."]
-relatedfuncs: [dict, append, reflect.IsMap, reflect.IsSlice]
----
-
-Returns the result of merging two or more maps from left to right. If a key already exists, `merge` updates its value. If a key is absent, `merge` inserts the value under the new key.
-
-Key handling is case-insensitive.
-
-The following examples use these map definitions:
-
-```go-html-template
-{{ $m1 := dict "x" "foo" }}
-{{ $m2 := dict "x" "bar" "y" "wibble" }}
-{{ $m3 := dict "x" "baz" "y" "wobble" "z" (dict "a" "huey") }}
-```
-
-Example 1
-
-```go-html-template
-{{ $merged := merge $m1 $m2 $m3 }}
-
-{{ $merged.x }}   → baz
-{{ $merged.y }}   → wobble
-{{ $merged.z.a }} → huey
-```
-
-Example 2
-
-```go-html-template
-{{ $merged := merge $m3 $m2 $m1 }}
-
-{{ $merged.x }}   → foo
-{{ $merged.y }}   → wibble
-{{ $merged.z.a }} → huey
-```
-
-Example 3
-
-```go-html-template
-{{ $merged := merge $m2 $m3 $m1 }}
-
-{{ $merged.x }}   → foo
-{{ $merged.y }}   → wobble
-{{ $merged.z.a }} → huey
-```
-
-Example 4
-
-```go-html-template
-{{ $merged := merge $m1 $m3 $m2 }}
-
-{{ $merged.x }}   → bar
-{{ $merged.y }}   → wibble
-{{ $merged.z.a }} → huey
-```
-
-{{% note %}}
-Regardless of depth, merging only applies to maps. For slices, use [append](/functions/append).
-{{% /note %}}
diff --git a/content/en/functions/ne.md b/content/en/functions/ne.md
deleted file mode 100644 (file)
index 49c69fb..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: ne
-description: Returns the boolean truth of arg1 != arg2 && arg1 != arg3.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [comparison,operators,logic]
-signature: ["ne ARG1 ARG2 [ARG...]"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ ne 1 1 }} → false
-{{ ne 1 2 }} → true
-
-{{ ne 1 1 1 }} → false
-{{ ne 1 1 2 }} → false
-{{ ne 1 2 1 }} → false
-{{ ne 1 2 2 }} → true
-```
diff --git a/content/en/functions/now.md b/content/en/functions/now.md
deleted file mode 100644 (file)
index 68d628f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: now
-description: Returns the current local time 
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [dates,time]
-signature: ["now"]
-relatedfuncs: [Unix,dateFormat]
----
-
-See [`time.Time`](https://godoc.org/time#Time).
-
-For example, building your site on June 24, 2017, with the following templating:
-
-```go-html-template
-<div>
-    <small>&copy; {{ now.Format "2006" }}</small>
-</div>
-```
-
-would produce the following:
-
-```html
-<div>
-    <small>&copy; 2017</small>
-</div>
-```
-
-The above example uses the [`.Format` function](/functions/format), which page includes a full listing of date formatting using Go's layout string.
-
-{{% note %}}
-Older Hugo themes may still be using the obsolete Page’s `.Now` (uppercase with leading dot), which causes build error that looks like the following:
-
-    ERROR ... Error while rendering "..." in "...": ...
-    executing "..." at <.Now.Format>:
-    can't evaluate field Now in type *hugolib.PageOutput
-
-Be sure to use `now` (lowercase with _**no**_ leading dot) in your templating.
-{{% /note %}}
diff --git a/content/en/functions/os.Stat.md b/content/en/functions/os.Stat.md
deleted file mode 100644 (file)
index 51d35ae..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: os.Stat
-description: Returns a FileInfo structure describing a file or directory.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [files]
-signature: ["os.Stat PATH"]
-relatedfuncs: ['os.FileExists','os.ReadDir','os.ReadFile']
----
-The `os.Stat` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
-
-```go-html-template
-{{ $f := os.Stat "README.md" }}
-{{ $f.IsDir }}    → false (bool)
-{{ $f.ModTime }}  → 2021-11-25 10:06:49.315429236 -0800 PST (time.Time)
-{{ $f.Name }}     → README.md (string)
-{{ $f.Size }}     → 241 (int64)
-
-{{ $d := os.Stat "content" }}
-{{ $d.IsDir }}    → true (bool)
-```
-
-Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo).
diff --git a/content/en/functions/os/FileExists.md b/content/en/functions/os/FileExists.md
new file mode 100644 (file)
index 0000000..52cfe32
--- /dev/null
@@ -0,0 +1,46 @@
+---
+title: os.FileExists
+linkTitle: fileExists
+description: Reports whether the file or directory exists.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [fileExists]
+  returnType: bool
+  signatures: [os.FileExists PATH]
+relatedFunctions:
+  - os.FileExists
+  - os.Getenv
+  - os.ReadDir
+  - os.ReadFile
+  - os.Stat
+aliases: [/functions/fileexists]
+---
+
+The `os.FileExists` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
+
+With this directory structure:
+
+```text
+content/
+├── about.md
+├── contact.md
+└── news/
+    ├── article-1.md
+    └── article-2.md
+```
+
+The function returns these values:
+
+```go-html-template
+{{ os.FileExists "content" }} → true
+{{ os.FileExists "content/news" }} → true
+{{ os.FileExists "content/news/article-1" }} → false
+{{ os.FileExists "content/news/article-1.md" }} → true
+{{ os.FileExists "news" }} → true
+{{ os.FileExists "news/article-1" }} → false
+{{ os.FileExists "news/article-1.md" }} → true
+```
diff --git a/content/en/functions/os/Getenv.md b/content/en/functions/os/Getenv.md
new file mode 100644 (file)
index 0000000..16f73f5
--- /dev/null
@@ -0,0 +1,49 @@
+---
+title: os.Getenv
+linkTitle: getenv
+description: Returns the value of an environment variable, or an empty string if the environment variable is not set.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [getenv]
+  returnType: string
+  signatures: [os.Getenv VARIABLE]
+relatedFunctions:
+  - os.FileExists
+  - os.Getenv
+  - os.ReadDir
+  - os.ReadFile
+  - os.Stat
+aliases: [/functions/getenv]
+---
+
+Examples:
+
+```go-html-template
+{{ os.Getenv "HOME" }} → /home/victor
+{{ os.Getenv "USER" }} → victor
+```
+
+You can pass values when building your site:
+
+```bash
+MY_VAR1=foo MY_VAR2=bar hugo
+
+OR
+
+export MY_VAR1=foo
+export MY_VAR2=bar
+hugo
+```
+
+And then retrieve the values within a template:
+
+```go-html-template
+{{ os.Getenv "MY_VAR1" }} → foo
+{{ os.Getenv "MY_VAR2" }} → bar
+```
+
+With Hugo v0.91.0 and later, you must explicitly allow access to environment variables. For details, review [Hugo's Security Policy](/about/security-model/#security-policy). By default, environment variables beginning with `HUGO_` are allowed when using the `os.Getenv` function.
diff --git a/content/en/functions/os/ReadDir.md b/content/en/functions/os/ReadDir.md
new file mode 100644 (file)
index 0000000..d0ed87b
--- /dev/null
@@ -0,0 +1,56 @@
+---
+title: os.ReadDir
+linkTitle: readDir
+description: Returns an array of FileInfo structures sorted by file name, one element for each directory entry.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [readDir]
+  returnType: FileInfo
+  signatures: [os.ReadDir PATH]
+relatedFunctions:
+  - os.FileExists
+  - os.Getenv
+  - os.ReadDir
+  - os.ReadFile
+  - os.Stat
+aliases: [/functions/readdir]
+---
+
+The `os.ReadDir` function resolves the path relative to the root of your project directory. A leading path separator (`/`) is optional.
+
+With this directory structure:
+
+```text
+content/
+├── about.md
+├── contact.md
+└── news/
+    ├── article-1.md
+    └── article-2.md
+```
+
+This template code:
+
+```go-html-template
+{{ range os.ReadDir "content" }}
+  {{ .Name }} → {{ .IsDir }}
+{{ end }}
+```
+
+Produces:
+
+```html
+about.md → false
+contact.md → false
+news → true
+```
+
+Note that `os.ReadDir` is not recursive.
+
+Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo).
+
+For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files).
diff --git a/content/en/functions/os/ReadFile.md b/content/en/functions/os/ReadFile.md
new file mode 100644 (file)
index 0000000..30f2b30
--- /dev/null
@@ -0,0 +1,45 @@
+---
+title: os.ReadFile
+linkTitle: readFile
+description: Returns the contents of a file.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [readFile]
+  returnType: string
+  signatures: [os.ReadFile PATH]
+relatedFunctions:
+  - os.FileExists
+  - os.Getenv
+  - os.ReadDir
+  - os.ReadFile
+  - os.Stat
+aliases: [/functions/readfile]
+---
+
+The `os.ReadFile` function attempts to resolve the path relative to the root of your project directory. If a matching file is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
+
+With a file named README.md in the root of your project directory:
+
+```text
+This is **bold** text.
+```
+
+This template code:
+
+```go-html-template
+{{ os.ReadFile "README.md" }}
+```
+
+Produces:
+
+```html
+This is **bold** text.
+```
+
+Note that `os.ReadFile` returns raw (uninterpreted) content.
+
+For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files).
diff --git a/content/en/functions/os/Stat.md b/content/en/functions/os/Stat.md
new file mode 100644 (file)
index 0000000..dfef3c8
--- /dev/null
@@ -0,0 +1,35 @@
+---
+title: os.Stat
+description: Returns a FileInfo structure describing a file or directory.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: FileInfo
+  signatures: [os.Stat PATH]
+relatedFunctions:
+  - os.FileExists
+  - os.Getenv
+  - os.ReadDir
+  - os.ReadFile
+  - os.Stat
+aliases: [/functions/os.stat]
+---
+
+The `os.Stat` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
+
+```go-html-template
+{{ $f := os.Stat "README.md" }}
+{{ $f.IsDir }}    → false (bool)
+{{ $f.ModTime }}  → 2021-11-25 10:06:49.315429236 -0800 PST (time.Time)
+{{ $f.Name }}     → README.md (string)
+{{ $f.Size }}     → 241 (int64)
+
+{{ $d := os.Stat "content" }}
+{{ $d.IsDir }}    → true (bool)
+```
+
+Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo).
diff --git a/content/en/functions/page/index.md b/content/en/functions/page/index.md
new file mode 100644 (file)
index 0000000..01f0140
--- /dev/null
@@ -0,0 +1,109 @@
+---
+title: page
+description: Provides global access to the .Page object.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: 
+  signatures: [page]
+relatedFunctions:
+  - hugo
+  - page
+  - site
+aliases: [/functions/page]
+---
+
+At the top level of a template that receives the `Page` object in context, these are equivalent:
+
+```go-html-template
+{{ .Params.foo }}
+{{ .Page.Params.foo }}
+{{ page.Params.foo }}
+```
+
+When the `Page` object is not in context, you can use the global `page` function:
+
+```go-html-template
+{{ page.Params.foo }}
+```
+
+{{% note %}}
+Do not use the global `page` function in shortcodes, partials called by shortcodes, or cached partials. See [warnings](#warnings) below.
+{{% /note %}}
+
+## Explanation
+
+Hugo almost always passes a `Page` as the data context into the top level template (e.g., `single.html`). The one exception is the multihost sitemap template. This means that you can access the current page with the `.` variable in the template.
+
+But when you are deeply nested inside of a [content view], [partial], or [render hook], it isn't always practical or possible to access the `Page` object.
+
+Use the global `page` function to access the `Page` object from anywhere in any template.
+
+## Warnings
+
+### Be aware of top-level context
+
+The global `page` function accesses the `Page` object passed into the top-level template. 
+
+With this content structure:
+
+```text
+content/
+├── posts/
+│   ├── post-1.md
+│   ├── post-2.md
+│   └── post-3.md
+└── _index.md      <-- title is "My Home Page"
+```
+
+And this code in the home page template:
+
+```go-html-template
+{{ range site.Sections }}
+  {{ range .Pages }}
+    {{ page.Title }}
+  {{ end }}
+{{ end }}
+```
+
+The rendered output will be:
+
+```text
+My Home Page
+My Home Page
+My Home Page
+```
+
+In the example above, the global `page` function accesses the `Page` object passed into the home page template; it does not access the `Page` object of the iterated pages.
+
+### Be aware of caching
+
+Do not use the global `page` function in:
+
+- Shortcodes
+- Partials called by shortcodes
+- Partials cached by the `partialCached` function
+
+Hugo caches rendered shortcodes. If you use the `global` page function within a shortcode, and the page content is rendered in two or more templates, the cached shortcodes may be incorrect.
+
+Consider this section template:
+
+```go-html-template
+{{ range .Pages }}
+  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+  {{ .Summary }}
+{{ end }}
+```
+
+When you call the `.Summary` method, Hugo renders the page `.Content` including shortcodes. In this case, within a shortcode, the global `page` function accesses the `Page` object of the section page, not the content page.
+
+If Hugo renders the section page before a content page, the cached rendered shortcode will be incorrect. You cannot control the rendering sequence due to concurrency.
+
+[content view]: /getting-started/glossary/#content-view
+[partial]: /getting-started/glossary/#partial
+[render hook]: /getting-started/glossary/#render-hook
+[shortcode]: getting-started/glossary/#shortcode
diff --git a/content/en/functions/param.md b/content/en/functions/param.md
deleted file mode 100644 (file)
index 45ef443..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: .Param
-description: Returns a page parameter, falling back to a site parameter if present.
-signature: ['.Param KEY']
-categories: [functions]
-keywords: ['front matter', 'params']
-menu:
-  docs:
-    parent: functions
----
-
-The `.Param` method on `.Page` looks for the given `KEY` in page parameters, and returns the corresponding value. If it cannot find the `KEY` in page parameters, it looks for the `KEY` in site parameters. If it cannot find the `KEY` in either location, the `.Param` method returns `nil`. 
-
-Site and theme developers commonly set parameters at the site level, allowing content authors to override those parameters at the page level.
-
-For example, to show a table of contents on every page, but allow authors to hide the table of contents as needed:
-
-**Configuration**
-
-{{< code-toggle file="hugo" copy=false >}}
-[params]
-display_toc = true
-{{< /code-toggle >}}
-
-**Content**
-
-{{< code-toggle file="content/example.md" fm=true copy=false >}}
-title = 'Example'
-date = 2023-01-01
-draft = false
-display_toc = false
-{{< /code-toggle >}}
-
-**Template**
-
-{{< code file="layouts/_default/single.html" copy=false >}}
-{{ if .Param "display_toc" }}
-  {{ .TableOfContents }}
-{{ end }}
-{{< /code >}}
-
-The `.Param` method returns the value associated with the given `KEY`, regardless of whether the value is truthy or falsy. If you need to ignore falsy values, use this construct instead:
-
-{{< code file="layouts/_default/single.html" copy=false >}}
-{{ or .Params.foo site.Params.foo }}
-{{< /code >}}
diff --git a/content/en/functions/partialCached.md b/content/en/functions/partialCached.md
deleted file mode 100644 (file)
index 7eed566..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: partialCached
-description: Allows for caching of partials that do not need to be re-rendered on every invocation.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [performance]
-signature: ["partialCached LAYOUT INPUT [VARIANT...]"]
-relatedfuncs: []
----
-
-The `partialCached` template function can offer significant performance gains for complex templates that don't need to be re-rendered on every invocation.
-
-**Note:** Each Site (or language) has its own `partialCached` cache, so each site will execute a partial once.
-
-**Note**: Hugo renders pages in parallel, and will render the partial more than once with concurrent calls to the `partialCached` function. After Hugo caches the rendered partial, new pages entering the build pipeline will use the cached result.
-
-Here is the simplest usage:
-
-```go-html-template
-{{ partialCached "footer.html" . }}
-```
-
-You can also pass additional arguments to `partialCached` to create *variants* of the cached partial. For example, if you have a complex partial that should be identical when rendered for pages within the same section, you could use a variant based upon section so that the partial is only rendered once per section:
-
-{{< code file="partial-cached-example.html" >}}
-{{ partialCached "footer.html" . .Section }}
-{{< /code >}}
-
-If you need to pass additional arguments to create unique variants, you can pass as many variant arguments as you need:
-
-```go-html-template
-{{ partialCached "footer.html" . .Params.country .Params.province }}
-```
-
-Note that the variant arguments are not made available to the underlying partial template. They are only use to create a unique cache key. Since Hugo `0.61.0` you can use any object as cache key(s), not just strings.
-
-See also [The Full Partial Series Part 1: Caching!](https://regisphilibert.com/blog/2019/12/hugo-partial-series-part-1-caching-with-partialcached/).
diff --git a/content/en/functions/partials/Include.md b/content/en/functions/partials/Include.md
new file mode 100644 (file)
index 0000000..ea9dfb3
--- /dev/null
@@ -0,0 +1,67 @@
+---
+title: partials.Include
+linkTitle: partial
+description: Executes the named partial template. If the partial contains a return statement, returns that value, else returns the rendered output.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [partial]
+  returnType: any
+  signatures: ['partials.Include LAYOUT [CONTEXT]']
+relatedFunctions:
+  - partials.Include
+  - partials.IncludeCached
+aliases: [/functions/partial]
+---
+
+In this example we have three partial templates:
+
+```text
+layouts/
+└── partials/
+    ├── average.html
+    ├── breadcrumbs.html
+    └── footer.html
+```
+
+The "average" partial returns the average of one or more numbers. We pass the numbers in context:
+
+```go-html-template
+{{ $numbers := slice 1 6 7 42 }}
+{{ $average := partial "average.html" $numbers }}
+```
+
+The "breadcrumbs" partial renders [breadcrumb navigation], and needs to receive the current page in context:
+
+```go-html-template
+{{ partial "breadcrumbs.html" . }}
+```
+
+The "footer" partial renders the site footer. In this contrived example, the footer does not need access to the current page, so we can omit context:
+
+```go-html-template
+{{ partial "breadcrumbs.html" }}
+```
+
+You can pass anything in context: a page, a page collection, a scalar value, a slice, or a map. For example:
+
+```go-html-template
+{{ $student := dict 
+  "name" "John Doe" 
+  "major" "Finance"
+  "gpa" 4.0
+}}
+{{ partial "render-student-info.html" $student }}
+```
+
+Then, within the partial template:
+
+```go-html-template
+<p>{{ .name }} is majoring in {{ .major }}. Their grade point average is {{ .gpa }}.</p>
+```
+
+
+[breadcrumb navigation]: /content-management/sections/#ancestors-and-descendants
diff --git a/content/en/functions/partials/IncludeCached.md b/content/en/functions/partials/IncludeCached.md
new file mode 100644 (file)
index 0000000..ab9a778
--- /dev/null
@@ -0,0 +1,49 @@
+---
+title: partials.IncludeCached
+linkTitle: partialCached
+description: Allows for caching of partials that do not need to be re-rendered on every invocation.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [partialCached]
+  returnType: any
+  signatures: ['partials.IncludeCached LAYOUT CONTEXT [VARIANT...]']
+relatedFunctions:
+  - partials.Include
+  - partials.IncludeCached
+signatures: 
+  - partials.IncludeCached LAYOUT CONTEXT [VARIANT...]
+  - partialCached LAYOUT CONTEXT [VARIANT...]
+aliases: [/functions/partialcached]
+---
+
+The `partialCached` template function can offer significant performance gains for complex templates that don't need to be re-rendered on every invocation.
+
+**Note:** Each Site (or language) has its own `partialCached` cache, so each site will execute a partial once.
+
+**Note**: Hugo renders pages in parallel, and will render the partial more than once with concurrent calls to the `partialCached` function. After Hugo caches the rendered partial, new pages entering the build pipeline will use the cached result.
+
+Here is the simplest usage:
+
+```go-html-template
+{{ partialCached "footer.html" . }}
+```
+
+You can also pass additional arguments to `partialCached` to create *variants* of the cached partial. For example, if you have a complex partial that should be identical when rendered for pages within the same section, you could use a variant based upon section so that the partial is only rendered once per section:
+
+{{< code file="partial-cached-example.html" >}}
+{{ partialCached "footer.html" . .Section }}
+{{< /code >}}
+
+If you need to pass additional arguments to create unique variants, you can pass as many variant arguments as you need:
+
+```go-html-template
+{{ partialCached "footer.html" . .Params.country .Params.province }}
+```
+
+Note that the variant arguments are not made available to the underlying partial template. They are only use to create a unique cache key. Since Hugo `0.61.0` you can use any object as cache key(s), not just strings.
+
+See also [The Full Partial Series Part 1: Caching!](https://regisphilibert.com/blog/2019/12/hugo-partial-series-part-1-caching-with-partialcached/).
diff --git a/content/en/functions/path.Base.md b/content/en/functions/path.Base.md
deleted file mode 100644 (file)
index 5ea0564..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: path.Base
-description: Base returns the last element of a path.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [path, base]
-signature: ["path.Base PATH"]
-relatedfuncs: [path.BaseName, path.Clean, path.Dir, path.Ext, path.Join, path.Split]
----
-
-`path.Base` returns the last element of `PATH`.
-
-If `PATH` is empty, `.` is returned.
-
-**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
-
-```go-html-template
-{{ path.Base "a/news.html" }} → "news.html"
-{{ path.Base "news.html" }} → "news.html"
-{{ path.Base "a/b/c" }} → "c"
-{{ path.Base "/x/y/z/" }} → "z"
-```
diff --git a/content/en/functions/path.BaseName.md b/content/en/functions/path.BaseName.md
deleted file mode 100644 (file)
index 95a521a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: path.BaseName
-description: BaseName returns the last element of a path, removing the extension if present.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [path, base]
-signature: ["path.BaseName PATH"]
-relatedfuncs: [path.Base, path.Clean, path.Dir, path.Ext, path.Join, path.Split]
----
-
-If `PATH` is empty, `.` is returned.
-
-**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
-
-```go-html-template
-{{ path.BaseName "a/news.html" }} → "news"
-{{ path.BaseName "news.html" }} → "news"
-{{ path.BaseName "a/b/c" }} → "c"
-{{ path.BaseName "/x/y/z/" }} → "z"
-```
diff --git a/content/en/functions/path.Clean.md b/content/en/functions/path.Clean.md
deleted file mode 100644 (file)
index ce53cc9..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: path.Clean
-description: Replaces path separators with slashes (`/`) and removes extraneous separators.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [path, clean]
-signature: ["path.Clean PATH"]
-relatedfuncs: [path.Base, path.BaseName, path.Dir, path.Ext, path.Join, path.Split]
----
-
-`path.Clean` replaces path separators with slashes (`/`) and removes extraneous separators, including trailing separators.
-
-```go-html-template
-{{ path.Clean "foo//bar" }} → "foo/bar"
-{{ path.Clean "/foo/bar/" }} → "/foo/bar"
-```
-
-On a Windows system, if `.File.Path` is `foo\bar.md`, then:
-
-```go-html-template
-{{ path.Clean .File.Path }} → "foo/bar.md"
-```
diff --git a/content/en/functions/path.Dir.md b/content/en/functions/path.Dir.md
deleted file mode 100644 (file)
index 0083a1e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: path.Dir
-description: Dir returns all but the last element of a path.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [path, dir]
-signature: ["path.Dir PATH"]
-relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Ext, path.Join, path.Split]
----
-
-`path.Dir` returns all but the last element of `PATH`, typically `PATH`'s directory.
-
-The returned path will never end in a slash.
-If `PATH` is empty, `.` is returned.
-
-**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
-
-```go-html-template
-{{ path.Dir "a/news.html" }} → "a"
-{{ path.Dir "news.html" }} → "."
-{{ path.Dir "a/b/c" }} → "a/b"
-{{ path.Dir "/x/y/z" }} → "/x/y"
-```
diff --git a/content/en/functions/path.Ext.md b/content/en/functions/path.Ext.md
deleted file mode 100644 (file)
index 2e19466..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: path.Ext
-description: Ext returns the file name extension of a path.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [path, ext, extension]
-signature: ["path.Ext PATH"]
-relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Dir, path.Join, path.Split]
----
-
-`path.Ext` returns the file name extension `PATH`.
-
-The extension is the suffix beginning at the final dot in the final slash-separated element `PATH`;
-it is empty if there is no dot.
-
-**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
-
-```go-html-template
-{{ path.Ext "a/b/c/news.html" }} → ".html"
-```
diff --git a/content/en/functions/path.Join.md b/content/en/functions/path.Join.md
deleted file mode 100644 (file)
index 5ac5ac4..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: path.Join
-description: Join path elements into a single path.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [path, join]
-signature: ["path.Join ELEMENT..."]
-relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Dir, path.Ext, path.Split]
----
-
-`path.Join` joins path elements into a single path, adding a separating slash if necessary.
-All empty strings are ignored.
-
-**Note:** All path elements on Windows are converted to slash ('/') separators.
-
-```go-html-template
-{{ path.Join "partial" "news.html" }} → "partial/news.html"
-{{ path.Join "partial/" "news.html" }} → "partial/news.html"
-{{ path.Join "foo/baz" "bar" }} → "foo/baz/bar"
-```
diff --git a/content/en/functions/path.Split.md b/content/en/functions/path.Split.md
deleted file mode 100644 (file)
index aa91578..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: path.Split
-description: Split path immediately following the final slash.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [path, split]
-signature: ["path.Split PATH"]
-relatedfuncs: [path.Base, path.BaseName, path.Clean, path.Dir, path.Ext, path.Join]
----
-
-`path.Split` splits `PATH` immediately following the final slash, separating it into a directory and a base component.
-
-The returned values have the property that `PATH` = `DIR`+`BASE`.
-If there is no slash in `PATH`, it returns an empty directory and the base is set to `PATH`.
-
-**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
-
-```go-html-template
-{{ $dirFile := path.Split "a/news.html" }} → $dirFile.Dir → "a/", $dirFile.File → "news.html"
-{{ $dirFile := path.Split "news.html" }} → $dirFile.Dir → "", $dirFile.File → "news.html"
-{{ $dirFile := path.Split "a/b/c" }} → $dirFile.Dir → "a/b/", $dirFile.File →  "c"
-```
diff --git a/content/en/functions/path/Base.md b/content/en/functions/path/Base.md
new file mode 100644 (file)
index 0000000..c008735
--- /dev/null
@@ -0,0 +1,35 @@
+---
+title: path.Base
+description: Base returns the last element of a path.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [path.Base PATH]
+relatedFunctions:
+  - path.Base
+  - path.BaseName
+  - path.Clean
+  - path.Dir
+  - path.Ext
+  - path.Join
+  - path.Split
+aliases: [/functions/path.base]
+---
+
+`path.Base` returns the last element of `PATH`.
+
+If `PATH` is empty, `.` is returned.
+
+**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
+
+```go-html-template
+{{ path.Base "a/news.html" }} → "news.html"
+{{ path.Base "news.html" }} → "news.html"
+{{ path.Base "a/b/c" }} → "c"
+{{ path.Base "/x/y/z/" }} → "z"
+```
diff --git a/content/en/functions/path/BaseName.md b/content/en/functions/path/BaseName.md
new file mode 100644 (file)
index 0000000..a357ed4
--- /dev/null
@@ -0,0 +1,33 @@
+---
+title: path.BaseName
+description: BaseName returns the last element of a path, removing the extension if present.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [path.BaseName PATH]
+relatedFunctions:
+  - path.Base
+  - path.BaseName
+  - path.Clean
+  - path.Dir
+  - path.Ext
+  - path.Join
+  - path.Split
+aliases: [/functions/path.basename]
+---
+
+If `PATH` is empty, `.` is returned.
+
+**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
+
+```go-html-template
+{{ path.BaseName "a/news.html" }} → "news"
+{{ path.BaseName "news.html" }} → "news"
+{{ path.BaseName "a/b/c" }} → "c"
+{{ path.BaseName "/x/y/z/" }} → "z"
+```
diff --git a/content/en/functions/path/Clean.md b/content/en/functions/path/Clean.md
new file mode 100644 (file)
index 0000000..98160c5
--- /dev/null
@@ -0,0 +1,35 @@
+---
+title: path.Clean
+description: Replaces path separators with slashes (`/`) and removes extraneous separators.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [path.Clean PATH]
+relatedFunctions:
+  - path.Base
+  - path.BaseName
+  - path.Clean
+  - path.Dir
+  - path.Ext
+  - path.Join
+  - path.Split
+aliases: [/functions/path.clean]
+---
+
+`path.Clean` replaces path separators with slashes (`/`) and removes extraneous separators, including trailing separators.
+
+```go-html-template
+{{ path.Clean "foo//bar" }} → "foo/bar"
+{{ path.Clean "/foo/bar/" }} → "/foo/bar"
+```
+
+On a Windows system, if `.File.Path` is `foo\bar.md`, then:
+
+```go-html-template
+{{ path.Clean .File.Path }} → "foo/bar.md"
+```
diff --git a/content/en/functions/path/Dir.md b/content/en/functions/path/Dir.md
new file mode 100644 (file)
index 0000000..0a29286
--- /dev/null
@@ -0,0 +1,36 @@
+---
+title: path.Dir
+description: Dir returns all but the last element of a path.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [path.Dir PATH]
+relatedFunctions:
+  - path.Base
+  - path.BaseName
+  - path.Clean
+  - path.Dir
+  - path.Ext
+  - path.Join
+  - path.Split
+aliases: [/functions/path.dir]
+---
+
+`path.Dir` returns all but the last element of `PATH`, typically `PATH`'s directory.
+
+The returned path will never end in a slash.
+If `PATH` is empty, `.` is returned.
+
+**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
+
+```go-html-template
+{{ path.Dir "a/news.html" }} → "a"
+{{ path.Dir "news.html" }} → "."
+{{ path.Dir "a/b/c" }} → "a/b"
+{{ path.Dir "/x/y/z" }} → "/x/y"
+```
diff --git a/content/en/functions/path/Ext.md b/content/en/functions/path/Ext.md
new file mode 100644 (file)
index 0000000..6b56859
--- /dev/null
@@ -0,0 +1,33 @@
+---
+title: path.Ext
+description: Ext returns the file name extension of a path.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [path.Ext PATH]
+relatedFunctions:
+  - path.Base
+  - path.BaseName
+  - path.Clean
+  - path.Dir
+  - path.Ext
+  - path.Join
+  - path.Split
+aliases: [/functions/path.ext]
+---
+
+`path.Ext` returns the file name extension `PATH`.
+
+The extension is the suffix beginning at the final dot in the final slash-separated element `PATH`;
+it is empty if there is no dot.
+
+**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
+
+```go-html-template
+{{ path.Ext "a/b/c/news.html" }} → ".html"
+```
diff --git a/content/en/functions/path/Join.md b/content/en/functions/path/Join.md
new file mode 100644 (file)
index 0000000..4f5c51c
--- /dev/null
@@ -0,0 +1,34 @@
+---
+title: path.Join
+description: Join path elements into a single path.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [path.Join ELEMENT...]
+relatedFunctions:
+  - path.Base
+  - path.BaseName
+  - path.Clean
+  - path.Dir
+  - path.Ext
+  - path.Join
+  - path.Split
+  - urls.JoinPath
+aliases: [/functions/path.join]
+---
+
+`path.Join` joins path elements into a single path, adding a separating slash if necessary.
+All empty strings are ignored.
+
+**Note:** All path elements on Windows are converted to slash ('/') separators.
+
+```go-html-template
+{{ path.Join "partial" "news.html" }} → "partial/news.html"
+{{ path.Join "partial/" "news.html" }} → "partial/news.html"
+{{ path.Join "foo/baz" "bar" }} → "foo/baz/bar"
+```
diff --git a/content/en/functions/path/Split.md b/content/en/functions/path/Split.md
new file mode 100644 (file)
index 0000000..bde4127
--- /dev/null
@@ -0,0 +1,43 @@
+---
+title: path.Split
+description: Split path immediately following the final slash.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: DirFile
+  signatures: [path.Split PATH]
+relatedFunctions:
+  - path.Base
+  - path.BaseName
+  - path.Clean
+  - path.Dir
+  - path.Ext
+  - path.Join
+  - path.Split
+aliases: [/functions/path.split]
+---
+
+`path.Split` splits `PATH` immediately following the final slash, separating it into a directory and a base component.
+
+The returned values have the property that `PATH` = `DIR`+`BASE`.
+If there is no slash in `PATH`, it returns an empty directory and the base is set to `PATH`.
+
+**Note:** On Windows, `PATH` is converted to slash (`/`) separators.
+
+```go-html-template
+{{ $dirFile := path.Split "a/news.html" }}
+{{ $dirFile.Dir }} → "a/" 
+{{ $dirFile.File }} → "news.html"
+
+{{ $dirFile := path.Split "news.html" }}
+{{ $dirFile.Dir }} → ""
+{{ $dirFile.File }} → "news.html"
+
+{{ $dirFile := path.Split "a/b/c" }}
+{{ $dirFile.Dir }} → "a/b/"
+{{ $dirFile.File }} → "c"
+```
diff --git a/content/en/functions/plainify.md b/content/en/functions/plainify.md
deleted file mode 100644 (file)
index 8767a46..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: plainify
-description: Returns a string with all HTML tags removed.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["plainify INPUT"]
-relatedfuncs: [jsonify]
----
-
-```go-html-template
-{{ "<b>BatMan</b>" | plainify }} → "BatMan"
-```
-
-See also the `.PlainWords`, `.Plain`, and `.RawContent` [page variables][pagevars].
-
-[pagevars]: /variables/page/
diff --git a/content/en/functions/pluralize.md b/content/en/functions/pluralize.md
deleted file mode 100644 (file)
index bd08608..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: pluralize
-description: Pluralizes the given word according to a set of common English pluralization rules
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["pluralize INPUT"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ "cat" | pluralize }} → "cats"
-```
diff --git a/content/en/functions/print.md b/content/en/functions/print.md
deleted file mode 100644 (file)
index 4af0b6b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: print
-description: Prints the default representation of the given arguments using the standard `fmt.Print` function.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["print INPUT"]
-relatedfuncs: []
----
-
-See [the go doc](https://golang.org/pkg/fmt/) for additional information.
-
-```go-html-template
-{{ print "foo" }} → "foo"
-{{ print "foo" "bar" }} → "foobar"
-{{ print (slice 1 2 3) }} → [1 2 3]
-```
diff --git a/content/en/functions/printf.md b/content/en/functions/printf.md
deleted file mode 100644 (file)
index 66f85e1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: printf
-description: Formats a string using the standard `fmt.Sprintf` function.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["printf FORMAT INPUT"]
-relatedfuncs: []
----
-
-See [the go doc](https://golang.org/pkg/fmt/) for additional information.
-
-```go-html-template
-{{ i18n ( printf "combined_%s" $var ) }}
-```
-
-```go-html-template
-{{ printf "formatted %.2f" 3.1416 }}
-```
diff --git a/content/en/functions/println.md b/content/en/functions/println.md
deleted file mode 100644 (file)
index 6ad57f4..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: println
-description: Prints the default representation of the given argument using the standard `fmt.Print` function and enforces a linebreak.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["println INPUT"]
-relatedfuncs: []
----
-
-See [the go doc](https://golang.org/pkg/fmt/) for additional information. `\n` denotes the linebreak but isn't printed in the templates as seen below:
-
-```go-html-template
-{{ println "foo" }} → "foo\n"
-```
diff --git a/content/en/functions/querify.md b/content/en/functions/querify.md
deleted file mode 100644 (file)
index b21b3a0..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: querify
-description: Takes a set or slice of key-value pairs and returns a query string to be appended to URLs.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls]
-signature: ["querify KEY VALUE [KEY VALUE]...", "querify COLLECTION"]
-relatedfuncs: []
----
-
-`querify` takes a set or slice of key-value pairs and returns a [query string](https://en.wikipedia.org/wiki/Query_string) that can be appended to a URL.
-
-The following examples create a link to a search results page on Google.
-
-```go-html-template
-<a href="https://www.google.com?{{ (querify "q" "test" "page" 3) | safeURL }}">Search</a>
-
-{{ $qs := slice "q" "test" "page" 3 }}
-<a href="https://www.google.com?{{ (querify $qs) | safeURL }}">Search</a>
-```
-
-Both of these examples render the following HTML:
-
-```html
-<a href="https://www.google.com?page=3&q=test">Search</a>
-```
diff --git a/content/en/functions/range.md b/content/en/functions/range.md
deleted file mode 100644 (file)
index da0a4d7..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: range
-description: Iterates over a map, array, or slice.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [iteration]
-signature: ["range COLLECTION"]
-relatedfuncs: []
----
-
-Just like in the Go programming language, Go and Hugo templates make heavy use of `range` to iterate over a map, array or slice. Other templating languages use a foreach for the equivalent functionality.
-
-`range` is fundamental to templating in Hugo. (See the [Introduction to Hugo Templates](/templates/introduction/) for more examples.)
diff --git a/content/en/functions/readdir.md b/content/en/functions/readdir.md
deleted file mode 100644 (file)
index a76e3c5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: readDir
-description: Returns an array of FileInfo structures sorted by file name, one element for each directory entry.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [files]
-signature: ["os.ReadDir PATH", "readDir PATH"]
-relatedfuncs: ['os.FileExists','os.ReadFile','os.Stat']
----
-The `os.ReadDir` function resolves the path relative to the root of your project directory. A leading path separator (`/`) is optional.
-
-With this directory structure:
-
-```text
-content/
-├── about.md
-├── contact.md
-└── news/
-    ├── article-1.md
-    └── article-2.md
-```
-
-This template code:
-
-```go-html-template
-{{ range os.ReadDir "content" }}
-  {{ .Name }} → {{ .IsDir }}
-{{ end }}
-```
-
-Produces:
-
-```html
-about.md --> false
-contact.md --> false
-news --> true
-```
-
-Note that `os.ReadDir` is not recursive.
-
-Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo).
-
-For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files).
diff --git a/content/en/functions/readfile.md b/content/en/functions/readfile.md
deleted file mode 100644 (file)
index c700d7a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: readFile
-description: Returns the contents of a file.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [files]
-signature: ["os.ReadFile PATH", "readFile PATH"]
-relatedfuncs: ['os.FileExists','os.ReadDir','os.Stat']
----
-The `os.ReadFile` function attempts to resolve the path relative to the root of your project directory. If a matching file is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional.
-
-With a file named README.md in the root of your project directory:
-
-```text
-This is **bold** text.
-```
-
-This template code:
-
-```go-html-template
-{{ os.ReadFile "README.md" }}
-```
-
-Produces:
-
-```html
-This is **bold** text.
-```
-
-Note that `os.ReadFile` returns raw (uninterpreted) content.
-
-For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files).
diff --git a/content/en/functions/ref.md b/content/en/functions/ref.md
deleted file mode 100644 (file)
index 2d05ca4..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: ref
-description: Returns the absolute permalink to a page.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [cross references, anchors]
-signature: ["ref . PAGE"]
-relatedfuncs: [relref]
----
-
-This function takes two arguments:
-
-- The context of the page from which to resolve relative paths, typically the current page (`.`)
-- The path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site.
-
-```go-html-template
-{{ ref . "about" }}
-{{ ref . "about#anchor" }}
-{{ ref . "about.md" }}
-{{ ref . "about.md#anchor" }}
-{{ ref . "#anchor" }}
-{{ ref . "/blog/my-post" }}
-{{ ref . "/blog/my-post.md" }}
-```
-
-To return the absolute permalink to another language version of a page:
-
-```go-html-template
-{{ ref . (dict "path" "about.md" "lang" "fr") }}
-```
-
-To return the absolute permalink to another Output Format of a page:
-
-```go-html-template
-{{ ref . (dict "path" "about.md" "outputFormat" "rss") }}
-```
-
-Hugo emits an error or warning if the page cannot be uniquely resolved. The error behavior is configurable; see [Ref and RelRef Configuration](/content-management/cross-references/#ref-and-relref-configuration).
-
-This function is used by Hugo's built-in [`ref`](/content-management/shortcodes/#ref-and-relref) shortcode. For a detailed explanation of how to leverage this shortcode for content management, see [Links and Cross References](/content-management/cross-references/).
diff --git a/content/en/functions/reflect.IsMap.md b/content/en/functions/reflect.IsMap.md
deleted file mode 100644 (file)
index aa8da7d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: reflect.IsMap
-description: Reports if a value is a map.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [reflect, reflection, kind]
-signature: ["reflect.IsMap INPUT"]
-relatedfuncs: [reflect.IsSlice]
----
-
-`reflect.IsMap` reports if `VALUE` is a map.  Returns a boolean.
-
-```go-html-template
-{{ reflect.IsMap (dict "key" "value") }} → true
-{{ reflect.IsMap "yo" }} → false
-```
diff --git a/content/en/functions/reflect.IsSlice.md b/content/en/functions/reflect.IsSlice.md
deleted file mode 100644 (file)
index 0a29d8f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: reflect.IsSlice
-description: Reports if a value is a slice.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [reflect, reflection, kind]
-signature: ["reflect.IsSlice INPUT"]
-relatedfuncs: [reflect.IsMap]
----
-
-`reflect.IsSlice` reports if `VALUE` is a slice.  Returns a boolean.
-
-```go-html-template
-{{ reflect.IsSlice (slice 1 2 3) }} → true
-{{ reflect.IsSlice "yo" }} → false
-```
diff --git a/content/en/functions/reflect/IsMap.md b/content/en/functions/reflect/IsMap.md
new file mode 100644 (file)
index 0000000..7d89bb3
--- /dev/null
@@ -0,0 +1,23 @@
+---
+title: reflect.IsMap
+description: Reports whether the value is a map.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [reflect.IsMap INPUT]
+namespace: reflect
+relatedFunctions:
+  - reflect.IsMap
+  - reflect.IsSlice
+aliases: [/functions/reflect.ismap]
+---
+
+```go-html-template
+{{ reflect.IsMap (dict "key" "value") }} → true
+{{ reflect.IsMap "yo" }} → false
+```
diff --git a/content/en/functions/reflect/IsSlice.md b/content/en/functions/reflect/IsSlice.md
new file mode 100644 (file)
index 0000000..09bab71
--- /dev/null
@@ -0,0 +1,23 @@
+---
+title: reflect.IsSlice
+description: Reports whether the value is a slice.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [reflect.IsSlice INPUT]
+namespace: reflect
+relatedFunctions:
+  - reflect.IsMap
+  - reflect.IsSlice
+aliases: [/functions/reflect.isslice]
+---
+
+```go-html-template
+{{ reflect.IsSlice (slice 1 2 3) }} → true
+{{ reflect.IsSlice "yo" }} → false
+```
diff --git a/content/en/functions/relLangURL.md b/content/en/functions/relLangURL.md
deleted file mode 100644 (file)
index 78b823c..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: relLangURL
-description: Returns a relative URL with a language prefix, if any.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls, multilingual,i18n]
-signature: ["relLangURL INPUT"]
----
-
-Use this function with both monolingual and multilingual configurations. The URL returned by this function depends on:
-
-- Whether the input begins with a slash
-- The `baseURL` in site configuration
-- The language prefix, if any
-
-In examples that follow, the project is multilingual with content in both Español (`es`) and English (`en`). The default language is Español. The returned values are from the English site.
-
-### Input does not begin with a slash
-
-If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ relLangURL "" }}           →   /en/
-{{ relLangURL "articles" }}   →   /en/articles
-{{ relLangURL "style.css" }}  →   /en/style.css
-``` 
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ relLangURL "" }}           →   /docs/en/
-{{ relLangURL "articles" }}   →   /docs/en/articles
-{{ relLangURL "style.css" }}  →   /docs/en/style.css
-```
-
-### Input begins with a slash
-
-If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ relLangURL "/" }}          →   /en/
-{{ relLangURL "/articles" }}  →   /en/articles
-{{ relLangURL "/style.css" }} →   /en/style.css
-``` 
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ relLangURL "/" }}          →   /en/
-{{ relLangURL "/articles" }}  →   /en/articles
-{{ relLangURL "/style.css" }} →   /en/style.css
-```
-
-{{% note %}}
-The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
-{{% /note %}}
diff --git a/content/en/functions/relref.md b/content/en/functions/relref.md
deleted file mode 100644 (file)
index 98ad724..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: relref
-description: Returns the relative permalink to a page.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [cross references, anchors]
-signature: ["relref . PAGE"]
-relatedfuncs: [ref]
----
-
-This function takes two arguments:
-
-- The context of the page from which to resolve relative paths, typically the current page (`.`)
-- The path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site.
-
-```go-html-template
-{{ relref . "about" }}
-{{ relref . "about#anchor" }}
-{{ relref . "about.md" }}
-{{ relref . "about.md#anchor" }}
-{{ relref . "#anchor" }}
-{{ relref . "/blog/my-post" }}
-{{ relref . "/blog/my-post.md" }}
-```
-
-The permalink returned is relative to the protocol+host portion of the baseURL specified in the site configuration. For example:
-
-Code|baseURL|Permalink
-:--|:--|:--
-`{{ relref . "/about" }}`|`http://example.org/`|`/about/`
-`{{ relref . "/about" }}`|`http://example.org/x/`|`/x/about/`
-
-To return the relative permalink to another language version of a page:
-
-```go-html-template
-{{ relref . (dict "path" "about.md" "lang" "fr") }}
-```
-
-To return the relative permalink to another Output Format of a page:
-
-```go-html-template
-{{ relref . (dict "path" "about.md" "outputFormat" "rss") }}
-```
-
-Hugo emits an error or warning if the page cannot be uniquely resolved. The error behavior is configurable; see [Ref and RelRef Configuration](/content-management/cross-references/#ref-and-relref-configuration).
-
-This function is used by Hugo's built-in [`relref`](/content-management/shortcodes/#ref-and-relref) shortcode. For a detailed explanation of how to leverage this shortcode for content management, see [Links and Cross References](/content-management/cross-references/).
diff --git a/content/en/functions/relurl.md b/content/en/functions/relurl.md
deleted file mode 100644 (file)
index c8278c9..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: relURL
-description: Returns a relative URL.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls]
-signature: ["relURL INPUT"]
----
-
-With multilingual configurations, use the [`relLangURL`] function instead. The URL returned by this function depends on:
-
-- Whether the input begins with a slash
-- The `baseURL` in site configuration
-
-### Input does not begin with a slash
-
-If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ relURL "" }}           →   /
-{{ relURL "articles" }}   →   /articles
-{{ relURL "style.css" }}  →   /style.css
-```
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ relURL "" }}           →   /docs/
-{{ relURL "articles" }}   →   /docs/articles
-{{ relURL "style.css" }}  →   /docs/style.css
-```
-
-### Input begins with a slash
-
-If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
-
-With `baseURL = https://example.org/`
-
-```go-html-template
-{{ relURL "/" }}          →   /
-{{ relURL "/articles" }}  →   /articles
-{{ relURL "style.css" }}  →   /style.css
-```
-
-With `baseURL = https://example.org/docs/`
-
-```go-html-template
-{{ relURL "/" }}          →   /
-{{ relURL "/articles" }}  →   /articles
-{{ relURL "/style.css" }} →   /style.css
-```
-
-{{% note %}}
-The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
-{{% /note %}}
-
-[`relLangURL`]: /functions/rellangurl/
diff --git a/content/en/functions/render.md b/content/en/functions/render.md
deleted file mode 100644 (file)
index 4e46486..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: .Render
-description: Takes a view to apply when rendering content.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [views]
-signature: [".Render LAYOUT"]
-relatedfuncs: []
----
-
-The view is an alternative layout and should be a file name that points to a template in one of the locations specified in the documentation for [Content Views](/templates/views).
-
-This function is only available when applied to a single piece of content within a [list context].
-
-This example could render a piece of content using the content view located at `/layouts/_default/summary.html`:
-
-```go-html-template
-{{ range .Pages }}
-  {{ .Render "summary" }}
-{{ end }}
-```
-
-[list context]: /templates/lists/
diff --git a/content/en/functions/replace.md b/content/en/functions/replace.md
deleted file mode 100644 (file)
index 4c150bf..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: replace
-description: Replaces all occurrences of the search string with the replacement string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [replace]
-signature: 
-  - "replace INPUT OLD NEW [LIMIT]"
-  - "strings.Replace INPUT OLD NEW [LIMIT]"
-relatedfuncs: [replaceRE]
----
-
-Replace returns a copy of `INPUT` with all occurrences of `OLD` replaced with `NEW`.
-The number of replacements can be limited with an optional `LIMIT` argument.
-
-```
-`{{ replace "Batman and Robin" "Robin" "Catwoman" }}`
-→ "Batman and Catwoman"
-
-{{ replace "aabbaabb" "a" "z" 2 }} → "zzbbaabb"
-```
diff --git a/content/en/functions/replacere.md b/content/en/functions/replacere.md
deleted file mode 100644 (file)
index 4dba19b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: replaceRE
-description: Returns a string, replacing all occurrences of a regular expression with a replacement pattern.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [regex]
-signature:
-  - "replaceRE PATTERN REPLACEMENT INPUT [LIMIT]"
-  - "strings.ReplaceRE PATTERN REPLACEMENT INPUT [LIMIT]"
-relatedfuncs: [findRE, FindRESubmatch, replace]
----
-By default, `replaceRE` replaces all matches. You can limit the number of matches with an optional LIMIT argument.
-
-{{% readfile file="/functions/common/regular-expressions.md" %}}
-
-This example replaces two or more consecutive hyphens with a single hyphen:
-
-```go-html-template
-{{ $s := "a-b--c---d" }}
-{{ replaceRE `(-{2,})` "-" $s }} → a-b-c-d
-```
-
-To limit the number of replacements to one:
-
-```go-html-template
-{{ $s := "a-b--c---d" }}
-{{ replaceRE `(-{2,})` "-" $s 1 }} → a-b-c---d
-```
-
-You can use `$1`, `$2`, etc. within the replacement string to insert the groups captured within the regular expression:
-
-```go-html-template
-{{ $s := "http://gohugo.io/docs" }}
-{{ replaceRE "^https?://([^/]+).*" "$1" $s }} → gohugo.io
-```
-
-{{% note %}}
-You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
-{{% /note %}}
-
-[RE2]: https://github.com/google/re2/wiki/Syntax
-[string literal]: https://go.dev/ref/spec#String_literals
diff --git a/content/en/functions/safe/CSS.md b/content/en/functions/safe/CSS.md
new file mode 100644 (file)
index 0000000..d5dcdfb
--- /dev/null
@@ -0,0 +1,38 @@
+---
+title: safe.CSS
+linkTitle: safeCSS
+description: Declares the provided string as a known "safe" CSS string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [safeCSS]
+  returnType: template.CSS
+  signatures: [safe.CSS INPUT]
+relatedFunctions:
+  - safe.CSS
+  - safe.HTML
+  - safe.HTMLAttr
+  - safe.JS
+  - safe.JSStr
+  - safe.URL
+aliases: [/functions/safecss]
+---
+
+In this context, *safe* means CSS content that matches any of the following:
+
+1. The CSS3 stylesheet production, such as `p { color: purple }`.
+2. The CSS3 rule production, such as `a[href=~"https:"].foo#bar`.
+3. CSS3 declaration productions, such as `color: red; margin: 2px`.
+4. The CSS3 value production, such as `rgba(0, 0, 255, 127)`.
+
+Example: Given `style = "color: red;"` defined in the front matter of your `.md` file:
+
+* <span class="good">`<p style="{{ .Params.style | safeCSS }}">…</p>` &rarr; `<p style="color: red;">…</p>`</span>
+* <span class="bad">`<p style="{{ .Params.style }}">…</p>` &rarr; `<p style="ZgotmplZ">…</p>`</span>
+
+{{% note %}}
+"ZgotmplZ" is a special value that indicates that unsafe content reached a CSS or URL context.
+{{% /note %}}
diff --git a/content/en/functions/safe/HTML.md b/content/en/functions/safe/HTML.md
new file mode 100644 (file)
index 0000000..ea3afe8
--- /dev/null
@@ -0,0 +1,44 @@
+---
+title: safe.HTML
+linkTitle: safeHTML
+description: Declares a provided string as a "safe" HTML document to avoid escaping by Go templates.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [safeHTML]
+  returnType: template.HTML
+  signatures: [safe.HTML INPUT]
+relatedFunctions:
+  - safe.CSS
+  - safe.HTML
+  - safe.HTMLAttr
+  - safe.JS
+  - safe.JSStr
+  - safe.URL
+aliases: [/functions/safehtml]
+---
+
+It should not be used for HTML from a third-party, or HTML with unclosed tags or comments.
+
+Given a site-wide [`hugo.toml`][config] with the following `copyright` value:
+
+{{< code-toggle file="hugo" >}}
+copyright = "© 2015 Jane Doe.  <a href=\"https://creativecommons.org/licenses/by/4.0/\">Some rights reserved</a>."
+{{< /code-toggle >}}
+
+`{{ .Site.Copyright | safeHTML }}` in a template would then output:
+
+```html
+© 2015 Jane Doe.  <a href="https://creativecommons.org/licenses/by/4.0/">Some rights reserved</a>.
+```
+
+However, without the `safeHTML` function, html/template assumes `.Site.Copyright` to be unsafe and therefore escapes all HTML tags and renders the whole string as plain text:
+
+```html
+<p>© 2015 Jane Doe.  &lt;a href=&#34;https://creativecommons.org/licenses by/4.0/&#34;&gt;Some rights reserved&lt;/a&gt;.</p>
+```
+
+[config]: /getting-started/configuration/
diff --git a/content/en/functions/safe/HTMLAttr.md b/content/en/functions/safe/HTMLAttr.md
new file mode 100644 (file)
index 0000000..7d1b06c
--- /dev/null
@@ -0,0 +1,60 @@
+---
+title: safe.HTMLAttr
+linkTitle: safeHTMLAttr
+description: Declares the provided string as a safe HTML attribute.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [safeHTMLAttr]
+  returnType: template.HTMLAttr
+  signatures: [safe.HTMLAttr INPUT]
+relatedFunctions:
+  - safe.CSS
+  - safe.HTML
+  - safe.HTMLAttr
+  - safe.JS
+  - safe.JSStr
+  - safe.URL
+aliases: [/functions/safehtmlattr]
+---
+
+Given a site configuration that contains this menu entry:
+
+{{< code-toggle file="hugo" >}}
+[[menu.main]]
+  name = "IRC"
+  url = "irc://irc.freenode.net/#golang"
+{{< /code-toggle >}}
+
+Attempting to use the `url` value directly in an attribute:
+
+```go-html-template
+{{ range site.Menus.main }}
+  <a href="{{ .URL }}">{{ .Name }}</a>
+{{ end }}
+``` 
+
+Will produce:
+
+```html
+<a href="#ZgotmplZ">IRC</a>
+```
+
+`ZgotmplZ` is a special value, inserted by Go's [template/html] package, that indicates that unsafe content reached a CSS or URL context.
+
+To indicate that the HTML attribute is safe:
+
+```go-html-template
+{{ range site.Menus.main }}
+  <a {{ printf "href=%q" .URL | safeHTMLAttr }}>{{ .Name }}</a>
+{{ end }}
+```
+
+{{% note %}}
+As demonstrated above, you must pass the HTML attribute name _and_ value through the function. Applying `safeHTMLAttr` to the attribute value has no effect.
+{{% /note %}}
+
+[template/html]: https://pkg.go.dev/html/template
diff --git a/content/en/functions/safe/JS.md b/content/en/functions/safe/JS.md
new file mode 100644 (file)
index 0000000..e679b5f
--- /dev/null
@@ -0,0 +1,31 @@
+---
+title: safe.JS
+linkTitle: safeJS
+description: Declares the provided string as a known safe JavaScript string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [safeJS]
+  returnType: template.JS
+  signatures: [safe.JS INPUT]
+relatedFunctions:
+  - safe.CSS
+  - safe.HTML
+  - safe.HTMLAttr
+  - safe.JS
+  - safe.JSStr
+  - safe.URL
+aliases: [/functions/safejs]
+---
+
+In this context, *safe* means the string encapsulates a known safe EcmaScript5 Expression (e.g., `(x + y * z())`).
+
+Template authors are responsible for ensuring that typed expressions do not break the intended precedence and that there is no statement/expression ambiguity as when passing an expression like `{ foo:bar() }\n['foo']()`, which is both a valid expression and a valid program with a very different meaning.
+
+Example: Given `hash = "619c16f"` defined in the front matter of your `.md` file:
+
+* <span class="good">`<script>var form_{{ .Params.hash | safeJS }};…</script>` &rarr; `<script>var form_619c16f;…</script>`</span>
+* <span class="bad">`<script>var form_{{ .Params.hash }};…</script>` &rarr; `<script>var form_"619c16f";…</script>`</span>
diff --git a/content/en/functions/safe/JSStr.md b/content/en/functions/safe/JSStr.md
new file mode 100644 (file)
index 0000000..790de3a
--- /dev/null
@@ -0,0 +1,61 @@
+---
+title: safe.JSStr
+linkTitle: safeJSStr
+description: Declares the provided string as a known safe JavaScript string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [safeJSStr]
+  returnType: template.JSStr
+  signatures: [safe.JSStr INPUT]
+relatedFunctions:
+  - safe.CSS
+  - safe.HTML
+  - safe.HTMLAttr
+  - safe.JS
+  - safe.JSStr
+  - safe.URL
+aliases: [/functions/safejsstr]
+---
+
+Encapsulates a sequence of characters meant to be embedded between quotes in a JavaScript expression. Use of this type presents a security risk: the encapsulated content should come from a trusted source, as it will be included verbatim in the template output.
+  
+Without declaring a variable to be a safe JavaScript string:
+
+```go-html-template
+{{ $title := "Lilo & Stitch" }}
+<script>
+  const a = "Title: " + {{ $title }};
+</script>
+```
+
+Rendered:
+
+
+```html
+<script>
+  const a = "Title: " + "Lilo \u0026 Stitch";
+</script>
+```
+
+To avoid escaping by Go's [html/template] package:
+
+```go-html-template
+{{ $title := "Lilo & Stitch" }}
+<script>
+  const a = "Title: " + {{ $title | safeJSStr }};
+</script>
+```
+
+Rendered:
+
+```html
+<script>
+  const a = "Title: " + "Lilo & Stitch";
+</script>
+```
+
+[html/template]: https://pkg.go.dev/html/template
diff --git a/content/en/functions/safe/URL.md b/content/en/functions/safe/URL.md
new file mode 100644 (file)
index 0000000..edc62ff
--- /dev/null
@@ -0,0 +1,75 @@
+---
+title: safe.URL
+linkTitle: safeURL
+description: Declares the provided string as a safe URL or URL substring.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [safeURL]
+  returnType: template.URL
+  signatures: [safe.URL INPUT]
+relatedFunctions:
+  - safe.CSS
+  - safe.HTML
+  - safe.HTMLAttr
+  - safe.JS
+  - safe.JSStr
+  - safe.URL
+aliases: [/functions/safeurl]
+---
+
+`safeURL` declares the provided string as a "safe" URL or URL substring (see [RFC 3986]). A URL like `javascript:checkThatFormNotEditedBeforeLeavingPage()` from a trusted source should go in the page, but by default dynamic `javascript:` URLs are filtered out since they are a frequently exploited injection vector.
+
+Without `safeURL`, only the URI schemes `http:`, `https:` and `mailto:` are considered safe by Go templates. If any other URI schemes (e.g., `irc:` and `javascript:`) are detected, the whole URL will be replaced with `#ZgotmplZ`. This is to "defang" any potential attack in the URL by rendering it useless.
+
+The following examples use a [site `hugo.toml`][configuration] with the following [menu entry][menus]:
+
+{{< code-toggle file="hugo" copy=false >}}
+[[menu.main]]
+name = "IRC: #golang at freenode"
+url = "irc://irc.freenode.net/#golang"
+{{< /code-toggle >}}
+
+The following is an example of a sidebar partial that may be used in conjunction with the preceding front matter example:
+
+{{< code file="layouts/partials/bad-url-sidebar-menu.html" copy=false >}}
+<!-- This unordered list may be part of a sidebar menu -->
+<ul>
+  {{ range .Site.Menus.main }}
+    <li><a href="{{ .URL }}">{{ .Name }}</a></li>
+  {{ end }}
+</ul>
+{{< /code >}}
+
+This partial would produce the following HTML output:
+
+```html
+<!-- This unordered list may be part of a sidebar menu -->
+<ul>
+  <li><a href="#ZgotmplZ">IRC: #golang at freenode</a></li>
+</ul>
+```
+
+The odd output can be remedied by adding ` | safeURL` to our `.URL` page variable:
+
+{{< code file="layouts/partials/correct-url-sidebar-menu.html" copy=false >}}
+<!-- This unordered list may be part of a sidebar menu -->
+<ul>
+    <li><a href="{{ .URL | safeURL }}">{{ .Name }}</a></li>
+</ul>
+{{< /code >}}
+
+With the `.URL` page variable piped through `safeURL`, we get the desired output:
+
+```html
+<ul class="sidebar-menu">
+  <li><a href="irc://irc.freenode.net/#golang">IRC: #golang at freenode</a></li>
+</ul>
+```
+
+[configuration]: /getting-started/configuration/
+[menus]: /content-management/menus/
+[RFC 3986]: https://tools.ietf.org/html/rfc3986
diff --git a/content/en/functions/safeCSS.md b/content/en/functions/safeCSS.md
deleted file mode 100644 (file)
index 9359528..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: safeCSS
-description: Declares the provided string as a known "safe" CSS string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [style,css,strings]
-signature: ["safeCSS INPUT"]
-relatedfuncs: [safeHTML,safeHTMLAttr,]
----
-
-In this context, *safe* means CSS content that matches any of the following:
-
-1. The CSS3 stylesheet production, such as `p { color: purple }`.
-2. The CSS3 rule production, such as `a[href=~"https:"].foo#bar`.
-3. CSS3 declaration productions, such as `color: red; margin: 2px`.
-4. The CSS3 value production, such as `rgba(0, 0, 255, 127)`.
-
-Example: Given `style = "color: red;"` defined in the front matter of your `.md` file:
-
-* <span class="good">`<p style="{{ .Params.style | safeCSS }}">…</p>` &rarr; `<p style="color: red;">…</p>`</span>
-* <span class="bad">`<p style="{{ .Params.style }}">…</p>` &rarr; `<p style="ZgotmplZ">…</p>`</span>
-
-{{% note %}}
-"ZgotmplZ" is a special value that indicates that unsafe content reached a CSS or URL context.
-{{% /note %}}
diff --git a/content/en/functions/safeHTML.md b/content/en/functions/safeHTML.md
deleted file mode 100644 (file)
index 4e74b44..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: safeHTML
-description: Declares a provided string as a "safe" HTML document to avoid escaping by Go templates.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["safeHTML INPUT"]
-relatedfuncs: []
----
-
-It should not be used for HTML from a third-party, or HTML with unclosed tags or comments.
-
-Given a site-wide [`hugo.toml`][config] with the following `copyright` value:
-
-{{< code-toggle file="hugo" >}}
-copyright = "© 2015 Jane Doe.  <a href=\"https://creativecommons.org/licenses/by/4.0/\">Some rights reserved</a>."
-{{< /code-toggle >}}
-
-`{{ .Site.Copyright | safeHTML }}` in a template would then output:
-
-```html
-© 2015 Jane Doe.  <a href="https://creativecommons.org/licenses/by/4.0/">Some rights reserved</a>.
-```
-
-However, without the `safeHTML` function, html/template assumes `.Site.Copyright` to be unsafe and therefore escapes all HTML tags and renders the whole string as plain text:
-
-```html
-<p>© 2015 Jane Doe.  &lt;a href=&#34;https://creativecommons.org/licenses by/4.0/&#34;&gt;Some rights reserved&lt;/a&gt;.</p>
-```
-
-[config]: /getting-started/configuration/
diff --git a/content/en/functions/safeHTMLAttr.md b/content/en/functions/safeHTMLAttr.md
deleted file mode 100644 (file)
index bced1ba..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: safeHTMLAttr
-description: Declares the provided string as a safe HTML attribute.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["safeHTMLAttr INPUT"]
-relatedfuncs: []
----
-
-Given a site configuration that contains this menu entry:
-
-{{< code-toggle file="hugo" >}}
-[[menu.main]]
-  name = "IRC"
-  url = "irc://irc.freenode.net/#golang"
-{{< /code-toggle >}}
-
-Attempting to use the `url` value directly in an attribute:
-
-```go-html-template
-{{ range site.Menus.main }}
-  <a href="{{ .URL }}">{{ .Name }}</a>
-{{ end }}
-``` 
-
-Will produce:
-
-```html
-<a href="#ZgotmplZ">IRC</a>
-```
-
-`ZgotmplZ` is a special value, inserted by Go's [template/html] package, that indicates that unsafe content reached a CSS or URL context.
-
-To indicate that the HTML attribute is safe:
-
-```go-html-template
-{{ range site.Menus.main }}
-  <a {{ printf "href=%q" .URL | safeHTMLAttr }}>{{ .Name }}</a>
-{{ end }}
-```
-
-{{% note %}}
-As demonstrated above, you must pass the HTML attribute name _and_ value through the function. Applying `safeHTMLAttr` to the attribute value has no effect.
-{{% /note %}}
-
-[template/html]: https://pkg.go.dev/html/template
diff --git a/content/en/functions/safeJS.md b/content/en/functions/safeJS.md
deleted file mode 100644 (file)
index 48c2c36..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: safeJS
-description: Declares the provided string as a known safe JavaScript string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["safeJS INPUT"]
-relatedfuncs: []
----
-
-In this context, *safe* means the string encapsulates a known safe EcmaScript5 Expression (e.g., `(x + y * z())`).
-
-Template authors are responsible for ensuring that typed expressions do not break the intended precedence and that there is no statement/expression ambiguity as when passing an expression like `{ foo:bar() }\n['foo']()`, which is both a valid expression and a valid program with a very different meaning.
-
-Example: Given `hash = "619c16f"` defined in the front matter of your `.md` file:
-
-* <span class="good">`<script>var form_{{ .Params.hash | safeJS }};…</script>` &rarr; `<script>var form_619c16f;…</script>`</span>
-* <span class="bad">`<script>var form_{{ .Params.hash }};…</script>` &rarr; `<script>var form_"619c16f";…</script>`</span>
diff --git a/content/en/functions/safeURL.md b/content/en/functions/safeURL.md
deleted file mode 100644 (file)
index b21de49..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
----
-title: safeURL
-description: Declares the provided string as a safe URL or URL substring.
-keywords: [strings,urls]
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-signature: ["safeURL INPUT"]
-relatedfuncs: []
----
-
-`safeURL` declares the provided string as a "safe" URL or URL substring (see [RFC 3986]). A URL like `javascript:checkThatFormNotEditedBeforeLeavingPage()` from a trusted source should go in the page, but by default dynamic `javascript:` URLs are filtered out since they are a frequently exploited injection vector.
-
-Without `safeURL`, only the URI schemes `http:`, `https:` and `mailto:` are considered safe by Go templates. If any other URI schemes (e.g., `irc:` and `javascript:`) are detected, the whole URL will be replaced with `#ZgotmplZ`. This is to "defang" any potential attack in the URL by rendering it useless.
-
-The following examples use a [site `hugo.toml`][configuration] with the following [menu entry][menus]:
-
-{{< code-toggle file="hugo" copy=false >}}
-[[menu.main]]
-name = "IRC: #golang at freenode"
-url = "irc://irc.freenode.net/#golang"
-{{< /code-toggle >}}
-
-The following is an example of a sidebar partial that may be used in conjunction with the preceding front matter example:
-
-{{< code file="layouts/partials/bad-url-sidebar-menu.html" copy=false >}}
-<!-- This unordered list may be part of a sidebar menu -->
-<ul>
-  {{ range .Site.Menus.main }}
-    <li><a href="{{ .URL }}">{{ .Name }}</a></li>
-  {{ end }}
-</ul>
-{{< /code >}}
-
-This partial would produce the following HTML output:
-
-```html
-<!-- This unordered list may be part of a sidebar menu -->
-<ul>
-  <li><a href="#ZgotmplZ">IRC: #golang at freenode</a></li>
-</ul>
-```
-
-The odd output can be remedied by adding ` | safeURL` to our `.URL` page variable:
-
-{{< code file="layouts/partials/correct-url-sidebar-menu.html" copy=false >}}
-<!-- This unordered list may be part of a sidebar menu -->
-<ul>
-    <li><a href="{{ .URL | safeURL }}">{{ .Name }}</a></li>
-</ul>
-{{< /code >}}
-
-With the `.URL` page variable piped through `safeURL`, we get the desired output:
-
-```html
-<ul class="sidebar-menu">
-  <li><a href="irc://irc.freenode.net/#golang">IRC: #golang at freenode</a></li>
-</ul>
-```
-
-[configuration]: /getting-started/configuration/
-[menus]: /content-management/menus/
-[RFC 3986]: https://tools.ietf.org/html/rfc3986
diff --git a/content/en/functions/scratch.md b/content/en/functions/scratch.md
deleted file mode 100644 (file)
index 16e502b..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
----
-title: .Scratch
-description: Acts as a "scratchpad" to store and manipulate data.
-keywords: [iteration]
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-toc:
-signature: []
-relatedfuncs: []
-aliases: [/extras/scratch/,/doc/scratch/]
----
-
-Scratch is a Hugo feature designed to conveniently manipulate data in a Go Template world. It is either a Page or Shortcode method for which the resulting data will be attached to the given context, or it can live as a unique instance stored in a variable.
-
-{{% note %}}
-Note that Scratch was initially created as a workaround for a [Go template scoping limitation](https://github.com/golang/go/issues/10608) that affected Hugo versions prior to 0.48. For a detailed analysis of `.Scratch` and contextual use cases, see [this blog post](https://regisphilibert.com/blog/2017/04/hugo-scratch-explained-variable/).
-{{% /note %}}
-
-### Contexted `.Scratch` vs. local `newScratch`
-
-Since Hugo 0.43, there are two different ways of using Scratch:
-
-#### The Page's `.Scratch`
-
-`.Scratch` is available as a Page method or a Shortcode method and attaches the "scratched" data to the given page. Either a Page or a Shortcode context is required to use `.Scratch`.
-
-```go-html-template
-{{ .Scratch.Set "greeting" "bonjour" }}
-{{ range .Pages }}
-  {{ .Scratch.Set "greeting" (print "bonjour" .Title) }}
-{{ end }}
-```
-
-#### The local `newScratch`
-
-A Scratch instance can also be assigned to any variable using the `newScratch` function. In this case, no Page or Shortcode context is required and the scope of the scratch is only local. The methods detailed below are available from the variable the Scratch instance was assigned to.
-
-```go-html-template
-{{ $data := newScratch }}
-{{ $data.Set "greeting" "hola" }}
-```
-
-### Methods
-
-A Scratch has the following methods:
-
-{{% note %}}
-Note that the following examples assume a [local Scratch instance](#the-local-newscratch) has been stored in `$scratch`.
-{{% /note %}}
-
-#### .Set
-
-Set the value of a given key.
-
-```go-html-template
-{{ $scratch.Set "greeting" "Hello" }}
-```
-
-#### .Get
-
-Get the value of a given key.
-
-```go-html-template
-{{ $scratch.Set "greeting" "Hello" }}
-----
-{{ $scratch.Get "greeting" }} > Hello
-```
-
-#### .Add
-
-Add a given value to existing value(s) of the given key.
-
-For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be [appended](/functions/append/) to that list.
-
-```go-html-template
-{{ $scratch.Add "greetings" "Hello" }}
-{{ $scratch.Add "greetings" "Welcome" }}
-----
-{{ $scratch.Get "greetings" }} > HelloWelcome
-```
-
-```go-html-template
-{{ $scratch.Add "total" 3 }}
-{{ $scratch.Add "total" 7 }}
-----
-{{ $scratch.Get "total" }} > 10
-```
-
-```go-html-template
-{{ $scratch.Add "greetings" (slice "Hello") }}
-{{ $scratch.Add "greetings" (slice "Welcome" "Cheers") }}
-----
-{{ $scratch.Get "greetings" }} > []interface {}{"Hello", "Welcome", "Cheers"}
-```
-
-#### .SetInMap
-
-Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
-
-```go-html-template
-{{ $scratch.SetInMap "greetings" "english" "Hello" }}
-{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
-----
-{{ $scratch.Get "greetings" }} > map[french:Bonjour english:Hello]
-```
-
-#### .DeleteInMap
-Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
-
-```go-html-template
-{{ .Scratch.SetInMap "greetings" "english" "Hello" }}
-{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }}
-----
-{{ .Scratch.DeleteInMap "greetings" "english" }}
-----
-{{ .Scratch.Get "greetings" }} > map[french:Bonjour]
-```
-
-#### .GetSortedMapValues
-
-Return an array of values from `key` sorted by `mapKey`.
-
-```go-html-template
-{{ $scratch.SetInMap "greetings" "english" "Hello" }}
-{{ $scratch.SetInMap "greetings" "french" "Bonjour" }}
-----
-{{ $scratch.GetSortedMapValues "greetings" }} > [Hello Bonjour]
-```
-
-#### .Delete
-
-Remove the given key.
-
-```go-html-template
-{{ $scratch.Set "greeting" "Hello" }}
-----
-{{ $scratch.Delete "greeting" }}
-```
-
-#### .Values
-
-Return the raw backing map. Note that you should only use this method on the locally scoped Scratch instances you obtain via [`newScratch`](#the-local-newscratch), not `.Page.Scratch` etc., as that will lead to concurrency issues.
-
-
-[pagevars]: /variables/page/
diff --git a/content/en/functions/seq.md b/content/en/functions/seq.md
deleted file mode 100644 (file)
index 75edf5d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: seq
-description: Returns a slice of integers.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["seq LAST", "seq FIRST LAST", "seq FIRST INCREMENT LAST"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ seq 2 }} → [1 2]
-{{ seq 0 2 }} → [0 1 2]
-{{ seq -2 2 }} → [-2 -1 0 1 2]
-{{ seq -2 2 2 }} → [-2 0 2]
-```
-
-Iterate over a sequence of integers:
-
-```go-html-template
-{{ $product := 1 }}
-{{ range seq 4 }}
-  {{ $product = mul $product . }}
-{{ end }}
-{{ $product }} → 24
-```
diff --git a/content/en/functions/sha.md b/content/en/functions/sha.md
deleted file mode 100644 (file)
index 1f6cf8d..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: sha
-description: Hashes the given input and returns either an SHA1 or SHA256 checksum.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [sha,checksum]
-signature: ["sha1 INPUT", "sha256 INPUT"]
-relatedfuncs: [md5]
-aliases: [sha1, sha256]
----
-
-`sha1` hashes the given input and returns its SHA1 checksum.
-
-```go-html-template
-{{ sha1 "Hello world, gophers!" }}
-<!-- returns the string "c8b5b0e33d408246e30f53e32b8f7627a7a649d4" -->
-```
-
-`sha256` hashes the given input and returns its SHA256 checksum.
-
-```go-html-template
-{{ sha256 "Hello world, gophers!" }}
-<!-- returns the string "6ec43b78da9669f50e4e422575c54bf87536954ccd58280219c393f2ce352b46" -->
-```
diff --git a/content/en/functions/shuffle.md b/content/en/functions/shuffle.md
deleted file mode 100644 (file)
index 4de66da..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: shuffle
-description: Returns a random permutation of a given array or slice.
-keywords: [ordering]
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-signature: ["shuffle COLLECTION"]
-relatedfuncs: [seq]
----
-
-
-```go-html-template
-{{ shuffle (seq 1 2 3) }} → [3 1 2] 
-{{ shuffle (slice "a" "b" "c") }} → [b a c] 
-```
-
-The result will vary from one build to the next.
diff --git a/content/en/functions/singularize.md b/content/en/functions/singularize.md
deleted file mode 100644 (file)
index 4e56684..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: singularize
-description: Converts a word according to a set of common English singularization rules.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings,singular]
-signature: ["singularize INPUT"]
-relatedfuncs: []
----
-
-`{{ "cats" | singularize }}` → "cat"
-
-See also the `.Data.Singular` [taxonomy variable](/variables/taxonomy/) for singularizing taxonomy names.
diff --git a/content/en/functions/site.md b/content/en/functions/site.md
deleted file mode 100644 (file)
index b408f71..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: site
-description: The `site` function provides global access to the same data as the `.Site` page method.
-keywords: []
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-toc:
-signature: ["site"]
-relatedfuncs: ["hugo"]
----
-
-`site` is a global function which returns the same data as the `.Site` page method. See: [Site Variables](/variables/site).
diff --git a/content/en/functions/site/index.md b/content/en/functions/site/index.md
new file mode 100644 (file)
index 0000000..3341bff
--- /dev/null
@@ -0,0 +1,35 @@
+---
+title: site
+description: Provides global access to the .Site object.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: 
+  signatures: [site]
+relatedFunctions:
+  - hugo
+  - page
+  - site
+aliases: [/functions/site]
+---
+
+At the top level of a template that receives the `Site` object in context, these are equivalent:
+
+```go-html-template
+{{ .Site.Params.foo }}
+{{ site.Params.foo }}
+```
+
+When the `Site` object is not in context, use the global `site` function:
+
+```go-html-template
+{{ site.Params.foo }}
+```
+
+{{% note %}}
+To simplify your templates, use the global `site` function regardless of whether the `Site` object is in context.
+{{% /note %}}
diff --git a/content/en/functions/slice.md b/content/en/functions/slice.md
deleted file mode 100644 (file)
index d2ef628..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: slice
-description: Creates a slice (array) of all passed arguments.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [slice, array, interface]
-signature: ["slice ITEM..."]
-relatedfuncs: []
----
-
-One use case is the concatenation of elements in combination with the [`delimit` function]:
-
-{{< code file="slice.html" >}}
-{{ $sliceOfStrings := slice "foo" "bar" "buzz" }}
-<!-- returns the slice [ "foo", "bar", "buzz"] -->
-{{ delimit ($sliceOfStrings) ", " }}
-<!-- returns the string "foo, bar, buzz" -->
-{{< /code >}}
-
-
-[`delimit` function]: /functions/delimit/
diff --git a/content/en/functions/slicestr.md b/content/en/functions/slicestr.md
deleted file mode 100644 (file)
index bbdf956..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: slicestr
-description: Creates a slice of a half-open range, including start and end indices.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature:
-  - "slicestr STRING START [END]"
-  - "strings.SliceString STRING START [END]"
-relatedfuncs: []
----
-
-For example, 1 and 4 creates a slice including elements 1 through 3.
-The `end` index can be omitted; it defaults to the string's length.
-
-* `{{ slicestr "BatMan" 3 }}` → "Man"
-* `{{ slicestr "BatMan" 0 3 }}` → "Bat"
diff --git a/content/en/functions/sort.md b/content/en/functions/sort.md
deleted file mode 100644 (file)
index aa15f5c..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
----
-title: sort
-description: Sorts slices, maps, and page collections.
-categories: [functions]
-signature: ["sort COLLECTION [KEY] [ORDER]"]
-menu:
-  docs:
-    parent: functions
-keywords: [ordering,sorting,lists]
-toc: true
----
-
-The `KEY` is optional when sorting slices in ascending order, otherwise it is required. When sorting slices, use the literal `value` in place of the `KEY`. See examples below.
-
-The `ORDER` may be either `asc` (ascending) or `desc` (descending). The default sort order is ascending.
-
-## Sort a slice
-
-The examples below assume this site configuration:
-
-{{< code-toggle file="hugo" copy=false >}}
-[params]
-grades = ['b','a','c']
-{{< /code-toggle >}}
-
-### Ascending order {#slice-ascending-order}
-
-Sort slice elements in ascending order using either of these constructs:
-
-{{< code file="layouts/_default/single.html" copy=false >}}
-{{ sort site.Params.grades }} → [a b c]
-{{ sort site.Params.grades "value" "asc" }} → [a b c]
-{{< /code >}}
-
-In the examples above, `value` is the `KEY` representing the value of the slice element.
-
-### Descending order {#slice-descending-order}
-
-Sort slice elements in descending order:
-
-{{< code file="layouts/_default/single.html" copy=false >}}
-{{ sort site.Params.grades "value" "desc" }} → [c b a]
-{{< /code >}}
-
-In the example above, `value` is the `KEY` representing the value of the slice element.
-
-## Sort a map
-
-The examples below assume this site configuration:
-
-{{< code-toggle file="hugo" copy=false >}}
-[params.authors.a]
-firstName = "Marius"
-lastName  = "Pontmercy"
-[params.authors.b]
-firstName = "Victor"
-lastName  = "Hugo"
-[params.authors.c]
-firstName = "Jean"
-lastName  = "Valjean"
-{{< /code-toggle >}}
-
-{{% note %}}
-When sorting maps, the `KEY` argument must be lowercase.
-{{% /note %}}
-
-### Ascending order {#map-ascending-order}
-
-Sort map objects in ascending order using either of these constructs:
-
-{{< code file="layouts/_default/single.html" copy=false >}}
-{{ range sort site.Params.authors "firstname" }}
-  {{ .firstName }}
-{{ end }}
-
-{{ range sort site.Params.authors "firstname" "asc" }}
-  {{ .firstName }}
-{{ end }}
-{{< /code >}}
-
-These produce:
-
-```text
-Jean Marius Victor
-```
-
-### Descending order {#map-descending-order}
-
-Sort map objects in descending order:
-
-{{< code file="layouts/_default/single.html" copy=false >}}
-{{ range sort site.Params.authors "firstname" "desc" }}
-  {{ .firstName }}
-{{ end }}
-{{< /code >}}
-
-This produces:
-
-```text
-Victor Marius Jean
-```
-
-## Sort a page collection
-
-Although you can use the `sort` function to sort a page collection, Hugo provides [built-in methods for sorting page collections] by:
-
-- weight
-- linktitle
-- title
-- front matter parameter
-- date
-- expiration date
-- last modified date
-- publish date
-- length
-
-In this contrived example, sort the site's regular pages by `.Type` in descending order:
-
-{{< code file="layouts/_default/home.html" copy=false >}}
-{{ range sort site.RegularPages "Type" "desc" }}
-  <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
-{{ end }}
-{{< /code >}}
-
-
-[built-in methods for sorting page collections]: /templates/lists/#order-content
diff --git a/content/en/functions/split.md b/content/en/functions/split.md
deleted file mode 100644 (file)
index d2f3cc8..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: split
-description: Returns a slice of strings by splitting STRING by DELIM.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["split STRING DELIM"]
-relatedfuncs: []
----
-
-Examples:
-
-```go-html-template
-{{ split "tag1,tag2,tag3" "," }} → ["tag1", "tag2", "tag3"]
-{{ split "abc" "" }} → ["a", "b", "c"]
-```
-
-
-{{% note %}}
-`split` essentially does the opposite of [delimit](/functions/delimit). While `split` creates a slice from a string, `delimit` creates a string from a slice.
-{{% /note %}}
diff --git a/content/en/functions/store.md b/content/en/functions/store.md
deleted file mode 100644 (file)
index d57194d..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
----
-title: .Store
-description: Returns a Scratch that is not reset on server rebuilds.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [scratch]
-signature: []
----
-
-The `.Store` method on `.Page` returns a [Scratch] to store and manipulate data. In contrast to the `.Scratch` method, this Scratch is not reset on server rebuilds.
-
-[Scratch]: /functions/scratch/
-
-### Methods
-
-#### .Set
-
-Sets the value of a given key.
-
-```go-html-template
-{{ .Store.Set "greeting" "Hello" }}
-```
-
-#### .Get
-
-Gets the value of a given key.
-
-```go-html-template
-{{ .Store.Set "greeting" "Hello" }}
-
-{{ .Store.Get "greeting" }} → Hello
-```
-
-#### .Add
-
-Adds a given value to existing value(s) of the given key.
-
-For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list.
-
-```go-html-template
-{{ .Store.Add "greetings" "Hello" }}
-{{ .Store.Add "greetings" "Welcome" }}
-
-{{ .Store.Get "greetings" }} → HelloWelcome
-```
-
-```go-html-template
-{{ .Store.Add "total" 3 }}
-{{ .Store.Add "total" 7 }}
-
-{{ .Store.Get "total" }} → 10
-```
-
-```go-html-template
-{{ .Store.Add "greetings" (slice "Hello") }}
-{{ .Store.Add "greetings" (slice "Welcome" "Cheers") }}
-
-{{ .Store.Get "greetings" }} → []interface {}{"Hello", "Welcome", "Cheers"}
-```
-
-#### .SetInMap
-
-Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`.
-
-```go-html-template
-{{ .Store.SetInMap "greetings" "english" "Hello" }}
-{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
-
-{{ .Store.Get "greetings" }} → map[french:Bonjour english:Hello]
-```
-
-#### .DeleteInMap
-
-Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`.
-
-```go-html-template
-{{ .Store.SetInMap "greetings" "english" "Hello" }}
-{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
-{{ .Store.DeleteInMap "greetings" "english" }}
-
-{{ .Store.Get "greetings" }} → map[french:Bonjour]
-```
-
-#### .GetSortedMapValues
-
-Returns an array of values from `key` sorted by `mapKey`.
-
-```go-html-template
-{{ .Store.SetInMap "greetings" "english" "Hello" }}
-{{ .Store.SetInMap "greetings" "french" "Bonjour" }}
-
-{{ .Store.GetSortedMapValues "greetings" }} → [Hello Bonjour]
-```
-
-#### .Delete
-
-Removes the given key.
-
-```go-html-template
-{{ .Store.Set "greeting" "Hello" }}
-
-{{ .Store.Delete "greeting" }}
-```
diff --git a/content/en/functions/string.md b/content/en/functions/string.md
deleted file mode 100644 (file)
index df9d071..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
----
-title: string
-description: Cast a value to a string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [cast,strings]
-signature: ["string INPUT"]
-relatedfuncs: []
----
-
-With a decimal (base 10) input:
-
-```go-html-template
-{{ string 11 }} → 11 (string)
-{{ string "11" }} → 11 (string)
-
-{{ string 11.1 }} → 11.1 (string)
-{{ string "11.1" }} → 11.1 (string)
-
-{{ string 11.9 }} → 11.9 (string)
-{{ string "11.9" }} → 11.9 (string)
-```
-
-With a binary (base 2) input:
-
-```go-html-template
-{{ string 0b11 }} → 3 (string)
-{{ string "0b11" }} → 0b11 (string)
-```
-
-With an octal (base 8) input (use either notation):
-
-```go-html-template
-{{ string 011 }} → 9 (string)
-{{ string "011" }} → 011 (string)
-
-{{ string 0o11 }} → 9 (string)
-{{ string "0o11" }} → 0o11 (string)
-```
-
-With a hexadecimal (base 16) input:
-
-```go-html-template
-{{ string 0x11 }} → 17 (string)
-{{ string "0x11" }} → 0x11 (string)
-```
diff --git a/content/en/functions/strings.Contains.md b/content/en/functions/strings.Contains.md
deleted file mode 100644 (file)
index 44cb73b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: strings.Contains
-description: Reports whether a string contains a substring.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [string strings substring contains]
-signature: ["strings.Contains STRING SUBSTRING"]
-relatedfuncs: [strings.ContainsAny]
----
-
-    {{ strings.Contains "Hugo" "go" }} → true
-
-The check is case sensitive: 
-
-    {{ strings.Contains "Hugo" "Go" }} → false
diff --git a/content/en/functions/strings.ContainsAny.md b/content/en/functions/strings.ContainsAny.md
deleted file mode 100644 (file)
index 36fa870..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: strings.ContainsAny
-description: Reports whether a string contains any character from a given string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [string strings substring contains any]
-signature: ["strings.ContainsAny STRING CHARACTERS"]
-relatedfuncs: [strings.Contains]
----
-
-    {{ strings.ContainsAny "Hugo" "gm" }} → true
-
-The check is case sensitive: 
-
-    {{ strings.ContainsAny "Hugo" "Gm" }} → false
diff --git a/content/en/functions/strings.ContainsNonSpace.md b/content/en/functions/strings.ContainsNonSpace.md
deleted file mode 100644 (file)
index eafe292..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: strings.ContainsNonSpace
-description: Reports whether a string contains any non-space characters as defined by Unicode’s White Space property.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [whitespace space]
-signature: ["strings.ContainsNonSpace STRING"]
-relatedfuncs: ["strings.Contains","strings.ContainsAny"]
----
-
-```go-html-template
-{{ strings.ContainsNonSpace "\n" }}     → false
-{{ strings.ContainsNonSpace " " }}      → false
-{{ strings.ContainsNonSpace "\n abc" }} → true
-```
-
-Common white space characters include:
-
-```text
-'\t', '\n', '\v', '\f', '\r', ' '
-```
-
-See the [Unicode Character Database] for a complete list.
-
-[Unicode Character Database]: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
diff --git a/content/en/functions/strings.Count.md b/content/en/functions/strings.Count.md
deleted file mode 100644 (file)
index 7c39456..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: strings.Count
-description: Returns the number of non-overlapping instances of a substring within a string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [count, counting, character count]
-signature: ["strings.Count SUBSTR STRING"]
-relatedfuncs: []
----
-
-If `SUBSTR` is an empty string, this function returns 1 plus the number of Unicode code points in `STRING`.
-
-Example|Result
-:--|:--
-`{{ "aaabaab" \| strings.Count "a" }}`|5
-`{{ "aaabaab" \| strings.Count "aa" }}`|2
-`{{ "aaabaab" \| strings.Count "aaa" }}`|1
-`{{ "aaabaab" \| strings.Count "" }}`|8
diff --git a/content/en/functions/strings.FirstUpper.md b/content/en/functions/strings.FirstUpper.md
deleted file mode 100644 (file)
index fab82a2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: strings.FirstUpper
-description: Capitalizes the first character of a given string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings capitalize uppercase first]
-signature: ["strings.FirstUpper STRING"]
----
-
-    {{ strings.FirstUpper "foo" }} → "Foo"
diff --git a/content/en/functions/strings.HasPrefix.md b/content/en/functions/strings.HasPrefix.md
deleted file mode 100644 (file)
index 70317a4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: strings.HasPrefix
-description: Tests whether a string begins with prefix.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["hasPrefix STRING PREFIX","strings.HasPrefix STRING PREFIX"]
-relatedfuncs: [hasSuffix]
-aliases: [/functions/hasprefix/]
----
-
-```go-html-template
-{{ hasPrefix "Hugo" "Hu" }} → true
-```
diff --git a/content/en/functions/strings.HasSuffix.md b/content/en/functions/strings.HasSuffix.md
deleted file mode 100644 (file)
index 3ead121..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: strings.HasSuffix
-description: Tests whether a string ends with suffix.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["hasSuffix STRING SUFFIX","strings.HasSuffix STRING SUFFIX"]
-relatedfuncs: [hasPrefix]
-aliases: [/functions/hassuffix/]
----
-
-```go-html-template
-{{ hasSuffix "Hugo" "go" }} → true
-```
diff --git a/content/en/functions/strings.Repeat.md b/content/en/functions/strings.Repeat.md
deleted file mode 100644 (file)
index 99b2fe5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: strings.Repeat
-description: Returns INPUT repeated COUNT times.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["strings.Repeat COUNT INPUT"]
-relatedfuncs: []
----
-
-```go-html-template
-{{ strings.Repeat 3 "yo" }} → "yoyoyo"
-{{ "yo" | strings.Repeat 3 }} → "yoyoyo"
-```
diff --git a/content/en/functions/strings.RuneCount.md b/content/en/functions/strings.RuneCount.md
deleted file mode 100644 (file)
index 3a72e33..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: strings.RuneCount
-description: Determines the number of runes in a string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [counting, character count, length, rune length, rune count]
-signature: ["strings.RuneCount INPUT"]
-relatedfuncs: ["len", "countrunes"]
----
-
-In contrast with `strings.CountRunes` function, which strips HTML and whitespace before counting runes, `strings.RuneCount` simply counts all the runes in a string. It relies on the Go [`utf8.RuneCountInString`] function.
-
-```go-html-template
-{{ "Hello, 世界" | strings.RuneCount }}
-<!-- outputs a content length of 9 runes. -->
-```
-
-[`utf8.RuneCount`]: https://golang.org/pkg/unicode/utf8/#RuneCount
diff --git a/content/en/functions/strings.TrimLeft.md b/content/en/functions/strings.TrimLeft.md
deleted file mode 100644 (file)
index b0271c8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: strings.TrimLeft
-description: Returns a slice of a given string with all leading characters contained in the cutset removed.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["strings.TrimLeft CUTSET STRING"]
-relatedfuncs: [strings.TrimRight]
----
-
-Given the string `"abba"`, leading `"a"`'s can be removed a follows:
-
-    {{ strings.TrimLeft "a" "abba" }} → "bba"
-
-Numbers can be handled as well:
-
-    {{ strings.TrimLeft 12 1221341221 }} → "341221"
diff --git a/content/en/functions/strings.TrimPrefix.md b/content/en/functions/strings.TrimPrefix.md
deleted file mode 100644 (file)
index c3f7029..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: strings.TrimPrefix
-description: Returns a given string s without the provided leading prefix string. If s doesn't start with prefix, s is returned unchanged.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["strings.TrimPrefix PREFIX STRING"]
-relatedfuncs: [strings.TrimSuffix]
----
-
-Given the string `"aabbaa"`, the specified prefix is only removed if `"aabbaa"` starts with it:
-
-    {{ strings.TrimPrefix "a" "aabbaa" }} → "abbaa"
-    {{ strings.TrimPrefix "aa" "aabbaa" }} → "bbaa"
-    {{ strings.TrimPrefix "aaa" "aabbaa" }} → "aabbaa"
diff --git a/content/en/functions/strings.TrimRight.md b/content/en/functions/strings.TrimRight.md
deleted file mode 100644 (file)
index e61b884..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: strings.TrimRight
-description: Returns a slice of a given string with all trailing characters contained in the cutset removed.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["strings.TrimRight CUTSET STRING"]
-relatedfuncs: [strings.TrimRight]
----
-
-Given the string `"abba"`, trailing `"a"`'s can be removed a follows:
-
-    {{ strings.TrimRight "a" "abba" }} → "abb"
-
-Numbers can be handled as well:
-
-    {{ strings.TrimRight 12 1221341221 }} → "122134"
diff --git a/content/en/functions/strings.TrimSuffix.md b/content/en/functions/strings.TrimSuffix.md
deleted file mode 100644 (file)
index 05bb924..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: strings.TrimSuffix
-description: Returns a given string s without the provided trailing suffix string. If s doesn't end with suffix, s is returned unchanged.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature: ["strings.TrimSuffix SUFFIX STRING"]
-relatedfuncs: [strings.TrimPrefix]
----
-
-Given the string `"aabbaa"`, the specified suffix is only removed if `"aabbaa"` ends with it:
-
-    {{ strings.TrimSuffix "a" "aabbaa" }} → "aabba"
-    {{ strings.TrimSuffix "aa" "aabbaa" }} → "aabb"
-    {{ strings.TrimSuffix "aaa" "aabbaa" }} → "aabbaa"
diff --git a/content/en/functions/strings/Chomp.md b/content/en/functions/strings/Chomp.md
new file mode 100644 (file)
index 0000000..22e2b54
--- /dev/null
@@ -0,0 +1,31 @@
+---
+title: chomp
+linkTitle: chomp
+description: Removes any trailing newline characters.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [chomp]
+  returnType: any
+  signatures: [strings.Chomp STRING]
+relatedFunctions:
+  - strings.Chomp
+  - strings.Trim
+  - strings.TrimLeft
+  - strings.TrimPrefix
+  - strings.TrimRight
+  - strings.TrimSuffix
+aliases: [/functions/chomp]
+---
+
+If the argument is of type template.HTML, returns template.HTML, else returns a string.
+
+
+Useful in a pipeline to remove newlines added by other processing (e.g., [`markdownify`](/functions/transform/markdownify)).
+
+```go-html-template
+{{ chomp "<p>Blockhead</p>\n" }} → "<p>Blockhead</p>"
+```
diff --git a/content/en/functions/strings/Contains.md b/content/en/functions/strings/Contains.md
new file mode 100644 (file)
index 0000000..66a90ae
--- /dev/null
@@ -0,0 +1,29 @@
+---
+title: strings.Contains
+description: Reports whether the string contains a substring.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [strings.Contains STRING SUBSTRING]
+relatedFunctions:
+  - strings.Contains
+  - strings.ContainsAny
+  - strings.ContainsNonSpace
+  - strings.HasPrefix
+  - strings.HasSuffix
+aliases: [/functions/strings.contains]
+---
+
+```go-html-template
+{{ strings.Contains "Hugo" "go" }} → true
+```
+The check is case sensitive: 
+
+```go-html-template
+{{ strings.Contains "Hugo" "Go" }} → false
+```
diff --git a/content/en/functions/strings/ContainsAny.md b/content/en/functions/strings/ContainsAny.md
new file mode 100644 (file)
index 0000000..4f32435
--- /dev/null
@@ -0,0 +1,30 @@
+---
+title: strings.ContainsAny
+description: Reports whether a string contains any character from a given string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [strings.ContainsAny STRING CHARACTERS]
+relatedFunctions:
+  - strings.Contains
+  - strings.ContainsAny
+  - strings.ContainsNonSpace
+  - strings.HasPrefix
+  - strings.HasSuffix
+aliases: [/functions/strings.containsany]
+---
+
+```go-html-template
+{{ strings.ContainsAny "Hugo" "gm" }} → true
+```
+
+The check is case sensitive: 
+
+```go-html-template
+{{ strings.ContainsAny "Hugo" "Gm" }} → false
+```
diff --git a/content/en/functions/strings/ContainsNonSpace.md b/content/en/functions/strings/ContainsNonSpace.md
new file mode 100644 (file)
index 0000000..d2e6114
--- /dev/null
@@ -0,0 +1,36 @@
+---
+title: strings.ContainsNonSpace
+description: Reports whether a string contains any non-space characters as defined by Unicode’s White Space property.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [strings.ContainsNonSpace STRING]
+relatedFunctions:
+  - strings.Contains
+  - strings.ContainsAny
+  - strings.ContainsNonSpace
+  - strings.HasPrefix
+  - strings.HasSuffix
+aliases: [/functions/strings.containsnonspace]
+---
+
+```go-html-template
+{{ strings.ContainsNonSpace "\n" }}     → false
+{{ strings.ContainsNonSpace " " }}      → false
+{{ strings.ContainsNonSpace "\n abc" }} → true
+```
+
+Common white space characters include:
+
+```text
+'\t', '\n', '\v', '\f', '\r', ' '
+```
+
+See the [Unicode Character Database] for a complete list.
+
+[Unicode Character Database]: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
diff --git a/content/en/functions/strings/Count.md b/content/en/functions/strings/Count.md
new file mode 100644 (file)
index 0000000..25ea589
--- /dev/null
@@ -0,0 +1,29 @@
+---
+title: strings.Count
+description: Returns the number of non-overlapping instances of a substring within a string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: int
+  signatures: [strings.Count SUBSTR STRING]
+relatedFunctions:
+  - len
+  - strings.Count
+  - strings.CountRunes
+  - strings.CountWords
+  - strings.RuneCount
+aliases: [/functions/strings.count]
+---
+
+If `SUBSTR` is an empty string, this function returns 1 plus the number of Unicode code points in `STRING`.
+
+```go-html-template
+{{ "aaabaab" | strings.Count "a" }} → 5
+{{ "aaabaab" | strings.Count "aa" }} → 2
+{{ "aaabaab" | strings.Count "aaa" }} → 1
+{{ "aaabaab" | strings.Count "" }} → 8
+```
diff --git a/content/en/functions/strings/CountRunes.md b/content/en/functions/strings/CountRunes.md
new file mode 100644 (file)
index 0000000..4a17d04
--- /dev/null
@@ -0,0 +1,29 @@
+---
+title: strings.CountRunes
+linkTitle: countrunes
+description: Returns the number of runes in a string excluding whitespace.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [countrunes]
+  returnType: int
+  signatures: [strings.CountRunes INPUT]
+relatedFunctions:
+  - len
+  - strings.Count
+  - strings.CountRunes
+  - strings.CountWords
+  - strings.RuneCount
+aliases: [/functions/countrunes]
+---
+
+In contrast with the [`strings.RuneCount`] function, which counts every rune in a string, `strings.CountRunes` excludes whitespace.
+
+```go-html-template
+{{ "Hello, 世界" | strings.CountRunes }} → 8
+```
+
+[`strings.RuneCount`]: /functions/strings/runecount
diff --git a/content/en/functions/strings/CountWords.md b/content/en/functions/strings/CountWords.md
new file mode 100644 (file)
index 0000000..e6915e6
--- /dev/null
@@ -0,0 +1,31 @@
+---
+title: strings.CountWords
+linkTitle: countwords
+description: Counts the number of words in a string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [countwords]
+  returnType: int
+  signatures: [strings.CountWords INPUT]
+relatedFunctions:
+  - len
+  - strings.Count
+  - strings.CountRunes
+  - strings.CountWords
+  - strings.RuneCount
+aliases: [/functions/countwords]
+---
+
+The template function works similar to the [.WordCount page variable][pagevars].
+
+```go-html-template
+{{ "Hugo is a static site generator." | countwords }}
+<!-- outputs a content length of 6 words.  -->
+```
+
+
+[pagevars]: /variables/page/
diff --git a/content/en/functions/strings/FindRESubmatch.md b/content/en/functions/strings/FindRESubmatch.md
new file mode 100644 (file)
index 0000000..5a0410f
--- /dev/null
@@ -0,0 +1,95 @@
+---
+title: strings.FindRESubmatch
+linkTitle: findRESubmatch
+description: Returns a slice of all successive matches of the regular expression. Each element is a slice of strings holding the text of the leftmost match of the regular expression and the matches, if any, of its subexpressions.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [findRESubmatch]
+  returnType: '[]string'
+  signatures: ['strings.FindRESubmatch PATTERN INPUT [LIMIT]']
+relatedFunctions:
+  - strings.FindRE
+  - strings.FindRESubmatch
+  - strings.Replace
+  - strings.ReplaceRE
+aliases: [/functions/findresubmatch]
+---
+
+By default, `findRESubmatch` finds all matches. You can limit the number of matches with an optional LIMIT argument. A return value of nil indicates no match.
+
+{{% readfile file="/functions/_common/regular-expressions.md" %}}
+
+## Demonstrative examples
+
+```go-html-template
+{{ findRESubmatch `a(x*)b` "-ab-" }} → [["ab" ""]]
+{{ findRESubmatch `a(x*)b` "-axxb-" }} → [["axxb" "xx"]]
+{{ findRESubmatch `a(x*)b` "-ab-axb-" }} → [["ab" ""] ["axb" "x"]]
+{{ findRESubmatch `a(x*)b` "-axxb-ab-" }} → [["axxb" "xx"] ["ab" ""]]
+{{ findRESubmatch `a(x*)b` "-axxb-ab-" 1 }} → [["axxb" "xx"]]
+```
+
+## Practical example
+
+This markdown:
+
+```text
+- [Example](https://example.org)
+- [Hugo](https://gohugo.io)
+```
+
+Produces this HTML:
+
+```html
+<ul>
+  <li><a href="https://example.org">Example</a></li>
+  <li><a href="https://gohugo.io">Hugo</a></li>
+</ul>
+```
+
+To match the anchor elements, capturing the link destination and text:
+
+```go-html-template
+{{ $regex := `<a\s*href="(.+?)">(.+?)</a>` }}
+{{ $matches := findRESubmatch $regex .Content }}
+```
+
+Viewed as JSON, the data structure of `$matches` in the code above is:
+
+```json
+[
+  [
+    "<a href=\"https://example.org\"></a>Example</a>",
+    "https://example.org",
+    "Example"
+  ],
+  [
+    "<a href=\"https://gohugo.io\">Hugo</a>",
+    "https://gohugo.io",
+    "Hugo"
+  ]
+]
+```
+
+To render the `href` attributes:
+
+```go-html-template
+{{ range $matches }}
+  {{ index . 1 }}
+{{ end }}
+```
+
+Result:
+
+```text
+https://example.org
+https://gohugo.io
+```
+
+{{% note %}}
+You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
+{{% /note %}}
diff --git a/content/en/functions/strings/FindRe.md b/content/en/functions/strings/FindRe.md
new file mode 100644 (file)
index 0000000..4a7811f
--- /dev/null
@@ -0,0 +1,41 @@
+---
+title: strings.FindRE
+linkTitle: findRE
+description: Returns a slice of strings that match the regular expression.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [findRE]
+  returnType: string
+  signatures: ['strings.FindRE PATTERN INPUT [LIMIT]']
+relatedFunctions:
+  - strings.FindRE
+  - strings.FindRESubmatch
+  - strings.Replace
+  - strings.ReplaceRE
+aliases: [/functions/findre]
+---
+By default, `findRE` finds all matches. You can limit the number of matches with an optional LIMIT argument.
+
+{{% readfile file="/functions/_common/regular-expressions.md" %}}
+
+This example returns a slice of all second level headings (`h2` elements) within the rendered `.Content`:
+
+```go-html-template
+{{ findRE `(?s)<h2.*?>.*?</h2>` .Content }}
+```
+
+The `s` flag causes `.` to match `\n` as well, allowing us to find an `h2` element that contains newlines.
+
+To limit the number of matches to one:
+
+```go-html-template
+{{ findRE `(?s)<h2.*?>.*?</h2>` .Content 1 }}
+```
+
+{{% note %}}
+You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
+{{% /note %}}
diff --git a/content/en/functions/strings/FirstUpper.md b/content/en/functions/strings/FirstUpper.md
new file mode 100644 (file)
index 0000000..320f01e
--- /dev/null
@@ -0,0 +1,23 @@
+---
+title: strings.FirstUpper
+description: Capitalizes the first character of a given string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [strings.FirstUpper STRING]
+relatedFunctions:
+  - strings.FirstUpper
+  - strings.Title
+  - strings.ToLower
+  - strings.ToUpper
+aliases: [/functions/strings.firstupper]
+---
+
+```go-html-template
+{{ strings.FirstUpper "foo" }} → "Foo"
+```
diff --git a/content/en/functions/strings/HasPrefix.md b/content/en/functions/strings/HasPrefix.md
new file mode 100644 (file)
index 0000000..88a79a9
--- /dev/null
@@ -0,0 +1,24 @@
+---
+title: strings.HasPrefix
+description: Reports whether a string begins with prefix.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [hasPrefix]
+  returnType: bool
+  signatures: [strings.HasPrefix STRING PREFIX]
+relatedFunctions:
+  - strings.Contains
+  - strings.ContainsAny
+  - strings.ContainsNonSpace
+  - strings.HasPrefix
+  - strings.HasSuffix
+aliases: [/functions/hasprefix,/functions/strings.hasprefix]
+---
+
+```go-html-template
+{{ hasPrefix "Hugo" "Hu" }} → true
+```
diff --git a/content/en/functions/strings/HasSuffix.md b/content/en/functions/strings/HasSuffix.md
new file mode 100644 (file)
index 0000000..d11f3e8
--- /dev/null
@@ -0,0 +1,24 @@
+---
+title: strings.HasSuffix
+description: Reports whether a string ends with suffix.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [hasSuffix]
+  returnType: bool
+  signatures: [strings.HasSuffix STRING SUFFIX]
+relatedFunctions:
+  - strings.Contains
+  - strings.ContainsAny
+  - strings.ContainsNonSpace
+  - strings.HasPrefix
+  - strings.HasSuffix
+aliases: [/functions/hassuffix,/functions/strings/hassuffix]
+---
+
+```go-html-template
+{{ hasSuffix "Hugo" "go" }} → true
+```
diff --git a/content/en/functions/strings/Repeat.md b/content/en/functions/strings/Repeat.md
new file mode 100644 (file)
index 0000000..718f249
--- /dev/null
@@ -0,0 +1,20 @@
+---
+title: strings.Repeat
+description: Returns a new string consisting of zero or more copies of another string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [strings.Repeat COUNT INPUT]
+relatedFunctions: []
+aliases: [/functions/strings.repeat]
+---
+
+```go-html-template
+{{ strings.Repeat 3 "yo" }} → "yoyoyo"
+{{ "yo" | strings.Repeat 3 }} → "yoyoyo"
+```
diff --git a/content/en/functions/strings/Replace.md b/content/en/functions/strings/Replace.md
new file mode 100644 (file)
index 0000000..8d5e548
--- /dev/null
@@ -0,0 +1,30 @@
+---
+title: strings.Replace
+linkTitle: replace
+description: Replaces all occurrences of the search string with the replacement string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [replace]
+  returnType: string
+  signatures: ['strings.Replace INPUT OLD NEW [LIMIT]']
+relatedFunctions:
+  - strings.FindRE
+  - strings.FindRESubmatch
+  - strings.Replace
+  - strings.ReplaceRE
+aliases: [/functions/replace]
+---
+
+Replace returns a copy of `INPUT` with all occurrences of `OLD` replaced with `NEW`.
+The number of replacements can be limited with an optional `LIMIT` argument.
+
+```
+{{ replace "Batman and Robin" "Robin" "Catwoman" }}
+→ "Batman and Catwoman"
+
+{{ replace "aabbaabb" "a" "z" 2 }} → "zzbbaabb"
+```
diff --git a/content/en/functions/strings/ReplaceRE.md b/content/en/functions/strings/ReplaceRE.md
new file mode 100644 (file)
index 0000000..2475958
--- /dev/null
@@ -0,0 +1,51 @@
+---
+title: strings.ReplaceRE
+linkTitle: replaceRE
+description: Returns a string, replacing all occurrences of a regular expression with a replacement pattern.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [replaceRE]
+  returnType: string
+  signatures: ['strings.ReplaceRE PATTERN REPLACEMENT INPUT [LIMIT]']
+relatedFunctions:
+  - strings.FindRE
+  - strings.FindRESubmatch
+  - strings.Replace
+  - strings.ReplaceRE
+aliases: [/functions/replacere]
+---
+By default, `replaceRE` replaces all matches. You can limit the number of matches with an optional LIMIT argument.
+
+{{% readfile file="/functions/_common/regular-expressions.md" %}}
+
+This example replaces two or more consecutive hyphens with a single hyphen:
+
+```go-html-template
+{{ $s := "a-b--c---d" }}
+{{ replaceRE `(-{2,})` "-" $s }} → a-b-c-d
+```
+
+To limit the number of replacements to one:
+
+```go-html-template
+{{ $s := "a-b--c---d" }}
+{{ replaceRE `(-{2,})` "-" $s 1 }} → a-b-c---d
+```
+
+You can use `$1`, `$2`, etc. within the replacement string to insert the groups captured within the regular expression:
+
+```go-html-template
+{{ $s := "http://gohugo.io/docs" }}
+{{ replaceRE "^https?://([^/]+).*" "$1" $s }} → gohugo.io
+```
+
+{{% note %}}
+You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin.
+{{% /note %}}
+
+[RE2]: https://github.com/google/re2/wiki/Syntax
+[string literal]: https://go.dev/ref/spec#String_literals
diff --git a/content/en/functions/strings/RuneCount.md b/content/en/functions/strings/RuneCount.md
new file mode 100644 (file)
index 0000000..a4d5a8d
--- /dev/null
@@ -0,0 +1,28 @@
+---
+title: strings.RuneCount
+description: Returns the number of runes in a string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: int
+  signatures: [strings.RuneCount INPUT]
+relatedFunctions:
+  - len
+  - strings.Count
+  - strings.CountRunes
+  - strings.CountWords
+  - strings.RuneCount
+aliases: [/functions/strings.runecount]
+---
+
+In contrast with the [`strings.CountRunes`] function, which excludes whitespace, `strings.RuneCount` counts every rune in a string.
+
+```go-html-template
+{{ "Hello, 世界" | strings.RuneCount }} → 9
+```
+
+[`strings.CountRunes`]: /functions/strings/countrunes
diff --git a/content/en/functions/strings/SliceString.md b/content/en/functions/strings/SliceString.md
new file mode 100644 (file)
index 0000000..8d26d76
--- /dev/null
@@ -0,0 +1,24 @@
+---
+title: strings.SliceString
+linkTitle: slicestr
+description: Creates a slice of a half-open range, including start and end indices.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [slicestr]
+  returnType: string
+  signatures: ['strings.SliceString STRING START [END]']
+relatedFunctions: []
+aliases: [/functions/slicestr]
+---
+
+For example, 1 and 4 creates a slice including elements 1 through 3.
+The `end` index can be omitted; it defaults to the string's length.
+
+```go-html-template
+{{ slicestr "BatMan" 3 }}` → "Man"
+{{ slicestr "BatMan" 0 3 }}` → "Bat"
+```
diff --git a/content/en/functions/strings/Split.md b/content/en/functions/strings/Split.md
new file mode 100644 (file)
index 0000000..7d15704
--- /dev/null
@@ -0,0 +1,30 @@
+---
+title: strings.Split
+linkTitle: split
+description: Returns a slice of strings by splitting STRING by DELIM.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [split]
+  returnType: string
+  signatures: [strings.Split STRING DELIM]
+relatedFunctions:
+  - collections.Delimit
+  - strings.Split
+aliases: [/functions/split]
+---
+
+Examples:
+
+```go-html-template
+{{ split "tag1,tag2,tag3" "," }} → ["tag1", "tag2", "tag3"]
+{{ split "abc" "" }} → ["a", "b", "c"]
+```
+
+
+{{% note %}}
+`split` essentially does the opposite of [delimit](/functions/collections/delimit). While `split` creates a slice from a string, `delimit` creates a string from a slice.
+{{% /note %}}
diff --git a/content/en/functions/strings/Substr.md b/content/en/functions/strings/Substr.md
new file mode 100644 (file)
index 0000000..9dafa07
--- /dev/null
@@ -0,0 +1,42 @@
+---
+title: strings.Substr
+linkTitle: substr
+description: Extracts parts of a string from a specified character's position and returns the specified number of characters.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [substr]
+  returnType: string
+  signatures: ['strings.Substr STRING START [LENGTH]']
+relatedFunctions: []
+aliases: [/functions/substr]
+---
+
+It normally takes two argument: `start` and `length`. It can also take one argument: `start`, i.e. `length` is omitted, in which case the substring starting from start until the end of the string will be returned.
+
+To extract characters from the end of the string, use a negative start number.
+
+If `length` is given and is negative, that number of characters will be omitted from the end of string.
+
+```go-html-template
+{{ substr "abcdef" 0 }} → "abcdef"
+{{ substr "abcdef" 1 }} → "bcdef"
+
+{{ substr "abcdef" 0 1 }} → "a"
+{{ substr "abcdef" 1 1 }} → "b"
+
+{{ substr "abcdef" 0 -1 }} → "abcde"
+{{ substr "abcdef" 1 -1 }} → "bcde"
+
+{{ substr "abcdef" -1 }} → "f"
+{{ substr "abcdef" -2 }} → "ef"
+
+{{ substr "abcdef" -1 1 }} → "f"
+{{ substr "abcdef" -2 1 }} → "e"
+
+{{ substr "abcdef" -3 -1 }} → "de"
+{{ substr "abcdef" -3 -2 }} → "d"
+```
diff --git a/content/en/functions/strings/Title.md b/content/en/functions/strings/Title.md
new file mode 100644 (file)
index 0000000..1e20d1f
--- /dev/null
@@ -0,0 +1,30 @@
+---
+title: strings.Title
+linkTitle: title
+description: Converts the provided string to title case.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [title]
+  returnType: string
+  signatures: [strings.Title STRING]
+relatedFunctions:
+  - strings.FirstUpper
+  - strings.Title
+  - strings.ToLower
+  - strings.ToUpper
+aliases: [/functions/title]
+---
+
+```go-html-template
+{{ title "table of contents (TOC)" }} → "Table of Contents (TOC)"
+```
+
+By default, Hugo adheres to the capitalization rules in the [Associated Press (AP) Stylebook]. Change your [site configuration] if you would prefer to follow the [Chicago Manual of Style], or to use Go's convention of capitalizing every word.
+
+[Associated Press (AP) Stylebook]: https://www.apstylebook.com/
+[Chicago Manual of Style]: https://www.chicagomanualofstyle.org/home.html
+[site configuration]: /getting-started/configuration/#configure-title-case
diff --git a/content/en/functions/strings/ToLower.md b/content/en/functions/strings/ToLower.md
new file mode 100644 (file)
index 0000000..cb76462
--- /dev/null
@@ -0,0 +1,28 @@
+---
+title: strings.ToLower
+linkTitle: lower
+description: Converts all characters in the provided string to lowercase.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [lower]
+  returnType: string
+  signatures: [strings.ToLower INPUT]
+relatedFunctions:
+  - strings.FirstUpper
+  - strings.Title
+  - strings.ToLower
+  - strings.ToUpper
+aliases: [/functions/lower]
+---
+
+
+Note that `lower` can be applied in your templates in more than one way:
+
+```go-html-template
+{{ lower "BatMan" }} → "batman"
+{{ "BatMan" | lower }} → "batman"
+```
diff --git a/content/en/functions/strings/ToUpper.md b/content/en/functions/strings/ToUpper.md
new file mode 100644 (file)
index 0000000..d464916
--- /dev/null
@@ -0,0 +1,27 @@
+---
+title: strings.ToUpper
+linkTitle: upper
+description: Converts all characters in a string to uppercase
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [upper]
+  returnType: string
+  signatures: [strings.ToUpper INPUT]
+relatedFunctions:
+  - strings.FirstUpper
+  - strings.Title
+  - strings.ToLower
+  - strings.ToUpper
+aliases: [/functions/upper]
+---
+
+Note that `upper` can be applied in your templates in more than one way:
+
+```go-html-template
+{{ upper "BatMan" }} → "BATMAN"
+{{ "BatMan" | upper }} → "BATMAN"
+```
diff --git a/content/en/functions/strings/Trim.md b/content/en/functions/strings/Trim.md
new file mode 100644 (file)
index 0000000..9eae9ee
--- /dev/null
@@ -0,0 +1,45 @@
+---
+title: strings.Trim
+linkTitle: trim
+description: Returns a slice of a passed string with all leading and trailing characters from cutset removed.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [title]
+  returnType: string
+  signatures: [strings.Trim INPUT CUTSET]
+relatedFunctions:
+  - strings.Chomp
+  - strings.Trim
+  - strings.TrimLeft
+  - strings.TrimPrefix
+  - strings.TrimRight
+  - strings.TrimSuffix
+aliases: [/functions/trim]
+---
+
+```go-html-template
+{{ trim "++Batman--" "+-" }} → "Batman"
+```
+
+`trim` *requires* the second argument, which tells the function specifically what to remove from the first argument. There is no default value for the second argument, so **the following usage will not work**:
+
+```go-html-template
+{{ trim .Inner }}
+```
+
+Instead, the following example tells `trim` to remove extra new lines from the content contained in the [shortcode `.Inner` variable][shortcodevars]:
+
+```go-html-template
+{{ trim .Inner "\n" }}
+```
+
+{{% note %}}
+Go templates also provide a simple [method for trimming whitespace](/templates/introduction/#whitespace) from either side of a Go tag by including a hyphen (`-`).
+{{% /note %}}
+
+
+[shortcodevars]: /variables/shortcodes/
diff --git a/content/en/functions/strings/TrimLeft.md b/content/en/functions/strings/TrimLeft.md
new file mode 100644 (file)
index 0000000..3924e49
--- /dev/null
@@ -0,0 +1,33 @@
+---
+title: strings.TrimLeft
+description: Returns a slice of a given string with all leading characters contained in the cutset removed.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [strings.TrimLeft CUTSET STRING]
+relatedFunctions:
+  - strings.Chomp
+  - strings.Trim
+  - strings.TrimLeft
+  - strings.TrimPrefix
+  - strings.TrimRight
+  - strings.TrimSuffix
+aliases: [/functions/strings.trimleft]
+---
+
+Given the string `"abba"`, leading `"a"`'s can be removed a follows:
+
+```go-html-template
+{{ strings.TrimLeft "a" "abba" }} → "bba"
+```
+
+Numbers can be handled as well:
+
+```go-html-template
+{{ strings.TrimLeft 12 1221341221 }} → "341221"
+```
diff --git a/content/en/functions/strings/TrimPrefix.md b/content/en/functions/strings/TrimPrefix.md
new file mode 100644 (file)
index 0000000..3765773
--- /dev/null
@@ -0,0 +1,29 @@
+---
+title: strings.TrimPrefix
+description: Returns a given string s without the provided leading prefix string. If s doesn't start with prefix, s is returned unchanged.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [strings.TrimPrefix PREFIX STRING]
+relatedFunctions:
+  - strings.Chomp
+  - strings.Trim
+  - strings.TrimLeft
+  - strings.TrimPrefix
+  - strings.TrimRight
+  - strings.TrimSuffix
+aliases: [/functions/strings.trimprefix]
+---
+
+Given the string `"aabbaa"`, the specified prefix is only removed if `"aabbaa"` starts with it:
+
+```go-html-template
+{{ strings.TrimPrefix "a" "aabbaa" }} → "abbaa"
+{{ strings.TrimPrefix "aa" "aabbaa" }} → "bbaa"
+{{ strings.TrimPrefix "aaa" "aabbaa" }} → "aabbaa"
+```
diff --git a/content/en/functions/strings/TrimRight.md b/content/en/functions/strings/TrimRight.md
new file mode 100644 (file)
index 0000000..fa538b6
--- /dev/null
@@ -0,0 +1,33 @@
+---
+title: strings.TrimRight
+description: Returns a slice of a given string with all trailing characters contained in the cutset removed.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [strings.TrimRight CUTSET STRING]
+relatedFunctions:
+  - strings.Chomp
+  - strings.Trim
+  - strings.TrimLeft
+  - strings.TrimPrefix
+  - strings.TrimRight
+  - strings.TrimSuffix
+aliases: [/functions/strings.trimright]
+---
+
+Given the string `"abba"`, trailing `"a"`'s can be removed a follows:
+
+```go-html-template
+{{ strings.TrimRight "a" "abba" }} → "abb"
+```
+
+Numbers can be handled as well:
+
+```go-html-template
+{{ strings.TrimRight 12 1221341221 }} → "122134"
+```
diff --git a/content/en/functions/strings/TrimSuffix.md b/content/en/functions/strings/TrimSuffix.md
new file mode 100644 (file)
index 0000000..6dc9bec
--- /dev/null
@@ -0,0 +1,29 @@
+---
+title: strings.TrimSuffix
+description: Returns a given string s without the provided trailing suffix string. If s doesn't end with suffix, s is returned unchanged.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [strings.TrimSuffix SUFFIX STRING]
+relatedFunctions:
+  - strings.Chomp
+  - strings.Trim
+  - strings.TrimLeft
+  - strings.TrimPrefix
+  - strings.TrimRight
+  - strings.TrimSuffix
+aliases: [/functions/strings.trimsuffix]
+---
+
+Given the string `"aabbaa"`, the specified suffix is only removed if `"aabbaa"` ends with it:
+
+```go-html-template
+{{ strings.TrimSuffix "a" "aabbaa" }} → "aabba"
+{{ strings.TrimSuffix "aa" "aabbaa" }} → "aabb"
+{{ strings.TrimSuffix "aaa" "aabbaa" }} → "aabbaa"
+```
diff --git a/content/en/functions/strings/Truncate.md b/content/en/functions/strings/Truncate.md
new file mode 100644 (file)
index 0000000..0bd78d8
--- /dev/null
@@ -0,0 +1,26 @@
+---
+title: strings.Truncate
+linkTitle: truncate
+description: Truncates a text to a max length without cutting words or leaving unclosed HTML tags.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [truncate]
+  returnType: template.HTML
+  signatures: ['strings.Truncate SIZE [ELLIPSIS] INPUT']
+relatedFunctions: []
+aliases: [/functions/truncate]
+---
+
+Since Go templates are HTML-aware, `truncate` will intelligently handle normal strings vs HTML strings:
+
+```go-html-template
+{{ "<em>Keep my HTML</em>" | safeHTML | truncate 10 }} → <em>Keep my …</em>
+```
+
+{{% note %}}
+If you have a raw string that contains HTML tags you want to remain treated as HTML, you will need to convert the string to HTML using the [`safeHTML` template function](/functions/safe/html) before sending the value to truncate. Otherwise, the HTML tags will be escaped when passed through the `truncate` function.
+{{% /note %}}
diff --git a/content/en/functions/substr.md b/content/en/functions/substr.md
deleted file mode 100644 (file)
index 90ee47b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: substr
-description: Extracts parts of a string from a specified character's position and returns the specified number of characters.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature:
-  - "substr STRING START [LENGTH]"
-  - "strings.Substr STRING START [LENGTH]"
-relatedfuncs: []
----
-
-It normally takes two argument: `start` and `length`. It can also take one argument: `start`, i.e. `length` is omitted, in which case the substring starting from start until the end of the string will be returned.
-
-To extract characters from the end of the string, use a negative start number.
-
-If `length` is given and is negative, that number of characters will be omitted from the end of string.
-
-```go-html-template
-{{ substr "abcdef" 0 }} → "abcdef"
-{{ substr "abcdef" 1 }} → "bcdef"
-
-{{ substr "abcdef" 0 1 }} → "a"
-{{ substr "abcdef" 1 1 }} → "b"
-
-{{ substr "abcdef" 0 -1 }} → "abcde"
-{{ substr "abcdef" 1 -1 }} → "bcde"
-
-{{ substr "abcdef" -1 }} → "f"
-{{ substr "abcdef" -2 }} → "ef"
-
-{{ substr "abcdef" -1 1 }} → "f"
-{{ substr "abcdef" -2 1 }} → "e"
-
-{{ substr "abcdef" -3 -1 }} → "de"
-{{ substr "abcdef" -3 -2 }} → "d"
-```
diff --git a/content/en/functions/symdiff.md b/content/en/functions/symdiff.md
deleted file mode 100644 (file)
index ffc3094..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: symdiff
-description: "`collections.SymDiff` (alias `symdiff`) returns the symmetric difference of two collections."
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections,intersect,union,complement]
-signature: ["COLLECTION | symdiff COLLECTION" ]
----
-
-Example:
-
-```go-html-template
-{{ slice 1 2 3 | symdiff (slice 3 4) }}
-```
-
-The above will print `[1 2 4]`.
-
-Also see https://en.wikipedia.org/wiki/Symmetric_difference
diff --git a/content/en/functions/templates.Exists.md b/content/en/functions/templates.Exists.md
deleted file mode 100644 (file)
index b9f340c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: templates.Exists
-description: "Checks whether a template file exists under the given path relative to the `layouts` directory."
-categories: [functions]
-tags: []
-menu:
-  docs:
-    parent: functions
-ns: ""
-keywords: ["templates", "template", "layouts"]
-signature: ["templates.Exists PATH"]
-relatedfuncs: []
----
-
-A template file is any file living below the `layouts` directories of either the project or any of its theme components including partials and shortcodes.
-
-The function is particularly handy with dynamic path. The following example ensures the build will not break on a `.Type` missing its dedicated `header` partial.
-
-```go-html-template
-{{ $partialPath := printf "headers/%s.html" .Type }}
-{{ if templates.Exists ( printf "partials/%s" $partialPath ) }}
-  {{ partial $partialPath . }}
-{{ else }}
-  {{ partial "headers/default.html" . }}
-{{ end }}
-```
diff --git a/content/en/functions/templates/Exists.md b/content/en/functions/templates/Exists.md
new file mode 100644 (file)
index 0000000..d4a8fab
--- /dev/null
@@ -0,0 +1,29 @@
+---
+title: templates.Exists
+description: Reports whether a template file exists under the given path relative to the `layouts` directory.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [templates.Exists PATH]
+namespace: templates
+relatedFunctions: []
+aliases: [/functions/templates.exists]
+---
+
+A template file is any file living below the `layouts` directories of either the project or any of its theme components including partials and shortcodes.
+
+The function is particularly handy with dynamic path. The following example ensures the build will not break on a `.Type` missing its dedicated `header` partial.
+
+```go-html-template
+{{ $partialPath := printf "headers/%s.html" .Type }}
+{{ if templates.Exists ( printf "partials/%s" $partialPath ) }}
+  {{ partial $partialPath . }}
+{{ else }}
+  {{ partial "headers/default.html" . }}
+{{ end }}
+```
diff --git a/content/en/functions/time.ParseDuration.md b/content/en/functions/time.ParseDuration.md
deleted file mode 100644 (file)
index 0332c17..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: time.ParseDuration
-description: Parses a given duration string into a `time.Duration` structure.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [time parse duration]
-signature: ["time.ParseDuration DURATION"]
----
-
-`time.ParseDuration` parses a duration string into a [`time.Duration`](https://pkg.go.dev/time#Duration) structure so you can access its fields.
-A duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as `300ms`, `-1.5h` or `2h45m`. Valid time units are `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`.
-
-You can perform [time operations](https://pkg.go.dev/time#Duration) on the returned `time.Duration` value:
-
-    {{ printf "There are %.0f seconds in one day." (time.ParseDuration "24h").Seconds }}
-    <!-- Output: There are 86400 seconds in one day. -->
diff --git a/content/en/functions/time.md b/content/en/functions/time.md
deleted file mode 100644 (file)
index 99182f3..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
----
-title: time
-description: Converts a timestamp string into a `time.Time` structure.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [dates,time,location]
-signature: ["time INPUT [TIMEZONE]"]
-relatedfuncs: []
----
-
-
-`time` converts a timestamp string with an optional default location into a [`time.Time`](https://godoc.org/time#Time) structure so you can access its fields:
-
-```go-html-template
-{{ time "2016-05-28" }} → "2016-05-28T00:00:00Z"
-{{ (time "2016-05-28").YearDay }} → 149
-{{ mul 1000 (time "2016-05-28T10:30:00.00+10:00").Unix }} → 1464395400000, or Unix time in milliseconds
-```
-
-## Using locations
-
-The optional `TIMEZONE` argument is a string that sets a default time zone (or more specific, the location, which represents the collection of time offsets in a geographical area) that is associated with the specified time value. If the time value has an explicit timezone or offset specified, it will take precedence over the `TIMEZONE` argument.
-
-The list of valid locations may be system dependent, but should include `UTC`, `Local`, or any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
-
-If no `TIMEZONE` is set, the `timeZone` from site configuration will be used.
-
-```go-html-template
-{{ time "2020-10-20" }} → 2020-10-20 00:00:00 +0000 UTC
-{{ time "2020-10-20" "America/Los_Angeles" }} → 2020-10-20 00:00:00 -0700 PDT
-{{ time "2020-01-20" "America/Los_Angeles" }} → 2020-01-20 00:00:00 -0800 PST
-```
-
-## Example: Using `time` to get month index
-
-The following example takes a UNIX timestamp---set as `utimestamp: "1489276800"` in a content's front matter---converts the timestamp (string) to an integer using the [`int` function][int], and then uses [`printf`] to convert the `Month` property of `time` into an index.
-
-The following example may be useful when setting up [multilingual sites][multilingual]:
-
-{{< code file="unix-to-month-integer.html" >}}
-{{ $time := time (int .Params.addDate)}}
-=> $time = 1489276800
-{{ $time.Month }}
-=> "March"
-{{ $monthindex := printf "%d" $time.Month }}
-=> $monthindex = 3
-{{< /code >}}
-
-
-[int]: /functions/int/
-[multilingual]: /content-management/multilingual/
-[`printf`]: /functions/printf/
diff --git a/content/en/functions/time/AsTime.md b/content/en/functions/time/AsTime.md
new file mode 100644 (file)
index 0000000..1244eeb
--- /dev/null
@@ -0,0 +1,64 @@
+---
+title: time.AsTime
+linkTitle: time
+description: Converts a timestamp string into a `time.Time` structure.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [time]
+  returnType: time.Time
+  signatures: ['time.AsTime INPUT [TIMEZONE]']
+relatedFunctions:
+  - time.AsTime
+  - time.Duration
+  - time.Format
+  - time.Now
+  - time.ParseDuration
+aliases: [/functions/time]
+---
+
+
+`time` converts a timestamp string with an optional default location into a [`time.Time`](https://godoc.org/time#Time) structure so you can access its fields:
+
+```go-html-template
+{{ time "2016-05-28" }} → "2016-05-28T00:00:00Z"
+{{ (time "2016-05-28").YearDay }} → 149
+{{ mul 1000 (time "2016-05-28T10:30:00.00+10:00").Unix }} → 1464395400000, or Unix time in milliseconds
+```
+
+## Using locations
+
+The optional `TIMEZONE` argument is a string that sets a default time zone (or more specific, the location, which represents the collection of time offsets in a geographical area) that is associated with the specified time value. If the time value has an explicit timezone or offset specified, it will take precedence over the `TIMEZONE` argument.
+
+The list of valid locations may be system dependent, but should include `UTC`, `Local`, or any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
+
+If no `TIMEZONE` is set, the `timeZone` from site configuration will be used.
+
+```go-html-template
+{{ time "2020-10-20" }} → 2020-10-20 00:00:00 +0000 UTC
+{{ time "2020-10-20" "America/Los_Angeles" }} → 2020-10-20 00:00:00 -0700 PDT
+{{ time "2020-01-20" "America/Los_Angeles" }} → 2020-01-20 00:00:00 -0800 PST
+```
+
+## Example: Using `time` to get month index
+
+The following example takes a UNIX timestamp---set as `utimestamp: "1489276800"` in a content's front matter---converts the timestamp (string) to an integer using the [`int` function][int], and then uses [`printf`] to convert the `Month` property of `time` into an index.
+
+The following example may be useful when setting up [multilingual sites][multilingual]:
+
+{{< code file="unix-to-month-integer.html" >}}
+{{ $time := time (int .Params.addDate)}}
+=> $time = 1489276800
+{{ $time.Month }}
+=> "March"
+{{ $monthindex := printf "%d" $time.Month }}
+=> $monthindex = 3
+{{< /code >}}
+
+
+[int]: /functions/cast/toint
+[multilingual]: /content-management/multilingual/
+[`printf`]: /functions/fmt/printf
diff --git a/content/en/functions/time/Duration.md b/content/en/functions/time/Duration.md
new file mode 100644 (file)
index 0000000..921f25a
--- /dev/null
@@ -0,0 +1,46 @@
+---
+title: time.Duration
+linkTitle: duration
+description: Returns a `time.Duration` structure, using the given time unit and duration number.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [duration]
+  returnType: time.Duration
+  signatures: [time.Duration TIME_UNIT DURATION_NUMBER]
+relatedFunctions:
+  - time.AsTime
+  - time.Duration
+  - time.Format
+  - time.Now
+  - time.ParseDuration
+aliases: [/functions/duration]
+---
+
+`time.Duration` converts a given number into a [`time.Duration`](https://pkg.go.dev/time#Duration) structure so you can access its fields. E.g. you can perform [time operations](https://pkg.go.dev/time#Duration) on the returned `time.Duration` value:
+
+```go-html-template
+{{ printf "There are %.0f seconds in one day." (duration "hour" 24).Seconds }}
+<!-- Output: There are 86400 seconds in one day. -->
+```
+
+Make your code simpler to understand by using a [chained pipeline](https://pkg.go.dev/text/template#hdr-Pipelines):
+
+```go-html-template
+{{ mul 7.75 60 | duration "minute" }} → 7h45m0s
+{{ mul 120 60 | mul 1000 | duration "millisecond" }} → 2h0m0s
+```
+
+You have to specify a time unit for the number given to the function. Valid time units are:
+
+Duration|Valid time units
+:--|:--
+hours|`hour`, `h`
+minutes|`minute`, `m`
+seconds|`second`, `s`
+milliseconds|`millisecond`, `ms`
+microseconds|`microsecond`, `us`, `µs`
+nanoseconds|`nanosecond`, `ns`
diff --git a/content/en/functions/time/Format.md b/content/en/functions/time/Format.md
new file mode 100644 (file)
index 0000000..3a0b1eb
--- /dev/null
@@ -0,0 +1,76 @@
+---
+title: time.Format
+description: Returns a formatted and localized time.Time value.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [dateFormat]
+  returnType: string
+  signatures: [time.Format LAYOUT INPUT]
+relatedFunctions:
+  - time.AsTime
+  - time.Duration
+  - time.Format
+  - time.Now
+  - time.ParseDuration
+aliases: [/functions/dateformat]
+toc: true
+---
+
+```go-template
+{{ $t := "2023-01-27T23:44:58-08:00" }}
+{{ $format := "2 Jan 2006" }}
+
+{{ $t | time.Format $format }} → 27 Jan 2023
+
+{{ $t = time.AsTime $t }}
+{{ $t | time.Format $format }} → 27 Jan 2023
+```
+
+## Layout string
+
+{{% readfile file="/functions/_common/time-layout-string.md" %}}
+
+## Localization
+
+Use the `time.Format` function to localize `time.Time` values for the current language and region.
+
+{{% note %}}
+{{% readfile file="/functions/_common/locales.md" %}}
+{{% /note %}}
+
+
+Use the layout string as described above, or one of the tokens below. For example:
+
+```go-template
+{{ .Date | time.Format ":date_medium" }} → Jan 27, 2023
+```
+
+Localized to en-US:
+
+Token|Result
+:--|:--
+`:date_full`|`Friday, January 27, 2023`
+`:date_long`|`January 27, 2023`
+`:date_medium`|`Jan 27, 2023`
+`:date_short`|`1/27/23`
+`:time_full`|`11:44:58 pm Pacific Standard Time`
+`:time_long`|`11:44:58 pm PST`
+`:time_medium`|`11:44:58 pm`
+`:time_short`|`11:44 pm`
+
+Localized to de-DE:
+
+Token|Result
+:--|:--
+`:date_full`|`Freitag, 27. Januar 2023`
+`:date_long`|`27. Januar 2023`
+`:date_medium`|`27.01.2023`
+`:date_short`|`27.01.23`
+`:time_full`|`23:44:58 Nordamerikanische Westküsten-Normalzeit`
+`:time_long`|`23:44:58 PST`
+`:time_medium`|`23:44:58`
+`:time_short`|`23:44`
diff --git a/content/en/functions/time/Now.md b/content/en/functions/time/Now.md
new file mode 100644 (file)
index 0000000..74b01ec
--- /dev/null
@@ -0,0 +1,51 @@
+---
+title: time.Now
+linkTitle: now
+description: Returns the current local time 
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [now]
+  returnType: time.Time
+  signatures: [time.Now]
+relatedFunctions:
+  - time.AsTime
+  - time.Duration
+  - time.Format
+  - time.Now
+  - time.ParseDuration
+aliases: [/functions/now]
+---
+
+See [`time.Time`](https://godoc.org/time#Time).
+
+For example, building your site on June 24, 2017, with the following templating:
+
+```go-html-template
+<div>
+    <small>&copy; {{ now.Format "2006" }}</small>
+</div>
+```
+
+would produce the following:
+
+```html
+<div>
+    <small>&copy; 2017</small>
+</div>
+```
+
+The above example uses the [`.Format` function](/functions/format), which page includes a full listing of date formatting using Go's layout string.
+
+{{% note %}}
+Older Hugo themes may still be using the obsolete Page’s `.Now` (uppercase with leading dot), which causes build error that looks like the following:
+
+    ERROR ... Error while rendering "..." in "...": ...
+    executing "..." at <.Now.Format>:
+    can't evaluate field Now in type *hugolib.PageOutput
+
+Be sure to use `now` (lowercase with _**no**_ leading dot) in your templating.
+{{% /note %}}
diff --git a/content/en/functions/time/ParseDuration.md b/content/en/functions/time/ParseDuration.md
new file mode 100644 (file)
index 0000000..e3abc7c
--- /dev/null
@@ -0,0 +1,30 @@
+---
+title: time.ParseDuration
+description: Parses a given duration string into a `time.Duration` structure.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: time.Duration
+  signatures: [time.ParseDuration DURATION]
+relatedFunctions:
+  - time.AsTime
+  - time.Duration
+  - time.Format
+  - time.Now
+  - time.ParseDuration
+aliases: [/functions/time.parseduration]
+---
+
+`time.ParseDuration` parses a duration string into a [`time.Duration`](https://pkg.go.dev/time#Duration) structure so you can access its fields.
+A duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as `300ms`, `-1.5h` or `2h45m`. Valid time units are `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`.
+
+You can perform [time operations](https://pkg.go.dev/time#Duration) on the returned `time.Duration` value:
+
+```go-html-template
+{{ printf "There are %.0f seconds in one day." (time.ParseDuration "24h").Seconds }}
+<!-- Output: There are 86400 seconds in one day. -->
+```
diff --git a/content/en/functions/title.md b/content/en/functions/title.md
deleted file mode 100644 (file)
index d8e0f73..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: title
-description: Converts the provided string to title case.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature:
-  - "title STRING"
-  - "strings.Title STRING"
-relatedfuncs: []
----
-
-```go-html-template
-{{ title "table of contents (TOC)" }} → "Table of Contents (TOC)"
-```
-
-By default, Hugo adheres to the capitalization rules in the [Associated Press (AP) Stylebook]. Change your [site configuration] if you would prefer to follow the [Chicago Manual of Style], or to use Go's convention of capitalizing every word.
-
-[Associated Press (AP) Stylebook]: https://www.apstylebook.com/
-[Chicago Manual of Style]: https://www.chicagomanualofstyle.org/home.html
-[site configuration]: /getting-started/configuration/#configure-title-case
diff --git a/content/en/functions/transform.Remarshal.md b/content/en/functions/transform.Remarshal.md
deleted file mode 100644 (file)
index e160519..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: transform.Remarshal
-description: Marshals a string of serialized data, or a map, into a string of serialized data in the specified format.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: [ transform.Remarshal FORMAT INPUT ]
----
-
-The FORMAT must be one of `json`, `toml`, `yaml`, or `xml`. If the INPUT is a string of serialized data, it must be valid JSON, TOML, YAML, or XML.
-
-{{% note %}}
-This function is primarily a helper for Hugo's documentation, used to convert configuration and front matter examples to JSON, TOML, and YAML.
-
-This is not a general purpose converter, and may change without notice if required for Hugo's documentation site.
-{{% /note %}}
-
-Example 1
-: Convert a string of TOML to JSON.
-
-```go-html-template
-{{ $s := `
-  baseURL = 'https://example.org/'
-  languageCode = 'en-US'
-  title = 'ABC Widgets'
-`}}
-<pre>{{ transform.Remarshal "json" $s }}</pre>
-```
-
-Resulting HTML:
-
-```html
-<pre>{
-   &#34;baseURL&#34;: &#34;https://example.org/&#34;,
-   &#34;languageCode&#34;: &#34;en-US&#34;,
-   &#34;title&#34;: &#34;ABC Widgets&#34;
-}
-</pre>
-```
-
-Rendered in browser:
-
-```text
-{
-   "baseURL": "https://example.org/",
-   "languageCode": "en-US",
-   "title": "ABC Widgets"
-}
-```
-
-Example 2
-: Convert a map to YAML.
-
-```go-html-template
-{{ $m := dict
-  "a" "Hugo rocks!"
-  "b" (dict "question" "What is 6x7?" "answer" 42)
-  "c" (slice "foo" "bar")
-}}
-<pre>{{ transform.Remarshal "yaml" $m }}</pre>
-```
-
-Resulting HTML:
-
-```html
-<pre>a: Hugo rocks!
-b:
-  answer: 42
-  question: What is 6x7?
-c:
-- foo
-- bar
-</pre>
-```
-
-Rendered in browser:
-
-```text
-a: Hugo rocks!
-b:
-  answer: 42
-  question: What is 6x7?
-c:
-- foo
-- bar
-```
diff --git a/content/en/functions/transform.Unmarshal.md b/content/en/functions/transform.Unmarshal.md
deleted file mode 100644 (file)
index 7d0920d..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
----
-title: transform.Unmarshal
-description: "`transform.Unmarshal` (alias `unmarshal`) parses the input and converts it into a map or an array. Supported formats are JSON, TOML, YAML, XML and CSV."
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: []
-signature: ["RESOURCE or STRING | transform.Unmarshal [OPTIONS]"]
----
-
-The function accepts either a `Resource` created in [Hugo Pipes](/hugo-pipes/) or via [Page Bundles](/content-management/page-bundles/), or simply a string. The two examples below will produce the same map:
-
-```go-html-template
-{{ $greetings := "hello = \"Hello Hugo\"" | transform.Unmarshal }}`
-```
-
-```go-html-template
-{{ $greetings := "hello = \"Hello Hugo\"" | resources.FromString "data/greetings.toml" | transform.Unmarshal }}
-```
-
-In both the above examples, you get a map you can work with:
-
-```go-html-template
-{{ $greetings.hello }}
-```
-
-The above prints `Hello Hugo`.
-
-## CSV options
-
-Unmarshal with CSV as input has some options you can set:
-
-delimiter
-: The delimiter used, default is `,`.
-
-comment
-: The comment character used in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.:
-
-Example:
-
-```go-html-template
-{{ $csv := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }}
-```
-
-## XML data
-
-As a convenience, Hugo allows you to access XML data in the same way that you access JSON, TOML, and YAML: you do not need to specify the root node when accessing the data.
-
-To get the contents of `<title>` in the document below, you use `{{ .message.title }}`:
-
-```xml
-<root>
-    <message>
-        <title>Hugo rocks!</title>
-        <description>Thanks for using Hugo</description>
-    </message>
-</root>
-```
-
-The following example lists the items of an RSS feed:
-
-```go-html-template
-{{ with resources.GetRemote "https://example.com/rss.xml" | transform.Unmarshal }}
-  {{ range .channel.item }}
-    <strong>{{ .title | plainify | htmlUnescape }}</strong><br>
-    <p>{{ .description | plainify | htmlUnescape }}</p>
-    {{ $link := .link | plainify | htmlUnescape }}
-    <a href="{{ $link }}">{{ $link }}</a><br>
-    <hr>
-  {{ end }}
-{{ end }}
-```
diff --git a/content/en/functions/transform/CanHighlight.md b/content/en/functions/transform/CanHighlight.md
new file mode 100644 (file)
index 0000000..eabef93
--- /dev/null
@@ -0,0 +1,22 @@
+---
+title: transform.CanHighlight
+description: Reports whether the given code language is supported by the Chroma highlighter.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: bool
+  signatures: [transform.CanHighlight LANGUAGE]
+relatedFunctions:
+  - transform.CanHighlight
+  - transform.Highlight
+  - transform.HighlightCodeBlock
+---
+
+```go-html-template
+{{ transform.CanHighlight "go" }} → true
+{{ transform.CanHighlight "klingon" }} → false
+```
diff --git a/content/en/functions/transform/Emojify.md b/content/en/functions/transform/Emojify.md
new file mode 100644 (file)
index 0000000..324c418
--- /dev/null
@@ -0,0 +1,31 @@
+---
+title: transform.Emojify 
+linkTitle: emojify
+description: Runs a string through the Emoji emoticons processor.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [emojify]
+  returnType: template.HTML
+  signatures: [transform.Emojify INPUT]
+namespace: transform
+relatedFunctions: []
+aliases: [/functions/emojify]
+---
+
+`emojify` runs a passed string through the Emoji emoticons processor.
+
+See the [Emoji cheat sheet][emojis] for available emoticons.
+
+The `emojify` function can be called in your templates but not directly in your content files by default. For emojis in content files, set `enableEmoji` to `true` in your site's [configuration]. Then you can write emoji shorthand directly into your content files; e.g. <code>I :</code><code>heart</code><code>: Hugo!</code>:
+
+I :heart: Hugo!
+
+
+[configuration]: /getting-started/configuration/
+[emojis]: https://www.webfx.com/tools/emoji-cheat-sheet/
+[sc]: /templates/shortcode-templates/
+[scsource]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes
diff --git a/content/en/functions/transform/HTMLEscape.md b/content/en/functions/transform/HTMLEscape.md
new file mode 100644 (file)
index 0000000..6224936
--- /dev/null
@@ -0,0 +1,24 @@
+---
+title: transform.HTMLEscape
+linkTitle: htmlEscape
+description: Returns the given string with the reserved HTML codes escaped.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [htmlEscape]
+  returnType: string
+  signatures: [transform.HTMLEscape INPUT]
+relatedFunctions:
+  - transform.HTMLEscape
+  - transform.HTMLUnescape
+aliases: [/functions/htmlescape]
+---
+
+In the result `&` becomes `&amp;` and so on. It escapes only: `<`, `>`, `&`, `'` and `"`.
+
+```go-html-template
+{{ htmlEscape "Hugo & Caddy > WordPress & Apache" }} → "Hugo &amp; Caddy &gt; WordPress &amp; Apache"
+```
diff --git a/content/en/functions/transform/HTMLUnescape.md b/content/en/functions/transform/HTMLUnescape.md
new file mode 100644 (file)
index 0000000..c077423
--- /dev/null
@@ -0,0 +1,24 @@
+---
+title: transform.HTMLUnescape
+linkTitle: htmlUnescape
+description: Returns the given string with HTML escape codes un-escaped.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [htmlUnescape]
+  returnType: string
+  signatures: [transform.HTMLUnescape INPUT]
+relatedFunctions:
+  - transform.HTMLEscape
+  - transform.HTMLUnescape
+aliases: [/functions/htmlunescape]
+---
+
+Remember to pass the output of this to `safeHTML` if fully un-escaped characters are desired. Otherwise, the output will be escaped again as normal.
+
+```go-html-template
+{{ htmlUnescape "Hugo &amp; Caddy &gt; WordPress &amp; Apache" }} → "Hugo & Caddy > WordPress & Apache"
+```
diff --git a/content/en/functions/transform/Highlight.md b/content/en/functions/transform/Highlight.md
new file mode 100644 (file)
index 0000000..93043b4
--- /dev/null
@@ -0,0 +1,113 @@
+---
+title: transform.Highlight
+linkTitle: highlight
+description: Renders code with a syntax highlighter.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [highlight]
+  returnType: template.HTML
+  signatures: ['transform.Highlight INPUT LANG [OPTIONS]']
+namespace: transform
+relatedFunctions:
+  - transform.CanHighlight
+  - transform.Highlight
+  - transform.HighlightCodeBlock
+aliases: [/functions/highlight]
+toc: true
+---
+
+The `highlight` function uses the [Chroma] syntax highlighter, supporting over 200 languages with more than 40 available styles.
+
+## Arguments
+
+INPUT
+: The code to highlight.
+
+LANG
+: The language of the code to highlight. Choose from one of the [supported languages]. Case-insensitive.
+
+OPTIONS
+: An optional, comma-separated list of zero or more [options]. Set default values in [site configuration].
+
+## Options
+
+lineNos
+: Boolean. Default is `false`.\
+Display a number at the beginning of each line.
+
+lineNumbersInTable
+: Boolean. Default is `true`.\
+Render the highlighted code in an HTML table with two cells. The left table cell contains the line numbers. The right table cell contains the code, allowing a user to select and copy the code without line numbers. Irrelevant if `lineNos` is `false`.
+
+anchorLineNos
+: Boolean. Default is `false`.\
+Render each line number as an HTML anchor element, and set the `id` attribute of the surrounding `<span>` to the line number. Irrelevant if `lineNos` is `false`.
+
+lineAnchors
+: String. Default is `""`.\
+When rendering a line number as an HTML anchor element, prepend this value to the `id` attribute of the surrounding `<span>`. This provides unique `id` attributes when a page contains two or more code blocks. Irrelevant if `lineNos` or `anchorLineNos` is `false`.
+
+lineNoStart
+: Integer. Default is `1`.\
+The number to display at the beginning of the first line. Irrelevant if `lineNos` is `false`.
+
+hl_Lines
+: String. Default is `""`.\
+A space-separated list of lines to emphasize within the highlighted code. To emphasize lines 2, 3, 4, and 7, set this value to `2-4 7`. This option is independent of the `lineNoStart` option.
+
+hl_inline
+: Boolean. Default is `false`.\
+Render the highlighted code without a wrapping container.
+
+style
+: String. Default is `monokai`.\
+The CSS styles to apply to the highlighted code. See the [style gallery] for examples. Case-sensitive.
+
+noClasses
+: Boolean. Default is `true`.\
+Use inline CSS styles instead of an external CSS file. To use an external CSS file, set this value to `false` and [generate the file with the hugo client][hugo client].
+
+tabWidth
+: Integer. Default is `4`.\
+Substitute this number of spaces for each tab character in your highlighted code. Irrelevant if `noClasses` is `false`.
+
+guessSyntax
+: Boolean. Default is `false`.\
+If the `LANG` argument is blank or an unrecognized language, auto-detect the language if possible, otherwise use a fallback language.
+
+{{% note %}}
+Instead of specifying both `lineNos` and `lineNumbersInTable`, you can use the following shorthand notation:
+
+`lineNos=inline`
+: equivalent to `lineNos=true` and `lineNumbersInTable=false`
+
+`lineNos=table`
+: equivalent to `lineNos=true` and `lineNumbersInTable=true`
+{{% /note %}}
+
+## Examples
+
+```go-html-template
+{{ $input := `fmt.Println("Hello World!")` }}
+{{ transform.Highlight $input "go" }}
+
+{{ $input := `console.log('Hello World!');` }}
+{{ $lang := "js" }}
+{{ transform.Highlight $input $lang "lineNos=table, style=api" }}
+
+{{ $input := `echo "Hello World!"` }}
+{{ $lang := "bash" }}
+{{ $options := dict "lineNos" "table" "style" "dracula" }}
+{{ transform.Highlight $input $lang $options }}
+```
+
+[Chroma]: https://github.com/alecthomas/chroma
+[hugo client]: /commands/hugo_gen_chromastyles
+[options]: #options
+[site configuration]: /getting-started/configuration-markup#highlight
+[style gallery]: https://xyproto.github.io/splash/docs/
+[supported languages]: /content-management/syntax-highlighting#list-of-chroma-highlighting-languages
diff --git a/content/en/functions/transform/HighlightCodeBlock.md b/content/en/functions/transform/HighlightCodeBlock.md
new file mode 100644 (file)
index 0000000..fa70456
--- /dev/null
@@ -0,0 +1,43 @@
+---
+title: transform.HighlightCodeBlock
+description: Highlights code received in context within a code block render hook.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: highlight.HighlightResult 
+  signatures: ['transform.HighlightCodeBlock CONTEXT [OPTIONS]']
+relatedFunctions:
+  - transform.CanHighlight
+  - transform.Highlight
+  - transform.HighlightCodeBlock
+---
+
+This function is only useful within a code block render hook.
+
+Given the context passed into a code block render hook, `transform.HighlightCodeBlock` returns a `HighlightResult` object with two methods.
+
+.Wrapped
+: (`template.HTML`) Returns highlighted code wrapped in `<div>`, `<pre>`, and `<code>` elements. This is identical to the value returned by the transform.Highlight function.
+
+.Inner
+: (`template.HTML`) Returns highlighted code without any wrapping elements, allowing you to create your own wrapper.
+
+
+```go-html-template
+{{ $result := transform.HighlightCodeBlock . }}
+{{ $result.Wrapped }}
+```
+
+To override the default [highlighting options]:
+
+```go-html-template
+{{ $options := merge .Options (dict "linenos" true) }}
+{{ $result := transform.HighlightCodeBlock . $options }}
+{{ $result.Wrapped }}
+```
+
+[highlighting options]: /functions/transform/highlight/#options
diff --git a/content/en/functions/transform/Markdownify.md b/content/en/functions/transform/Markdownify.md
new file mode 100644 (file)
index 0000000..b0be902
--- /dev/null
@@ -0,0 +1,35 @@
+---
+title: transform.Markdownify
+linkTitle: markdownify
+description: Renders markdown to HTML.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [markdownify]
+  returnType: template.HTML
+  signatures: [transform.Markdownify INPUT]
+relatedFunctions: []
+aliases: [/functions/markdownify]
+---
+
+```go-html-template
+{{ .Title | markdownify }}
+```
+
+If the resulting HTML is a single paragraph, Hugo removes the wrapping `p` tags to produce inline HTML as required per the example above.
+
+To keep the wrapping `p` tags for a single paragraph, use the [`.Page.RenderString`] method, setting the `display` option to `block`.
+
+If the resulting HTML is two or more paragraphs, Hugo leaves the wrapping `p` tags in place.
+
+[`.Page.RenderString`]: /functions/renderstring/
+
+{{% note %}}
+Although the `markdownify` function honors [markdown render hooks] when rendering markdown to HTML, use the `.Page.RenderString` method instead of `markdownify` if a render hook accesses `.Page` context. See issue [#9692] for details.
+
+[markdown render hooks]: /templates/render-hooks/
+[#9692]: https://github.com/gohugoio/hugo/issues/9692
+{{% /note %}}
diff --git a/content/en/functions/transform/Plainify.md b/content/en/functions/transform/Plainify.md
new file mode 100644 (file)
index 0000000..163233d
--- /dev/null
@@ -0,0 +1,24 @@
+---
+title: transform.Plainify
+linkTitle: plainify
+description: Returns a string with all HTML tags removed.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [plainify]
+  returnType: string
+  signatures: [transform.Plainify INPUT]
+relatedFunctions: []
+aliases: [/functions/plainify]
+---
+
+```go-html-template
+{{ "<b>BatMan</b>" | plainify }} → "BatMan"
+```
+
+See also the `.PlainWords`, `.Plain`, and `.RawContent` [page variables][pagevars].
+
+[pagevars]: /variables/page/
diff --git a/content/en/functions/transform/Remarshal.md b/content/en/functions/transform/Remarshal.md
new file mode 100644 (file)
index 0000000..8f6e582
--- /dev/null
@@ -0,0 +1,96 @@
+---
+title: transform.Remarshal
+description: Marshals a string of serialized data, or a map, into a string of serialized data in the specified format.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [transform.Remarshal FORMAT INPUT]
+relatedFunctions:
+  - encoding.Jsonify
+  - transform.Remarshal
+  - transform.Unmarshal
+aliases: [/functions/transform.remarshal]
+---
+
+The FORMAT must be one of `json`, `toml`, `yaml`, or `xml`. If the INPUT is a string of serialized data, it must be valid JSON, TOML, YAML, or XML.
+
+{{% note %}}
+This function is primarily a helper for Hugo's documentation, used to convert configuration and front matter examples to JSON, TOML, and YAML.
+
+This is not a general purpose converter, and may change without notice if required for Hugo's documentation site.
+{{% /note %}}
+
+Example 1
+: Convert a string of TOML to JSON.
+
+```go-html-template
+{{ $s := `
+  baseURL = 'https://example.org/'
+  languageCode = 'en-US'
+  title = 'ABC Widgets'
+`}}
+<pre>{{ transform.Remarshal "json" $s }}</pre>
+```
+
+Resulting HTML:
+
+```html
+<pre>{
+   &#34;baseURL&#34;: &#34;https://example.org/&#34;,
+   &#34;languageCode&#34;: &#34;en-US&#34;,
+   &#34;title&#34;: &#34;ABC Widgets&#34;
+}
+</pre>
+```
+
+Rendered in browser:
+
+```text
+{
+   "baseURL": "https://example.org/",
+   "languageCode": "en-US",
+   "title": "ABC Widgets"
+}
+```
+
+Example 2
+: Convert a map to YAML.
+
+```go-html-template
+{{ $m := dict
+  "a" "Hugo rocks!"
+  "b" (dict "question" "What is 6x7?" "answer" 42)
+  "c" (slice "foo" "bar")
+}}
+<pre>{{ transform.Remarshal "yaml" $m }}</pre>
+```
+
+Resulting HTML:
+
+```html
+<pre>a: Hugo rocks!
+b:
+  answer: 42
+  question: What is 6x7?
+c:
+- foo
+- bar
+</pre>
+```
+
+Rendered in browser:
+
+```text
+a: Hugo rocks!
+b:
+  answer: 42
+  question: What is 6x7?
+c:
+- foo
+- bar
+```
diff --git a/content/en/functions/transform/Unmarshal.md b/content/en/functions/transform/Unmarshal.md
new file mode 100644 (file)
index 0000000..ab32d13
--- /dev/null
@@ -0,0 +1,83 @@
+---
+title: transform.Unmarshal
+description: Parses the input and converts it into a map or an array. Supported formats are JSON, TOML, YAML, XML and CSV.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [unmarshal]
+  returnType: any
+  signatures:
+    - RESOURCE or STRING | transform.Unmarshal [OPTIONS]
+    - RESOURCE or STRING | unmarshal [OPTIONS]
+relatedFunctions:
+  - encoding.Jsonify
+  - transform.Remarshal
+  - transform.Unmarshal
+aliases: [/functions/transform.unmarshal]
+---
+
+The function accepts either a `Resource` created in [Hugo Pipes](/hugo-pipes/) or via [Page Bundles](/content-management/page-bundles/), or simply a string. The two examples below will produce the same map:
+
+```go-html-template
+{{ $greetings := "hello = \"Hello Hugo\"" | transform.Unmarshal }}`
+```
+
+```go-html-template
+{{ $greetings := "hello = \"Hello Hugo\"" | resources.FromString "data/greetings.toml" | transform.Unmarshal }}
+```
+
+In both the above examples, you get a map you can work with:
+
+```go-html-template
+{{ $greetings.hello }}
+```
+
+The above prints `Hello Hugo`.
+
+## CSV options
+
+Unmarshal with CSV as input has some options you can set:
+
+delimiter
+: The delimiter used, default is `,`.
+
+comment
+: The comment character used in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored.:
+
+Example:
+
+```go-html-template
+{{ $csv := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }}
+```
+
+## XML data
+
+As a convenience, Hugo allows you to access XML data in the same way that you access JSON, TOML, and YAML: you do not need to specify the root node when accessing the data.
+
+To get the contents of `<title>` in the document below, you use `{{ .message.title }}`:
+
+```xml
+<root>
+    <message>
+        <title>Hugo rocks!</title>
+        <description>Thanks for using Hugo</description>
+    </message>
+</root>
+```
+
+The following example lists the items of an RSS feed:
+
+```go-html-template
+{{ with resources.GetRemote "https://example.com/rss.xml" | transform.Unmarshal }}
+  {{ range .channel.item }}
+    <strong>{{ .title | plainify | htmlUnescape }}</strong><br>
+    <p>{{ .description | plainify | htmlUnescape }}</p>
+    {{ $link := .link | plainify | htmlUnescape }}
+    <a href="{{ $link }}">{{ $link }}</a><br>
+    <hr>
+  {{ end }}
+{{ end }}
+```
diff --git a/content/en/functions/trim.md b/content/en/functions/trim.md
deleted file mode 100644 (file)
index 3d664ab..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: trim
-description: Returns a slice of a passed string with all leading and trailing characters from cutset removed.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature:
-  - "trim INPUT CUTSET"
-  - "strings.Trim INPUT CUTSET"
-relatedfuncs: []
----
-
-```go-html-template
-{{ trim "++Batman--" "+-" }} → "Batman"
-```
-
-`trim` *requires* the second argument, which tells the function specifically what to remove from the first argument. There is no default value for the second argument, so **the following usage will not work**:
-
-```go-html-template
-{{ trim .Inner }}
-```
-
-Instead, the following example tells `trim` to remove extra new lines from the content contained in the [shortcode `.Inner` variable][shortcodevars]:
-
-```go-html-template
-{{ trim .Inner "\n" }}
-```
-
-{{% note %}}
-Go templates also provide a simple [method for trimming whitespace](/templates/introduction/#whitespace) from either side of a Go tag by including a hyphen (`-`).
-{{% /note %}}
-
-
-[shortcodevars]: /variables/shortcodes/
diff --git a/content/en/functions/truncate.md b/content/en/functions/truncate.md
deleted file mode 100644 (file)
index cf38a2d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: truncate
-description: Truncates a text to a max length without cutting words or leaving unclosed HTML tags.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [strings]
-signature:
-  - "truncate SIZE [ELLIPSIS] INPUT"
-  - "strings.Truncate SIZE [ELLIPSIS] INPUT"
-relatedfuncs: []
----
-
-Since Go templates are HTML-aware, `truncate` will intelligently handle normal strings vs HTML strings:
-
-```go-html-template
-{{ "<em>Keep my HTML</em>" | safeHTML | truncate 10 }}` → <em>Keep my …</em>`
-```
-
-{{% note %}}
-If you have a raw string that contains HTML tags you want to remain treated as HTML, you will need to convert the string to HTML using the [`safeHTML` template function](/functions/safehtml) before sending the value to truncate. Otherwise, the HTML tags will be escaped when passed through the `truncate` function.
-{{% /note %}}
diff --git a/content/en/functions/union.md b/content/en/functions/union.md
deleted file mode 100644 (file)
index 86a874c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: union
-description: Given two arrays or slices, returns a new array that contains the elements or objects that belong to either or both arrays/slices.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [collections,intersect,union,complement]
-signature: ["union SET1 SET2"]
-relatedfuncs: [intersect,where]
----
-
-Given two arrays (or slices) A and B, this function will return a new array that contains the elements or objects that belong to either A or to B or to both. The elements supported are strings, integers, and floats (only float64).
-
-```go-html-template
-{{ union (slice 1 2 3) (slice 3 4 5) }}
-<!-- returns [1 2 3 4 5] -->
-
-{{ union (slice 1 2 3) nil }}
-<!-- returns [1 2 3] -->
-
-{{ union nil (slice 1 2 3) }}
-<!-- returns [1 2 3] -->
-
-{{ union nil nil }}
-<!-- returns an error because both arrays/slices have to be of the same type -->
-```
-
-## OR filter in where query
-
-This is also very useful to use as `OR` filters when combined with where:
-
-```go-html-template
-{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }}
-{{ $pages = $pages | union (where .Site.RegularPages "Params.pinned" true) }}
-{{ $pages = $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }}
-```
-
-The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page parameters.
-
-See [intersect](/functions/intersect) for `AND`.
diff --git a/content/en/functions/uniq.md b/content/en/functions/uniq.md
deleted file mode 100644 (file)
index aecdccf..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: uniq
-description: Takes in a slice or array and returns a slice with duplicate elements removed.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [multilingual,i18n,urls]
-signature: [uniq SET]
----
-
-
-```go-html-template
-{{ slice 1 3 2 1 | uniq }} → [1 3 2]
-```
diff --git a/content/en/functions/unix.md b/content/en/functions/unix.md
deleted file mode 100644 (file)
index 60fae92..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: .Unix
-description: Converts a time.Time value to the number of seconds elapsed since the Unix epoch, excluding leap seconds. The Unix epoch is 00:00:00&nbsp;UTC on 1 January 1970.
-keywords: [dates,time]
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-signature: [".Unix",".UnixMilli",".UnixMicro",".UnixNano"]
-relatedfuncs: [Format,dateFormat,now,time]
----
-
-The `Milli`, `Micro`, and `Nano` variants return the number of milliseconds, microseconds, and nanoseconds (respectively) elapsed since the Unix epoch.
-
-```go-html-template
-.Date.Unix        --> 1637259694
-.ExpiryDate.Unix  --> 1672559999
-.Lastmod.Unix     --> 1637361786
-.PublishDate.Unix --> 1637421261
-
-("1970-01-01T00:00:00-00:00" | time.AsTime).Unix --> 0
-("1970-01-01T00:00:42-00:00" | time.AsTime).Unix --> 42
-("1970-04-11T01:48:29-08:00" | time.AsTime).Unix --> 8675309
-("2026-05-02T20:09:31-07:00" | time.AsTime).Unix --> 1777777771
-
-now.Unix      --> 1637447841
-now.UnixMilli --> 1637447841347
-now.UnixMicro --> 1637447841347378
-now.UnixNano  --> 1637447841347378799
-```
diff --git a/content/en/functions/upper.md b/content/en/functions/upper.md
deleted file mode 100644 (file)
index e11065f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: upper
-description: Converts all characters in a string to uppercase
-keywords: []
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-toc:
-signature:
-  - "upper INPUT"
-  - "strings.ToUpper INPUT"
-relatedfuncs: []
----
-
-Note that `upper` can be applied in your templates in more than one way:
-
-```go-html-template
-{{ upper "BatMan" }} → "BATMAN"
-{{ "BatMan" | upper }} → "BATMAN"
-```
diff --git a/content/en/functions/urlize.md b/content/en/functions/urlize.md
deleted file mode 100644 (file)
index 7a9cf25..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: urlize
-description: Takes a string, sanitizes it for usage in URLs, and converts spaces to hyphens.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls,strings]
-signature: ["urlize INPUT"]
-relatedfuncs: []
----
-
-The following examples pull from a content file with the following front matter:
-
-{{< code-toggle file="content/blog/greatest-city.md" fm=true copy=false >}}
-title = "The World's Greatest City"
-location = "Chicago IL"
-tags = ["pizza","beer","hot dogs"]
-{{< /code-toggle >}}
-
-The following might be used as a partial within a [single page template][singletemplate]:
-
-{{< code file="layouts/partials/content-header.html" >}}
-<header>
-  <h1>{{ .Title }}</h1>
-  {{ with .Params.location }}
-    <div><a href="/locations/{{ . | urlize }}">{{ . }}</a></div>
-  {{ end }}
-  <!-- Creates a list of tags for the content and links to each of their pages -->
-  {{ with .Params.tags }}
-    <ul>
-      {{ range .}}
-        <li>
-          <a href="/tags/{{ . | urlize }}">{{ . }}</a>
-        </li>
-      {{ end }}
-    </ul>
-  {{ end }}
-</header>
-{{< /code >}}
-
-The preceding partial would then output to the rendered page as follows:
-
-```html
-<header>
-  <h1>The World&#39;s Greatest City</h1>
-  <div><a href="/locations/chicago-il">Chicago IL</a></div>
-  <ul>
-    <li>
-      <a href="/tags/pizza">pizza</a>
-    </li>
-    <li>
-      <a href="/tags/beer">beer</a>
-    </li>
-    <li>
-      <a href="/tags/hot-dogs">hot dogs</a>
-    </li>
-  </ul>
-</header>
-```
-
-[singletemplate]: /templates/single-page-templates/
diff --git a/content/en/functions/urlquery.md b/content/en/functions/urlquery.md
deleted file mode 100644 (file)
index 11ada38..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: urlquery
-description: Returns the escaped value of the textual representation of its arguments in a form suitable for embedding in a URL query.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls]
-signature: ["urlquery INPUT [INPUT]..."]
-relatedfuncs: []
----
-
-
-This template code:
-
-```go-html-template
-{{ $u := urlquery "https://" "example.com" | safeURL }}
-<a href="https://example.org?url={{ $u }}">Link</a>
-```
-
-Is rendered to:
-
-```html
-<a href="https://example.org?url=https%3A%2F%2Fexample.com">Link</a>
-```
diff --git a/content/en/functions/urls.JoinPath.md b/content/en/functions/urls.JoinPath.md
deleted file mode 100644 (file)
index f116323..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: urls.JoinPath
-description: Joins the provided elements into a URL string and cleans the result of any ./ or ../ elements. If the argument list is empty, JoinPath returns an empty string.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls,path,join]
-signature: ["urls.JoinPath ELEMENT..."]
----
-
-```go-html-template
-{{ urls.JoinPath }} → ""
-{{ urls.JoinPath "" }} → "/"
-{{ urls.JoinPath "a" }} → "a"
-{{ urls.JoinPath "a" "b" }} → "a/b"
-{{ urls.JoinPath "/a" "b" }} → "/a/b"
-{{ urls.JoinPath "https://example.org" "b" }} → "https://example.org/b"
-
-{{ urls.JoinPath (slice "a" "b") }} → "a/b"
-```
-
-Unlike the [`path.Join`] function, `urls.JoinPath` retains consecutive leading slashes.
-
-[`path.Join`]: /functions/path.join/
diff --git a/content/en/functions/urls.Parse.md b/content/en/functions/urls.Parse.md
deleted file mode 100644 (file)
index b2d781e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: urls.Parse
-description: Parses a URL into a URL structure.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [urls]
-signature: ["urls.Parse URL"]
----
-
-The `urls.Parse` function parses a URL into a [URL structure](https://godoc.org/net/url#URL). The URL may be relative (a path, without a host) or absolute (starting with a [scheme]). Hugo throws an error when parsing an invalid URL.
-
-[scheme]: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml#uri-schemes-1
-
-
-```go-html-template
-{{ $url := "https://example.org:123/foo?a=6&b=7#bar" }}
-{{ $u := urls.Parse $url }}
-
-{{ $u.IsAbs }} → true
-{{ $u.Scheme }} → https
-{{ $u.Host }} → example.org:123
-{{ $u.Hostname }} → example.org
-{{ $u.RequestURI }} → /foo?a=6&b=7
-{{ $u.Path }} → /foo
-{{ $u.Query }} → map[a:[6] b:[7]]
-{{ $u.Query.a }} → [6]
-{{ $u.Query.Get "a" }} → 6
-{{ $u.Query.Has "b" }} → true
-{{ $u.Fragment }} → bar
-```
diff --git a/content/en/functions/urls/AbsLangURL.md b/content/en/functions/urls/AbsLangURL.md
new file mode 100644 (file)
index 0000000..ad73bbf
--- /dev/null
@@ -0,0 +1,72 @@
+---
+title: urls.AbsLangURL
+linkTitle: absLangURL
+description: Returns an absolute URL with a language prefix, if any.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [absLangURL]
+  returnType: template.HTML
+  signatures: [urls.AbsLangURL INPUT]
+relatedFunctions:
+  - urls.AbsLangURL
+  - urls.AbsURL 
+  - urls.RelLangURL
+  - urls.RelURL
+aliases: [/functions/abslangurl]
+---
+
+Use this function with both monolingual and multilingual configurations. The URL returned by this function depends on:
+
+- Whether the input begins with a slash
+- The `baseURL` in site configuration
+- The language prefix, if any
+
+In examples that follow, the project is multilingual with content in both Español (`es`) and English (`en`). The default language is Español. The returned values are from the English site.
+
+### Input does not begin with a slash
+
+If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ absLangURL "" }}           →   https://example.org/en/
+{{ absLangURL "articles" }}   →   https://example.org/en/articles
+{{ absLangURL "style.css" }}  →   https://example.org/en/style.css
+```
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ absLangURL "" }}           →   https://example.org/docs/en/
+{{ absLangURL "articles" }}   →   https://example.org/docs/en/articles
+{{ absLangURL "style.css" }}  →   https://example.org/docs/en/style.css
+```
+
+### Input begins with a slash
+
+If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ absLangURL "/" }}          →   https://example.org/en/
+{{ absLangURL "/articles" }}  →   https://example.org/en/articles
+{{ absLangURL "/style.css" }} →   https://example.org/en/style.css
+```
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ absLangURL "/" }}          →   https://example.org/en/
+{{ absLangURL "/articles" }}  →   https://example.org/en/articles
+{{ absLangURL "/style.css" }} →   https://example.org/en/style.css
+```
+
+{{% note %}}
+The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
+{{% /note %}}
diff --git a/content/en/functions/urls/AbsURL.md b/content/en/functions/urls/AbsURL.md
new file mode 100644 (file)
index 0000000..bb6816f
--- /dev/null
@@ -0,0 +1,71 @@
+---
+title: urls.AbsURL 
+linkTitle: absURL
+description: Returns an absolute URL.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [absURL]
+  returnType: template.html
+  signatures: [urls.AbsURL INPUT]
+relatedFunctions:
+  - urls.AbsLangURL
+  - urls.AbsURL 
+  - urls.RelLangURL
+  - urls.RelURL
+aliases: [/functions/absurl]
+---
+
+With multilingual configurations, use the [`absLangURL`] function instead.  The URL returned by this function depends on:
+
+- Whether the input begins with a slash
+- The `baseURL` in site configuration
+
+### Input does not begin with a slash
+
+If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ absURL "" }}           →   https://example.org/
+{{ absURL "articles" }}   →   https://example.org/articles
+{{ absURL "style.css" }}  →   https://example.org/style.css
+```
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ absURL "" }}           →   https://example.org/docs/
+{{ absURL "articles" }}   →   https://example.org/docs/articles
+{{ absURL "style.css" }}  →   https://example.org/docs/style.css
+```
+
+#### Input begins with a slash
+
+If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ absURL "/" }}          →   https://example.org/
+{{ absURL "/articles" }}  →   https://example.org/articles
+{{ absURL "/style.css" }} →   https://example.org/style.css
+```
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ absURL "/" }}          →   https://example.org/
+{{ absURL "/articles" }}  →   https://example.org/articles
+{{ absURL "/style.css" }} →   https://example.org/style.css
+```
+
+{{% note %}}
+The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
+{{% /note %}}
+
+[`absLangURL`]: /functions/urls/abslangurl/
diff --git a/content/en/functions/urls/Anchorize.md b/content/en/functions/urls/Anchorize.md
new file mode 100644 (file)
index 0000000..15efe9a
--- /dev/null
@@ -0,0 +1,31 @@
+---
+title: urls.Anchorize
+linkTitle: anchorize
+description: Takes a string and sanitizes it the same way as the [`defaultMarkdownHandler`](/getting-started/configuration-markup#default-configuration) does for markdown headers.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [anchorize]
+  returnType: string
+  signatures: [urls.Anchorize INPUT]
+relatedFunctions:
+  - urls.Anchorize
+  - urls.URLize
+aliases: [/functions/anchorize]
+---
+
+If [Goldmark](/getting-started/configuration-markup#goldmark) is set as `defaultMarkdownHandler`, the sanitizing logic adheres to the setting [`markup.goldmark.parser.autoHeadingIDType`](/getting-started/configuration-markup#goldmark).
+
+Since the `defaultMarkdownHandler` and this template function use the same sanitizing logic, you can use the latter to determine the ID of a header for linking with anchor tags.
+
+```go-html-template
+{{ anchorize "This is a header" }} → "this-is-a-header"
+{{ anchorize "This is also    a header" }} → "this-is-also----a-header"
+{{ anchorize "main.go" }} → "maingo"
+{{ anchorize "Article 123" }} → "article-123"
+{{ anchorize "<- Let's try this, shall we?" }} → "--lets-try-this-shall-we"
+{{ anchorize "Hello, 世界" }} → "hello-世界"
+```
diff --git a/content/en/functions/urls/JoinPath.md b/content/en/functions/urls/JoinPath.md
new file mode 100644 (file)
index 0000000..41adf7e
--- /dev/null
@@ -0,0 +1,32 @@
+---
+title: urls.JoinPath
+description: Joins the provided elements into a URL string and cleans the result of any ./ or ../ elements. If the argument list is empty, JoinPath returns an empty string.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: string
+  signatures: [urls.JoinPath ELEMENT...]
+relatedFunctions:
+  - path.Join
+  - urls.JoinPath
+aliases: [/functions/urls.joinpath]
+---
+
+```go-html-template
+{{ urls.JoinPath }} → ""
+{{ urls.JoinPath "" }} → "/"
+{{ urls.JoinPath "a" }} → "a"
+{{ urls.JoinPath "a" "b" }} → "a/b"
+{{ urls.JoinPath "/a" "b" }} → "/a/b"
+{{ urls.JoinPath "https://example.org" "b" }} → "https://example.org/b"
+
+{{ urls.JoinPath (slice "a" "b") }} → "a/b"
+```
+
+Unlike the [`path.Join`] function, `urls.JoinPath` retains consecutive leading slashes.
+
+[`path.Join`]: /functions/path/join
diff --git a/content/en/functions/urls/Parse.md b/content/en/functions/urls/Parse.md
new file mode 100644 (file)
index 0000000..17c924d
--- /dev/null
@@ -0,0 +1,37 @@
+---
+title: urls.Parse
+description: Parses a URL into a URL structure.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: []
+  returnType: URL
+  signatures: [urls.Parse URL]
+relatedFunctions: []
+aliases: [/functions/urls.parse]
+---
+
+The `urls.Parse` function parses a URL into a [URL structure](https://godoc.org/net/url#URL). The URL may be relative (a path, without a host) or absolute (starting with a [scheme]). Hugo throws an error when parsing an invalid URL.
+
+[scheme]: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml#uri-schemes-1
+
+
+```go-html-template
+{{ $url := "https://example.org:123/foo?a=6&b=7#bar" }}
+{{ $u := urls.Parse $url }}
+
+{{ $u.IsAbs }} → true
+{{ $u.Scheme }} → https
+{{ $u.Host }} → example.org:123
+{{ $u.Hostname }} → example.org
+{{ $u.RequestURI }} → /foo?a=6&b=7
+{{ $u.Path }} → /foo
+{{ $u.Query }} → map[a:[6] b:[7]]
+{{ $u.Query.a }} → [6]
+{{ $u.Query.Get "a" }} → 6
+{{ $u.Query.Has "b" }} → true
+{{ $u.Fragment }} → bar
+```
diff --git a/content/en/functions/urls/Ref.md b/content/en/functions/urls/Ref.md
new file mode 100644 (file)
index 0000000..908fd6c
--- /dev/null
@@ -0,0 +1,49 @@
+---
+title: urls.Ref
+linkTitle: ref
+description: Returns the absolute permalink to a page.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [ref]
+  returnType: template.HTML
+  signatures: [urls.Ref . PAGE]
+relatedFunctions:
+  - urls.Ref
+  - urls.RelRef
+aliases: [/functions/ref]
+---
+
+This function takes two arguments:
+
+- The context of the page from which to resolve relative paths, typically the current page (`.`)
+- The path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site.
+
+```go-html-template
+{{ ref . "about" }}
+{{ ref . "about#anchor" }}
+{{ ref . "about.md" }}
+{{ ref . "about.md#anchor" }}
+{{ ref . "#anchor" }}
+{{ ref . "/blog/my-post" }}
+{{ ref . "/blog/my-post.md" }}
+```
+
+To return the absolute permalink to another language version of a page:
+
+```go-html-template
+{{ ref . (dict "path" "about.md" "lang" "fr") }}
+```
+
+To return the absolute permalink to another Output Format of a page:
+
+```go-html-template
+{{ ref . (dict "path" "about.md" "outputFormat" "rss") }}
+```
+
+Hugo emits an error or warning if the page cannot be uniquely resolved. The error behavior is configurable; see [Ref and RelRef Configuration](/content-management/cross-references/#ref-and-relref-configuration).
+
+This function is used by Hugo's built-in [`ref`](/content-management/shortcodes/#ref-and-relref) shortcode. For a detailed explanation of how to leverage this shortcode for content management, see [Links and Cross References](/content-management/cross-references/).
diff --git a/content/en/functions/urls/RelLangURL.md b/content/en/functions/urls/RelLangURL.md
new file mode 100644 (file)
index 0000000..b8850c7
--- /dev/null
@@ -0,0 +1,72 @@
+---
+title: urls.RelLangURL
+linkTitle: relLangURL
+description: Returns a relative URL with a language prefix, if any.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [relLangURL]
+  returnType: template.HTML
+  signatures: [urls.RelLangURL INPUT]
+relatedFunctions:
+  - urls.AbsLangURL
+  - urls.AbsURL 
+  - urls.RelLangURL
+  - urls.RelURL
+aliases: [/functions/rellangurl]
+---
+
+Use this function with both monolingual and multilingual configurations. The URL returned by this function depends on:
+
+- Whether the input begins with a slash
+- The `baseURL` in site configuration
+- The language prefix, if any
+
+In examples that follow, the project is multilingual with content in both Español (`es`) and English (`en`). The default language is Español. The returned values are from the English site.
+
+### Input does not begin with a slash
+
+If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ relLangURL "" }}           →   /en/
+{{ relLangURL "articles" }}   →   /en/articles
+{{ relLangURL "style.css" }}  →   /en/style.css
+``` 
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ relLangURL "" }}           →   /docs/en/
+{{ relLangURL "articles" }}   →   /docs/en/articles
+{{ relLangURL "style.css" }}  →   /docs/en/style.css
+```
+
+#### Input begins with a slash
+
+If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ relLangURL "/" }}          →   /en/
+{{ relLangURL "/articles" }}  →   /en/articles
+{{ relLangURL "/style.css" }} →   /en/style.css
+``` 
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ relLangURL "/" }}          →   /en/
+{{ relLangURL "/articles" }}  →   /en/articles
+{{ relLangURL "/style.css" }} →   /en/style.css
+```
+
+{{% note %}}
+The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
+{{% /note %}}
diff --git a/content/en/functions/urls/RelRef.md b/content/en/functions/urls/RelRef.md
new file mode 100644 (file)
index 0000000..1ff213b
--- /dev/null
@@ -0,0 +1,56 @@
+---
+title: urls.RelRef
+linkTitle: relref
+description: Returns the relative permalink to a page.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [relref]
+  returnType: template.HTML
+  signatures: [urls.RelRef . PAGE]
+relatedFunctions:
+  - urls.Ref
+  - urls.RelRef
+aliases: [/functions/relref]
+---
+
+This function takes two arguments:
+
+- The context of the page from which to resolve relative paths, typically the current page (`.`)
+- The path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site.
+
+```go-html-template
+{{ relref . "about" }}
+{{ relref . "about#anchor" }}
+{{ relref . "about.md" }}
+{{ relref . "about.md#anchor" }}
+{{ relref . "#anchor" }}
+{{ relref . "/blog/my-post" }}
+{{ relref . "/blog/my-post.md" }}
+```
+
+The permalink returned is relative to the protocol+host portion of the baseURL specified in the site configuration. For example:
+
+Code|baseURL|Permalink
+:--|:--|:--
+`{{ relref . "/about" }}`|`http://example.org/`|`/about/`
+`{{ relref . "/about" }}`|`http://example.org/x/`|`/x/about/`
+
+To return the relative permalink to another language version of a page:
+
+```go-html-template
+{{ relref . (dict "path" "about.md" "lang" "fr") }}
+```
+
+To return the relative permalink to another Output Format of a page:
+
+```go-html-template
+{{ relref . (dict "path" "about.md" "outputFormat" "rss") }}
+```
+
+Hugo emits an error or warning if the page cannot be uniquely resolved. The error behavior is configurable; see [Ref and RelRef Configuration](/content-management/cross-references/#ref-and-relref-configuration).
+
+This function is used by Hugo's built-in [`relref`](/content-management/shortcodes/#ref-and-relref) shortcode. For a detailed explanation of how to leverage this shortcode for content management, see [Links and Cross References](/content-management/cross-references/).
diff --git a/content/en/functions/urls/RelURL.md b/content/en/functions/urls/RelURL.md
new file mode 100644 (file)
index 0000000..fa1f9af
--- /dev/null
@@ -0,0 +1,71 @@
+---
+title: urls.RelURL
+linkTitle: relURL
+description: Returns a relative URL.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [relURL]
+  returnType: template.HTML
+  signatures: [urls.RelURL INPUT]
+relatedFunctions:
+  - urls.AbsLangURL
+  - urls.AbsURL 
+  - urls.RelLangURL
+  - urls.RelURL
+aliases: [/functions/relurl]
+---
+
+With multilingual configurations, use the [`relLangURL`] function instead. The URL returned by this function depends on:
+
+- Whether the input begins with a slash
+- The `baseURL` in site configuration
+
+### Input does not begin with a slash
+
+If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ relURL "" }}           →   /
+{{ relURL "articles" }}   →   /articles
+{{ relURL "style.css" }}  →   /style.css
+```
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ relURL "" }}           →   /docs/
+{{ relURL "articles" }}   →   /docs/articles
+{{ relURL "style.css" }}  →   /docs/style.css
+```
+
+#### Input begins with a slash
+
+If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`.
+
+With `baseURL = https://example.org/`
+
+```go-html-template
+{{ relURL "/" }}          →   /
+{{ relURL "/articles" }}  →   /articles
+{{ relURL "style.css" }}  →   /style.css
+```
+
+With `baseURL = https://example.org/docs/`
+
+```go-html-template
+{{ relURL "/" }}          →   /
+{{ relURL "/articles" }}  →   /articles
+{{ relURL "/style.css" }} →   /style.css
+```
+
+{{% note %}}
+The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function.
+{{% /note %}}
+
+[`relLangURL`]: /functions/urls/rellangurl/
diff --git a/content/en/functions/urls/URLize.md b/content/en/functions/urls/URLize.md
new file mode 100644 (file)
index 0000000..3c80a92
--- /dev/null
@@ -0,0 +1,69 @@
+---
+title: urls.URLize
+linkTitle: urlize
+description: Takes a string, sanitizes it for usage in URLs, and converts spaces to hyphens.
+categories: [functions]
+keywords: []
+menu:
+  docs:
+    parent: functions
+function:
+  aliases: [urlize]
+  returnType: string
+  signatures: [urls.URLize INPUT]
+relatedFunctions:
+  - urls.Anchorize
+  - urls.URLize
+aliases: [/functions/urlize]
+---
+
+The following examples pull from a content file with the following front matter:
+
+{{< code-toggle file="content/blog/greatest-city.md" fm=true copy=false >}}
+title = "The World's Greatest City"
+location = "Chicago IL"
+tags = ["pizza","beer","hot dogs"]
+{{< /code-toggle >}}
+
+The following might be used as a partial within a [single page template][singletemplate]:
+
+{{< code file="layouts/partials/content-header.html" >}}
+<header>
+  <h1>{{ .Title }}</h1>
+  {{ with .Params.location }}
+    <div><a href="/locations/{{ . | urlize }}">{{ . }}</a></div>
+  {{ end }}
+  <!-- Creates a list of tags for the content and links to each of their pages -->
+  {{ with .Params.tags }}
+    <ul>
+      {{ range .}}
+        <li>
+          <a href="/tags/{{ . | urlize }}">{{ . }}</a>
+        </li>
+      {{ end }}
+    </ul>
+  {{ end }}
+</header>
+{{< /code >}}
+
+The preceding partial would then output to the rendered page as follows:
+
+```html
+<header>
+  <h1>The World&#39;s Greatest City</h1>
+  <div><a href="/locations/chicago-il">Chicago IL</a></div>
+  <ul>
+    <li>
+      <a href="/tags/pizza">pizza</a>
+    </li>
+    <li>
+      <a href="/tags/beer">beer</a>
+    </li>
+    <li>
+      <a href="/tags/hot-dogs">hot dogs</a>
+    </li>
+  </ul>
+</header>
+```
+
+[singletemplate]: /templates/single-page-templates/
diff --git a/content/en/functions/where.md b/content/en/functions/where.md
deleted file mode 100644 (file)
index 9618ea4..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
----
-title: where
-description: Filters an array to only the elements containing a matching value for a given field.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [filtering]
-signature: ["where COLLECTION KEY [OPERATOR] MATCH"]
-relatedfuncs: [intersect,first,after,last]
-toc: true
----
-
-`where` filters an array to only the elements containing a matching
-value for a given field.
-
-It works in a similar manner to the [`where` keyword in
-SQL][wherekeyword].
-
-```go-html-template
-{{ range where .Pages "Section" "foo" }}
-  {{ .Content }}
-{{ end }}
-```
-
-It can be used by dot-chaining the second argument to refer to a nested element of a value.
-
-{{< code-toggle file="content/example.md" fm=true copy=false >}}
-title: Example
-series: golang
-{{< /code-toggle >}}
-
-```go-html-template
-{{ range where .Site.Pages "Params.series" "golang" }}
-   {{ .Content }}
-{{ end }}
-```
-
-It can also be used with the logical operators `!=`, `>=`, `in`, etc. Without an operator, `where` compares a given field with a matching value equivalent to `=`.
-
-```go-html-template
-{{ range where .Pages "Section" "!=" "foo" }}
-   {{ .Content }}
-{{ end }}
-```
-
-The following logical operators are available with `where`:
-
-`=`, `==`, `eq`
-: `true` if a given field value equals a matching value
-
-`!=`, `<>`, `ne`
-: `true` if a given field value doesn't equal a matching value
-
-`>=`, `ge`
-: `true` if a given field value is greater than or equal to a matching value
-
-`>`, `gt`
-: `true` if a given field value is greater than a matching value
-
-`<=`, `le`
-: `true` if a given field value is lesser than or equal to a matching value
-
-`<`, `lt`
-: `true` if a given field value is lesser than a matching value
-
-`in`
-: `true` if a given field value is included in a matching value; a matching value must be an array or a slice
-
-`not in`
-: `true` if a given field value isn't included in a matching value; a matching value must be an array or a slice
-
-`intersect`
-: `true` if a given field value that is a slice/array of strings or integers contains elements in common with the matching value; it follows the same rules as the [`intersect` function][intersect].
-
-`like`
-: `true` if a given field value matches a regular expression. Use the `like` operator to compare `string` values. Returns `false` when comparing other data types to the regular expression.
-
-## Use `where` with boolean values
-When using booleans you should not put quotation marks.
-```go-html-template
-{{ range where .Pages "Draft" true }}
-        <p>{{ .Title }}</p>
-{{ end }}
-```
-
-## Use `where` with `intersect`
-
-```go-html-template
-{{ range where .Site.Pages "Params.tags" "intersect" .Params.tags }}
-  {{ if ne .Permalink $.Permalink }}
-    {{ .Render "summary" }}
-  {{ end }}
-{{ end }}
-```
-
-You can also put the returned value of the `where` clauses into a variable:
-
-{{< code file="where-intersect-variables.html" >}}
-{{ $v1 := where .Site.Pages "Params.a" "v1" }}
-{{ $v2 := where .Site.Pages "Params.b" "v2" }}
-{{ $filtered := $v1 | intersect $v2 }}
-{{ range $filtered }}
-{{ end }}
-{{< /code >}}
-
-## Use `where` with `like`
-
-This example matches pages where the "foo" parameter begins with "ab":
-
-```go-html-template
-{{ range where site.RegularPages "Params.foo" "like" `^ab` }}
-  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
-{{ end }}
-```
-
-{{% readfile file="/functions/common/regular-expressions.md" %}}
-
-## Use `where` with `first`
-
-Using `first` and `where` together can be very
-powerful. Below snippet gets a list of posts only from [**main
-sections**](#mainsections), sorts it using the [default
-ordering](/templates/lists/) for lists (i.e., `weight => date`), and
-then ranges through only the first 5 posts in that list:
-
-{{< code file="first-and-where-together.html" >}}
-{{ range first 5 (where site.RegularPages "Type" "in" site.Params.mainSections) }}
-   {{ .Content }}
-{{ end }}
-{{< /code >}}
-
-## Nest `where` clauses
-
-You can also nest `where` clauses to drill down on lists of content by more than one parameter. The following first grabs all pages in the "blog" section and then ranges through the result of the first `where` clause and finds all pages that are *not* featured:
-
-```go-html-template
-{{ range where (where .Pages "Section" "blog" ) "Params.featured" "!=" true }}
-```
-
-## Unset fields
-
-Filtering only works for set fields. To check whether a field is set or exists, you can use the operand `nil`.
-
-This can be useful to filter a small amount of pages from a large pool. Instead of setting a field on all pages, you can set that field on required pages only.
-
-Only the following operators are available for `nil`
-
-* `=`, `==`, `eq`: True if the given field is not set.
-* `!=`, `<>`, `ne`: True if the given field is set.
-
-```go-html-template
-{{ range where .Pages "Params.specialpost" "!=" nil }}
-   {{ .Content }}
-{{ end }}
-```
-
-## Portable `where` filters -- `site.Params.mainSections` {#mainsections}
-
-**This is especially important for themes.**
-
-To list the most relevant pages on the front page or similar, you
-should use the `site.Params.mainSections` list instead of comparing
-section names to hard-coded values like `"posts"` or `"post"`.
-
-```go-html-template
-{{ $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
-```
-
-If the user has not set this configuration parameter in their site configuration, it will default to the *section with the most pages*.
-
-The user can override the default:
-
-{{< code-toggle file="hugo" >}}
-[params]
-  mainSections = ["blog", "docs"]
-{{< /code-toggle >}}
-
-[intersect]: /functions/intersect/
-[wherekeyword]: https://www.techonthenet.com/sql/where.php
diff --git a/content/en/functions/with.md b/content/en/functions/with.md
deleted file mode 100644 (file)
index 591aea0..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: with
-description: Rebinds the context (`.`) within its scope and skips the block if the variable is absent or empty.
-categories: [functions]
-menu:
-  docs:
-    parent: functions
-keywords: [conditionals]
-signature: ["with INPUT"]
-relatedfuncs: []
----
-
-An alternative way of writing an `if` statement and then referencing the same value is to use `with` instead. `with` rebinds the context (`.`) within its scope and skips the block if the variable is absent, unset or empty.
-
-The set of *empty* values is defined by [the Go templates package](https://golang.org/pkg/text/template/). Empty values include `false`, the number zero, and the empty string.
-
-If you want to render a block if an index or key is present in a slice, array, channel or map, regardless of whether the value is empty, you should use [`isset`](/functions/isset) instead.
-
-The following example checks for a [user-defined site variable](/variables/site/) called `twitteruser`. If the key-value is not set, the following will render nothing:
-
-{{< code file="layouts/partials/twitter.html" >}}
-{{ with .Site.Params.twitteruser }}<span class="twitter">
-<a href="https://twitter.com/{{ . }}" rel="author">
-<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{ . }}"
- alt="Twitter"></a>
-</span>{{ end }}
-{{< /code >}}
index dca2b3c5219dd4fbe1c816a78875fe5682e6b696..02c4ea9986e34958b6868df86265d6beeb4b8164 100644 (file)
@@ -12,21 +12,47 @@ slug: configuration-markup
 toc: true
 ---
 
-## Default configuration
+## Default handler
 
-See [Goldmark](#goldmark) for settings related to the default markdown handler in Hugo.
+By default, Hugo uses [Goldmark] to render markdown to HTML.
 
-Below are all markup related configuration in Hugo with their default settings:
+{{< code-toggle file=hugo copy=false >}}
+[markup]
+defaultMarkdownHandler = 'goldmark'
+{{< /code-toggle >}}
 
-{{< code-toggle config="markup" />}}
+Files with the `.md` or `.markdown` extension are processed as markdown, provided that you have not specified a different [content format] using the `markup` field in front matter.
 
-**See each section below for details.**
+To use a different renderer for markdown files, specify one of `asciidocext`, `org`, `pandoc`, or `rst` in your site configuration.
 
-## Goldmark
+defaultMarkdownHandler|Description
+:--|:--
+`asciidocext`|[AsciiDoc]
+`goldmark`|[Goldmark]
+`org`|[Emacs Org Mode]
+`pandoc`|[Pandoc]
+`rst`|[reStructuredText]
+
+To use Asciidoc, Pandoc, or reStructuredText you must install the relevant renderer and update your [security policy].
+
+{{% note %}}
+Unless you need a unique capability provided by one of the alternate markdown handlers, we strongly recommend that you use the default setting. Goldmark is fast, well maintained, conforms to the [CommonMark] specification, and is compatible with [GitHub Flavored Markdown] (GFM).
+
+[commonmark]: https://spec.commonmark.org/0.30/
+[github flavored markdown]: https://github.github.com/gfm/
+{{% /note %}}
 
-[Goldmark](https://github.com/yuin/goldmark/) is from Hugo 0.60 the default library used for Markdown. It's fast, it's [CommonMark](https://spec.commonmark.org/current/) compliant and it's very flexible.
+[asciidoc]: https://asciidoc.org/
+[content format]: /content-management/formats/#list-of-content-formats
+[emacs org mode]: https://orgmode.org/
+[goldmark]: https://github.com/yuin/goldmark/
+[pandoc]: https://pandoc.org/
+[restructuredtext]: https://docutils.sourceforge.io/rst.html
+[security policy]: /about/security-model/#security-policy
 
-This is the default configuration:
+## Goldmark
+
+This is the default configuration for the Goldmark markdown renderer:
 
 {{< code-toggle config="markup.goldmark" />}}
 
@@ -41,7 +67,21 @@ unsafe
 : By default, Goldmark does not render raw HTML and potentially dangerous links. If you have lots of inline HTML and/or JavaScript, you may need to turn this on.
 
 typographer
-: This extension substitutes punctuations with typographic entities like [smartypants](https://daringfireball.net/projects/smartypants/).
+: The typographer extension replaces certain character combinations with HTML entities as specified below:
+
+Markdown|Replaced by|Description
+:--|:--|:--
+`...`|`&hellip;`|horizontal ellipsis
+`'`|`&rsquo;`|apostrophe
+`--`|`&ndash;`|en dash
+`---`|`&mdash;`|em dash
+`«`|`&laquo;`|left angle quote
+`“`|`&ldquo;`|left double quote
+`‘`|`&lsquo;`|left single quote
+`»`|`&raquo;`|right angle quote
+`”`|`&rdquo;`|right double quote
+`’`|`&rsquo;`|right single quote
+
 
 attribute
 : Enable custom attribute support for titles and blocks by adding attribute lists inside single curly brackets (`{.myclass class="class1 class2" }`) and placing it _after the Markdown element it decorates_, on the same line for titles and on a new line directly below for blocks.
@@ -80,7 +120,71 @@ Note that attributes in [code fences](/content-management/syntax-highlighting/#h
 ````
 
 autoHeadingIDType ("github")
-: The strategy used for creating auto IDs (anchor names). Available types are `github`, `github-ascii` and `blackfriday`. `github` produces GitHub-compatible IDs, `github-ascii` will drop any non-Ascii characters after accent normalization, and `blackfriday` will make the IDs compatible with Blackfriday, the default Markdown engine before Hugo 0.60. Note that if Goldmark is your default Markdown engine, this is also the strategy used in the [anchorize](/functions/anchorize/) template func.
+: The strategy used for creating auto IDs (anchor names). Available types are `github`, `github-ascii` and `blackfriday`. `github` produces GitHub-compatible IDs, `github-ascii` will drop any non-Ascii characters after accent normalization, and `blackfriday` will make the IDs compatible with Blackfriday, the default Markdown engine before Hugo 0.60. Note that if Goldmark is your default Markdown engine, this is also the strategy used in the [anchorize](/functions/urls/anchorize) template func.
+
+## Asciidoc
+
+This is the default configuration for the AsciiDoc markdown renderer:
+
+{{< code-toggle config="markup.asciidocExt" />}}
+
+attributes
+: (`map`) Variables to be referenced in your AsciiDoc file. This is a list of variable name/value maps. See Asciidoctor’s [attributes].
+
+[attributes]: https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#attributes-and-substitutions
+
+backend:
+: (`string`) Don’t change this unless you know what you are doing.
+
+extensions
+: (`[]string`) Possible extensions are `asciidoctor-html5s`, `asciidoctor-bibtex`, `asciidoctor-diagram`, `asciidoctor-interdoc-reftext`, `asciidoctor-katex`, `asciidoctor-latex`, `asciidoctor-mathematical`, and `asciidoctor-question`.
+
+failureLevel
+: (`string`) The minimum logging level that triggers a non-zero exit code (failure).
+
+noHeaderOrFooter
+: (`bool`) Output an embeddable document, which excludes the header, the footer, and everything outside the body of the document. Don’t change this unless you know what you are doing.
+
+preserveTOC
+: (`bool`) By default, Hugo removes the table of contents generated by Asciidoctor and provides it through the built-in variable `.TableOfContents` to enable further customization and better integration with the various Hugo themes. This option can be set to true to preserve Asciidoctor’s TOC in the generated page.
+
+safeMode
+: (`string`) Safe mode level `unsafe`, `safe`, `server`, or `secure`. Don’t change this unless you know what you are doing.
+
+sectionNumbers
+: (`bool`) Auto-number section titles.
+
+trace
+: (`bool`) Include backtrace information on errors.
+
+verbose
+: (`bool`) Verbosely print processing information and configuration file checks to stderr.
+
+workingFolderCurrent
+: (`bool`) Sets the working directory to be the same as that of the AsciiDoc file being processed, so that [include] will work with relative paths. This setting uses the asciidoctor cli parameter --base-dir and attribute outdir=. For rendering diagrams with [asciidoctor-diagram], `workingFolderCurrent` must be set to `true`.
+
+[asciidoctor-diagram]: https://asciidoctor.org/docs/asciidoctor-diagram/
+[include]: https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files
+
+Notice that for security concerns only extensions that do not have path separators (either `\`, `/` or `.`) are allowed. That means that extensions can only be invoked if they are in the Ruby's `$LOAD_PATH` (ie. most likely, the extension has been installed by the user). Any extension declared relative to the website's path will not be accepted.
+
+Example of how to set extensions and attributes:
+
+```yml
+[markup.asciidocExt]
+    extensions = ["asciidoctor-html5s", "asciidoctor-diagram"]
+    workingFolderCurrent = true
+    [markup.asciidocExt.attributes]
+        my-base-url = "https://example.com/"
+        my-attribute-name = "my value"
+```
+
+In a complex Asciidoctor environment it is sometimes helpful to debug the exact call to your external helper with all
+parameters. Run Hugo with `-v`. You will get an output like
+
+```txt
+INFO 2019/12/22 09:08:48 Rendering book-as-pdf.adoc with C:\Ruby26-x64\bin\asciidoctor.bat using asciidoc args [--no-header-footer -r asciidoctor-html5s -b html5s -r asciidoctor-diagram --base-dir D:\prototypes\hugo_asciidoc_ddd\docs -a outdir=D:\prototypes\hugo_asciidoc_ddd\build -] ...
+```
 
 ## Highlight
 
@@ -110,6 +214,6 @@ endLevel
 ordered
 : If `true`, generates an ordered list instead of an unordered list.
 
-## Markdown render hooks
+## Render hooks
 
 See [Markdown Render Hooks](/templates/render-hooks/).
index d210765ab26aa3230e90c9159c17bdd49cd0dc7c..e72bb8d3b8654d757ed139a5fea773d4354f1b14 100644 (file)
@@ -400,7 +400,7 @@ URL to be used as a placeholder when a page reference cannot be found in `ref` o
 Removes [non-spacing marks](https://www.compart.com/en/unicode/category/Mn) from [composite characters](https://en.wikipedia.org/wiki/Precomposed_character) in content paths.
 
 ```text
-content/post/hügó.md --> https://example.org/post/hugo/
+content/post/hügó.md  https://example.org/post/hugo/
 ```
 
 ### rssLimit
@@ -449,7 +449,7 @@ Timeout for generating page contents, specified as a [duration](https://pkg.go.d
 
 ### timeZone
 
-The time zone (or location), e.g. `Europe/Oslo`, used to parse front matter dates without such information and in the [`time` function](/functions/time/). The list of valid values may be system dependent, but should include `UTC`, `Local`, and any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
+The time zone (or location), e.g. `Europe/Oslo`, used to parse front matter dates without such information and in the [`time`] function. The list of valid values may be system dependent, but should include `UTC`, `Local`, and any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
 
 ### title
 
@@ -527,8 +527,6 @@ useResourceCacheWhen
 
 The `build.cachebusters` configuration option was added to support development using Tailwind 3.x's JIT compiler where a `build` configuration may look like this:
 
-<!-- TODO (jmm) writeStats => build.buildStats -->
-
 {{< code-toggle file="hugo" >}}
 [build]
   [build.buildStats]
@@ -616,7 +614,7 @@ status = 404
 
 ## Configure title case
 
-Set `titleCaseStyle` to specify the title style used by the [title](/functions/title/) template function and the automatic section titles in Hugo.
+Set `titleCaseStyle` to specify the title style used by the [title](/functions/strings/title) template function and the automatic section titles in Hugo.
 
 Can be one of:
 
@@ -684,10 +682,6 @@ To set configuration parameters, prefix the name with `HUGO_PARAMS_`
 
 If you are using snake_cased variable names, the above will not work. Hugo determines the delimiter to use by the first character after `HUGO`. This allows you to define environment variables on the form `HUGOxPARAMSxAPI_KEY=abcdefgh`, using any [allowed](https://stackoverflow.com/questions/2821043/allowed-characters-in-linux-environment-variable-names#:~:text=So%20names%20may%20contain%20any,not%20begin%20with%20a%20digit.) delimiter.
 
-{{< todo >}}
-Test and document setting parameters via JSON env var.
-{{< /todo >}}
-
 ## Ignore content and data files when rendering
 
 **Note:** This works, but we recommend you use the newer and more powerful [includeFiles and excludeFiles](/hugo-modules/configuration/#module-configuration-mounts) mount options.
@@ -799,7 +793,7 @@ dir
 
 [`.Site.Params`]: /variables/site/
 [directory structure]: /getting-started/directory-structure
-[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
+[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
 [lookup order]: /templates/lookup-order/
 [Output Formats]: /templates/output-formats/
 [templates]: /templates/
@@ -821,3 +815,6 @@ If this is not set, Hugo will use, in order of preference:
 1. In a  `hugo_cache_$USER` directory below the OS temp dir.
 
 If you want to know the current value of `cacheDir`, you can run `hugo config`, e.g: `hugo config | grep cachedir`.
+
+
+[`time`]: /functions/time/astime
index 834f72ec5cdfcab46c63e16233ca771f0228f86c..c15af5170de8be7aedb58250289ac0efe4808bec 100644 (file)
@@ -64,6 +64,10 @@ A markup language for creating content. Typically markdown, but may also be HTML
 
 A classification of content inferred from the top-level directory name or the `type` set in [front matter](#front-matter). Pages in the root of the content directory, including the home page, are of type "page". Accessed via `.Page.Type` in [templates](#template). See&nbsp;[details](/content-management/types/).
 
+### content view
+
+A template called with the `.Page.Render` method. See&nbsp;[details](/templates/views/).
+
 ### context
 
 Represented by a period "." within a [template action](#template-action), context is the current location in a data structure. For example, while iterating over a [collection](#collection) of pages, the context within each iteration is the page's data structure. The context received by each template depends on template type and/or how it was called. See [details](/templates/introduction/#the-dot).
@@ -250,7 +254,7 @@ A packaged combination of [archetypes](#archetype), assets, content, data, [temp
 
 ### token
 
-An identifier within a format string, beginning with a colon and replaced with a value when rendered. For example, use tokens in format strings for both [permalinks](/content-management/urls/#permalinks) and [dates](/functions/dateformat/#datetime-formatting-layouts).
+An identifier within a format string, beginning with a colon and replaced with a value when rendered. For example, use tokens in format strings for both [permalinks](/content-management/urls/#permalinks) and [dates](/functions/time/format/#localization).
 
 
 ### type
index 3b1ba9dcd4b2c38cbdbacc09f7405c0789388a52..c58f4b7520e9ad745de8329699c0ed3133294ca6 100644 (file)
@@ -47,26 +47,26 @@ From here:
 
 In new versions of Firebase, some other questions apply:
 
-6. Set up automatic builds and deploys with GitHub? 
+6. Set up automatic builds and deploys with GitHub?
 
 Here you will be redirected to login in your GitHub account to get permissions. Confirm.
 
-7. For which GitHub repository would you like to set up a GitHub workflow? (format: user/repository) 
+7. For which GitHub repository would you like to set up a GitHub workflow? (format: user/repository)
 
 Include the repository you will use in the format above (Account/Repo)
 Firebase script with retrieve credentials, create a service account you can later manage in your GitHub settings.
 
-8. Set up the workflow to run a build script before every deploy? 
+8. Set up the workflow to run a build script before every deploy?
 
 Here is your opportunity to include some commands before you run the deploy.
 
-9. Set up automatic deployment to your site's live channel when a PR is merged? 
+9. Set up automatic deployment to your site's live channel when a PR is merged?
 
 You can let in the default option (main)
 
 After that Firebase has been set in your project with CI/CD. After that run:
 
-```
+```sh
 hugo && firebase deploy
 ```
 
index 27a1f6051174b81130364eb097dfa7814e8b9621..db269a5db4f5463867fa4716cd264bbab63fc38e 100644 (file)
@@ -142,7 +142,7 @@ A common use case for a workspace is to simplify local development of a site wit
 
 A workspace can be configured in a `*.work` file and activated with the [module.workspace](/hugo-modules/configuration/) setting, which for this use is commonly controlled via the `HUGO_MODULE_WORKSPACE` OS environment variable.
 
-See the [hugo.work](https://github.com/gohugoio/hugo/blob/master/hugo.work) file in the Hugo Docs repo for an example:
+See the [hugo.work](https://github.com/gohugoio/hugo/blob/master/docs/hugo.work) file in the Hugo Docs repo for an example:
 
 ```text
 go 1.19
index 222b5116b77131da7c76da1059cc31f0d18d23ef..44b4e670e31a24a780748191a4299f2d85e4fb6e 100755 (executable)
@@ -8,7 +8,7 @@ menu:
     parent: hugo-pipes
     weight: 70
 weight: 70
-signature: ["resources.Babel RESOURCE [OPTIONS]", "babel RESOURCE [OPTIONS]"]
+signatures: ["resources.Babel RESOURCE [OPTIONS]", "babel RESOURCE [OPTIONS]"]
 ---
 
 ## Usage
index 8b989943224477ca2486cc3e73cf26b170ae5506..f3ff42f9c742f2c04833ade38f2d23968512d65f 100755 (executable)
@@ -9,7 +9,7 @@ menu:
     parent: hugo-pipes
     weight: 90
 weight: 90
-signature: ["resources.Concat TARGET_PATH SLICE_RESOURCES"]
+signatures: ["resources.Concat TARGET_PATH SLICE_RESOURCES"]
 ---
 
 ## Usage
index bdabbe0298d02ddb4f270df93979e59f08c66676..c492d4c70ac448fa27098caade835cf9dd94ab8e 100755 (executable)
@@ -9,7 +9,7 @@ menu:
     parent: hugo-pipes
     weight: 100
 weight: 100
-signature: ["resources.Fingerprint RESOURCE [ALGORITHM]", "fingerprint RESOURCE [ALGORITHM]"]
+signatures: ["resources.Fingerprint RESOURCE [ALGORITHM]", "fingerprint RESOURCE [ALGORITHM]"]
 ---
 
 ## Usage
index 86c1564cf0e0a07c3402ab528b51c735de0d24af..ecf6dc33f723849a792f486e13dcc71f19709004 100644 (file)
@@ -9,7 +9,7 @@ menu:
     parent: hugo-pipes
     weight: 60
 weight: 60
-signature: ["js.Build RESOURCE [OPTIONS]"]
+signatures: ["js.Build RESOURCE [OPTIONS]"]
 ---
 
 ## Usage
index a32ef6e6f048e9357b37385f753bf5aa5a74d91e..74ddfaa891100976e80d1eb6cd95cf8cccbf3352 100755 (executable)
@@ -9,7 +9,7 @@ menu:
     parent: hugo-pipes
     weight: 80
 weight: 80
-signature: ["resources.Minify RESOURCE", "minify RESOURCE"]
+signatures: ["resources.Minify RESOURCE", "minify RESOURCE"]
 ---
 
 ## Usage
index 4e969caf214b3928715cab59976087f58144aa91..2a08c7ad431ea3e0d832a8f5a8c4c9f5c05eacfb 100755 (executable)
@@ -9,7 +9,7 @@ menu:
     weight: 40
 toc: true
 weight: 40
-signature: ["resources.PostCSS RESOURCE [OPTIONS]", "postCSS RESOURCE [OPTIONS]"]
+signatures: ["resources.PostCSS RESOURCE [OPTIONS]", "postCSS RESOURCE [OPTIONS]"]
 ---
 
 ## Setup
index 3b7d5c6104947de99fa0a358b88752e5c2c888d5..4b3cb8ad41aaf8ff3f6147857f204cdc8ede4dee 100755 (executable)
@@ -8,7 +8,7 @@ menu:
     parent: hugo-pipes
     weight: 50
 weight: 50
-signature: ["resources.PostProcess RESOURCE"]
+signatures: ["resources.PostProcess RESOURCE"]
 ---
 
 ## Usage
index f3f0cda4f40ad221ef923f2b32169473605cdf69..fa472715cd116373d2d1c3ae82acdcad8fcbce8f 100755 (executable)
@@ -9,7 +9,7 @@ menu:
     parent: hugo-pipes
     weight: 110
 weight: 110
-signature: ["resources.FromString TARGET_PATH CONTENT"]
+signatures: ["resources.FromString TARGET_PATH CONTENT"]
 ---
 
 ## Usage
index 4f34817c0dcd3132e3f18a34c061c720aa892f9a..c1c4cb316d7a11ad7b384ac3951af69116762a7e 100755 (executable)
@@ -9,7 +9,7 @@ menu:
     parent: hugo-pipes
     weight: 120
 weight: 120
-signature: ["resources.ExecuteAsTemplate TARGET_PATH CONTEXT RESOURCE"]
+signatures: ["resources.ExecuteAsTemplate TARGET_PATH CONTEXT RESOURCE"]
 ---
 
 ## Usage
index bf3d136f15d7d8219496cb84bc198d3a3d1af61e..b09cc165bcb44081555378c814dba636b8f186ab 100644 (file)
@@ -9,7 +9,7 @@ menu:
     parent: hugo-pipes
     weight: 30
 weight: 30
-signature: ["resources.ToCSS RESOURCE [OPTIONS]", "toCSS RESOURCE [OPTIONS]"]
+signatures: ["resources.ToCSS RESOURCE [OPTIONS]", "toCSS RESOURCE [OPTIONS]"]
 toc: true
 aliases: [/hugo-pipes/transform-to-css/]
 ---
diff --git a/content/en/installation/_common/01-editions.md b/content/en/installation/_common/01-editions.md
new file mode 100644 (file)
index 0000000..cbc3386
--- /dev/null
@@ -0,0 +1,12 @@
+## Editions
+
+Hugo is available in two editions: standard and extended. With the extended edition you can:
+
+- Encode to the WebP format when [processing images]. You can decode WebP images with either edition.
+- [Transpile Sass to CSS] using the embedded LibSass transpiler. The extended edition is not required to use the [Dart Sass] transpiler.
+
+We recommend that you install the extended edition.
+
+[dart sass]: /hugo-pipes/transpile-sass-to-css/#dart-sass
+[processing images]: /content-management/image-processing/
+[transpile sass to css]: /hugo-pipes/transpile-sass-to-css/
diff --git a/content/en/installation/_common/02-prerequisites.md b/content/en/installation/_common/02-prerequisites.md
new file mode 100644 (file)
index 0000000..4239501
--- /dev/null
@@ -0,0 +1,36 @@
+## Prerequisites
+
+Although not required in all cases, [Git], [Go], and [Dart Sass] are commonly used when working with Hugo.
+
+Git is required to:
+
+- Build Hugo from source
+- Use the [Hugo Modules] feature
+- Install a theme as a Git submodule
+- Access [commit information] from a local Git repository
+- Host your site with services such as [CloudCannon], [Cloudflare Pages], [GitHub Pages], [GitLab Pages], and [Netlify]
+
+Go is required to:
+
+- Build Hugo from source
+- Use the Hugo Modules feature
+
+Dart Sass is required to transpile Sass to CSS when using the latest features of the Sass language.
+
+Please refer to the relevant documentation for installation instructions:
+
+- [Git][git install]
+- [Go][go install]
+- [Dart Sass][dart sass install]
+
+[cloudcannon]: https://cloudcannon.com/
+[cloudflare pages]: https://pages.cloudflare.com/
+[dart sass install]: /hugo-pipes/transpile-sass-to-css/#dart-sass
+[dart sass]: https://sass-lang.com/dart-sass
+[git install]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
+[git]: https://git-scm.com/
+[github pages]: https://pages.github.com/
+[gitlab pages]: https://docs.gitlab.com/ee/user/project/pages/
+[go install]: https://go.dev/doc/install
+[go]: https://go.dev/
+[netlify]: https://www.netlify.com/
diff --git a/content/en/installation/_common/03-prebuilt-binaries.md b/content/en/installation/_common/03-prebuilt-binaries.md
new file mode 100644 (file)
index 0000000..884869e
--- /dev/null
@@ -0,0 +1,21 @@
+## Prebuilt binaries
+
+Prebuilt binaries are available for a variety of operating systems and architectures. Visit the [latest release] page, and scroll down to the Assets section.
+
+<!-- markdownlint-disable-next-line MD051 -->
+1. Download the archive for the desired [edition], operating system, and architecture
+1. Extract the archive
+1. Move the executable to the desired directory
+1. Add this directory to the PATH environment variable
+1. Verify that you have _execute_ permission on the file
+
+Please consult your operating system documentation if you need help setting file permissions or modifying your PATH environment variable.
+
+If you do not see a prebuilt binary for the desired edition, operating system, and architecture, install Hugo using one of the methods described below.
+
+[commit information]: /variables/git
+[edition]: #editions
+[Git]: https://git-scm.com/
+[Go]: https://go.dev/
+[Hugo Modules]: /hugo-modules/
+[latest release]: https://github.com/gohugoio/hugo/releases/latest
diff --git a/content/en/installation/_common/04-build-from-source.md b/content/en/installation/_common/04-build-from-source.md
new file mode 100644 (file)
index 0000000..7537882
--- /dev/null
@@ -0,0 +1,23 @@
+## Build from source
+
+To build the extended edition of Hugo from source you must:
+
+1. Install [Git]
+1. Install [Go] version 1.19 or later
+1. Install a C compiler, either [GCC] or [Clang]
+1. Update your `PATH` environment variable as described in the [Go documentation]
+
+> The install directory is controlled by the `GOPATH` and `GOBIN` environment variables. If `GOBIN` is set, binaries are installed to that directory. If `GOPATH` is set, binaries are installed to the bin subdirectory of the first directory in the `GOPATH` list. Otherwise, binaries are installed to the bin subdirectory of the default `GOPATH` (`$HOME/go` or `%USERPROFILE%\go`).
+
+Then build and test:
+
+```sh
+CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
+hugo version
+```
+
+[Clang]: https://clang.llvm.org/
+[GCC]: https://gcc.gnu.org/
+[Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
+[Go documentation]: https://go.dev/doc/code#Command
+[Go]: https://go.dev/doc/install
diff --git a/content/en/installation/_common/homebrew.md b/content/en/installation/_common/homebrew.md
new file mode 100644 (file)
index 0000000..7178a9f
--- /dev/null
@@ -0,0 +1,9 @@
+### Homebrew
+
+[Homebrew] is a free and open source package manager for macOS and Linux. This will install the extended edition of Hugo:
+
+```sh
+brew install hugo
+```
+
+[Homebrew]: https://brew.sh/
diff --git a/content/en/installation/_common/index.md b/content/en/installation/_common/index.md
new file mode 100644 (file)
index 0000000..cbb7365
--- /dev/null
@@ -0,0 +1,3 @@
++++
+headless = true
++++
index 5fbc4bfad6374f39cd1ff7c23ff2ee1c29363985..999e52ad6ddd1ac9d088696b772b00f25478c7d3 100644 (file)
@@ -9,11 +9,11 @@ menu:
 toc: true
 weight: 50
 ---
-{{% readfile file="/installation/common/01-editions.md" %}}
+{{% readfile file="/installation/_common/01-editions.md" %}}
 
-{{% readfile file="/installation/common/02-prerequisites.md" %}}
+{{% readfile file="/installation/_common/02-prerequisites.md" %}}
 
-{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
+{{% readfile file="/installation/_common/03-prebuilt-binaries.md" %}}
 
 ## Repository packages
 
@@ -61,7 +61,7 @@ doas pkg_add hugo
 
 [OpenBSD]: https://www.openbsd.org/
 
-{{% readfile file="/installation/common/05-build-from-source.md" %}}
+{{% readfile file="/installation/_common/04-build-from-source.md" %}}
 
 ## Comparison
 
diff --git a/content/en/installation/common/01-editions.md b/content/en/installation/common/01-editions.md
deleted file mode 100644 (file)
index cbc3386..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-## Editions
-
-Hugo is available in two editions: standard and extended. With the extended edition you can:
-
-- Encode to the WebP format when [processing images]. You can decode WebP images with either edition.
-- [Transpile Sass to CSS] using the embedded LibSass transpiler. The extended edition is not required to use the [Dart Sass] transpiler.
-
-We recommend that you install the extended edition.
-
-[dart sass]: /hugo-pipes/transpile-sass-to-css/#dart-sass
-[processing images]: /content-management/image-processing/
-[transpile sass to css]: /hugo-pipes/transpile-sass-to-css/
diff --git a/content/en/installation/common/02-prerequisites.md b/content/en/installation/common/02-prerequisites.md
deleted file mode 100644 (file)
index 4239501..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-## Prerequisites
-
-Although not required in all cases, [Git], [Go], and [Dart Sass] are commonly used when working with Hugo.
-
-Git is required to:
-
-- Build Hugo from source
-- Use the [Hugo Modules] feature
-- Install a theme as a Git submodule
-- Access [commit information] from a local Git repository
-- Host your site with services such as [CloudCannon], [Cloudflare Pages], [GitHub Pages], [GitLab Pages], and [Netlify]
-
-Go is required to:
-
-- Build Hugo from source
-- Use the Hugo Modules feature
-
-Dart Sass is required to transpile Sass to CSS when using the latest features of the Sass language.
-
-Please refer to the relevant documentation for installation instructions:
-
-- [Git][git install]
-- [Go][go install]
-- [Dart Sass][dart sass install]
-
-[cloudcannon]: https://cloudcannon.com/
-[cloudflare pages]: https://pages.cloudflare.com/
-[dart sass install]: /hugo-pipes/transpile-sass-to-css/#dart-sass
-[dart sass]: https://sass-lang.com/dart-sass
-[git install]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
-[git]: https://git-scm.com/
-[github pages]: https://pages.github.com/
-[gitlab pages]: https://docs.gitlab.com/ee/user/project/pages/
-[go install]: https://go.dev/doc/install
-[go]: https://go.dev/
-[netlify]: https://www.netlify.com/
diff --git a/content/en/installation/common/03-prebuilt-binaries.md b/content/en/installation/common/03-prebuilt-binaries.md
deleted file mode 100644 (file)
index 884869e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-## Prebuilt binaries
-
-Prebuilt binaries are available for a variety of operating systems and architectures. Visit the [latest release] page, and scroll down to the Assets section.
-
-<!-- markdownlint-disable-next-line MD051 -->
-1. Download the archive for the desired [edition], operating system, and architecture
-1. Extract the archive
-1. Move the executable to the desired directory
-1. Add this directory to the PATH environment variable
-1. Verify that you have _execute_ permission on the file
-
-Please consult your operating system documentation if you need help setting file permissions or modifying your PATH environment variable.
-
-If you do not see a prebuilt binary for the desired edition, operating system, and architecture, install Hugo using one of the methods described below.
-
-[commit information]: /variables/git
-[edition]: #editions
-[Git]: https://git-scm.com/
-[Go]: https://go.dev/
-[Hugo Modules]: /hugo-modules/
-[latest release]: https://github.com/gohugoio/hugo/releases/latest
diff --git a/content/en/installation/common/04-docker.md b/content/en/installation/common/04-docker.md
deleted file mode 100644 (file)
index 24f5cd9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-## Docker
-
-[Erlend Klakegg Bergheim] graciously maintains [Docker images] based on images for Alpine Linux, Busybox, Debian, and Ubuntu.
-
-```sh
-docker pull klakegg/hugo
-```
-
-[Docker images]: https://hub.docker.com/r/klakegg/hugo
-[Erlend Klakegg Bergheim]: https://github.com/klakegg
diff --git a/content/en/installation/common/05-build-from-source.md b/content/en/installation/common/05-build-from-source.md
deleted file mode 100644 (file)
index 7537882..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-## Build from source
-
-To build the extended edition of Hugo from source you must:
-
-1. Install [Git]
-1. Install [Go] version 1.19 or later
-1. Install a C compiler, either [GCC] or [Clang]
-1. Update your `PATH` environment variable as described in the [Go documentation]
-
-> The install directory is controlled by the `GOPATH` and `GOBIN` environment variables. If `GOBIN` is set, binaries are installed to that directory. If `GOPATH` is set, binaries are installed to the bin subdirectory of the first directory in the `GOPATH` list. Otherwise, binaries are installed to the bin subdirectory of the default `GOPATH` (`$HOME/go` or `%USERPROFILE%\go`).
-
-Then build and test:
-
-```sh
-CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
-hugo version
-```
-
-[Clang]: https://clang.llvm.org/
-[GCC]: https://gcc.gnu.org/
-[Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
-[Go documentation]: https://go.dev/doc/code#Command
-[Go]: https://go.dev/doc/install
diff --git a/content/en/installation/common/homebrew.md b/content/en/installation/common/homebrew.md
deleted file mode 100644 (file)
index 7178a9f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-### Homebrew
-
-[Homebrew] is a free and open source package manager for macOS and Linux. This will install the extended edition of Hugo:
-
-```sh
-brew install hugo
-```
-
-[Homebrew]: https://brew.sh/
diff --git a/content/en/installation/common/index.md b/content/en/installation/common/index.md
deleted file mode 100644 (file)
index cbb7365..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-+++
-headless = true
-+++
index 4056b987a63ed6e87ebc13110c66790eb5bb8632..2dbbd3720079329c360cb4647c35086e517c5af6 100644 (file)
@@ -9,11 +9,11 @@ menu:
 toc: true
 weight: 30
 ---
-{{% readfile file="/installation/common/01-editions.md" %}}
+{{% readfile file="/installation/_common/01-editions.md" %}}
 
-{{% readfile file="/installation/common/02-prerequisites.md" %}}
+{{% readfile file="/installation/_common/02-prerequisites.md" %}}
 
-{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
+{{% readfile file="/installation/_common/03-prebuilt-binaries.md" %}}
 
 ## Package managers
 
@@ -47,7 +47,7 @@ sudo snap disconnect hugo:ssh-keys
 [strictly confined]: https://snapcraft.io/docs/snap-confinement
 [Snap]: https://snapcraft.io/
 
-{{% readfile file="/installation/common/homebrew.md" %}}
+{{% readfile file="/installation/_common/homebrew.md" %}}
 
 ## Repository packages
 
@@ -124,20 +124,17 @@ sudo eopkg install hugo
 
 [Solus]: https://getsol.us/
 
-{{% readfile file="/installation/common/04-docker.md" %}}
-
-{{% readfile file="/installation/common/05-build-from-source.md" %}}
+{{% readfile file="/installation/_common/04-build-from-source.md" %}}
 
 ## Comparison
 
-||Prebuilt binaries|Package managers|Repository packages|Docker|Build from source
-:--|:--:|:--:|:--:|:--:|:--:
-Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
-Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark:|:heavy_check_mark:
-Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|varies|:heavy_check_mark:|:heavy_check_mark:
-Automatic updates?|:x:|varies [^2]|:x:|:x: [^3]|:x:
-Latest version available?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark:|:heavy_check_mark:
+||Prebuilt binaries|Package managers|Repository packages|Build from source
+:--|:--:|:--:|:--:|:--:
+Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
+Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark:
+Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|varies|:heavy_check_mark:
+Automatic updates?|:x:|varies [^2]|:x:|:x:
+Latest version available?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark:
 
 [^1]: Easy if a previous version is still installed.
 [^2]: Snap packages are automatically updated. Homebrew requires advanced configuration.
-[^3]: Possible but requires advanced configuration.
index 9d10642de4ebe7312c5ef583636beb2db1baf9d6..ccae90b36baef70d5ea64a290cb839373b4ecc79 100644 (file)
@@ -9,15 +9,15 @@ menu:
 toc: true
 weight: 20
 ---
-{{% readfile file="/installation/common/01-editions.md" %}}
+{{% readfile file="/installation/_common/01-editions.md" %}}
 
-{{% readfile file="/installation/common/02-prerequisites.md" %}}
+{{% readfile file="/installation/_common/02-prerequisites.md" %}}
 
-{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
+{{% readfile file="/installation/_common/03-prebuilt-binaries.md" %}}
 
 ## Package managers
 
-{{% readfile file="/installation/common/homebrew.md" %}}
+{{% readfile file="/installation/_common/homebrew.md" %}}
 
 ### MacPorts
 
@@ -29,19 +29,17 @@ sudo port install hugo
 
 [MacPorts]: https://www.macports.org/
 
-{{% readfile file="/installation/common/04-docker.md" %}}
-
-{{% readfile file="/installation/common/05-build-from-source.md" %}}
+{{% readfile file="/installation/_common/04-build-from-source.md" %}}
 
 ## Comparison
 
-||Prebuilt binaries|Package managers|Docker|Build from source
-:--|:--:|:--:|:--:|:--:|:--:
-Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
-Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
-Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|:heavy_check_mark:|:heavy_check_mark:
-Automatic updates?|:x:|:x: [^2]|:x: [^2]|:x:
-Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
+||Prebuilt binaries|Package managers|Build from source
+:--|:--:|:--:|:--:
+Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
+Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
+Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|:heavy_check_mark:
+Automatic updates?|:x:|:x: [^2]|:x:
+Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
 
 [^1]: Easy if a previous version is still installed.
 [^2]: Possible but requires advanced configuration.
index 92979d9f2501b5c5403e51aec3498a294011bbc2..48c5f7006c29820c9b76987adb8ad11a8d0a9d79 100644 (file)
@@ -9,11 +9,11 @@ menu:
 toc: true
 weight: 40
 ---
-{{% readfile file="/installation/common/01-editions.md" %}}
+{{% readfile file="/installation/_common/01-editions.md" %}}
 
-{{% readfile file="/installation/common/02-prerequisites.md" %}}
+{{% readfile file="/installation/_common/02-prerequisites.md" %}}
 
-{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
+{{% readfile file="/installation/_common/03-prebuilt-binaries.md" %}}
 
 ## Package managers
 
@@ -47,9 +47,7 @@ winget install Hugo.Hugo.Extended
 
 [Winget]: https://learn.microsoft.com/en-us/windows/package-manager/
 
-{{% readfile file="/installation/common/04-docker.md" %}}
-
-{{% readfile file="/installation/common/05-build-from-source.md" %}}
+{{% readfile file="/installation/_common/04-build-from-source.md" %}}
 
 {{% note %}}
 See these [detailed instructions](https://discourse.gohugo.io/t/41370) to install GCC on Windows.
@@ -57,13 +55,13 @@ See these [detailed instructions](https://discourse.gohugo.io/t/41370) to instal
 
 ## Comparison
 
-||Prebuilt binaries|Package managers|Docker|Build from source
-:--|:--:|:--:|:--:|:--:|:--:
-Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
-Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
-Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^2]|:heavy_check_mark:|:heavy_check_mark:
-Automatic updates?|:x:|:x: [^1]|:x: [^1]|:x:
-Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
+||Prebuilt binaries|Package managers|Build from source
+:--|:--:|:--:|:--:
+Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
+Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
+Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^2]|:heavy_check_mark:
+Automatic updates?|:x:|:x: [^1]|:x:
+Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
 
 [^1]: Possible but requires advanced configuration.
 [^2]: Easy if a previous version is still installed.
diff --git a/content/en/readfiles/README.md b/content/en/readfiles/README.md
deleted file mode 100644 (file)
index 4b10f0e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# readdirs Directory for Reusable Content
-
-Files in this directory are:
-
-1. Used in *more than one place* within the Hugo docs
-2. Used in Examples of readdir (i.e. in local file templates)
-
-These files are called using the [`readfile` shortcode (source)](../layouts/readfile.html).
-
-You can call this shortcode in the docs as follows:
-
-
-<code>{</code><code>{</code>% readfile file="/path/to/file.txt" markdown="true" %<code>}</code><code>}</code>
-
-
-`markdown="true"` is optional (default = `"false"`) and parses the string through the Blackfriday renderer.
diff --git a/content/en/readfiles/dateformatting.md b/content/en/readfiles/dateformatting.md
deleted file mode 100644 (file)
index e6c3951..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-Go templates [format your dates][time] according to a single reference time:
-
-```txt
-Mon Jan 2 15:04:05 MST 2006
-```
-
-You can think of `MST` as `07`, thus making the reference format string a sequence of numbers. The following is [taken directly from the Go docs][gdex]:
-
-```txt
-Jan 2 15:04:05 2006 MST
-  1 2  3  4  5    6  -7
-```
-
-### Hugo date templating reference
-
-Each of the following examples show the reference formatting string followed by the string Hugo will output in your HTML.
-
-Note that the examples were rendered and tested in [CST] and pull from a single example date you might have in your content's front matter:
-
-```yml
-date: 2017-03-03T14:15:59-06:00
-```
-
-`.Date` (i.e. called via [page variable][pagevars])
-: **Returns**: `2017-03-03 14:15:59 -0600 CST`
-
-`"Monday, January 2, 2006"`
-: **Returns**: `Friday, March 3, 2017`
-
-`"Mon Jan 2 2006"`
-: **Returns**: `Fri Mar 3 2017`
-
-`"January 2nd"`
-: **Returns**: `March 3rd`
-
-`"January 2006"`
-: **Returns**: `March 2017`
-
-`"2006-01-02"`
-: **Returns**: `2017-03-03`
-
-`"Monday"`
-: **Returns**: `Friday`
-
-`"02 Jan 06 15:04 MST"` (RFC822)
-: **Returns**: `03 Mar 17 14:15 CST`
-
-`"02 Jan 06 15:04 -0700"` (RFC822Z)
-: **Returns**: `03 Mar 17 14:15 -0600`
-
-`"Mon, 02 Jan 2006 15:04:05 MST"` (RFC1123)
-: **Returns**: `Fri, 03 Mar 2017 14:15:59 CST`
-
-`"Mon, 02 Jan 2006 15:04:05 -0700"` (RFC339)
-: **Returns**: `Fri, 03 Mar 2017 14:15:59 -0600`
-
-### Cardinal numbers and ordinal abbreviations
-
-Spelled-out cardinal numbers (e.g. "one", "two", and "three") and ordinal abbreviations (e.g. "1st", "2nd", and "3rd") are not currently supported.
-
-To continue with the example above:
-
-```go-html-template
-{{ .Date.Format "Jan 2nd 2006" }}
-```
-
-Hugo assumes you want to append `nd` as a string to the day of the month and outputs the following:
-
-```txt
-Mar 2nd 2017
-```
-
-### Use `.Local` and `.UTC`
-
-In conjunction with the [`dateFormat` function][dateFormat], you can also convert your dates to `UTC` or to local timezones:
-
-`{{ dateFormat "02 Jan 06 15:04 MST" .Date.UTC }}`
-: **Returns**: `03 Mar 17 20:15 UTC`
-
-`{{ dateFormat "02 Jan 06 15:04 MST" .Date.Local }}`
-: **Returns**: `03 Mar 17 14:15 CST`
-
-[CST]: https://en.wikipedia.org/wiki/Central_Time_Zone
-[dateFormat]: /functions/dateformat/
-[gdex]: https://golang.org/pkg/time/#example_Time_Format
-[pagevars]: /variables/page/
-[time]: https://golang.org/pkg/time/
diff --git a/content/en/readfiles/index.md b/content/en/readfiles/index.md
deleted file mode 100644 (file)
index 3d65eaa..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
----
-headless: true
----
\ No newline at end of file
diff --git a/content/en/readfiles/sectionvars.md b/content/en/readfiles/sectionvars.md
deleted file mode 100644 (file)
index 45aaff1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-.CurrentSection
-: The page's current section. The value can be the page itself if it is a section or the homepage.
-
-.FirstSection
-: The page's first section below root, e.g. `/docs`, `/blog` etc.
-
-.InSection $anotherPage
-: Whether the given page is in the current section.
-
-.IsAncestor $anotherPage
-: Whether the current page is an ancestor of the given page.
-
-.IsDescendant $anotherPage
-: Whether the current page is a descendant of the given page.
-
-.Parent
-: A section's parent section or a page's section.
-
-.Section
-: The [section](/content-management/sections/) this content belongs to. **Note:** For nested sections, this is the first path element in the directory, for example, `/blog/funny/mypost/ => blog`.
-
-.Sections
-: The [sections](/content-management/sections/) below this content.
diff --git a/content/en/readfiles/testing.txt b/content/en/readfiles/testing.txt
deleted file mode 100644 (file)
index 6428710..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-##### Hello World!
-
-Testing one, **two**, *three*. Don't delete this sample file used in the [templates](/templates/) section of the Hugo docs.
\ No newline at end of file
diff --git a/content/en/showcase/overmindstudios/bio.md b/content/en/showcase/overmindstudios/bio.md
new file mode 100644 (file)
index 0000000..1bd8709
--- /dev/null
@@ -0,0 +1,7 @@
+
+**Overmind Studios** is a visual effects studio headquartered in Southern Germany.
+
+The site is built by:
+
+* [Tobias Kummer](https://www.overmind-studios.de/about/)
+
diff --git a/content/en/showcase/overmindstudios/featured.png b/content/en/showcase/overmindstudios/featured.png
new file mode 100644 (file)
index 0000000..c3eaaaf
Binary files /dev/null and b/content/en/showcase/overmindstudios/featured.png differ
diff --git a/content/en/showcase/overmindstudios/index.md b/content/en/showcase/overmindstudios/index.md
new file mode 100644 (file)
index 0000000..3208b2b
--- /dev/null
@@ -0,0 +1,13 @@
+---
+title: Overmind Studios
+description: "A fresh start to make things easier in the future."
+siteURL: https://www.overmind-studios.de/
+byline: "[tobkum](https://github.com/tobkum), Co-Founder Overmind Studios"
+---
+After many years of running our site on WordPress, we decided to switch to Hugo.
+
+WordPress is a great CMS for many people, but it has some downsides, especially for those who need a fast, secure, and customizable site. Plugins can become outdated, customization can be difficult, and bloat can slow down page loading times.
+
+Hugo is a static site generator that addresses many of these problems. It is fast to build and iterate, does not require PHP, is highly customizable, and is easy to learn and use. It is also secure, as it does not have a backend or MySQL database that can be hacked.
+
+We are very happy with our switch to Hugo. It is easy to update our site with new projects, and our Lighthouse score and loading times are both excellent. We now have more time to be creative instead of troubleshooting WordPress quirks and updates.
index 0aadbb9ae6e8fe4648d801e9691d04ef9a8f3b3e..cf835af4440e6af4623eddad8b9b15b89b9e2809 100644 (file)
@@ -20,7 +20,7 @@ Hugo supports loading data from YAML, JSON, XML, and TOML files located in the `
 
 ## The data folder
 
-The `data` folder should store additional data for Hugo to use when generating your site. 
+The `data` folder should store additional data for Hugo to use when generating your site.
 
 Data files are not for generating standalone pages. They should supplement content files by:
 
@@ -37,7 +37,7 @@ To access the data using the `site.Data.filename` notation, the file name must b
 - `x123.json` - Valid
 - `_123.json` - Valid
 
-To access the data using the [`index`](/functions/index-function/) function, the file name is irrelevant. For example:
+To access the data using the [`index`](/functions/collections/indexfunction) function, the file name is irrelevant. For example:
 
 Data file|Template code
 :--|:--
@@ -130,8 +130,7 @@ You can use the following code to render the `Short Description` in your layout:
 <div>Short Description of {{ .Site.Data.User0123.Name }}: <p>{{ index .Site.Data.User0123 "Short Description" | markdownify }}</p></div>
 ```
 
-Note the use of the [`markdownify` template function][markdownify]. This will send the description through the Markdown rendering engine.
-
+Note the use of the [`markdownify`] function. This will send the description through the Markdown rendering engine.
 
 ## Get remote data
 
@@ -255,10 +254,10 @@ If you change any local file and the LiveReload is triggered, Hugo will read the
 [config]: /getting-started/configuration/
 [csv]: https://tools.ietf.org/html/rfc4180
 [customize]: /hugo-modules/theme-components/
-[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
+[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
 [LiveReload]: /getting-started/usage/#livereload
 [lookup]: /templates/lookup-order/
-[markdownify]: /functions/markdownify/
+[`markdownify`]: /functions/transform/markdownify
 [OAuth]: https://en.wikipedia.org/wiki/OAuth
 [partials]: /templates/partials/
 [toml]: https://toml.io/en/latest
index 7b058d531a9d05f627bd1ffa17c52e614708f6fd..2e82688c01f4eb6fa7a619d1125af845215aa024 100644 (file)
@@ -14,11 +14,11 @@ toc: true
 
 ## Traverse local files
 
-With Hugo's [`readDir`][readDir] and [`readFile`][readFile] template functions, you can traverse your website's files on your server.
+With Hugo's [`readDir`] and [`readFile`] template functions, you can traverse your website's files on your server.
 
 ## Use `readDir`
 
-The [`readDir` function][readDir] returns an array of [`os.FileInfo`][osfileinfo]. It takes the file's `path` as a single string argument. This path can be to any directory of your website (i.e., as found on your server's file system).
+The [`readDir`] function returns an array of [`os.FileInfo`] structures. It takes the file's `path` as a single string argument. This path can be to any directory of your website (i.e., as found on your server's file system).
 
 Whether the path is absolute or relative does not matter because---at least for `readDir`---the root of your website (typically `./public/`) in effect becomes both:
 
@@ -27,7 +27,7 @@ Whether the path is absolute or relative does not matter because---at least for
 
 ## Use `readFile`
 
-The [`readfile` function][readFile] reads a file from disk and converts it into a string to be manipulated by other Hugo functions or added as-is. `readFile` takes the file, including path, as an argument passed to the function.
+The [`readfile`] function reads a file from disk and converts it into a string to be manipulated by other Hugo functions or added as-is. `readFile` takes the file, including path, as an argument passed to the function.
 
 To use the `readFile` function in your templates, make sure the path is relative to your *Hugo project's root directory*:
 
@@ -48,10 +48,9 @@ If you are going to create [custom shortcodes](/templates/shortcode-templates/)
 {{% /note %}}
 
 [called directly in the Hugo docs]: https://github.com/gohugoio/hugoDocs/blob/master/content/en/templates/files.md
-[osfileinfo]: https://golang.org/pkg/os/#FileInfo
-[readDir]: /functions/readdir/
-[readFile]: /functions/readfile/
+[`os.FileInfo`]: https://pkg.go.dev/io/fs#FileInfo
+[`readDir`]: /functions/os/readdir
+[`readFile`]: /functions/os/readfile
 [sc]: /content-management/shortcodes/
 [sct]: /templates/shortcode-templates/
 [readfilesource]: https://github.com/gohugoio/hugoDocs/blob/master/layouts/shortcodes/readfile.html
-[testfile]: https://github.com/gohugoio/hugoDocs/blob/master/content/en/readfiles/testing.txt
index 5d60e9ed113fa255ecbcebb03de59d662c389e0c..93666de2872929414a507b3038fd4cf5bdba112d 100644 (file)
@@ -301,7 +301,7 @@ Below example is "Example 1" rewritten using `if`:
 #### Example 4: `if` .. `else`
 
 Below example is "Example 2" rewritten using `if` .. `else`, and using
-[`isset` function][isset] + `.Params` variable (different from the
+[`isset`] + `.Params` variable (different from the
 [`.Param` **function**][param]) instead:
 
 ```go-html-template
@@ -355,7 +355,7 @@ The following two examples are functionally the same:
 
 ### Example 2: `index`
 
-The following accesses the page parameter called "disqus_url" and escapes the HTML. This example also uses the [`index` function](/functions/index-function/), which is built into Go Templates:
+The following accesses the page parameter called "disqus_url" and escapes the HTML. This example also uses the [`index`] function, which is built into Go Templates:
 
 ```go-html-template
 {{ index .Params "disqus_url" | html }}
@@ -569,7 +569,7 @@ params:
   sidebarrecentlimit: 5
 {{< /code >}}
 
-Within a footer layout, you might then declare a `<footer>` that is only rendered if the `copyrighthtml` parameter is provided. If it *is* provided, you will then need to declare the string is safe to use via the [`safeHTML` function][safehtml] so that the HTML entity is not escaped again. This would let you easily update just your top-level configuration file each January 1st, instead of hunting through your templates.
+Within a footer layout, you might then declare a `<footer>` that is only rendered if the `copyrighthtml` parameter is provided. If it *is* provided, you will then need to declare the string is safe to use via the [`safeHTML`] function so that the HTML entity is not escaped again. This would let you easily update just your top-level configuration file each January 1st, instead of hunting through your templates.
 
 ```go-html-template
 {{ if .Site.Params.copyrighthtml }}
@@ -579,7 +579,7 @@ Within a footer layout, you might then declare a `<footer>` that is only rendere
 {{ end }}
 ```
 
-An alternative way of writing the "`if`" and then referencing the same value is to use [`with`][with] instead. `with` rebinds the context (`.`) within its scope and skips the block if the variable is absent:
+An alternative way of writing the "`if`" and then referencing the same value is to use [`with`] instead. `with` rebinds the context (`.`) within its scope and skips the block if the variable is absent:
 
 {{< code file="layouts/partials/twitter.html" >}}
 {{ with .Site.Params.twitteruser }}
@@ -590,7 +590,7 @@ An alternative way of writing the "`if`" and then referencing the same value is
 {{ end }}
 {{< /code >}}
 
-Finally, you can pull "magic constants" out of your layouts as well. The following uses the [`first`][first] function, as well as the [`.RelPermalink`][relpermalink] page variable and the [`.Site.Pages`][sitevars] site variable.
+Finally, you can pull "magic constants" out of your layouts as well. The following uses the [`first`] function, as well as the [`.RelPermalink`][relpermalink] page variable and the [`.Site.Pages`][sitevars] site variable.
 
 ```go-html-template
 <nav>
@@ -653,19 +653,20 @@ If you restrict front matter to the TOML format, and omit quotation marks surrou
 </ul>
 {{< /code >}}
 
-[dotdoc]: https://golang.org/pkg/text/template/#hdr-Variables
+[`first`]: /functions/collections/first
+[`index`]: /functions/collections/indexfunction
+[`isset`]: /functions/collections/isset
 [config]: /getting-started/configuration
-[first]: /functions/first
+[dotdoc]: https://golang.org/pkg/text/template/#hdr-Variables
 [front matter]: /content-management/front-matter
 [functions]: /functions
 [internal templates]: /templates/internal
-[isset]: /functions/isset
 [math]: /functions/math
 [pagevars]: /variables/page
 [param]: /functions/param
 [partials]: /templates/partials
 [relpermalink]: /variables/page#page-variables
-[safehtml]: /functions/safehtml
+[`safehtml`]: /functions/safe/html
 [sitevars]: /variables/site
 [variables]: /variables
-[with]: /functions/with
+[`with`]: /functions/go-template/with
index f488f6fe9aafd14395034599e171ec411844364b..e586460db716138352f089020416683d72343c20 100644 (file)
@@ -418,7 +418,7 @@ In the above example, you may want `{{ .Title }}` to point the `title` field you
 {{ end }}
 {{< /code >}}
 
-{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
+{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [`time.Format`] and the `.Key` in the result will be localized for the current language.
 
 ### By publish date
 
@@ -437,8 +437,7 @@ In the above example, you may want `{{ .Title }}` to point the `title` field you
 {{ end }}
 {{< /code >}}
 
-{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
-
+{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [`time.Format`] and the `.Key` in the result will be localized for the current language.
 
 ### By expiration date
 
@@ -457,7 +456,7 @@ In the above example, you may want `{{ .Title }}` to point the `title` field you
 {{ end }}
 {{< /code >}}
 
-{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
+{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [`time.Format`] and the `.Key` in the result will be localized for the current language.
 
 ### By last modified date
 
@@ -476,7 +475,7 @@ In the above example, you may want `{{ .Title }}` to point the `title` field you
 {{ end }}
 {{< /code >}}
 
-{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
+{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [`time.Format`] and the `.Key` in the result will be localized for the current language.
 
 ### By page parameter
 
@@ -567,11 +566,11 @@ Here is the ordering for the example that follows:
 ## Filtering and limiting lists
 
 Sometimes you only want to list a subset of the available content. A
-common is to only display posts from [**main sections**][mainsections]
+common is to only display posts from [main sections]
 on the blog's homepage.
 
-See the documentation on [`where` function][wherefunction] and
-[`first` function][firstfunction] for further details.
+See the documentation on [`where`] and
+[`first`] for further details.
 
 [base]: /templates/base/
 [bepsays]: https://bepsays.com/en/2016/12/19/hugo-018/
@@ -580,11 +579,10 @@ See the documentation on [`where` function][wherefunction] and
 [front matter]: /content-management/front-matter/
 [getpage]: /functions/getpage/
 [homepage]: /templates/homepage/
-[homepage]: /templates/homepage/
 [mentalmodel]: https://webstyleguide.com/wsg3/3-information-architecture/3-site-structure.html
 [pagevars]: /variables/page/
 [partials]: /templates/partials/
-[RSS 2.0]: https://cyber.harvard.edu/rss/rss.html "RSS 2.0 Specification"
+[RSS 2.0]: https://cyber.harvard.edu/rss/rss.html
 [rss]: /templates/rss/
 [sections]: /content-management/sections/
 [sectiontemps]: /templates/section-templates/
@@ -593,6 +591,7 @@ See the documentation on [`where` function][wherefunction] and
 [taxterms]: /templates/taxonomy-templates/#taxonomy-terms-templates
 [taxvars]: /variables/taxonomy/
 [views]: /templates/views/
-[wherefunction]: /functions/where/
-[firstfunction]: /functions/first/
-[mainsections]: /functions/where/#mainsections
+[`where`]: /functions/collections/where
+[`first]: /functions/first/
+[main sections]: /functions/collections/where#mainsections
+[`time.Format`]: /functions/time/format
index 279c6aee29bbd85f5dac89c86c73931f10c0bbc9..c36956cb96b4aad823679341c1b16967acf3c2d9 100644 (file)
@@ -39,6 +39,66 @@ Section
 Templates can live in either the project's or the themes' layout folders, and the most specific templates will be chosen. Hugo will interleave the lookups listed below, finding the most specific one either in the project or themes.
 {{% /note %}}
 
+## Target a template
+
+You cannot change the lookup order to target a content page, but you can change a content page to target a template. Specify `type`, `layout`, or both in front matter.
+
+Consider this content structure:
+
+```text
+content/
+├── about.md
+└── contact.md
+```
+
+Files in the root of the content directory have a [content type] of `page`. To render these pages with a unique template, create a matching subdirectory:
+
+[content type]: /getting-started/glossary/#content-type
+
+```text
+layouts/
+└── page/
+    └── single.html
+```
+
+But the contact page probably has a form and requires a different template. In the front matter specify `layout`:
+
+{{< code-toggle file=content/contact.md copy=false >}}
+title = 'Contact'
+layout = 'contact'
+{{< /code-toggle >}}
+
+Then create the template for the contact page:
+
+```text
+layouts/
+└── page/
+    └── contact.html  <-- renders contact.md
+    └── single.html   <-- renders about.md
+```
+
+As a content type, the word `page` is vague. Perhaps `miscellaneous` would be better. Add `type` to the front matter of each page:
+
+{{< code-toggle file=content/about.md copy=false >}}
+title = 'About'
+type = 'miscellaneous'
+{{< /code-toggle >}}
+
+{{< code-toggle file=content/contact.md copy=false >}}
+title = 'Contact'
+type = 'miscellaneous'
+layout = 'contact'
+{{< /code-toggle >}}
+
+Now place the layouts in the corresponding directory:
+
+```text
+layouts/
+└── miscellaneous/
+    └── contact.html  <-- renders contact.md
+    └── single.html   <-- renders about.md
+```
+
 ## Home page
 
 {{< datatable-filtered "output" "layouts" "Kind == home" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
index 6c009cbdb497d361b6e9ff591749e43fed5e4e0a..e2d141f06f3f6510d9490ad51b81a99ef84d6ded 100644 (file)
@@ -49,6 +49,12 @@ This partial template recursively "walks" a menu structure, rendering a localize
     {{- else if $page.HasMenuCurrent .Menu .}}
       {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }}
     {{- end }}
+    {{- $name := .Name }}
+    {{- with .Identifier }}
+      {{- with T . }}
+        {{- $name = . }}
+      {{- end }}
+    {{- end }}
     <li>
       <a
         {{- range $k, $v := $attrs }}
@@ -56,7 +62,7 @@ This partial template recursively "walks" a menu structure, rendering a localize
             {{- printf " %s=%q" $k $v | safeHTMLAttr }}
           {{- end }}
         {{- end -}}
-      >{{ or (T .Identifier) .Name | safeHTML }}</a>
+      >{{ $name }}</a>
       {{- with .Children }}
         <ul>
           {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
index e1d09918a1d4f80468c0c3908d939a721b608b88..6cd7f7435d694770eda8796e658bf9cb8af8a05a 100644 (file)
@@ -12,7 +12,7 @@ aliases: [/extras/pagination,/doc/pagination/]
 toc: true
 ---
 
-The real power of Hugo pagination shines when combined with the [`where` function][where] and its SQL-like operators: [`first`], [`last`], and [`after`]. You can even [order the content][lists] the way you've become used to with Hugo.
+The real power of Hugo pagination shines when combined with the [`where`] function and its SQL-like operators: [`first`], [`last`], and [`after`]. You can even [order the content][lists] the way you've become used to with Hugo.
 
 ## Configure pagination
 
@@ -146,9 +146,9 @@ The pages are built on the following form (`BLANK` means no value):
 ....
 ```
 
-[`first`]: /functions/first/
-[`last`]: /functions/last/
-[`after`]: /functions/after/
+[`first`]: /functions/collections/first/
+[`last`]: /functions/collections/last/
+[`after`]: /functions/collections/after/
 [configuration]: /getting-started/configuration/
 [lists]: /templates/lists/
-[where]: /functions/where/
+[`where`]: /functions/collections/where
index a082be9a62ca67b60d482c0eebdb0e730f66195c..97cf93f71f35bd10924e4eeacfa035ecaf481cc1 100644 (file)
@@ -177,6 +177,6 @@ The following `footer.html` partial template is used for [spf13.com](https://spf
 [customize]: /hugo-modules/theme-components/
 [listtemps]: /templates/lists/
 [lookup order]: /templates/lookup-order/
-[partialcached]: /functions/partialcached/
+[partialcached]: /functions/partials/includecached
 [singletemps]: /templates/single-page-templates/
 [themes]: /themes/
index 55a6c3004a99cf749d14542a8111ce4fa38035d8..b35009a2fead265bc40f42c16c8a4faf056caddc 100644 (file)
@@ -29,7 +29,7 @@ Every `Page` in Hugo has a `.Kind` attribute.
 
 ## `.Site.GetPage` with sections
 
-`Kind` can easily be combined with the [`where` function][where] in your templates to create kind-specific lists of content. This method is ideal for creating lists, but there are times where you may want to fetch just the index page of a single section via the section's path.
+`Kind` can easily be combined with the [`where`] function in your templates to create kind-specific lists of content. This method is ideal for creating lists, but there are times where you may want to fetch just the index page of a single section via the section's path.
 
 The [`.GetPage` function][getpage] looks up an index page of a given `Kind` and `path`.
 
@@ -106,5 +106,5 @@ Which then returns the following:
 [getpage]: /functions/getpage/
 [lists]: /templates/lists/
 [lookup]: /templates/lookup-order/
-[where]: /functions/where/
+[`where`]: /functions/collections/where
 [sections]: /content-management/sections/
index 6a6700380d83477ceb4ca7c9d45e9a2fbbeffec8..41b52641cc91ce29197c6529bb7a3458cdfa2ccf 100644 (file)
@@ -12,7 +12,7 @@ weight: 130
 toc: true
 ---
 
-Shortcodes are a means to consolidate templating into small, reusable snippets that you can embed directly inside your content. In this sense, you can think of shortcodes as the intermediary between [page and list templates][templates] and [basic content files].
+Shortcodes are a means to consolidate templating into small, reusable snippets that you can embed directly inside your content.
 
 {{% note %}}
 Hugo also ships with built-in shortcodes for common use cases. (See [Content Management: Shortcodes](/content-management/shortcodes/).)
@@ -349,7 +349,7 @@ This will output the following HTML. Note how the first two `img` shortcodes inh
 
 ## Error handling in shortcodes
 
-Use the [errorf](/functions/errorf) template func and [.Position](/variables/shortcodes/) variable to get useful error messages in shortcodes:
+Use the [errorf](/functions/fmt/errorf) template func and [.Position](/variables/shortcodes/) variable to get useful error messages in shortcodes:
 
 ```bash
 {{ with .Get "name" }}
@@ -402,7 +402,7 @@ The same inline shortcode can be reused later in the same content file, with dif
 [built-in shortcode]: /content-management/shortcodes/
 [config]: /getting-started/configuration/
 [Content Management: Shortcodes]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes
-[source organization]: /getting-started/directory-structure/#directory-structure-explained
+[source organization]: /getting-started/directory-structure/
 [docsshortcodes]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes
 [figure]: /content-management/shortcodes/#figure
 [hugosc]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes
@@ -410,6 +410,6 @@ The same inline shortcode can be reused later in the same content file, with dif
 [pagevars]: /variables/page/
 [parent]: /variables/shortcodes/
 [shortcodesvars]: /variables/shortcodes/
-[spfscs]: https://github.com/spf13/spf13.com/tree/master/layouts/shortcodes 
+[spfscs]: https://github.com/spf13/spf13.com/tree/master/layouts/shortcodes
 [vimeoexample]: #single-flexible-example-vimeo
 [youtubeshortcode]: /content-management/shortcodes/#youtube
index 12e04db96a0ea1fd123c0bdefdfb8f406ef9db95..a32e8231c81294dbc96509fd5f1cd560753e8586 100644 (file)
@@ -82,4 +82,4 @@ To easily generate new instances of a content type (e.g., new `.md` files in a s
 [section]: /content-management/sections/
 [site variables]: /variables/site/
 [spf13]: https://spf13.com/
-[`with`]: /functions/with/
+[`with`]: /functions/go-template/with/
index 88aafe73f470ce6bb340d4b12dbc2aee3d2cbf85..1b15bd4efa1362a2d08bcfaf0a89d0f1e1f97320 100644 (file)
@@ -269,7 +269,7 @@ This may take the form of a tag cloud, a menu, or simply a list.
 
 The following example displays all terms in a site's tags taxonomy:
 
-### Example: list all site tags 
+### Example: list all site tags
 
 ```go-html-template
 <ul>
@@ -322,12 +322,7 @@ Because taxonomies are lists, the [`.GetPage` function][getpage] can be used to
 </ul>
 {{< /code >}}
 
-<!-- TODO: ### `.Site.GetPage` Taxonomy List Example -->
-
-<!-- TODO: ### `.Site.GetPage` Taxonomy Terms Example -->
-
-
-[delimit]: /functions/delimit/
+[delimit]: /functions/collections/delimit/
 [getpage]: /functions/getpage/
 [lists]: /templates/lists/
 [renderlists]: /templates/lists/
index b4bbe28daceccdbf4af75dea0328eff2b464f0d6..a0fd98e49d8c3e428df103f7f10f257eab5d7e67 100644 (file)
@@ -85,4 +85,4 @@ parameters to `partialCached` beyond the initial context. See the
 `partialCached` documentation for more details.
 {{% /note %}}
 
-[partialCached]: /functions/partialcached
+[partialCached]: /functions/partials/includecached
index 1ec788ab85d25385ab9a2c8d76567b48d6be30cb..bc29bfba1f5455b487020dc4eef3134025be6516 100644 (file)
@@ -17,7 +17,7 @@ aliases: [/faq/]
 **Note:** The answers/solutions presented below are short, and may not be enough to solve your problem. Visit [Hugo Discourse](https://discourse.gohugo.io/) and use the search. It that does not help, start a new topic and ask your questions.
 {{% /note %}}
 
-## I can't see my content!
+## I can't see my content
 
 Is your Markdown file [in draft mode](/content-management/front-matter/#front-matter-variables)? When testing, run `hugo server` with the `-D` or `--buildDrafts` [switch](/getting-started/usage/#draft-future-and-expired-content).
 
index 1ad42a9b3da7d9995786c8eedc12103d7a0c72a8..c1f80a62c22a2be0304441148fa03ee87a0d6ee2 100644 (file)
@@ -15,4 +15,4 @@ aliases: [/templates/variables/]
 
 Hugo's templates are context aware and make a large number of values available to you as you're creating views for your website.
 
-[Go templates]: /templates/introduction/ "Understand context in Go templates by learning the language's fundamental templating functions."
+[Go templates]: /templates/introduction/
index 4c412efddec49215d7abd344a90b8c404c164e03..8928ca6f0ac180032ed789af835c122b0c6b9b2c 100644 (file)
@@ -20,7 +20,7 @@ Hugo's Git integrations should be fairly performant but *can* increase your buil
 
 1. The Hugo site must be in a Git-enabled directory.
 2. The Git executable must be installed and in your system `PATH`.
-3. The `.GitInfo` feature must be enabled in your Hugo project by passing `--enableGitInfo` flag on the command line or by setting `enableGitInfo` to `true` in your [site's configuration file][configuration]. 
+3. The `.GitInfo` feature must be enabled in your Hugo project by passing `--enableGitInfo` flag on the command line or by setting `enableGitInfo` to `true` in your [site's configuration file][configuration].
 
 ## The `.GitInfo` object
 
@@ -52,8 +52,7 @@ If the `.GitInfo` feature is enabled, `.Lastmod` (on `Page`) is fetched from Git
 
 ## Hosting considerations
 
-On the site host, your repository must be "deep-cloned," so the returned `.GitInfo` data will be accurate. Otherwise, your site may display only data from your latest commit. Where it's not possible to configure a host's cloning depth, you must handle this through CI/CD (*e.g.*, a 
-GitHub Action or GitLab CI/CD). See the following table:
+On the site host, your repository must be "deep-cloned," so the returned `.GitInfo` data will be accurate. Otherwise, your site may display only data from your latest commit. Where it's not possible to configure a host's cloning depth, you must handle this through CI/CD (*e.g.*, a GitHub Action or GitLab CI/CD). See the following table:
 
 | Hosting service | Clone depth | Configurable? |
 | :-------------- | :---------- | :-----------: |
index 64cd8018457c4885b7d2cadba9859694859fe74e..16e5f31ffa155e3658419d222ab76f48295f4cfc 100644 (file)
@@ -97,7 +97,7 @@ The following is a list of page-level variables. Many of these will be defined i
 : The Permanent link for this page; see [Permalinks](/content-management/urls/)
 
 .Plain
-: The Page content stripped of HTML tags and presented as a string. You may need to pipe the result through the [`htmlUnescape`](/functions/htmlunescape/) function when rendering this value with the HTML [output format](/templates/output-formats#output-format-definitions).
+: The Page content stripped of HTML tags and presented as a string. You may need to pipe the result through the [`htmlUnescape`](/functions/transform/htmlunescape) function when rendering this value with the HTML [output format](/templates/output-formats#output-format-definitions).
 
 .PlainWords
 : The slice of strings that results from splitting .Plain into words, as defined in Go's [strings.Fields](https://pkg.go.dev/strings#Fields).
@@ -195,7 +195,29 @@ List pages receive the following page collections in [context](/getting-started/
 
 Also see [Sections](/content-management/sections/).
 
-{{< readfile file="/content/en/readfiles/sectionvars.md" markdown="true" >}}
+.CurrentSection
+: The page's current section. The value can be the page itself if it is a section or the homepage.
+
+.FirstSection
+: The page's first section below root, e.g. `/docs`, `/blog` etc.
+
+.InSection $anotherPage
+: Whether the given page is in the current section.
+
+.IsAncestor $anotherPage
+: Whether the current page is an ancestor of the given page.
+
+.IsDescendant $anotherPage
+: Whether the current page is a descendant of the given page.
+
+.Parent
+: A section's parent section or a page's section.
+
+.Section
+: The [section](/content-management/sections/) this content belongs to. **Note:** For nested sections, this is the first path element in the directory, for example, `/blog/funny/mypost/ => blog`.
+
+.Sections
+: The [sections](/content-management/sections/) below this content.
 
 ## Page fragments
 
@@ -230,23 +252,6 @@ Also see the [Go Doc](https://pkg.go.dev/github.com/gohugoio/hugo@v0.111.0/marku
 
 `.Fragments` are safe to call from render hooks, even on the page you're on (`.Page.Fragments`). For shortcodes we recommend that all `.Fragments` usage is nested inside the `{{</**/>}}` shortcode delimiter (`{{%/**/%}}` takes part in the ToC creation so it's easy to end up in a situation where you bite yourself in the tail).
 
-
-## The global page function
-
-{{< new-in "0.111.1" >}}
-
-Hugo almost always passes a `Page` as the data context into the top level template (e.g. `single.html`) (the one exception is the multihost sitemap template). This means that you can access the current page with the `.` variable in the template.
-
-But when you're deeply nested inside `.Render`, partial etc., accessing that `Page` object isn't always practical or possible.
-
-For this reason, Hugo provides a global `page` function that you can use to access the current page from anywhere in any template.
-
-```go-html-template
-{{ page.Title }}
-```
-
-There are one caveat with this, and this isn't new, but it's worth mentioning here: There are situations in Hugo where you may see a cached value, e.g. when using `partialCached` or in a shortcode.
-
 ## The `.RenderShortcodes` method {#rendershortcodes}
 
 {{< new-in "0.117.0" >}} This renders all the shortcodes in the content, preserving the surrounding markup (e.g. Markdown) as is.
index 117f4534603658d31c5d3fba9f97001d2f29c488..482bd520b964c3449f69596b995a56a523573172 100644 (file)
@@ -66,19 +66,19 @@ All the methods below, e.g. `.Site.RegularPages` can also be reached via the glo
 : a string representing the language tag as defined in the site configuration.
 
 .Site.LanguagePrefix
-: this can be used to prefix URLs to point to the correct language. It will even work when there is only one defined language. See also the functions [absLangURL](/functions/abslangurl/) and [relLangURL](/functions/rellangurl).
+: this can be used to prefix URLs to point to the correct language. It will even work when there is only one defined language. See also the functions [absLangURL](/functions/urls/abslangurl) and [relLangURL](/functions/urls/rellangurl).
 
 .Site.Languages
 : an ordered list (ordered by defined weight) of languages.
 
 .Site.LastChange
-: a string representing the date/time of the most recent change to your site. This string is based on the [`date` variable in the front matter](/content-management/front-matter) of your content pages.
+: a [time.Time](https://godoc.org/time#Time) value representing the date/time of the most recent change to your site.
 
 .Site.Menus
 : all the menus in the site.
 
 .Site.Pages
-: array of all content ordered by Date with the newest first. This array contains only the pages in the current language. 
+: array of all content ordered by Date with the newest first. This array contains only the pages in the current language.
 
 .Site.RegularPages
 : a shortcut to the *regular* page collection. `.Site.RegularPages` is equivalent to `where .Site.Pages "Kind" "page"`.
index 3f0b799c89bda896ff323348cd54713378f16042..2c1e051a9121e5314460546115028467d3a7fe08 100644 (file)
@@ -96,7 +96,7 @@ Access the entire taxonomy data structure from any template with `site.Taxonomie
 
 Access a subset of the taxonomy data structure by chaining one or more identifiers, or by using the [`index`] function with one or more keys. For example, to access the collection of weighted content pages related to the news category, use either of the following:
 
-[`index`]: /functions/index-function/
+[`index`]: /functions/collections/indexfunction/
 
 ```go-html-template
 {{ $pages := site.Taxonomies.categories.news }}
index 1e5eded1079981c110cb762fd9486d11195c0561..f80c2b41e8b80c15287b7a1afd74c618d415f5cf 100644 (file)
@@ -75,7 +75,7 @@ chroma:
     - bash-session
     - console
     - shell-session
-    Name: BashSession
+    Name: Bash Session
   - Aliases:
     - bat
     - batch
@@ -156,6 +156,7 @@ chroma:
   - Aliases:
     - clojure
     - clj
+    - edn
     Name: Clojure
   - Aliases:
     - cmake
@@ -173,11 +174,6 @@ chroma:
     - cl
     - lisp
     Name: Common Lisp
-  - Aliases:
-    - common-lisp
-    - cl
-    - lisp
-    Name: Common Lisp
   - Aliases:
     - coq
     Name: Coq
@@ -237,11 +233,6 @@ chroma:
     - elisp
     - emacs-lisp
     Name: EmacsLisp
-  - Aliases:
-    - emacs
-    - elisp
-    - emacs-lisp
-    Name: EmacsLisp
   - Aliases:
     - erlang
     Name: Erlang
@@ -277,6 +268,10 @@ chroma:
     - gdscript
     - gd
     Name: GDScript
+  - Aliases:
+    - gdscript3
+    - gd3
+    Name: GDScript3
   - Aliases:
     - genshi
     - kid
@@ -310,8 +305,8 @@ chroma:
     - go-html-template
     Name: Go HTML Template
   - Aliases:
-    - go-html-template
-    Name: Go HTML Template
+    - go-template
+    Name: Go Template
   - Aliases:
     - go-text-template
     Name: Go Text Template
@@ -509,6 +504,9 @@ chroma:
   - Aliases:
     - octave
     Name: Octave
+  - Aliases:
+    - odin
+    Name: Odin
   - Aliases:
     - ones
     - onesenterprise
@@ -717,6 +715,9 @@ chroma:
     - sol
     - solidity
     Name: Solidity
+  - Aliases:
+    - sp
+    Name: SourcePawn
   - Aliases:
     - sparql
     Name: SPARQL
@@ -2956,6 +2957,11 @@ tpl:
         Args: null
         Description: ""
         Examples: null
+      Opacity:
+        Aliases: null
+        Args: null
+        Description: ""
+        Examples: null
       Overlay:
         Aliases: null
         Args: null
@@ -2966,6 +2972,11 @@ tpl:
         Args: null
         Description: ""
         Examples: null
+      Process:
+        Aliases: null
+        Args: null
+        Description: ""
+        Examples: null
       Saturation:
         Aliases: null
         Args: null
diff --git a/go.mod b/go.mod
index 2338186ca9332165bd85d9ff3ed93269594e8528..8b99de36bf86810546f914a6ba83f6763795a4f7 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -2,4 +2,4 @@ module github.com/gohugoio/hugoDocs
 
 go 1.16
 
-require github.com/gohugoio/gohugoioTheme v0.0.0-20230812102551-06f8256e7ee5 // indirect
+require github.com/gohugoio/gohugoioTheme v0.0.0-20230927165800-342e2c850f18 // indirect
diff --git a/go.sum b/go.sum
index c5b5397ab17c4b97ffd8c71413042b51c48cc572..9ff8664368bac7dca14b610e60fd90c0dda5a521 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -75,3 +75,5 @@ github.com/gohugoio/gohugoioTheme v0.0.0-20230630055807-9874cd863bc5 h1:5QDXCq7G
 github.com/gohugoio/gohugoioTheme v0.0.0-20230630055807-9874cd863bc5/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
 github.com/gohugoio/gohugoioTheme v0.0.0-20230812102551-06f8256e7ee5 h1:QoImGtz9EWmovn3d0vfREKf1ybroA+oO/yFCW/BmWSE=
 github.com/gohugoio/gohugoioTheme v0.0.0-20230812102551-06f8256e7ee5/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
+github.com/gohugoio/gohugoioTheme v0.0.0-20230927165800-342e2c850f18 h1:fwC86MGMw2yX2tIR+hc+58jlU4pjvc3HUDJ/mTB07Ig=
+github.com/gohugoio/gohugoioTheme v0.0.0-20230927165800-342e2c850f18/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM=
index 987026d0c13bb03a67ce66ba8ae1badc90c8a5fc..46486aec921e4479484eeb2f4b65c033a9b8ca53 100644 (file)
--- a/hugo.toml
+++ b/hugo.toml
@@ -3,7 +3,6 @@
 baseURL                = "https://gohugo.io/"
 defaultContentLanguage = "en"
 enableEmoji            = true
-googleAnalytics        = "G-MBZGKNMDWC"
 ignoreErrors           = ["error-remote-getjson", "error-missing-instagram-accesstoken"]
 languageCode           = "en-us"
 paginate               = 100
@@ -14,6 +13,9 @@ title                  = "Hugo"
 # We do redirects via Netlify's _redirects file, generated by Hugo (see "outputs" below).
 disableAliases = true
 
+[services.googleAnalytics]
+ID = 'G-MBZGKNMDWC'
+
 [minify]
   [minify.tdewolff]
     [minify.tdewolff.html]
@@ -66,6 +68,10 @@ disableAliases = true
   threshold    = 80
   includeNewer = true
   toLower      = false
+  [[related.indices]]
+    toLower = true
+    name   = "relatedFunctions"
+    weight = 60
   [[related.indices]]
     name   = "keywords"
     weight = 60
@@ -79,10 +85,6 @@ disableAliases = true
     applyFilter          = false
     weight               = 60
     cardinalityThreshold = 50
-  [[related.indices]]
-    name    = "date"
-    weight  = 10
-    pattern = "2006"
 
 [social]
   twitter = "GoHugoIO"
diff --git a/layouts/_default/page.html b/layouts/_default/page.html
new file mode 100644 (file)
index 0000000..2435e3e
--- /dev/null
@@ -0,0 +1,34 @@
+<header class="flex-none w-100">
+  {{ if .Params.categories }}
+    {{ range .Params.categories }}
+      <a href="{{ "/categories/" | relLangURL }}{{ . | urlize }}" class="f6 fw8 mb0 link mid-gray dim mr3">
+        {{ humanize  . | upper }}
+      </a>
+    {{ end }}
+  {{end}}
+  <h1 class="lh-title mb3 mv0 pt3 primary-color-dark">
+    {{ .Title }}
+  </h1>
+</header>
+
+<aside class="bt bw1 pt3 mt2 mid-gray b--mid-gray fn w-100">
+  {{ with .Params.description }}
+    <div class="f4 fw4 lh-copy">
+      {{ . | markdownify }}
+    </div>
+  {{ end }}
+
+  <!--
+  NOTE: Removed to test builds without it.
+  partial "components/author-github-data" (dict "context" . "size" "110") -->
+</aside>
+
+{{ with .Params.featured_image_path }}
+  <img src="{{ . }}" alt="Featured Image for {{ $.Title }}" class="mw-100">
+{{ end }}
+
+<div class="prose prose-{{ .Type }}" id="prose">
+  {{- partial "docs/functions-signatures.html" . -}}
+  {{- partial "docs/functions-aliases.html" . -}}
+  {{ .Content }}
+</div>
diff --git a/layouts/partials/docs/functions-aliases.html b/layouts/partials/docs/functions-aliases.html
new file mode 100644 (file)
index 0000000..b0ba9be
--- /dev/null
@@ -0,0 +1,12 @@
+{{- with .Params.function.aliases }}
+  {{- $label := "Alias" }}
+  {{- if gt (len .) 1 }}
+    {{- $label = "Aliases" }}
+  {{- end }}
+  <h2 class="minor mb1 primary-color-dark">{{ $label }}</h2>
+  {{- range . }}
+    <pre class="f5 mb4 ph3 pv2 bg-light-gray" style="border-left:4px solid #0594CB;">
+      {{- . -}}
+    </pre>
+  {{- end }}
+{{- end -}}
diff --git a/layouts/partials/docs/functions-signatures.html b/layouts/partials/docs/functions-signatures.html
new file mode 100644 (file)
index 0000000..07c9cb7
--- /dev/null
@@ -0,0 +1,12 @@
+{{- with .Params.function.signatures }}
+  <h2 class="minor mb1 pt4 primary-color-dark">Syntax</h2>
+  {{- range . }}
+    {{- $signature := . }}
+    {{- if $.Params.function.returnType }}
+      {{- $signature = printf "%s ⟼ %s" . $.Params.function.returnType }}
+    {{- end }}
+    <pre class="f5 mb4 ph3 pv2 bg-light-gray" style="border-left:4px solid #0594CB;">
+      {{- $signature -}}
+    </pre>
+  {{- end }}
+{{- end -}}
diff --git a/layouts/partials/related.html b/layouts/partials/related.html
new file mode 100644 (file)
index 0000000..05a2e91
--- /dev/null
@@ -0,0 +1,17 @@
+{{- $heading := "See also" }}
+{{- $related := site.RegularPages.Related . | first 5 }}
+
+{{- if eq .Type "functions" }}
+  {{- $heading = "Related functions" }}
+  {{- $opts := dict "document" . "indices" (slice "relatedFunctions") }}
+  {{- $related = site.RegularPages.Related $opts | first 7 }}
+{{- end }}
+
+{{- with $related }}
+  <h2>{{ $heading }}</h2>
+  <ul>
+    {{- range . }}
+      <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
+    {{- end }}
+  </ul>
+{{- end }}
index a29a2ce96ae752d0ec33f123537d830b7e70c407..d65e08c250d480fe9075288a1982b616b582d6b2 100644 (file)
@@ -3,7 +3,7 @@
   command = "hugo --gc --minify"
 
   [build.environment]
-    HUGO_VERSION = "0.118.2"
+    HUGO_VERSION = "0.119.0"
 
 [context.production.environment]
   HUGO_ENV           = "production"
diff --git a/resources/.gitattributes b/resources/.gitattributes
deleted file mode 100644 (file)
index a205a8e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.*    linguist-generated=true
-*.*    -diff -merge
\ No newline at end of file
diff --git a/resources/_gen/assets/css/output/css/app.css_d11fe7b62c27961c87ecd0f2490357b9.content b/resources/_gen/assets/css/output/css/app.css_d11fe7b62c27961c87ecd0f2490357b9.content
deleted file mode 100644 (file)
index 42d7140..0000000
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:muli;font-style:normal;font-display:swap;font-weight:200;src:local('Muli Extra Light '),local('Muli-Extra Light'),url(/fonts/muli-latin-200.woff2) format('woff2'),url(/fonts/muli-latin-200.woff) format('woff')}@font-face{font-family:muli;font-style:italic;font-display:swap;font-weight:200;src:local('Muli Extra Light italic'),local('Muli-Extra Lightitalic'),url(/fonts/muli-latin-200italic.woff2) format('woff2'),url(/fonts/muli-latin-200italic.woff) format('woff')}@font-face{font-family:muli;font-style:normal;font-display:swap;font-weight:300;src:local('Muli Light '),local(Muli-Light),url(/fonts/muli-latin-300.woff2) format('woff2'),url(/fonts/muli-latin-300.woff) format('woff')}@font-face{font-family:muli;font-style:italic;font-display:swap;font-weight:300;src:local('Muli Light italic'),local(Muli-Lightitalic),url(/fonts/muli-latin-300italic.woff2) format('woff2'),url(/fonts/muli-latin-300italic.woff) format('woff')}@font-face{font-family:muli;font-style:normal;font-display:swap;font-weight:400;src:local('Muli Regular '),local(Muli-Regular),url(/fonts/muli-latin-400.woff2) format('woff2'),url(/fonts/muli-latin-400.woff) format('woff')}@font-face{font-family:muli;font-style:italic;font-display:swap;font-weight:400;src:local('Muli Regular italic'),local(Muli-Regularitalic),url(/fonts/muli-latin-400italic.woff2) format('woff2'),url(/fonts/muli-latin-400italic.woff) format('woff')}@font-face{font-family:muli;font-style:normal;font-display:swap;font-weight:600;src:local('Muli SemiBold '),local(Muli-SemiBold),url(/fonts/muli-latin-600.woff2) format('woff2'),url(/fonts/muli-latin-600.woff) format('woff')}@font-face{font-family:muli;font-style:italic;font-display:swap;font-weight:600;src:local('Muli SemiBold italic'),local(Muli-SemiBolditalic),url(/fonts/muli-latin-600italic.woff2) format('woff2'),url(/fonts/muli-latin-600italic.woff) format('woff')}@font-face{font-family:muli;font-style:normal;font-display:swap;font-weight:700;src:local('Muli Bold '),local(Muli-Bold),url(/fonts/muli-latin-700.woff2) format('woff2'),url(/fonts/muli-latin-700.woff) format('woff')}@font-face{font-family:muli;font-style:italic;font-display:swap;font-weight:700;src:local('Muli Bold italic'),local(Muli-Bolditalic),url(/fonts/muli-latin-700italic.woff2) format('woff2'),url(/fonts/muli-latin-700italic.woff) format('woff')}@font-face{font-family:muli;font-style:normal;font-display:swap;font-weight:800;src:local('Muli ExtraBold '),local(Muli-ExtraBold),url(/fonts/muli-latin-800.woff2) format('woff2'),url(/fonts/muli-latin-800.woff) format('woff')}@font-face{font-family:muli;font-style:italic;font-display:swap;font-weight:800;src:local('Muli ExtraBold italic'),local(Muli-ExtraBolditalic),url(/fonts/muli-latin-800italic.woff2) format('woff2'),url(/fonts/muli-latin-800italic.woff) format('woff')}@font-face{font-family:muli;font-style:normal;font-display:swap;font-weight:900;src:local('Muli Black '),local(Muli-Black),url(/fonts/muli-latin-900.woff2) format('woff2'),url(/fonts/muli-latin-900.woff) format('woff')}@font-face{font-family:muli;font-style:italic;font-display:swap;font-weight:900;src:local('Muli Black italic'),local(Muli-Blackitalic),url(/fonts/muli-latin-900italic.woff2) format('woff2'),url(/fonts/muli-latin-900italic.woff) format('woff')}/*!TACHYONS v4.7.0 | http://tachyons.io*//*!normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,article,aside,section,main,nav,footer,header,form,fieldset,legend,pre,code,a,h1,h2,h3,h4,h5,h6,p,ul,ol,li,dl,dt,dd,blockquote,figcaption,figure,textarea,table,td,th,tr,input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=url],.border-box{-webkit-box-sizing:border-box;box-sizing:border-box}img{max-width:100%}.cover{background-size:cover!important}.contain{background-size:contain!important}@media screen and (min-width:30em){.cover-ns{background-size:cover!important}.contain-ns{background-size:contain!important}}@media screen and (min-width:30em) and (max-width:60em){.cover-m{background-size:cover!important}.contain-m{background-size:contain!important}}@media screen and (min-width:60em){.cover-l{background-size:cover!important}.contain-l{background-size:contain!important}}.bg-center{background-repeat:no-repeat;background-position:50%}.bg-top{background-repeat:no-repeat;background-position:50% 0}.bg-right{background-repeat:no-repeat;background-position:50% 100%}.bg-bottom{background-repeat:no-repeat;background-position:50% 100%}.bg-left{background-repeat:no-repeat;background-position:50% 0}@media screen and (min-width:30em){.bg-center-ns{background-repeat:no-repeat;background-position:50%}.bg-top-ns{background-repeat:no-repeat;background-position:50% 0}.bg-right-ns{background-repeat:no-repeat;background-position:50% 100%}.bg-bottom-ns{background-repeat:no-repeat;background-position:50% 100%}.bg-left-ns{background-repeat:no-repeat;background-position:50% 0}}@media screen and (min-width:30em) and (max-width:60em){.bg-center-m{background-repeat:no-repeat;background-position:50%}.bg-top-m{background-repeat:no-repeat;background-position:50% 0}.bg-right-m{background-repeat:no-repeat;background-position:50% 100%}.bg-bottom-m{background-repeat:no-repeat;background-position:50% 100%}.bg-left-m{background-repeat:no-repeat;background-position:50% 0}}@media screen and (min-width:60em){.bg-center-l{background-repeat:no-repeat;background-position:50%}.bg-top-l{background-repeat:no-repeat;background-position:50% 0}.bg-right-l{background-repeat:no-repeat;background-position:50% 100%}.bg-bottom-l{background-repeat:no-repeat;background-position:50% 100%}.bg-left-l{background-repeat:no-repeat;background-position:50% 0}}.ba{border-style:solid;border-width:1px}.bt{border-top-style:solid;border-top-width:1px}.br{border-right-style:solid;border-right-width:1px}.bb{border-bottom-style:solid;border-bottom-width:1px}.bl{border-left-style:solid;border-left-width:1px}.bn{border-style:none;border-width:0}@media screen and (min-width:30em){.ba-ns{border-style:solid;border-width:1px}.bt-ns{border-top-style:solid;border-top-width:1px}.br-ns{border-right-style:solid;border-right-width:1px}.bb-ns{border-bottom-style:solid;border-bottom-width:1px}.bl-ns{border-left-style:solid;border-left-width:1px}.bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em) and (max-width:60em){.ba-m{border-style:solid;border-width:1px}.bt-m{border-top-style:solid;border-top-width:1px}.br-m{border-right-style:solid;border-right-width:1px}.bb-m{border-bottom-style:solid;border-bottom-width:1px}.bl-m{border-left-style:solid;border-left-width:1px}.bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.ba-l{border-style:solid;border-width:1px}.bt-l{border-top-style:solid;border-top-width:1px}.br-l{border-right-style:solid;border-right-width:1px}.bb-l{border-bottom-style:solid;border-bottom-width:1px}.bl-l{border-left-style:solid;border-left-width:1px}.bn-l{border-style:none;border-width:0}}.b--black{border-color:#000}.b--near-black{border-color:#111}.b--dark-gray{border-color:#333}.b--mid-gray{border-color:#555}.b--gray{border-color:#777}.b--silver{border-color:#999}.b--light-silver{border-color:#aaa}.b--moon-gray{border-color:#ccc}.b--light-gray{border-color:#eee}.b--near-white{border-color:#f4f4f4}.b--white{border-color:#fff}.b--white-90{border-color:rgba(255,255,255,.9)}.b--white-80{border-color:rgba(255,255,255,.8)}.b--white-70{border-color:rgba(255,255,255,.7)}.b--white-60{border-color:rgba(255,255,255,.6)}.b--white-50{border-color:rgba(255,255,255,.5)}.b--white-40{border-color:rgba(255,255,255,.4)}.b--white-30{border-color:rgba(255,255,255,.3)}.b--white-20{border-color:rgba(255,255,255,.2)}.b--white-10{border-color:rgba(255,255,255,.1)}.b--white-05{border-color:rgba(255,255,255,.05)}.b--white-025{border-color:rgba(255,255,255,.025)}.b--white-0125{border-color:rgba(255,255,255,.0125)}.b--black-90{border-color:rgba(0,0,0,.9)}.b--black-80{border-color:rgba(0,0,0,.8)}.b--black-70{border-color:rgba(0,0,0,.7)}.b--black-60{border-color:rgba(0,0,0,.6)}.b--black-50{border-color:rgba(0,0,0,.5)}.b--black-40{border-color:rgba(0,0,0,.4)}.b--black-30{border-color:rgba(0,0,0,.3)}.b--black-20{border-color:rgba(0,0,0,.2)}.b--black-10{border-color:rgba(0,0,0,.1)}.b--black-05{border-color:rgba(0,0,0,.05)}.b--black-025{border-color:rgba(0,0,0,.025)}.b--black-0125{border-color:rgba(0,0,0,.0125)}.b--dark-red{border-color:#e7040f}.b--red{border-color:#ff4136}.b--light-red{border-color:#ff725c}.b--orange{border-color:#ff6300}.b--gold{border-color:#ffb700}.b--yellow{border-color:gold}.b--light-yellow{border-color:#fbf1a9}.b--purple{border-color:#5e2ca5}.b--light-purple{border-color:#a463f2}.b--dark-pink{border-color:#d5008f}.b--hot-pink{border-color:#ff41b4}.b--pink{border-color:#ff80cc}.b--light-pink{border-color:#ffa3d7}.b--dark-green{border-color:#137752}.b--green{border-color:#19a974}.b--light-green{border-color:#9eebcf}.b--navy{border-color:#001b44}.b--dark-blue{border-color:#00449e}.b--blue{border-color:#0594cb}.b--light-blue{border-color:#96ccff}.b--lightest-blue{border-color:#cdecff}.b--washed-blue{border-color:#f6fffe}.b--washed-green{border-color:#e8fdf5}.b--washed-yellow{border-color:#fffceb}.b--washed-red{border-color:#ffdfdf}.b--transparent{border-color:transparent}.b--inherit{border-color:inherit}.br0{border-radius:0}.br1{border-radius:.125rem}.br2{border-radius:.25rem}.br3{border-radius:.5rem}.br4{border-radius:1rem}.br-100{border-radius:100%}.br-pill{border-radius:9999px}.br--bottom{border-top-left-radius:0;border-top-right-radius:0}.br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.br--right{border-top-left-radius:0;border-bottom-left-radius:0}.br--left{border-top-right-radius:0;border-bottom-right-radius:0}@media screen and (min-width:30em){.br0-ns{border-radius:0}.br1-ns{border-radius:.125rem}.br2-ns{border-radius:.25rem}.br3-ns{border-radius:.5rem}.br4-ns{border-radius:1rem}.br-100-ns{border-radius:100%}.br-pill-ns{border-radius:9999px}.br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.br--right-ns{border-top-left-radius:0;border-bottom-left-radius:0}.br--left-ns{border-top-right-radius:0;border-bottom-right-radius:0}}@media screen and (min-width:30em) and (max-width:60em){.br0-m{border-radius:0}.br1-m{border-radius:.125rem}.br2-m{border-radius:.25rem}.br3-m{border-radius:.5rem}.br4-m{border-radius:1rem}.br-100-m{border-radius:100%}.br-pill-m{border-radius:9999px}.br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.br--right-m{border-top-left-radius:0;border-bottom-left-radius:0}.br--left-m{border-top-right-radius:0;border-bottom-right-radius:0}}@media screen and (min-width:60em){.br0-l{border-radius:0}.br1-l{border-radius:.125rem}.br2-l{border-radius:.25rem}.br3-l{border-radius:.5rem}.br4-l{border-radius:1rem}.br-100-l{border-radius:100%}.br-pill-l{border-radius:9999px}.br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.br--right-l{border-top-left-radius:0;border-bottom-left-radius:0}.br--left-l{border-top-right-radius:0;border-bottom-right-radius:0}}.b--dotted{border-style:dotted}.b--dashed{border-style:dashed}.b--solid{border-style:solid}.b--none{border-style:none}@media screen and (min-width:30em){.b--dotted-ns{border-style:dotted}.b--dashed-ns{border-style:dashed}.b--solid-ns{border-style:solid}.b--none-ns{border-style:none}}@media screen and (min-width:30em) and (max-width:60em){.b--dotted-m{border-style:dotted}.b--dashed-m{border-style:dashed}.b--solid-m{border-style:solid}.b--none-m{border-style:none}}@media screen and (min-width:60em){.b--dotted-l{border-style:dotted}.b--dashed-l{border-style:dashed}.b--solid-l{border-style:solid}.b--none-l{border-style:none}}.bw0{border-width:0}.bw1{border-width:.125rem}.bw2{border-width:.25rem}.bw3{border-width:.5rem}.bw4{border-width:1rem}.bw5{border-width:2rem}.bt-0{border-top-width:0}.br-0{border-right-width:0}.bb-0{border-bottom-width:0}.bl-0{border-left-width:0}@media screen and (min-width:30em){.bw0-ns{border-width:0}.bw1-ns{border-width:.125rem}.bw2-ns{border-width:.25rem}.bw3-ns{border-width:.5rem}.bw4-ns{border-width:1rem}.bw5-ns{border-width:2rem}.bt-0-ns{border-top-width:0}.br-0-ns{border-right-width:0}.bb-0-ns{border-bottom-width:0}.bl-0-ns{border-left-width:0}}@media screen and (min-width:30em) and (max-width:60em){.bw0-m{border-width:0}.bw1-m{border-width:.125rem}.bw2-m{border-width:.25rem}.bw3-m{border-width:.5rem}.bw4-m{border-width:1rem}.bw5-m{border-width:2rem}.bt-0-m{border-top-width:0}.br-0-m{border-right-width:0}.bb-0-m{border-bottom-width:0}.bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.bw0-l{border-width:0}.bw1-l{border-width:.125rem}.bw2-l{border-width:.25rem}.bw3-l{border-width:.5rem}.bw4-l{border-width:1rem}.bw5-l{border-width:2rem}.bt-0-l{border-top-width:0}.br-0-l{border-right-width:0}.bb-0-l{border-bottom-width:0}.bl-0-l{border-left-width:0}}.shadow-1{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.shadow-1-ns{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-ns{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-ns{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-ns{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-ns{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em) and (max-width:60em){.shadow-1-m{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-m{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-m{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-m{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-m{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.shadow-1-l{-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-l{-webkit-box-shadow:0 0 8px 2px rgba(0,0,0,.2);box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-l{-webkit-box-shadow:2px 2px 4px 2px rgba(0,0,0,.2);box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-l{-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.2);box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-l{-webkit-box-shadow:4px 4px 8px 0 rgba(0,0,0,.2);box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-1{top:1rem}.right-1{right:1rem}.bottom-1{bottom:1rem}.left-1{left:1rem}.top-2{top:2rem}.right-2{right:2rem}.bottom-2{bottom:2rem}.left-2{left:2rem}.top--1{top:-1rem}.right--1{right:-1rem}.bottom--1{bottom:-1rem}.left--1{left:-1rem}.top--2{top:-2rem}.right--2{right:-2rem}.bottom--2{bottom:-2rem}.left--2{left:-2rem}.absolute--fill{top:0;right:0;bottom:0;left:0}@media screen and (min-width:30em){.top-0-ns{top:0}.left-0-ns{left:0}.right-0-ns{right:0}.bottom-0-ns{bottom:0}.top-1-ns{top:1rem}.left-1-ns{left:1rem}.right-1-ns{right:1rem}.bottom-1-ns{bottom:1rem}.top-2-ns{top:2rem}.left-2-ns{left:2rem}.right-2-ns{right:2rem}.bottom-2-ns{bottom:2rem}.top--1-ns{top:-1rem}.right--1-ns{right:-1rem}.bottom--1-ns{bottom:-1rem}.left--1-ns{left:-1rem}.top--2-ns{top:-2rem}.right--2-ns{right:-2rem}.bottom--2-ns{bottom:-2rem}.left--2-ns{left:-2rem}.absolute--fill-ns{top:0;right:0;bottom:0;left:0}}@media screen and (min-width:30em) and (max-width:60em){.top-0-m{top:0}.left-0-m{left:0}.right-0-m{right:0}.bottom-0-m{bottom:0}.top-1-m{top:1rem}.left-1-m{left:1rem}.right-1-m{right:1rem}.bottom-1-m{bottom:1rem}.top-2-m{top:2rem}.left-2-m{left:2rem}.right-2-m{right:2rem}.bottom-2-m{bottom:2rem}.top--1-m{top:-1rem}.right--1-m{right:-1rem}.bottom--1-m{bottom:-1rem}.left--1-m{left:-1rem}.top--2-m{top:-2rem}.right--2-m{right:-2rem}.bottom--2-m{bottom:-2rem}.left--2-m{left:-2rem}.absolute--fill-m{top:0;right:0;bottom:0;left:0}}@media screen and (min-width:60em){.top-0-l{top:0}.left-0-l{left:0}.right-0-l{right:0}.bottom-0-l{bottom:0}.top-1-l{top:1rem}.left-1-l{left:1rem}.right-1-l{right:1rem}.bottom-1-l{bottom:1rem}.top-2-l{top:2rem}.left-2-l{left:2rem}.right-2-l{right:2rem}.bottom-2-l{bottom:2rem}.top--1-l{top:-1rem}.right--1-l{right:-1rem}.bottom--1-l{bottom:-1rem}.left--1-l{left:-1rem}.top--2-l{top:-2rem}.right--2-l{right:-2rem}.bottom--2-l{bottom:-2rem}.left--2-l{left:-2rem}.absolute--fill-l{top:0;right:0;bottom:0;left:0}}.cf:before,.cf:after{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.cl{clear:left}.cr{clear:right}.cb{clear:both}.cn{clear:none}@media screen and (min-width:30em){.cl-ns{clear:left}.cr-ns{clear:right}.cb-ns{clear:both}.cn-ns{clear:none}}@media screen and (min-width:30em) and (max-width:60em){.cl-m{clear:left}.cr-m{clear:right}.cb-m{clear:both}.cn-m{clear:none}}@media screen and (min-width:60em){.cl-l{clear:left}.cr-l{clear:right}.cb-l{clear:both}.cn-l{clear:none}}.dn{display:none}.di{display:inline}.db{display:block}.dib{display:inline-block}.dit{display:inline-table}.dt{display:table}.dtc{display:table-cell}.dt-row{display:table-row}.dt-row-group{display:table-row-group}.dt-column{display:table-column}.dt-column-group{display:table-column-group}.dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.dn-ns{display:none}.di-ns{display:inline}.db-ns{display:block}.dib-ns{display:inline-block}.dit-ns{display:inline-table}.dt-ns{display:table}.dtc-ns{display:table-cell}.dt-row-ns{display:table-row}.dt-row-group-ns{display:table-row-group}.dt-column-ns{display:table-column}.dt-column-group-ns{display:table-column-group}.dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em) and (max-width:60em){.dn-m{display:none}.di-m{display:inline}.db-m{display:block}.dib-m{display:inline-block}.dit-m{display:inline-table}.dt-m{display:table}.dtc-m{display:table-cell}.dt-row-m{display:table-row}.dt-row-group-m{display:table-row-group}.dt-column-m{display:table-column}.dt-column-group-m{display:table-column-group}.dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.dn-l{display:none}.di-l{display:inline}.db-l{display:block}.dib-l{display:inline-block}.dit-l{display:inline-table}.dt-l{display:table}.dtc-l{display:table-cell}.dt-row-l{display:table-row}.dt-row-group-l{display:table-row-group}.dt-column-l{display:table-column}.dt-column-group-l{display:table-column-group}.dt--fixed-l{table-layout:fixed;width:100%}}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.flex-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start{-ms-flex-item-align:start;align-self:flex-start}.self-end{-ms-flex-item-align:end;align-self:flex-end}.self-center{-ms-flex-item-align:center;align-self:center}.self-baseline{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch{-ms-flex-item-align:stretch;align-self:stretch}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around{-ms-flex-pack:distribute;justify-content:space-around}.content-start{-ms-flex-line-pack:start;align-content:flex-start}.content-end{-ms-flex-line-pack:end;align-content:flex-end}.content-center{-ms-flex-line-pack:center;align-content:center}.content-between{-ms-flex-line-pack:justify;align-content:space-between}.content-around{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch{-ms-flex-line-pack:stretch;align-content:stretch}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.flex-grow-0{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.flex-grow-1{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.flex-shrink-1{-ms-flex-negative:1;flex-shrink:1}@media screen and (min-width:30em){.flex-ns{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex-ns{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto-ns{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none-ns{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-ns{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-row-ns{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-ns{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap-ns{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-wrap-reverse-ns{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.flex-column-reverse-ns{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.flex-row-reverse-ns{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.items-start-ns{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end-ns{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center-ns{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline-ns{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch-ns{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start-ns{-ms-flex-item-align:start;align-self:flex-start}.self-end-ns{-ms-flex-item-align:end;align-self:flex-end}.self-center-ns{-ms-flex-item-align:center;align-self:center}.self-baseline-ns{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-ns{-ms-flex-item-align:stretch;align-self:stretch}.justify-start-ns{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end-ns{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center-ns{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between-ns{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around-ns{-ms-flex-pack:distribute;justify-content:space-around}.content-start-ns{-ms-flex-line-pack:start;align-content:flex-start}.content-end-ns{-ms-flex-line-pack:end;align-content:flex-end}.content-center-ns{-ms-flex-line-pack:center;align-content:center}.content-between-ns{-ms-flex-line-pack:justify;align-content:space-between}.content-around-ns{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch-ns{-ms-flex-line-pack:stretch;align-content:stretch}.order-0-ns{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1-ns{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2-ns{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3-ns{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4-ns{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5-ns{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6-ns{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7-ns{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8-ns{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last-ns{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.flex-grow-0-ns{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.flex-grow-1-ns{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-shrink-0-ns{-ms-flex-negative:0;flex-shrink:0}.flex-shrink-1-ns{-ms-flex-negative:1;flex-shrink:1}}@media screen and (min-width:30em) and (max-width:60em){.flex-m{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex-m{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto-m{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none-m{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-m{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-row-m{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-m{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap-m{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-wrap-reverse-m{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.flex-column-reverse-m{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.flex-row-reverse-m{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.items-start-m{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end-m{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center-m{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline-m{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch-m{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start-m{-ms-flex-item-align:start;align-self:flex-start}.self-end-m{-ms-flex-item-align:end;align-self:flex-end}.self-center-m{-ms-flex-item-align:center;align-self:center}.self-baseline-m{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-m{-ms-flex-item-align:stretch;align-self:stretch}.justify-start-m{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end-m{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center-m{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between-m{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around-m{-ms-flex-pack:distribute;justify-content:space-around}.content-start-m{-ms-flex-line-pack:start;align-content:flex-start}.content-end-m{-ms-flex-line-pack:end;align-content:flex-end}.content-center-m{-ms-flex-line-pack:center;align-content:center}.content-between-m{-ms-flex-line-pack:justify;align-content:space-between}.content-around-m{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch-m{-ms-flex-line-pack:stretch;align-content:stretch}.order-0-m{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1-m{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2-m{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3-m{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4-m{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5-m{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6-m{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7-m{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8-m{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last-m{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.flex-grow-0-m{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.flex-grow-1-m{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-shrink-0-m{-ms-flex-negative:0;flex-shrink:0}.flex-shrink-1-m{-ms-flex-negative:1;flex-shrink:1}}@media screen and (min-width:60em){.flex-l{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex-l{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto-l{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none-l{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-l{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-row-l{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-l{-ms-flex-wrap:wrap;flex-wrap:wrap}.flex-nowrap-l{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.flex-wrap-reverse-l{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.flex-column-reverse-l{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.flex-row-reverse-l{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.items-start-l{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end-l{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center-l{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline-l{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch-l{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start-l{-ms-flex-item-align:start;align-self:flex-start}.self-end-l{-ms-flex-item-align:end;align-self:flex-end}.self-center-l{-ms-flex-item-align:center;align-self:center}.self-baseline-l{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-l{-ms-flex-item-align:stretch;align-self:stretch}.justify-start-l{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end-l{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center-l{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between-l{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around-l{-ms-flex-pack:distribute;justify-content:space-around}.content-start-l{-ms-flex-line-pack:start;align-content:flex-start}.content-end-l{-ms-flex-line-pack:end;align-content:flex-end}.content-center-l{-ms-flex-line-pack:center;align-content:center}.content-between-l{-ms-flex-line-pack:justify;align-content:space-between}.content-around-l{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch-l{-ms-flex-line-pack:stretch;align-content:stretch}.order-0-l{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1-l{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2-l{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3-l{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4-l{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5-l{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6-l{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7-l{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8-l{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last-l{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.flex-grow-0-l{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.flex-grow-1-l{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.flex-shrink-0-l{-ms-flex-negative:0;flex-shrink:0}.flex-shrink-1-l{-ms-flex-negative:1;flex-shrink:1}}.fl{float:left;_display:inline}.fr{float:right;_display:inline}.fn{float:none}@media screen and (min-width:30em){.fl-ns{float:left;_display:inline}.fr-ns{float:right;_display:inline}.fn-ns{float:none}}@media screen and (min-width:30em) and (max-width:60em){.fl-m{float:left;_display:inline}.fr-m{float:right;_display:inline}.fn-m{float:none}}@media screen and (min-width:60em){.fl-l{float:left;_display:inline}.fr-l{float:right;_display:inline}.fn-l{float:none}}.i{font-style:italic}.fs-normal{font-style:normal}@media screen and (min-width:30em){.i-ns{font-style:italic}.fs-normal-ns{font-style:normal}}@media screen and (min-width:30em) and (max-width:60em){.i-m{font-style:italic}.fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.i-l{font-style:italic}.fs-normal-l{font-style:normal}}.normal{font-weight:400}.b{font-weight:700}.fw1{font-weight:100}.fw2{font-weight:200}.fw3{font-weight:300}.fw4{font-weight:400}.fw5{font-weight:500}.fw6{font-weight:600}.fw7{font-weight:700}.fw8{font-weight:800}.fw9{font-weight:900}@media screen and (min-width:30em){.normal-ns{font-weight:400}.b-ns{font-weight:700}.fw1-ns{font-weight:100}.fw2-ns{font-weight:200}.fw3-ns{font-weight:300}.fw4-ns{font-weight:400}.fw5-ns{font-weight:500}.fw6-ns{font-weight:600}.fw7-ns{font-weight:700}.fw8-ns{font-weight:800}.fw9-ns{font-weight:900}}@media screen and (min-width:30em) and (max-width:60em){.normal-m{font-weight:400}.b-m{font-weight:700}.fw1-m{font-weight:100}.fw2-m{font-weight:200}.fw3-m{font-weight:300}.fw4-m{font-weight:400}.fw5-m{font-weight:500}.fw6-m{font-weight:600}.fw7-m{font-weight:700}.fw8-m{font-weight:800}.fw9-m{font-weight:900}}@media screen and (min-width:60em){.normal-l{font-weight:400}.b-l{font-weight:700}.fw1-l{font-weight:100}.fw2-l{font-weight:200}.fw3-l{font-weight:300}.fw4-l{font-weight:400}.fw5-l{font-weight:500}.fw6-l{font-weight:600}.fw7-l{font-weight:700}.fw8-l{font-weight:800}.fw9-l{font-weight:900}}.input-reset{-webkit-appearance:none;-moz-appearance:none}.button-reset::-moz-focus-inner,.input-reset::-moz-focus-inner{border:0;padding:0}.h1{height:1rem}.h2{height:2rem}.h3{height:4rem}.h4{height:8rem}.h5{height:16rem}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.min-h-100{min-height:100%}.vh-25{height:25vh}.vh-50{height:50vh}.vh-75{height:75vh}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.h-auto{height:auto}.h-inherit{height:inherit}@media screen and (min-width:30em){.h1-ns{height:1rem}.h2-ns{height:2rem}.h3-ns{height:4rem}.h4-ns{height:8rem}.h5-ns{height:16rem}.h-25-ns{height:25%}.h-50-ns{height:50%}.h-75-ns{height:75%}.h-100-ns{height:100%}.min-h-100-ns{min-height:100%}.vh-25-ns{height:25vh}.vh-50-ns{height:50vh}.vh-75-ns{height:75vh}.vh-100-ns{height:100vh}.min-vh-100-ns{min-height:100vh}.h-auto-ns{height:auto}.h-inherit-ns{height:inherit}}@media screen and (min-width:30em) and (max-width:60em){.h1-m{height:1rem}.h2-m{height:2rem}.h3-m{height:4rem}.h4-m{height:8rem}.h5-m{height:16rem}.h-25-m{height:25%}.h-50-m{height:50%}.h-75-m{height:75%}.h-100-m{height:100%}.min-h-100-m{min-height:100%}.vh-25-m{height:25vh}.vh-50-m{height:50vh}.vh-75-m{height:75vh}.vh-100-m{height:100vh}.min-vh-100-m{min-height:100vh}.h-auto-m{height:auto}.h-inherit-m{height:inherit}}@media screen and (min-width:60em){.h1-l{height:1rem}.h2-l{height:2rem}.h3-l{height:4rem}.h4-l{height:8rem}.h5-l{height:16rem}.h-25-l{height:25%}.h-50-l{height:50%}.h-75-l{height:75%}.h-100-l{height:100%}.min-h-100-l{min-height:100%}.vh-25-l{height:25vh}.vh-50-l{height:50vh}.vh-75-l{height:75vh}.vh-100-l{height:100vh}.min-vh-100-l{min-height:100vh}.h-auto-l{height:auto}.h-inherit-l{height:inherit}}.tracked{letter-spacing:.1em}.tracked-tight{letter-spacing:-.05em}.tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.tracked-ns{letter-spacing:.1em}.tracked-tight-ns{letter-spacing:-.05em}.tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em) and (max-width:60em){.tracked-m{letter-spacing:.1em}.tracked-tight-m{letter-spacing:-.05em}.tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.tracked-l{letter-spacing:.1em}.tracked-tight-l{letter-spacing:-.05em}.tracked-mega-l{letter-spacing:.25em}}.lh-solid{line-height:1}.lh-title{line-height:1.25}.lh-copy{line-height:1.5}@media screen and (min-width:30em){.lh-solid-ns{line-height:1}.lh-title-ns{line-height:1.25}.lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em) and (max-width:60em){.lh-solid-m{line-height:1}.lh-title-m{line-height:1.25}.lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.lh-solid-l{line-height:1}.lh-title-l{line-height:1.25}.lh-copy-l{line-height:1.5}}.link{text-decoration:none;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.link:link,.link:visited{-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.link:hover{-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.link:active{-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.link:focus{-webkit-transition:color .15s ease-in;transition:color .15s ease-in;outline:1px dotted currentColor}.list{list-style-type:none}.mw-100{max-width:100%}.mw1{max-width:1rem}.mw2{max-width:2rem}.mw3{max-width:4rem}.mw4{max-width:8rem}.mw5{max-width:16rem}.mw6{max-width:32rem}.mw7{max-width:48rem}.mw8{max-width:64rem}.mw9{max-width:96rem}.mw-none{max-width:none}@media screen and (min-width:30em){.mw-100-ns{max-width:100%}.mw1-ns{max-width:1rem}.mw2-ns{max-width:2rem}.mw3-ns{max-width:4rem}.mw4-ns{max-width:8rem}.mw5-ns{max-width:16rem}.mw6-ns{max-width:32rem}.mw7-ns{max-width:48rem}.mw8-ns{max-width:64rem}.mw9-ns{max-width:96rem}.mw-none-ns{max-width:none}}@media screen and (min-width:30em) and (max-width:60em){.mw-100-m{max-width:100%}.mw1-m{max-width:1rem}.mw2-m{max-width:2rem}.mw3-m{max-width:4rem}.mw4-m{max-width:8rem}.mw5-m{max-width:16rem}.mw6-m{max-width:32rem}.mw7-m{max-width:48rem}.mw8-m{max-width:64rem}.mw9-m{max-width:96rem}.mw-none-m{max-width:none}}@media screen and (min-width:60em){.mw-100-l{max-width:100%}.mw1-l{max-width:1rem}.mw2-l{max-width:2rem}.mw3-l{max-width:4rem}.mw4-l{max-width:8rem}.mw5-l{max-width:16rem}.mw6-l{max-width:32rem}.mw7-l{max-width:48rem}.mw8-l{max-width:64rem}.mw9-l{max-width:96rem}.mw-none-l{max-width:none}}.w1{width:1rem}.w2{width:2rem}.w3{width:4rem}.w4{width:8rem}.w5{width:16rem}.w-10{width:10%}.w-20{width:20%}.w-25{width:25%}.w-30{width:30%}.w-33{width:33%}.w-34{width:34%}.w-40{width:40%}.w-50{width:50%}.w-60{width:60%}.w-70{width:70%}.w-75{width:75%}.w-80{width:80%}.w-90{width:90%}.w-100{width:100%}.w-third{width:33.33333%}.w-two-thirds{width:66.66667%}.w-auto{width:auto}@media screen and (min-width:30em){.w1-ns{width:1rem}.w2-ns{width:2rem}.w3-ns{width:4rem}.w4-ns{width:8rem}.w5-ns{width:16rem}.w-10-ns{width:10%}.w-20-ns{width:20%}.w-25-ns{width:25%}.w-30-ns{width:30%}.w-33-ns{width:33%}.w-34-ns{width:34%}.w-40-ns{width:40%}.w-50-ns{width:50%}.w-60-ns{width:60%}.w-70-ns{width:70%}.w-75-ns{width:75%}.w-80-ns{width:80%}.w-90-ns{width:90%}.w-100-ns{width:100%}.w-third-ns{width:33.33333%}.w-two-thirds-ns{width:66.66667%}.w-auto-ns{width:auto}}@media screen and (min-width:30em) and (max-width:60em){.w1-m{width:1rem}.w2-m{width:2rem}.w3-m{width:4rem}.w4-m{width:8rem}.w5-m{width:16rem}.w-10-m{width:10%}.w-20-m{width:20%}.w-25-m{width:25%}.w-30-m{width:30%}.w-33-m{width:33%}.w-34-m{width:34%}.w-40-m{width:40%}.w-50-m{width:50%}.w-60-m{width:60%}.w-70-m{width:70%}.w-75-m{width:75%}.w-80-m{width:80%}.w-90-m{width:90%}.w-100-m{width:100%}.w-third-m{width:33.33333%}.w-two-thirds-m{width:66.66667%}.w-auto-m{width:auto}}@media screen and (min-width:60em){.w1-l{width:1rem}.w2-l{width:2rem}.w3-l{width:4rem}.w4-l{width:8rem}.w5-l{width:16rem}.w-10-l{width:10%}.w-20-l{width:20%}.w-25-l{width:25%}.w-30-l{width:30%}.w-33-l{width:33%}.w-34-l{width:34%}.w-40-l{width:40%}.w-50-l{width:50%}.w-60-l{width:60%}.w-70-l{width:70%}.w-75-l{width:75%}.w-80-l{width:80%}.w-90-l{width:90%}.w-100-l{width:100%}.w-third-l{width:33.33333%}.w-two-thirds-l{width:66.66667%}.w-auto-l{width:auto}}.overflow-visible{overflow:visible}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.overflow-x-visible{overflow-x:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-visible{overflow-y:visible}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.overflow-visible-ns{overflow:visible}.overflow-hidden-ns{overflow:hidden}.overflow-scroll-ns{overflow:scroll}.overflow-auto-ns{overflow:auto}.overflow-x-visible-ns{overflow-x:visible}.overflow-x-hidden-ns{overflow-x:hidden}.overflow-x-scroll-ns{overflow-x:scroll}.overflow-x-auto-ns{overflow-x:auto}.overflow-y-visible-ns{overflow-y:visible}.overflow-y-hidden-ns{overflow-y:hidden}.overflow-y-scroll-ns{overflow-y:scroll}.overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em) and (max-width:60em){.overflow-visible-m{overflow:visible}.overflow-hidden-m{overflow:hidden}.overflow-scroll-m{overflow:scroll}.overflow-auto-m{overflow:auto}.overflow-x-visible-m{overflow-x:visible}.overflow-x-hidden-m{overflow-x:hidden}.overflow-x-scroll-m{overflow-x:scroll}.overflow-x-auto-m{overflow-x:auto}.overflow-y-visible-m{overflow-y:visible}.overflow-y-hidden-m{overflow-y:hidden}.overflow-y-scroll-m{overflow-y:scroll}.overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.overflow-visible-l{overflow:visible}.overflow-hidden-l{overflow:hidden}.overflow-scroll-l{overflow:scroll}.overflow-auto-l{overflow:auto}.overflow-x-visible-l{overflow-x:visible}.overflow-x-hidden-l{overflow-x:hidden}.overflow-x-scroll-l{overflow-x:scroll}.overflow-x-auto-l{overflow-x:auto}.overflow-y-visible-l{overflow-y:visible}.overflow-y-hidden-l{overflow-y:hidden}.overflow-y-scroll-l{overflow-y:scroll}.overflow-y-auto-l{overflow-y:auto}}.static{position:static}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}@media screen and (min-width:30em){.static-ns{position:static}.relative-ns{position:relative}.absolute-ns{position:absolute}.fixed-ns{position:fixed}}@media screen and (min-width:30em) and (max-width:60em){.static-m{position:static}.relative-m{position:relative}.absolute-m{position:absolute}.fixed-m{position:fixed}}@media screen and (min-width:60em){.static-l{position:static}.relative-l{position:relative}.absolute-l{position:absolute}.fixed-l{position:fixed}}.o-100{opacity:1}.o-90{opacity:.9}.o-80{opacity:.8}.o-70{opacity:.7}.o-60{opacity:.6}.o-50{opacity:.5}.o-40{opacity:.4}.o-30{opacity:.3}.o-20{opacity:.2}.o-10{opacity:.1}.o-05{opacity:.05}.o-025{opacity:.025}.o-0{opacity:0}.black-90{color:rgba(0,0,0,.9)}.black-80{color:rgba(0,0,0,.8)}.black-70{color:rgba(0,0,0,.7)}.black-60{color:rgba(0,0,0,.6)}.black-50{color:rgba(0,0,0,.5)}.black-40{color:rgba(0,0,0,.4)}.black-30{color:rgba(0,0,0,.3)}.black-20{color:rgba(0,0,0,.2)}.black-10{color:rgba(0,0,0,.1)}.black-05{color:rgba(0,0,0,.05)}.white-90{color:rgba(255,255,255,.9)}.white-80{color:rgba(255,255,255,.8)}.white-70{color:rgba(255,255,255,.7)}.white-60{color:rgba(255,255,255,.6)}.white-50{color:rgba(255,255,255,.5)}.white-40{color:rgba(255,255,255,.4)}.white-30{color:rgba(255,255,255,.3)}.white-20{color:rgba(255,255,255,.2)}.white-10{color:rgba(255,255,255,.1)}.black{color:#000}.near-black{color:#111}.dark-gray{color:#333}.mid-gray{color:#555}.gray{color:#777}.silver{color:#999}.light-silver{color:#aaa}.moon-gray{color:#ccc}.light-gray{color:#eee}.near-white{color:#f4f4f4}.white{color:#fff}.dark-red{color:#e7040f}.red{color:#ff4136}.light-red{color:#ff725c}.orange{color:#ff6300}.gold{color:#ffb700}.yellow{color:gold}.light-yellow{color:#fbf1a9}.purple{color:#5e2ca5}.light-purple{color:#a463f2}.dark-pink{color:#d5008f}.hot-pink{color:#ff41b4}.pink{color:#ff80cc}.light-pink{color:#ffa3d7}.dark-green{color:#137752}.green{color:#19a974}.light-green{color:#9eebcf}.navy{color:#001b44}.dark-blue{color:#00449e}.blue{color:#0594cb}.light-blue{color:#96ccff}.lightest-blue{color:#cdecff}.washed-blue{color:#f6fffe}.washed-green{color:#e8fdf5}.washed-yellow{color:#fffceb}.washed-red{color:#ffdfdf}.color-inherit{color:inherit}.bg-black-90{background-color:rgba(0,0,0,.9)}.bg-black-80{background-color:rgba(0,0,0,.8)}.bg-black-70{background-color:rgba(0,0,0,.7)}.bg-black-60{background-color:rgba(0,0,0,.6)}.bg-black-50{background-color:rgba(0,0,0,.5)}.bg-black-40{background-color:rgba(0,0,0,.4)}.bg-black-30{background-color:rgba(0,0,0,.3)}.bg-black-20{background-color:rgba(0,0,0,.2)}.bg-black-10{background-color:rgba(0,0,0,.1)}.bg-black-05{background-color:rgba(0,0,0,.05)}.bg-white-90{background-color:rgba(255,255,255,.9)}.bg-white-80{background-color:rgba(255,255,255,.8)}.bg-white-70{background-color:rgba(255,255,255,.7)}.bg-white-60{background-color:rgba(255,255,255,.6)}.bg-white-50{background-color:rgba(255,255,255,.5)}.bg-white-40{background-color:rgba(255,255,255,.4)}.bg-white-30{background-color:rgba(255,255,255,.3)}.bg-white-20{background-color:rgba(255,255,255,.2)}.bg-white-10{background-color:rgba(255,255,255,.1)}.bg-black{background-color:#000}.bg-near-black{background-color:#111}.bg-dark-gray{background-color:#333}.bg-mid-gray{background-color:#555}.bg-gray{background-color:#777}.bg-silver{background-color:#999}.bg-light-silver{background-color:#aaa}.bg-moon-gray{background-color:#ccc}.bg-light-gray{background-color:#eee}.bg-near-white{background-color:#f4f4f4}.bg-white{background-color:#fff}.bg-transparent{background-color:transparent}.bg-dark-red{background-color:#e7040f}.bg-red{background-color:#ff4136}.bg-light-red{background-color:#ff725c}.bg-orange{background-color:#ff6300}.bg-gold{background-color:#ffb700}.bg-yellow{background-color:gold}.bg-light-yellow{background-color:#fbf1a9}.bg-purple{background-color:#5e2ca5}.bg-light-purple{background-color:#a463f2}.bg-dark-pink{background-color:#d5008f}.bg-hot-pink{background-color:#ff41b4}.bg-pink{background-color:#ff80cc}.bg-light-pink{background-color:#ffa3d7}.bg-dark-green{background-color:#137752}.bg-green{background-color:#19a974}.bg-light-green{background-color:#9eebcf}.bg-navy{background-color:#001b44}.bg-dark-blue{background-color:#00449e}.bg-blue{background-color:#0594cb}.bg-light-blue{background-color:#96ccff}.bg-lightest-blue{background-color:#cdecff}.bg-washed-blue{background-color:#f6fffe}.bg-washed-green{background-color:#e8fdf5}.bg-washed-yellow{background-color:#fffceb}.bg-washed-red{background-color:#ffdfdf}.bg-inherit{background-color:inherit}.hover-black:hover,.hover-black:focus{color:#000}.hover-near-black:hover,.hover-near-black:focus{color:#111}.hover-dark-gray:hover,.hover-dark-gray:focus{color:#333}.hover-mid-gray:hover,.hover-mid-gray:focus{color:#555}.hover-gray:hover,.hover-gray:focus{color:#777}.hover-silver:hover,.hover-silver:focus{color:#999}.hover-light-silver:hover,.hover-light-silver:focus{color:#aaa}.hover-moon-gray:hover,.hover-moon-gray:focus{color:#ccc}.hover-light-gray:hover,.hover-light-gray:focus{color:#eee}.hover-near-white:hover,.hover-near-white:focus{color:#f4f4f4}.hover-white:hover,.hover-white:focus{color:#fff}.hover-black-90:hover,.hover-black-90:focus{color:rgba(0,0,0,.9)}.hover-black-80:hover,.hover-black-80:focus{color:rgba(0,0,0,.8)}.hover-black-70:hover,.hover-black-70:focus{color:rgba(0,0,0,.7)}.hover-black-60:hover,.hover-black-60:focus{color:rgba(0,0,0,.6)}.hover-black-50:hover,.hover-black-50:focus{color:rgba(0,0,0,.5)}.hover-black-40:hover,.hover-black-40:focus{color:rgba(0,0,0,.4)}.hover-black-30:hover,.hover-black-30:focus{color:rgba(0,0,0,.3)}.hover-black-20:hover,.hover-black-20:focus{color:rgba(0,0,0,.2)}.hover-black-10:hover,.hover-black-10:focus{color:rgba(0,0,0,.1)}.hover-white-90:hover,.hover-white-90:focus{color:rgba(255,255,255,.9)}.hover-white-80:hover,.hover-white-80:focus{color:rgba(255,255,255,.8)}.hover-white-70:hover,.hover-white-70:focus{color:rgba(255,255,255,.7)}.hover-white-60:hover,.hover-white-60:focus{color:rgba(255,255,255,.6)}.hover-white-50:hover,.hover-white-50:focus{color:rgba(255,255,255,.5)}.hover-white-40:hover,.hover-white-40:focus{color:rgba(255,255,255,.4)}.hover-white-30:hover,.hover-white-30:focus{color:rgba(255,255,255,.3)}.hover-white-20:hover,.hover-white-20:focus{color:rgba(255,255,255,.2)}.hover-white-10:hover,.hover-white-10:focus{color:rgba(255,255,255,.1)}.hover-inherit:hover,.hover-inherit:focus{color:inherit}.hover-bg-black:hover,.hover-bg-black:focus{background-color:#000}.hover-bg-near-black:hover,.hover-bg-near-black:focus{background-color:#111}.hover-bg-dark-gray:hover,.hover-bg-dark-gray:focus{background-color:#333}.hover-bg-mid-gray:hover,.hover-bg-mid-gray:focus{background-color:#555}.hover-bg-gray:hover,.hover-bg-gray:focus{background-color:#777}.hover-bg-silver:hover,.hover-bg-silver:focus{background-color:#999}.hover-bg-light-silver:hover,.hover-bg-light-silver:focus{background-color:#aaa}.hover-bg-moon-gray:hover,.hover-bg-moon-gray:focus{background-color:#ccc}.hover-bg-light-gray:hover,.hover-bg-light-gray:focus{background-color:#eee}.hover-bg-near-white:hover,.hover-bg-near-white:focus{background-color:#f4f4f4}.hover-bg-white:hover,.hover-bg-white:focus{background-color:#fff}.hover-bg-transparent:hover,.hover-bg-transparent:focus{background-color:transparent}.hover-bg-black-90:hover,.hover-bg-black-90:focus{background-color:rgba(0,0,0,.9)}.hover-bg-black-80:hover,.hover-bg-black-80:focus{background-color:rgba(0,0,0,.8)}.hover-bg-black-70:hover,.hover-bg-black-70:focus{background-color:rgba(0,0,0,.7)}.hover-bg-black-60:hover,.hover-bg-black-60:focus{background-color:rgba(0,0,0,.6)}.hover-bg-black-50:hover,.hover-bg-black-50:focus{background-color:rgba(0,0,0,.5)}.hover-bg-black-40:hover,.hover-bg-black-40:focus{background-color:rgba(0,0,0,.4)}.hover-bg-black-30:hover,.hover-bg-black-30:focus{background-color:rgba(0,0,0,.3)}.hover-bg-black-20:hover,.hover-bg-black-20:focus{background-color:rgba(0,0,0,.2)}.hover-bg-black-10:hover,.hover-bg-black-10:focus{background-color:rgba(0,0,0,.1)}.hover-bg-white-90:hover,.hover-bg-white-90:focus{background-color:rgba(255,255,255,.9)}.hover-bg-white-80:hover,.hover-bg-white-80:focus{background-color:rgba(255,255,255,.8)}.hover-bg-white-70:hover,.hover-bg-white-70:focus{background-color:rgba(255,255,255,.7)}.hover-bg-white-60:hover,.hover-bg-white-60:focus{background-color:rgba(255,255,255,.6)}.hover-bg-white-50:hover,.hover-bg-white-50:focus{background-color:rgba(255,255,255,.5)}.hover-bg-white-40:hover,.hover-bg-white-40:focus{background-color:rgba(255,255,255,.4)}.hover-bg-white-30:hover,.hover-bg-white-30:focus{background-color:rgba(255,255,255,.3)}.hover-bg-white-20:hover,.hover-bg-white-20:focus{background-color:rgba(255,255,255,.2)}.hover-bg-white-10:hover,.hover-bg-white-10:focus{background-color:rgba(255,255,255,.1)}.hover-dark-red:hover,.hover-dark-red:focus{color:#e7040f}.hover-red:hover,.hover-red:focus{color:#ff4136}.hover-light-red:hover,.hover-light-red:focus{color:#ff725c}.hover-orange:hover,.hover-orange:focus{color:#ff6300}.hover-gold:hover,.hover-gold:focus{color:#ffb700}.hover-yellow:hover,.hover-yellow:focus{color:gold}.hover-light-yellow:hover,.hover-light-yellow:focus{color:#fbf1a9}.hover-purple:hover,.hover-purple:focus{color:#5e2ca5}.hover-light-purple:hover,.hover-light-purple:focus{color:#a463f2}.hover-dark-pink:hover,.hover-dark-pink:focus{color:#d5008f}.hover-hot-pink:hover,.hover-hot-pink:focus{color:#ff41b4}.hover-pink:hover,.hover-pink:focus{color:#ff80cc}.hover-light-pink:hover,.hover-light-pink:focus{color:#ffa3d7}.hover-dark-green:hover,.hover-dark-green:focus{color:#137752}.hover-green:hover,.hover-green:focus{color:#19a974}.hover-light-green:hover,.hover-light-green:focus{color:#9eebcf}.hover-navy:hover,.hover-navy:focus{color:#001b44}.hover-dark-blue:hover,.hover-dark-blue:focus{color:#00449e}.hover-blue:hover,.hover-blue:focus{color:#0594cb}.hover-light-blue:hover,.hover-light-blue:focus{color:#96ccff}.hover-lightest-blue:hover,.hover-lightest-blue:focus{color:#cdecff}.hover-washed-blue:hover,.hover-washed-blue:focus{color:#f6fffe}.hover-washed-green:hover,.hover-washed-green:focus{color:#e8fdf5}.hover-washed-yellow:hover,.hover-washed-yellow:focus{color:#fffceb}.hover-washed-red:hover,.hover-washed-red:focus{color:#ffdfdf}.hover-bg-dark-red:hover,.hover-bg-dark-red:focus{background-color:#e7040f}.hover-bg-red:hover,.hover-bg-red:focus{background-color:#ff4136}.hover-bg-light-red:hover,.hover-bg-light-red:focus{background-color:#ff725c}.hover-bg-orange:hover,.hover-bg-orange:focus{background-color:#ff6300}.hover-bg-gold:hover,.hover-bg-gold:focus{background-color:#ffb700}.hover-bg-yellow:hover,.hover-bg-yellow:focus{background-color:gold}.hover-bg-light-yellow:hover,.hover-bg-light-yellow:focus{background-color:#fbf1a9}.hover-bg-purple:hover,.hover-bg-purple:focus{background-color:#5e2ca5}.hover-bg-light-purple:hover,.hover-bg-light-purple:focus{background-color:#a463f2}.hover-bg-dark-pink:hover,.hover-bg-dark-pink:focus{background-color:#d5008f}.hover-bg-hot-pink:hover,.hover-bg-hot-pink:focus{background-color:#ff41b4}.hover-bg-pink:hover,.hover-bg-pink:focus{background-color:#ff80cc}.hover-bg-light-pink:hover,.hover-bg-light-pink:focus{background-color:#ffa3d7}.hover-bg-dark-green:hover,.hover-bg-dark-green:focus{background-color:#137752}.hover-bg-green:hover,.hover-bg-green:focus{background-color:#19a974}.hover-bg-light-green:hover,.hover-bg-light-green:focus{background-color:#9eebcf}.hover-bg-navy:hover,.hover-bg-navy:focus{background-color:#001b44}.hover-bg-dark-blue:hover,.hover-bg-dark-blue:focus{background-color:#00449e}.hover-bg-blue:hover,.hover-bg-blue:focus{background-color:#0594cb}.hover-bg-light-blue:hover,.hover-bg-light-blue:focus{background-color:#96ccff}.hover-bg-lightest-blue:hover,.hover-bg-lightest-blue:focus{background-color:#cdecff}.hover-bg-washed-blue:hover,.hover-bg-washed-blue:focus{background-color:#f6fffe}.hover-bg-washed-green:hover,.hover-bg-washed-green:focus{background-color:#e8fdf5}.hover-bg-washed-yellow:hover,.hover-bg-washed-yellow:focus{background-color:#fffceb}.hover-bg-washed-red:hover,.hover-bg-washed-red:focus{background-color:#ffdfdf}.hover-bg-inherit:hover,.hover-bg-inherit:focus{background-color:inherit}.pa0{padding:0}.pa1{padding:.25rem}.pa2{padding:.5rem}.pa3{padding:1rem}.pa4{padding:2rem}.pa5{padding:4rem}.pa6{padding:8rem}.pa7{padding:16rem}.pl0{padding-left:0}.pl1{padding-left:.25rem}.pl2{padding-left:.5rem}.pl3{padding-left:1rem}.pl4{padding-left:2rem}.pl5{padding-left:4rem}.pl6{padding-left:8rem}.pl7{padding-left:16rem}.pr0{padding-right:0}.pr1{padding-right:.25rem}.pr2{padding-right:.5rem}.pr3{padding-right:1rem}.pr4{padding-right:2rem}.pr5{padding-right:4rem}.pr6{padding-right:8rem}.pr7{padding-right:16rem}.pb0{padding-bottom:0}.pb1{padding-bottom:.25rem}.pb2{padding-bottom:.5rem}.pb3{padding-bottom:1rem}.pb4{padding-bottom:2rem}.pb5{padding-bottom:4rem}.pb6{padding-bottom:8rem}.pb7{padding-bottom:16rem}.pt0{padding-top:0}.pt1{padding-top:.25rem}.pt2{padding-top:.5rem}.pt3{padding-top:1rem}.pt4{padding-top:2rem}.pt5{padding-top:4rem}.pt6{padding-top:8rem}.pt7{padding-top:16rem}.pv0{padding-top:0;padding-bottom:0}.pv1{padding-top:.25rem;padding-bottom:.25rem}.pv2{padding-top:.5rem;padding-bottom:.5rem}.pv3{padding-top:1rem;padding-bottom:1rem}.pv4{padding-top:2rem;padding-bottom:2rem}.pv5{padding-top:4rem;padding-bottom:4rem}.pv6{padding-top:8rem;padding-bottom:8rem}.pv7{padding-top:16rem;padding-bottom:16rem}.ph0{padding-left:0;padding-right:0}.ph1{padding-left:.25rem;padding-right:.25rem}.ph2{padding-left:.5rem;padding-right:.5rem}.ph3{padding-left:1rem;padding-right:1rem}.ph4{padding-left:2rem;padding-right:2rem}.ph5{padding-left:4rem;padding-right:4rem}.ph6{padding-left:8rem;padding-right:8rem}.ph7{padding-left:16rem;padding-right:16rem}.ma0{margin:0}.ma1{margin:.25rem}.ma2{margin:.5rem}.ma3{margin:1rem}.ma4{margin:2rem}.ma5{margin:4rem}.ma6{margin:8rem}.ma7{margin:16rem}.ml0{margin-left:0}.ml1{margin-left:.25rem}.ml2{margin-left:.5rem}.ml3{margin-left:1rem}.ml4{margin-left:2rem}.ml5{margin-left:4rem}.ml6{margin-left:8rem}.ml7{margin-left:16rem}.mr0{margin-right:0}.mr1{margin-right:.25rem}.mr2{margin-right:.5rem}.mr3{margin-right:1rem}.mr4{margin-right:2rem}.mr5{margin-right:4rem}.mr6{margin-right:8rem}.mr7{margin-right:16rem}.mb0{margin-bottom:0}.mb1{margin-bottom:.25rem}.mb2{margin-bottom:.5rem}.mb3{margin-bottom:1rem}.mb4{margin-bottom:2rem}.mb5{margin-bottom:4rem}.mb6{margin-bottom:8rem}.mb7{margin-bottom:16rem}.mt0{margin-top:0}.mt1{margin-top:.25rem}.mt2{margin-top:.5rem}.mt3{margin-top:1rem}.mt4{margin-top:2rem}.mt5{margin-top:4rem}.mt6{margin-top:8rem}.mt7{margin-top:16rem}.mv0{margin-top:0;margin-bottom:0}.mv1{margin-top:.25rem;margin-bottom:.25rem}.mv2{margin-top:.5rem;margin-bottom:.5rem}.mv3{margin-top:1rem;margin-bottom:1rem}.mv4{margin-top:2rem;margin-bottom:2rem}.mv5{margin-top:4rem;margin-bottom:4rem}.mv6{margin-top:8rem;margin-bottom:8rem}.mv7{margin-top:16rem;margin-bottom:16rem}.mh0{margin-left:0;margin-right:0}.mh1{margin-left:.25rem;margin-right:.25rem}.mh2{margin-left:.5rem;margin-right:.5rem}.mh3{margin-left:1rem;margin-right:1rem}.mh4{margin-left:2rem;margin-right:2rem}.mh5{margin-left:4rem;margin-right:4rem}.mh6{margin-left:8rem;margin-right:8rem}.mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.pa0-ns{padding:0}.pa1-ns{padding:.25rem}.pa2-ns{padding:.5rem}.pa3-ns{padding:1rem}.pa4-ns{padding:2rem}.pa5-ns{padding:4rem}.pa6-ns{padding:8rem}.pa7-ns{padding:16rem}.pl0-ns{padding-left:0}.pl1-ns{padding-left:.25rem}.pl2-ns{padding-left:.5rem}.pl3-ns{padding-left:1rem}.pl4-ns{padding-left:2rem}.pl5-ns{padding-left:4rem}.pl6-ns{padding-left:8rem}.pl7-ns{padding-left:16rem}.pr0-ns{padding-right:0}.pr1-ns{padding-right:.25rem}.pr2-ns{padding-right:.5rem}.pr3-ns{padding-right:1rem}.pr4-ns{padding-right:2rem}.pr5-ns{padding-right:4rem}.pr6-ns{padding-right:8rem}.pr7-ns{padding-right:16rem}.pb0-ns{padding-bottom:0}.pb1-ns{padding-bottom:.25rem}.pb2-ns{padding-bottom:.5rem}.pb3-ns{padding-bottom:1rem}.pb4-ns{padding-bottom:2rem}.pb5-ns{padding-bottom:4rem}.pb6-ns{padding-bottom:8rem}.pb7-ns{padding-bottom:16rem}.pt0-ns{padding-top:0}.pt1-ns{padding-top:.25rem}.pt2-ns{padding-top:.5rem}.pt3-ns{padding-top:1rem}.pt4-ns{padding-top:2rem}.pt5-ns{padding-top:4rem}.pt6-ns{padding-top:8rem}.pt7-ns{padding-top:16rem}.pv0-ns{padding-top:0;padding-bottom:0}.pv1-ns{padding-top:.25rem;padding-bottom:.25rem}.pv2-ns{padding-top:.5rem;padding-bottom:.5rem}.pv3-ns{padding-top:1rem;padding-bottom:1rem}.pv4-ns{padding-top:2rem;padding-bottom:2rem}.pv5-ns{padding-top:4rem;padding-bottom:4rem}.pv6-ns{padding-top:8rem;padding-bottom:8rem}.pv7-ns{padding-top:16rem;padding-bottom:16rem}.ph0-ns{padding-left:0;padding-right:0}.ph1-ns{padding-left:.25rem;padding-right:.25rem}.ph2-ns{padding-left:.5rem;padding-right:.5rem}.ph3-ns{padding-left:1rem;padding-right:1rem}.ph4-ns{padding-left:2rem;padding-right:2rem}.ph5-ns{padding-left:4rem;padding-right:4rem}.ph6-ns{padding-left:8rem;padding-right:8rem}.ph7-ns{padding-left:16rem;padding-right:16rem}.ma0-ns{margin:0}.ma1-ns{margin:.25rem}.ma2-ns{margin:.5rem}.ma3-ns{margin:1rem}.ma4-ns{margin:2rem}.ma5-ns{margin:4rem}.ma6-ns{margin:8rem}.ma7-ns{margin:16rem}.ml0-ns{margin-left:0}.ml1-ns{margin-left:.25rem}.ml2-ns{margin-left:.5rem}.ml3-ns{margin-left:1rem}.ml4-ns{margin-left:2rem}.ml5-ns{margin-left:4rem}.ml6-ns{margin-left:8rem}.ml7-ns{margin-left:16rem}.mr0-ns{margin-right:0}.mr1-ns{margin-right:.25rem}.mr2-ns{margin-right:.5rem}.mr3-ns{margin-right:1rem}.mr4-ns{margin-right:2rem}.mr5-ns{margin-right:4rem}.mr6-ns{margin-right:8rem}.mr7-ns{margin-right:16rem}.mb0-ns{margin-bottom:0}.mb1-ns{margin-bottom:.25rem}.mb2-ns{margin-bottom:.5rem}.mb3-ns{margin-bottom:1rem}.mb4-ns{margin-bottom:2rem}.mb5-ns{margin-bottom:4rem}.mb6-ns{margin-bottom:8rem}.mb7-ns{margin-bottom:16rem}.mt0-ns{margin-top:0}.mt1-ns{margin-top:.25rem}.mt2-ns{margin-top:.5rem}.mt3-ns{margin-top:1rem}.mt4-ns{margin-top:2rem}.mt5-ns{margin-top:4rem}.mt6-ns{margin-top:8rem}.mt7-ns{margin-top:16rem}.mv0-ns{margin-top:0;margin-bottom:0}.mv1-ns{margin-top:.25rem;margin-bottom:.25rem}.mv2-ns{margin-top:.5rem;margin-bottom:.5rem}.mv3-ns{margin-top:1rem;margin-bottom:1rem}.mv4-ns{margin-top:2rem;margin-bottom:2rem}.mv5-ns{margin-top:4rem;margin-bottom:4rem}.mv6-ns{margin-top:8rem;margin-bottom:8rem}.mv7-ns{margin-top:16rem;margin-bottom:16rem}.mh0-ns{margin-left:0;margin-right:0}.mh1-ns{margin-left:.25rem;margin-right:.25rem}.mh2-ns{margin-left:.5rem;margin-right:.5rem}.mh3-ns{margin-left:1rem;margin-right:1rem}.mh4-ns{margin-left:2rem;margin-right:2rem}.mh5-ns{margin-left:4rem;margin-right:4rem}.mh6-ns{margin-left:8rem;margin-right:8rem}.mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em) and (max-width:60em){.pa0-m{padding:0}.pa1-m{padding:.25rem}.pa2-m{padding:.5rem}.pa3-m{padding:1rem}.pa4-m{padding:2rem}.pa5-m{padding:4rem}.pa6-m{padding:8rem}.pa7-m{padding:16rem}.pl0-m{padding-left:0}.pl1-m{padding-left:.25rem}.pl2-m{padding-left:.5rem}.pl3-m{padding-left:1rem}.pl4-m{padding-left:2rem}.pl5-m{padding-left:4rem}.pl6-m{padding-left:8rem}.pl7-m{padding-left:16rem}.pr0-m{padding-right:0}.pr1-m{padding-right:.25rem}.pr2-m{padding-right:.5rem}.pr3-m{padding-right:1rem}.pr4-m{padding-right:2rem}.pr5-m{padding-right:4rem}.pr6-m{padding-right:8rem}.pr7-m{padding-right:16rem}.pb0-m{padding-bottom:0}.pb1-m{padding-bottom:.25rem}.pb2-m{padding-bottom:.5rem}.pb3-m{padding-bottom:1rem}.pb4-m{padding-bottom:2rem}.pb5-m{padding-bottom:4rem}.pb6-m{padding-bottom:8rem}.pb7-m{padding-bottom:16rem}.pt0-m{padding-top:0}.pt1-m{padding-top:.25rem}.pt2-m{padding-top:.5rem}.pt3-m{padding-top:1rem}.pt4-m{padding-top:2rem}.pt5-m{padding-top:4rem}.pt6-m{padding-top:8rem}.pt7-m{padding-top:16rem}.pv0-m{padding-top:0;padding-bottom:0}.pv1-m{padding-top:.25rem;padding-bottom:.25rem}.pv2-m{padding-top:.5rem;padding-bottom:.5rem}.pv3-m{padding-top:1rem;padding-bottom:1rem}.pv4-m{padding-top:2rem;padding-bottom:2rem}.pv5-m{padding-top:4rem;padding-bottom:4rem}.pv6-m{padding-top:8rem;padding-bottom:8rem}.pv7-m{padding-top:16rem;padding-bottom:16rem}.ph0-m{padding-left:0;padding-right:0}.ph1-m{padding-left:.25rem;padding-right:.25rem}.ph2-m{padding-left:.5rem;padding-right:.5rem}.ph3-m{padding-left:1rem;padding-right:1rem}.ph4-m{padding-left:2rem;padding-right:2rem}.ph5-m{padding-left:4rem;padding-right:4rem}.ph6-m{padding-left:8rem;padding-right:8rem}.ph7-m{padding-left:16rem;padding-right:16rem}.ma0-m{margin:0}.ma1-m{margin:.25rem}.ma2-m{margin:.5rem}.ma3-m{margin:1rem}.ma4-m{margin:2rem}.ma5-m{margin:4rem}.ma6-m{margin:8rem}.ma7-m{margin:16rem}.ml0-m{margin-left:0}.ml1-m{margin-left:.25rem}.ml2-m{margin-left:.5rem}.ml3-m{margin-left:1rem}.ml4-m{margin-left:2rem}.ml5-m{margin-left:4rem}.ml6-m{margin-left:8rem}.ml7-m{margin-left:16rem}.mr0-m{margin-right:0}.mr1-m{margin-right:.25rem}.mr2-m{margin-right:.5rem}.mr3-m{margin-right:1rem}.mr4-m{margin-right:2rem}.mr5-m{margin-right:4rem}.mr6-m{margin-right:8rem}.mr7-m{margin-right:16rem}.mb0-m{margin-bottom:0}.mb1-m{margin-bottom:.25rem}.mb2-m{margin-bottom:.5rem}.mb3-m{margin-bottom:1rem}.mb4-m{margin-bottom:2rem}.mb5-m{margin-bottom:4rem}.mb6-m{margin-bottom:8rem}.mb7-m{margin-bottom:16rem}.mt0-m{margin-top:0}.mt1-m{margin-top:.25rem}.mt2-m{margin-top:.5rem}.mt3-m{margin-top:1rem}.mt4-m{margin-top:2rem}.mt5-m{margin-top:4rem}.mt6-m{margin-top:8rem}.mt7-m{margin-top:16rem}.mv0-m{margin-top:0;margin-bottom:0}.mv1-m{margin-top:.25rem;margin-bottom:.25rem}.mv2-m{margin-top:.5rem;margin-bottom:.5rem}.mv3-m{margin-top:1rem;margin-bottom:1rem}.mv4-m{margin-top:2rem;margin-bottom:2rem}.mv5-m{margin-top:4rem;margin-bottom:4rem}.mv6-m{margin-top:8rem;margin-bottom:8rem}.mv7-m{margin-top:16rem;margin-bottom:16rem}.mh0-m{margin-left:0;margin-right:0}.mh1-m{margin-left:.25rem;margin-right:.25rem}.mh2-m{margin-left:.5rem;margin-right:.5rem}.mh3-m{margin-left:1rem;margin-right:1rem}.mh4-m{margin-left:2rem;margin-right:2rem}.mh5-m{margin-left:4rem;margin-right:4rem}.mh6-m{margin-left:8rem;margin-right:8rem}.mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.pa0-l{padding:0}.pa1-l{padding:.25rem}.pa2-l{padding:.5rem}.pa3-l{padding:1rem}.pa4-l{padding:2rem}.pa5-l{padding:4rem}.pa6-l{padding:8rem}.pa7-l{padding:16rem}.pl0-l{padding-left:0}.pl1-l{padding-left:.25rem}.pl2-l{padding-left:.5rem}.pl3-l{padding-left:1rem}.pl4-l{padding-left:2rem}.pl5-l{padding-left:4rem}.pl6-l{padding-left:8rem}.pl7-l{padding-left:16rem}.pr0-l{padding-right:0}.pr1-l{padding-right:.25rem}.pr2-l{padding-right:.5rem}.pr3-l{padding-right:1rem}.pr4-l{padding-right:2rem}.pr5-l{padding-right:4rem}.pr6-l{padding-right:8rem}.pr7-l{padding-right:16rem}.pb0-l{padding-bottom:0}.pb1-l{padding-bottom:.25rem}.pb2-l{padding-bottom:.5rem}.pb3-l{padding-bottom:1rem}.pb4-l{padding-bottom:2rem}.pb5-l{padding-bottom:4rem}.pb6-l{padding-bottom:8rem}.pb7-l{padding-bottom:16rem}.pt0-l{padding-top:0}.pt1-l{padding-top:.25rem}.pt2-l{padding-top:.5rem}.pt3-l{padding-top:1rem}.pt4-l{padding-top:2rem}.pt5-l{padding-top:4rem}.pt6-l{padding-top:8rem}.pt7-l{padding-top:16rem}.pv0-l{padding-top:0;padding-bottom:0}.pv1-l{padding-top:.25rem;padding-bottom:.25rem}.pv2-l{padding-top:.5rem;padding-bottom:.5rem}.pv3-l{padding-top:1rem;padding-bottom:1rem}.pv4-l{padding-top:2rem;padding-bottom:2rem}.pv5-l{padding-top:4rem;padding-bottom:4rem}.pv6-l{padding-top:8rem;padding-bottom:8rem}.pv7-l{padding-top:16rem;padding-bottom:16rem}.ph0-l{padding-left:0;padding-right:0}.ph1-l{padding-left:.25rem;padding-right:.25rem}.ph2-l{padding-left:.5rem;padding-right:.5rem}.ph3-l{padding-left:1rem;padding-right:1rem}.ph4-l{padding-left:2rem;padding-right:2rem}.ph5-l{padding-left:4rem;padding-right:4rem}.ph6-l{padding-left:8rem;padding-right:8rem}.ph7-l{padding-left:16rem;padding-right:16rem}.ma0-l{margin:0}.ma1-l{margin:.25rem}.ma2-l{margin:.5rem}.ma3-l{margin:1rem}.ma4-l{margin:2rem}.ma5-l{margin:4rem}.ma6-l{margin:8rem}.ma7-l{margin:16rem}.ml0-l{margin-left:0}.ml1-l{margin-left:.25rem}.ml2-l{margin-left:.5rem}.ml3-l{margin-left:1rem}.ml4-l{margin-left:2rem}.ml5-l{margin-left:4rem}.ml6-l{margin-left:8rem}.ml7-l{margin-left:16rem}.mr0-l{margin-right:0}.mr1-l{margin-right:.25rem}.mr2-l{margin-right:.5rem}.mr3-l{margin-right:1rem}.mr4-l{margin-right:2rem}.mr5-l{margin-right:4rem}.mr6-l{margin-right:8rem}.mr7-l{margin-right:16rem}.mb0-l{margin-bottom:0}.mb1-l{margin-bottom:.25rem}.mb2-l{margin-bottom:.5rem}.mb3-l{margin-bottom:1rem}.mb4-l{margin-bottom:2rem}.mb5-l{margin-bottom:4rem}.mb6-l{margin-bottom:8rem}.mb7-l{margin-bottom:16rem}.mt0-l{margin-top:0}.mt1-l{margin-top:.25rem}.mt2-l{margin-top:.5rem}.mt3-l{margin-top:1rem}.mt4-l{margin-top:2rem}.mt5-l{margin-top:4rem}.mt6-l{margin-top:8rem}.mt7-l{margin-top:16rem}.mv0-l{margin-top:0;margin-bottom:0}.mv1-l{margin-top:.25rem;margin-bottom:.25rem}.mv2-l{margin-top:.5rem;margin-bottom:.5rem}.mv3-l{margin-top:1rem;margin-bottom:1rem}.mv4-l{margin-top:2rem;margin-bottom:2rem}.mv5-l{margin-top:4rem;margin-bottom:4rem}.mv6-l{margin-top:8rem;margin-bottom:8rem}.mv7-l{margin-top:16rem;margin-bottom:16rem}.mh0-l{margin-left:0;margin-right:0}.mh1-l{margin-left:.25rem;margin-right:.25rem}.mh2-l{margin-left:.5rem;margin-right:.5rem}.mh3-l{margin-left:1rem;margin-right:1rem}.mh4-l{margin-left:2rem;margin-right:2rem}.mh5-l{margin-left:4rem;margin-right:4rem}.mh6-l{margin-left:8rem;margin-right:8rem}.mh7-l{margin-left:16rem;margin-right:16rem}}.na1{margin:-.25rem}.na2{margin:-.5rem}.na3{margin:-1rem}.na4{margin:-2rem}.na5{margin:-4rem}.na6{margin:-8rem}.na7{margin:-16rem}.nl1{margin-left:-.25rem}.nl2{margin-left:-.5rem}.nl3{margin-left:-1rem}.nl4{margin-left:-2rem}.nl5{margin-left:-4rem}.nl6{margin-left:-8rem}.nl7{margin-left:-16rem}.nr1{margin-right:-.25rem}.nr2{margin-right:-.5rem}.nr3{margin-right:-1rem}.nr4{margin-right:-2rem}.nr5{margin-right:-4rem}.nr6{margin-right:-8rem}.nr7{margin-right:-16rem}.nb1{margin-bottom:-.25rem}.nb2{margin-bottom:-.5rem}.nb3{margin-bottom:-1rem}.nb4{margin-bottom:-2rem}.nb5{margin-bottom:-4rem}.nb6{margin-bottom:-8rem}.nb7{margin-bottom:-16rem}.nt1{margin-top:-.25rem}.nt2{margin-top:-.5rem}.nt3{margin-top:-1rem}.nt4{margin-top:-2rem}.nt5{margin-top:-4rem}.nt6{margin-top:-8rem}.nt7{margin-top:-16rem}@media screen and (min-width:30em){.na1-ns{margin:-.25rem}.na2-ns{margin:-.5rem}.na3-ns{margin:-1rem}.na4-ns{margin:-2rem}.na5-ns{margin:-4rem}.na6-ns{margin:-8rem}.na7-ns{margin:-16rem}.nl1-ns{margin-left:-.25rem}.nl2-ns{margin-left:-.5rem}.nl3-ns{margin-left:-1rem}.nl4-ns{margin-left:-2rem}.nl5-ns{margin-left:-4rem}.nl6-ns{margin-left:-8rem}.nl7-ns{margin-left:-16rem}.nr1-ns{margin-right:-.25rem}.nr2-ns{margin-right:-.5rem}.nr3-ns{margin-right:-1rem}.nr4-ns{margin-right:-2rem}.nr5-ns{margin-right:-4rem}.nr6-ns{margin-right:-8rem}.nr7-ns{margin-right:-16rem}.nb1-ns{margin-bottom:-.25rem}.nb2-ns{margin-bottom:-.5rem}.nb3-ns{margin-bottom:-1rem}.nb4-ns{margin-bottom:-2rem}.nb5-ns{margin-bottom:-4rem}.nb6-ns{margin-bottom:-8rem}.nb7-ns{margin-bottom:-16rem}.nt1-ns{margin-top:-.25rem}.nt2-ns{margin-top:-.5rem}.nt3-ns{margin-top:-1rem}.nt4-ns{margin-top:-2rem}.nt5-ns{margin-top:-4rem}.nt6-ns{margin-top:-8rem}.nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em) and (max-width:60em){.na1-m{margin:-.25rem}.na2-m{margin:-.5rem}.na3-m{margin:-1rem}.na4-m{margin:-2rem}.na5-m{margin:-4rem}.na6-m{margin:-8rem}.na7-m{margin:-16rem}.nl1-m{margin-left:-.25rem}.nl2-m{margin-left:-.5rem}.nl3-m{margin-left:-1rem}.nl4-m{margin-left:-2rem}.nl5-m{margin-left:-4rem}.nl6-m{margin-left:-8rem}.nl7-m{margin-left:-16rem}.nr1-m{margin-right:-.25rem}.nr2-m{margin-right:-.5rem}.nr3-m{margin-right:-1rem}.nr4-m{margin-right:-2rem}.nr5-m{margin-right:-4rem}.nr6-m{margin-right:-8rem}.nr7-m{margin-right:-16rem}.nb1-m{margin-bottom:-.25rem}.nb2-m{margin-bottom:-.5rem}.nb3-m{margin-bottom:-1rem}.nb4-m{margin-bottom:-2rem}.nb5-m{margin-bottom:-4rem}.nb6-m{margin-bottom:-8rem}.nb7-m{margin-bottom:-16rem}.nt1-m{margin-top:-.25rem}.nt2-m{margin-top:-.5rem}.nt3-m{margin-top:-1rem}.nt4-m{margin-top:-2rem}.nt5-m{margin-top:-4rem}.nt6-m{margin-top:-8rem}.nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.na1-l{margin:-.25rem}.na2-l{margin:-.5rem}.na3-l{margin:-1rem}.na4-l{margin:-2rem}.na5-l{margin:-4rem}.na6-l{margin:-8rem}.na7-l{margin:-16rem}.nl1-l{margin-left:-.25rem}.nl2-l{margin-left:-.5rem}.nl3-l{margin-left:-1rem}.nl4-l{margin-left:-2rem}.nl5-l{margin-left:-4rem}.nl6-l{margin-left:-8rem}.nl7-l{margin-left:-16rem}.nr1-l{margin-right:-.25rem}.nr2-l{margin-right:-.5rem}.nr3-l{margin-right:-1rem}.nr4-l{margin-right:-2rem}.nr5-l{margin-right:-4rem}.nr6-l{margin-right:-8rem}.nr7-l{margin-right:-16rem}.nb1-l{margin-bottom:-.25rem}.nb2-l{margin-bottom:-.5rem}.nb3-l{margin-bottom:-1rem}.nb4-l{margin-bottom:-2rem}.nb5-l{margin-bottom:-4rem}.nb6-l{margin-bottom:-8rem}.nb7-l{margin-bottom:-16rem}.nt1-l{margin-top:-.25rem}.nt2-l{margin-top:-.5rem}.nt3-l{margin-top:-1rem}.nt4-l{margin-top:-2rem}.nt5-l{margin-top:-4rem}.nt6-l{margin-top:-8rem}.nt7-l{margin-top:-16rem}}.collapse{border-collapse:collapse;border-spacing:0}.striped--light-silver:nth-child(odd){background-color:#aaa}.striped--moon-gray:nth-child(odd){background-color:#ccc}.striped--light-gray:nth-child(odd){background-color:#eee}.striped--near-white:nth-child(odd){background-color:#f4f4f4}.stripe-light:nth-child(odd){background-color:rgba(255,255,255,.1)}.stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.strike{text-decoration:line-through}.underline{text-decoration:underline}.no-underline{text-decoration:none}@media screen and (min-width:30em){.strike-ns{text-decoration:line-through}.underline-ns{text-decoration:underline}.no-underline-ns{text-decoration:none}}@media screen and (min-width:30em) and (max-width:60em){.strike-m{text-decoration:line-through}.underline-m{text-decoration:underline}.no-underline-m{text-decoration:none}}@media screen and (min-width:60em){.strike-l{text-decoration:line-through}.underline-l{text-decoration:underline}.no-underline-l{text-decoration:none}}.tl{text-align:left}.tr{text-align:right}.tc{text-align:center}.tj{text-align:justify}@media screen and (min-width:30em){.tl-ns{text-align:left}.tr-ns{text-align:right}.tc-ns{text-align:center}.tj-ns{text-align:justify}}@media screen and (min-width:30em) and (max-width:60em){.tl-m{text-align:left}.tr-m{text-align:right}.tc-m{text-align:center}.tj-m{text-align:justify}}@media screen and (min-width:60em){.tl-l{text-align:left}.tr-l{text-align:right}.tc-l{text-align:center}.tj-l{text-align:justify}}.ttc{text-transform:capitalize}.ttl{text-transform:lowercase}.ttu{text-transform:uppercase}.ttn{text-transform:none}@media screen and (min-width:30em){.ttc-ns{text-transform:capitalize}.ttl-ns{text-transform:lowercase}.ttu-ns{text-transform:uppercase}.ttn-ns{text-transform:none}}@media screen and (min-width:30em) and (max-width:60em){.ttc-m{text-transform:capitalize}.ttl-m{text-transform:lowercase}.ttu-m{text-transform:uppercase}.ttn-m{text-transform:none}}@media screen and (min-width:60em){.ttc-l{text-transform:capitalize}.ttl-l{text-transform:lowercase}.ttu-l{text-transform:uppercase}.ttn-l{text-transform:none}}.f-6,.f-headline{font-size:6rem}.f-5,.f-subheadline{font-size:5rem}.f1{font-size:3rem}.f2{font-size:2.25rem}.f3{font-size:1.5rem}.f4{font-size:1.25rem}.f5{font-size:1rem}.f6{font-size:.875rem}.f7{font-size:.75rem}@media screen and (min-width:30em){.f-6-ns,.f-headline-ns{font-size:6rem}.f-5-ns,.f-subheadline-ns{font-size:5rem}.f1-ns{font-size:3rem}.f2-ns{font-size:2.25rem}.f3-ns{font-size:1.5rem}.f4-ns{font-size:1.25rem}.f5-ns{font-size:1rem}.f6-ns{font-size:.875rem}.f7-ns{font-size:.75rem}}@media screen and (min-width:30em) and (max-width:60em){.f-6-m,.f-headline-m{font-size:6rem}.f-5-m,.f-subheadline-m{font-size:5rem}.f1-m{font-size:3rem}.f2-m{font-size:2.25rem}.f3-m{font-size:1.5rem}.f4-m{font-size:1.25rem}.f5-m{font-size:1rem}.f6-m{font-size:.875rem}.f7-m{font-size:.75rem}}@media screen and (min-width:60em){.f-6-l,.f-headline-l{font-size:6rem}.f-5-l,.f-subheadline-l{font-size:5rem}.f1-l{font-size:3rem}.f2-l{font-size:2.25rem}.f3-l{font-size:1.5rem}.f4-l{font-size:1.25rem}.f5-l{font-size:1rem}.f6-l{font-size:.875rem}.f7-l{font-size:.75rem}}.measure{max-width:30em}.measure-wide{max-width:34em}.measure-narrow{max-width:20em}.indent{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps{-webkit-font-feature-settings:"c2sc";font-feature-settings:"c2sc";font-variant:small-caps}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media screen and (min-width:30em){.measure-ns{max-width:30em}.measure-wide-ns{max-width:34em}.measure-narrow-ns{max-width:20em}.indent-ns{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-ns{-webkit-font-feature-settings:"c2sc";font-feature-settings:"c2sc";font-variant:small-caps}.truncate-ns{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}@media screen and (min-width:30em) and (max-width:60em){.measure-m{max-width:30em}.measure-wide-m{max-width:34em}.measure-narrow-m{max-width:20em}.indent-m{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-m{-webkit-font-feature-settings:"c2sc";font-feature-settings:"c2sc";font-variant:small-caps}.truncate-m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}@media screen and (min-width:60em){.measure-l{max-width:30em}.measure-wide-l{max-width:34em}.measure-narrow-l{max-width:20em}.indent-l{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-l{-webkit-font-feature-settings:"c2sc";font-feature-settings:"c2sc";font-variant:small-caps}.truncate-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.overflow-container{overflow-y:scroll}.center{margin-right:auto;margin-left:auto}.mr-auto{margin-right:auto}.ml-auto{margin-left:auto}@media screen and (min-width:30em){.center-ns{margin-right:auto;margin-left:auto}.mr-auto-ns{margin-right:auto}.ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em) and (max-width:60em){.center-m{margin-right:auto;margin-left:auto}.mr-auto-m{margin-right:auto}.ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.center-l{margin-right:auto;margin-left:auto}.mr-auto-l{margin-right:auto}.ml-auto-l{margin-left:auto}}.clip{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}@media screen and (min-width:30em){.clip-ns{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:30em) and (max-width:60em){.clip-m{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:60em){.clip-l{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}.ws-normal{white-space:normal}.nowrap{white-space:nowrap}.pre{white-space:pre}@media screen and (min-width:30em){.ws-normal-ns{white-space:normal}.nowrap-ns{white-space:nowrap}.pre-ns{white-space:pre}}@media screen and (min-width:30em) and (max-width:60em){.ws-normal-m{white-space:normal}.nowrap-m{white-space:nowrap}.pre-m{white-space:pre}}@media screen and (min-width:60em){.ws-normal-l{white-space:normal}.nowrap-l{white-space:nowrap}.pre-l{white-space:pre}}.v-base{vertical-align:baseline}.v-mid{vertical-align:middle}.v-top{vertical-align:top}.v-btm{vertical-align:bottom}@media screen and (min-width:30em){.v-base-ns{vertical-align:baseline}.v-mid-ns{vertical-align:middle}.v-top-ns{vertical-align:top}.v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.v-base-m{vertical-align:baseline}.v-mid-m{vertical-align:middle}.v-top-m{vertical-align:top}.v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.v-base-l{vertical-align:baseline}.v-mid-l{vertical-align:middle}.v-top-l{vertical-align:top}.v-btm-l{vertical-align:bottom}}.dim{opacity:1;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.dim:hover,.dim:focus{opacity:.5;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.dim:active{opacity:.8;-webkit-transition:opacity .15s ease-out;transition:opacity .15s ease-out}.glow{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.glow:hover,.glow:focus{opacity:1;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.hide-child .child{opacity:0;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.hide-child:hover .child,.hide-child:focus .child,.hide-child:active .child{opacity:1;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.underline-hover:hover,.underline-hover:focus{text-decoration:underline}.grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-out;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.grow:hover,.grow:focus{-webkit-transform:scale(1.05);transform:scale(1.05)}.grow:active{-webkit-transform:scale(.90);transform:scale(.90)}.grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-in-out;transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.grow-large:hover,.grow-large:focus{-webkit-transform:scale(1.2);transform:scale(1.2)}.grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.pointer:hover{cursor:pointer}.shadow-hover{cursor:pointer;position:relative;-webkit-transition:all .5s cubic-bezier(0.165,0.84,0.44,1);transition:all .5s cubic-bezier(0.165,0.84,0.44,1)}.shadow-hover::after{content:'';-webkit-box-shadow:0 0 16px 2px rgba(0,0,0,.2);box-shadow:0 0 16px 2px rgba(0,0,0,.2);border-radius:inherit;opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;-webkit-transition:opacity .5s cubic-bezier(0.165,0.84,0.44,1);transition:opacity .5s cubic-bezier(0.165,0.84,0.44,1)}.shadow-hover:hover::after,.shadow-hover:focus::after{opacity:1}.bg-animate,.bg-animate:hover,.bg-animate:focus{-webkit-transition:background-color .15s ease-in-out;transition:background-color .15s ease-in-out}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}.z-4{z-index:4}.z-5{z-index:5}.z-999{z-index:999}.z-9999{z-index:9999}.z-max{z-index:2147483647}.z-inherit{z-index:inherit}.z-initial{z-index:auto;z-index:initial}.z-unset{z-index:unset}.nested-copy-line-height p,.nested-copy-line-height ul,.nested-copy-line-height ol{line-height:1.5}.nested-headline-line-height h1,.nested-headline-line-height h2,.nested-headline-line-height h3,.nested-headline-line-height h4,.nested-headline-line-height h5,.nested-headline-line-height h6{line-height:1.25}.nested-list-reset ul,.nested-list-reset ol{padding-left:0;margin-left:0;list-style-type:none}.nested-copy-indent p+p{text-indent:1em;margin-top:0;margin-bottom:0}.nested-copy-separator p+p{margin-top:1.5em}.nested-img img{width:100%;max-width:100%;display:block}.nested-links a{color:#0594cb;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.nested-links a:hover,.nested-links a:focus{color:#96ccff;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.header-link:after{position:relative;left:.5em;opacity:0;font-size:.8em;-moz-transition:opacity .2s ease-in-out .1s;-ms-transition:opacity .2s ease-in-out .1s}h2:hover .header-link,h3:hover .header-link,h4:hover .header-link,h5:hover .header-link,h6:hover .header-link{opacity:1}.animated{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}.animated-delay-1{-webkit-animation-delay:.5s;animation-delay:.5s}.note,.warning{border-left-width:4px;border-left-style:solid;position:relative;border-color:#0594cb;display:block}.note #exclamation-icon,.warning #exclamation-icon{fill:#0594cb;position:absolute;top:35%;left:-12px}.admonition-content{display:block;margin:0;padding:.125em 1em;margin-top:2em;margin-bottom:2em;overflow-x:auto;background-color:rgba(0,0,0,.05)}.hide-child-menu .child-menu{display:none}.hide-child-menu:hover .child-menu,.hide-child-menu:focus .child-menu,.hide-child-menu:active .child-menu{display:block}.documentation-copy h2{margin-top:3em}.documentation-copy h2.minor{font-size:inherit;margin-top:inherit;border-bottom:none}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background .4s ease,-webkit-box-shadow .4s ease;transition:background .4s ease,-webkit-box-shadow .4s ease;transition:box-shadow .4s ease,background .4s ease;transition:box-shadow .4s ease,background .4s ease,-webkit-box-shadow .4s ease;border:0;border-radius:16px;-webkit-box-shadow:inset 0 0 0 1px #ccc;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{-webkit-box-shadow:inset 0 0 0 1px #b3b3b3;box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;-webkit-box-shadow:inset 0 0 0 1px #aaa;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-webkit-input-placeholder{color:#aaa}.searchbox__input:-ms-input-placeholder{color:#aaa}.searchbox__input::-ms-input-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:0 0;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;-webkit-animation-name:sbx-reset-in;animation-name:sbx-reset-in;-webkit-animation-duration:.15s;animation-duration:.15s}@-webkit-keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{-webkit-box-sizing:border-box;box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;-webkit-box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:0 0}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media(min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media(max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url(data:image/svg+xml;utf8;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHZpZXdCb3g9IjAgMCAyMCAzOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMS40OSA0LjMxbDE0IDE2LjEyNi4wMDItMi42MjQtMTQgMTYuMDc0LTEuMzE0IDEuNTEgMy4wMTcgMi42MjYgMS4zMTMtMS41MDggMTQtMTYuMDc1IDEuMTQyLTEuMzEzLTEuMTQtMS4zMTMtMTQtMTYuMTI1TDMuMi4xOC4xOCAyLjhsMS4zMSAxLjUxeiIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMWQzNjU3IiAvPjwvc3ZnPg==);content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;-webkit-box-shadow:none;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB3aWR0aD0iMTY4IiBoZWlnaHQ9IjI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTc4Ljk4OC45MzhoMTYuNTk0YTIuOTY4IDIuOTY4LjAgMCAxIDIuOTY2IDIuOTY2VjIwLjVhMi45NjcgMi45NjcuMCAwIDEtMi45NjYgMi45NjRINzguOTg4YTIuOTY3IDIuOTY3LjAgMCAxLTIuOTY2LTIuOTY0VjMuODk3QTIuOTYxIDIuOTYxLjAgMCAxIDc4Ljk4OC45Mzh6bTQxLjkzNyAxNy44NjZjLTQuMzg2LjAyLTQuMzg2LTMuNTQtNC4zODYtNC4xMDZsLS4wMDctMTMuMzM2IDIuNjc1LS40MjR2MTMuMjU0YzAgLjMyMi4wIDIuMzU4IDEuNzE4IDIuMzY0djIuMjQ4em0tMTAuODQ2LTIuMThjLjgyMS4wIDEuNDMtLjA0NyAxLjg1NS0uMTI5di0yLjcxOWE2LjMzNCA2LjMzNC4wIDAgMC0xLjU3NC0uMTk5IDUuNyA1LjcuMCAwIDAtLjg5Ny4wNjkgMi42OTkgMi42OTkuMCAwIDAtLjgxNC4yNGMtLjI0LjExNi0uNDM5LjI4LS41ODIuNDkxLS4xNS4yMTItLjIxOS4zMzUtLjIxOS42NTYuMC42MjguMjE5Ljk5MS42MTYgMS4yM3MuOTM4LjM2MiAxLjYxNS4zNjJ6bS0uMjMzLTkuN2MuODgzLjAgMS42MjkuMTA5IDIuMjMxLjMyOC42MDIuMjE4IDEuMDg4LjUyNSAxLjQ0NC45MTUuMzYzLjM5Ni42MDkuOTIyLjc2IDEuNDgzLjE1Ny41Ni4yMzIgMS4xNzUuMjMyIDEuODV2Ni44NzRhMzIuNSAzMi41LjAgMCAxLTEuODY4LjMxNGMtLjgzNC4xMjMtMS43NzIuMTg1LTIuODEzLjE4NS0uNjkuMC0xLjMyNy0uMDY5LTEuODk1LS4xOThhNC4wMDEgNC4wMDEuMCAwIDEtMS40NzEtLjYzNiAzLjA4NSAzLjA4NS4wIDAgMS0uOTUxLTEuMTM0Yy0uMjI2LS40NjUtLjM0My0xLjEyLS4zNDMtMS44MDMuMC0uNjU2LjEzLTEuMDczLjM4NC0xLjUyNWEzLjI0IDMuMjQuMCAwIDEgMS4wNDctMS4xMDZjLjQ0NS0uMjg3Ljk1LS40OTIgMS41MzItLjYxNWE4LjggOC44LjAgMCAxIDEuODItLjE4NSA4LjQwNCA4LjQwNC4wIDAgMSAxLjk3Mi4yNHYtLjQzOGMwLS4zMDctLjAzNS0uNi0uMTEtLjg3NGExLjg4IDEuODguMCAwIDAtLjM4NC0uNzMgMS43ODQgMS43ODQuMCAwIDAtLjcyNC0uNDkzIDMuMTY0IDMuMTY0LjAgMCAwLTEuMTQzLS4yMDVjLS42MTYuMC0xLjE3Ny4wNzUtMS42OS4xNjRhNy43MzUgNy43MzUuMCAwIDAtMS4yNi4zMDdsLS4zMjEtMi4xOTJjLjMzNS0uMTE3LjgzNC0uMjMzIDEuNDc4LS4zNDlhMTAuOTggMTAuOTguMCAwIDEgMi4wNzMtLjE3OHptNTIuODQyIDkuNjI2Yy44MjIuMCAxLjQzLS4wNDggMS44NTQtLjEzVjEzLjdhNi4zNDcgNi4zNDcuMCAwIDAtMS41NzQtLjE5OWMtLjI5NC4wLS41OTUuMDIxLS44OTYuMDY5YTIuNyAyLjcuMCAwIDAtLjgxNC4yNCAxLjQ2IDEuNDYuMCAwIDAtLjU4Mi40OTFjLS4xNS4yMTItLjIxOC4zMzUtLjIxOC42NTYuMC42MjguMjE4Ljk5MS42MTUgMS4yMy40MDQuMjQ1LjkzOC4zNjIgMS42MTUuMzYyem0tLjIyNi05LjY5NGMuODgzLjAgMS42MjkuMTA4IDIuMjMxLjMyNy42MDIuMjE5IDEuMDg4LjUyNiAxLjQ0NC45MTUuMzU1LjM5LjYwOS45MjMuNzU5IDEuNDgzYTYuOCA2LjguMCAwIDEgLjIzMyAxLjg1MnY2Ljg3M2MtLjQxLjA4OC0xLjAzNC4xOS0xLjg2OC4zMTQtLjgzNC4xMjMtMS43NzIuMTg0LTIuODEzLjE4NC0uNjkuMC0xLjMyNy0uMDY4LTEuODk1LS4xOThhNC4wMDEgNC4wMDEuMCAwIDEtMS40NzEtLjYzNSAzLjA4NSAzLjA4NS4wIDAgMS0uOTUxLTEuMTM0Yy0uMjI2LS40NjUtLjM0My0xLjEyLS4zNDMtMS44MDQuMC0uNjU2LjEzLTEuMDczLjM4NC0xLjUyNC4yNi0uNDUuNjA4LS44MiAxLjA0Ny0xLjEwNy40NDUtLjI4Ni45NS0uNDkxIDEuNTMyLS42MTRhOC44MDMgOC44MDMuMCAwIDEgMi43NTEtLjEzYy4zMjkuMDM0LjY3MS4wOTYgMS4wNC4xODV2LS40MzdhMy4zIDMuMy4wIDAgMC0uMTA5LS44NzUgMS44NzMgMS44NzMuMCAwIDAtLjM4NC0uNzMxIDEuNzg0IDEuNzg0LjAgMCAwLS43MjQtLjQ5MiAzLjE2NSAzLjE2NS4wIDAgMC0xLjE0My0uMjA1Yy0uNjE2LjAtMS4xNzcuMDc1LTEuNjkuMTY0YTcuNzUgNy43NS4wIDAgMC0xLjI2LjMwN2wtLjMyMS0yLjE5M2MuMzM1LS4xMTYuODM0LS4yMzIgMS40NzgtLjM0OGExMS42MzMgMTEuNjMzLjAgMCAxIDIuMDczLS4xNzd6bS04LjAzNC0xLjI3MWExLjYyNiAxLjYyNi4wIDAgMS0xLjYyOC0xLjYyYzAtLjg5NS43MjUtMS42MiAxLjYyOC0xLjYyLjkwNC4wIDEuNjMuNzI1IDEuNjMgMS42Mi4wLjg5NS0uNzMzIDEuNjItMS42MyAxLjYyem0xLjM0OCAxMy4yMmgtMi42ODlWNy4yN2wyLjY5LS40MjN2MTEuOTU2em0tNC43MTQuMGMtNC4zODYuMDItNC4zODYtMy41NC00LjM4Ni00LjEwN2wtLjAwOC0xMy4zMzYgMi42NzYtLjQyNHYxMy4yNTRjMCAuMzIyLjAgMi4zNTggMS43MTggMi4zNjR2Mi4yNDh6bS04LjY5OC01LjkwM2MwLTEuMTU2LS4yNTMtMi4xMTktLjc0Ni0yLjc4OC0uNDkzLS42NzctMS4xODMtMS4wMS0yLjA2Ny0xLjAxLS44ODIuMC0xLjU3NC4zMzMtMi4wNjUgMS4wMS0uNDkzLjY3Ni0uNzMzIDEuNjMyLS43MzMgMi43ODguMCAxLjE2OC4yNDYgMS45NTMuNzQgMi42My40OTIuNjgzIDEuMTgzIDEuMDE4IDIuMDY2IDEuMDE4Ljg4Mi4wIDEuNTc0LS4zNDIgMi4wNjctMS4wMTkuNDkyLS42ODMuNzM4LTEuNDYuNzM4LTIuNjN6bTIuNzM3LS4wMDdjMCAuOTAyLS4xMyAxLjU4NC0uMzk3IDIuMzNhNS41MiA1LjUyLjAgMCAxLTEuMTI4IDEuOTA2IDQuOTg2IDQuOTg2LjAgMCAxLTEuNzUyIDEuMjIzYy0uNjg1LjI4Ni0xLjczOS40NS0yLjI2NS40NS0uNTI4LS4wMDYtMS41NzQtLjE1Ny0yLjI1Mi0uNDVhNS4wOTYgNS4wOTYuMCAwIDEtMS43NDQtMS4yMjNjLS40ODctLjUyNy0uODYzLTEuMTYyLTEuMTM3LTEuOTA2YTYuMzQ1IDYuMzQ1LjAgMCAxLS40MS0yLjMzYzAtLjkwMi4xMjMtMS43Ny4zOTctMi41MDhhNS41NTQgNS41NTQuMCAwIDEgMS4xNS0xLjg5MiA1LjEzMyA1LjEzMy4wIDAgMSAxLjc1LTEuMjE2Yy42NzktLjI4NyAxLjQyNS0uNDIzIDIuMjMyLS40MjMuODA4LjAgMS41NTMuMTQyIDIuMjM3LjQyM2E0Ljg4IDQuODguMCAwIDEgMS43NTMgMS4yMTYgNS42NDQgNS42NDQuMCAwIDEgMS4xMzUgMS44OTJjLjI4Ny43MzguNDMxIDEuNjA2LjQzMSAyLjUwOHptLTIwLjEzOC4wYzAgMS4xMi4yNDYgMi4zNjMuNzM4IDIuODgyLjQ5My41MiAxLjEzLjc4IDEuOTEuNzguNDI0LjAuODI4LS4wNjIgMS4yMDQtLjE3OC4zNzctLjExNi42NzctLjI1My45MTctLjQxN1Y5LjMzYTEwLjQ3NiAxMC40NzYuMCAwIDAtMS43NjYtLjIyNmMtLjk3MS0uMDI4LTEuNzEuMzctMi4yMyAxLjAwNC0uNTEzLjYzNi0uNzczIDEuNzUtLjc3MyAyLjc4OHptNy40MzggNS4yNzRjMCAxLjgyNC0uNDY2IDMuMTU2LTEuNDA0IDQuMDA0LS45MzYuODQ2LTIuMzY3IDEuMjctNC4yOTYgMS4yNy0uNzA1LjAtMi4xNy0uMTM3LTMuMzQtLjM5NmwuNDMxLTIuMTE4Yy45OC4yMDUgMi4yNzIuMjYgMi45NS4yNiAxLjA3NC4wIDEuODQtLjIxOSAyLjI5OS0uNjU2LjQ1OS0uNDM3LjY4NC0xLjA4Ni42ODQtMS45NDh2LS40MzdhOC4wNyA4LjA3LjAgMCAxLTEuMDQ3LjM5N2MtLjQzLjEzLS45My4xOTgtMS40OTIuMTk4LS43MzkuMC0xLjQxLS4xMTYtMi4wMTgtLjM0OWE0LjIwNiA0LjIwNi4wIDAgMS0xLjU2Ny0xLjAyNWMtLjQzMS0uNDUtLjc3NC0xLjAxNy0xLjAxMy0xLjY5NC0uMjQtLjY3Ny0uMzYzLTEuODg1LS4zNjMtMi43NzMuMC0uODM0LjEzLTEuODguMzg0LTIuNTc3LjI2LS42OTYuNjI5LTEuMjk4IDEuMTI5LTEuNzk2LjQ5My0uNDk4IDEuMDk1LS44ODEgMS44LTEuMTYyYTYuNjA1IDYuNjA1LjAgMCAxIDIuNDI4LS40NTdjLjg3LjAgMS42Ny4xMDkgMi40NS4yNC43OC4xMjkgMS40NDQuMjY1IDEuOTg1LjQxNVYxOC4xN3oiIGZpbGw9IiM1NDY4ZmYiLz48cGF0aCBkPSJNNi45NzIgNi42Nzd2MS42MjdjLS43MTItLjQ0Ni0xLjUyLS42Ny0yLjQyNS0uNjctLjU4NS4wLTEuMDQ1LjEzLTEuMzguMzkxYTEuMjQgMS4yNC4wIDAgMC0uNTAyIDEuMDNjMCAuNDI1LjE2NC43NjUuNDk0IDEuMDIuMzMuMjU2LjgzNS41MzIgMS41MTYuODMuNDQ3LjE5Mi43OTUuMzU2IDEuMDQ1LjQ5NS4yNS4xMzguNTM3LjMzMi44NjIuNTgyLjMyNC4yNS41NjMuNTQ4LjcxOC44OTQuMTU0LjM0NS4yMy43NDEuMjMgMS4xODguMC45NDctLjMzNCAxLjY5MS0xLjAwNCAyLjIzNC0uNjcuNTQyLTEuNTM3LjgxNC0yLjYwMS44MTQtMS4xOC4wLTIuMTYtLjIyOS0yLjkzNi0uNjg2di0xLjcwOGMuODQuNjI4IDEuODE0Ljk0MiAyLjkyLjk0Mi41ODUuMCAxLjA0OC0uMTM2IDEuMzg4LS40MDcuMzQtLjI3MS41MS0uNjQ2LjUxLTEuMTI1LjAtLjI4Ny0uMS0uNTUtLjMwMi0uNzktLjIwMy0uMjQtLjQyLS40Mi0uNjU1LS41NDItLjIzNC0uMTIzLS41ODUtLjI5LTEuMDUzLS41MDNhNjEuMjcgNjEuMjcuMCAwIDEtLjU4Mi0uMjcxIDEzLjY3IDEzLjY3LjAgMCAxLS41NS0uMjg3IDQuMjc1IDQuMjc1LjAgMCAxLS41NjctLjM1MSA2LjkyIDYuOTIuMCAwIDEtLjQ1NS0uNGMtLjE4LS4xNy0uMzEtLjM0LS4zOS0uNTEtLjA4LS4xNy0uMTU1LS4zNy0uMjI0LS41OThhMi41NTMgMi41NTMuMCAwIDEtLjEwNC0uNzQyYzAtLjkxNS4zMzMtMS42MzguOTk4LTIuMTcuNjY0LS41MzIgMS41MjMtLjc5OCAyLjU3Ni0uNzk4Ljk2OC4wIDEuNzkzLjE3IDIuNDczLjUxem03LjQ2OCA1LjY5NnYtLjI4N2MtLjAyMi0uNjA3LS4xODctMS4wODgtLjQ5NS0xLjQ0NC0uMzA5LS4zNTctLjc1LS41MzUtMS4zMjQtLjUzNS0uNTMyLjAtLjk5LjE5NC0xLjM3My41ODMtLjM4Mi4zODgtLjYyMi45NDktLjcxNyAxLjY4M2gzLjkwOXptMS4wMDUgMi43OTJ2MS40MDRjLS41OTYuMzQtMS4zODMuNTEtMi4zNjIuNTEtMS4yNTUuMC0yLjI1NS0uMzc3LTMtMS4xMzItLjc0NC0uNzU1LTEuMTE2LTEuNzQ0LTEuMTE2LTIuOTY4LjAtMS4yOTcuMzQtMi4zMTYgMS4wMjEtMy4wNTUuNjgtLjc0IDEuNTQ4LTEuMTEgMi42LTEuMTEgMS4wMzMuMCAxLjg1Mi4zMjMgMi40NTguOTY2LjYwNi42NDQuOTEgMS41NzIuOTEgMi43ODQuMC4zMy0uMDMzLjY3Ni0uMDk2IDEuMDM4aC01LjMxNGMuMTA3LjcwMi40MDUgMS4yMzkuODk0IDEuNjExLjQ5LjM3MiAxLjEwNi41NTggMS44NS41NTguODYyLjAgMS41OC0uMjAyIDIuMTU1LS42MDZ6bTYuNjA1LTEuNzdoLTEuMjEyYy0uNTk2LjAtMS4wNDUuMTE2LTEuMzQ5LjM1LS4zMDMuMjM0LS40NTQuNTMyLS40NTQuODk0LjAuMzcyLjExNy42NjQuMzUuODc3LjIzNS4yMTMuNTc1LjMyIDEuMDIyLjMyLjUxLjAuOTEyLS4xNDIgMS4yMDQtLjQyNC4yOTMtLjI4MS40NC0uNjUxLjQ0LTEuMTA4di0uOTF6bS00LjA2OC0yLjU1NFY5LjMyNWMuNjI3LS4zNjEgMS40NTctLjU0MiAyLjQ4OS0uNTQyIDIuMTE2LjAgMy4xNzUgMS4wMjYgMy4xNzUgMy4wOFYxN2gtMS41NDh2LS45NTdjLS40MTUuNjgtMS4xNDMgMS4wMi0yLjE4NiAxLjAyLS43NjYuMC0xLjM4LS4yMi0xLjg0My0uNjYxLS40NjItLjQ0Mi0uNjk0LTEuMDAzLS42OTQtMS42ODQuMC0uNzc2LjI5My0xLjM4Ljg3OC0xLjgxLjU4NS0uNDMxIDEuNDA0LS42NDcgMi40NTctLjY0N2gxLjM0VjExLjhjMC0uNTU0LS4xMzMtLjk3MS0uMzk5LTEuMjUzLS4yNjYtLjI4Mi0uNzA3LS40MjMtMS4zMjQtLjQyM2E0LjA3IDQuMDcuMCAwIDAtMi4zNDUuNzE4em05LjMzMy0xLjkzdjEuNDJjLjM5NC0xIDEuMTAxLTEuNSAyLjEyMy0xLjUuMTQ4LjAuMzEzLjAxNi40OTQuMDQ4djEuNTMxYTEuODg1IDEuODg1LjAgMCAwLS43NS0uMTQzYy0uNTQyLjAtLjk4OS4yNC0xLjM0LjcxOC0uMzUxLjQ3OS0uNTI3IDEuMDQ4LS41MjcgMS43MDdWMTdoLTEuNTYzVjguOTFoMS41NjN6bTUuMDEgNC4wODRjLjAyMi44Mi4yNzIgMS40OTIuNzUgMi4wMTkuNDc5LjUyNiAxLjE1Ljc5IDIuMDEuNzkuNjM5LjAgMS4yMzUtLjE3NiAxLjc4OC0uNTI3djEuNDA0Yy0uNTIxLjMxOS0xLjE4Ni40NzktMS45OTUuNDc5LTEuMjY1LjAtMi4yNzYtLjQtMy4wMzEtMS4xOTctLjc1NS0uNzk4LTEuMTMzLTEuNzkyLTEuMTMzLTIuOTg0LjAtMS4xNi4zOC0yLjE1MSAxLjE0LTIuOTc1Ljc2MS0uODI1IDEuNzktMS4yMzcgMy4wODgtMS4yMzcuNzAyLjAgMS4zNDYuMTQ5IDEuOTMuNDQ3djEuNDM2YTMuMjQyIDMuMjQyLjAgMCAwLTEuNzctLjQ5NWMtLjg0LjAtMS41MTMuMjY2LTIuMDE5Ljc5OC0uNTA1LjUzMi0uNzU4IDEuMjEzLS43NTggMi4wNDJ6TTQwLjI0IDUuNzJ2NC41NzljLjQ1OC0xIDEuMjkzLTEuNSAyLjUwNS0xLjUuNzg3LjAgMS40Mi4yNDUgMS44OTkuNzM0LjQ3OS40OS43MTggMS4xNy43MTggMi4wNDJWMTdoLTEuNTY0di01LjEwNmMwLS41NTMtLjE0LS45OC0uNDIyLTEuMjg0LS4yODItLjMwMy0uNjUyLS40NTUtMS4xMS0uNDU1LS41MzEuMC0xLjAwMi4yMDItMS40MTEuNjA2LS40MS40MDUtLjYxNSAxLjAyMi0uNjE1IDEuODUxVjE3aC0xLjU2M1Y1LjcyaDEuNTYzem0xNC45NjYgMTAuMDJjLjU5Ni4wIDEuMDk2LS4yNTMgMS41LS43NTguNDA0LS41MDYuNjA2LTEuMTU3LjYwNi0xLjk1NS4wLS45MTUtLjIwMi0xLjYyLS42MDYtMi4xMTQtLjQwNC0uNDk1LS45Mi0uNzQyLTEuNTQ4LS43NDItLjU1My4wLTEuMDUuMjI0LTEuNDkxLjY3LS40NDIuNDQ3LS42NjIgMS4xMzMtLjY2MiAyLjA1OC4wLjk1OC4yMTIgMS42Ny42MzggMi4xMzguNDI1LjQ2OS45NDYuNzAzIDEuNTYzLjcwM3pNNTMuMDA0IDUuNzJ2NC40MmMuNTc0LS44OTQgMS4zODgtMS4zNDEgMi40NC0xLjM0MSAxLjAyMi4wIDEuODU3LjM4MyAyLjUwNiAxLjE0OS42NDkuNzY2Ljk3MyAxLjc4MS45NzMgMy4wNDcuMCAxLjEzOC0uMzA5IDIuMTA5LS45MjUgMi45MTItLjYxNy44MDMtMS40NjMgMS4yMDUtMi41MzcgMS4yMDUtMS4wNzUuMC0xLjg5NC0uNDQ3LTIuNDU3LTEuMzRWMTdoLTEuNThWNS43MmgxLjU4em05LjkwOCAxMS4xMDQtMy4yMjMtNy45MTNoMS43MzlsMS4wMDUgMi42MzIgMS4yNiAzLjQxNWMuMDk2LS4zMi40OC0xLjQ1OCAxLjE1LTMuNDE1bC45MDktMi42MzJoMS42NmwtMi45MiA3Ljg2NmMtLjc3NyAyLjA3NC0xLjk2MyAzLjExLTMuNTU5IDMuMTFhMi45MiAyLjkyLjAgMCAxLS43MzQtLjA3OXYtMS4zNGMuMTcuMDQyLjM1MS4wNjQuNTQzLjA2NCAxLjAzMi4wIDEuNzU1LS41NyAyLjE3LTEuNzA4eiIgZmlsbD0iIzVkNjQ5NCIvPjxwYXRoIGQ9Ik04OS42MzIgNS45Njd2LS43NzJhLjk3OC45NzguMCAwIDAtLjk3OC0uOTc3aC0yLjI4YS45NzguOTc4LjAgMCAwLS45NzguOTc3di43OTNjMCAuMDg4LjA4Mi4xNS4xNzEuMTNhNy4xMjcgNy4xMjcuMCAwIDEgMS45ODQtLjI4Yy42NS4wIDEuMjk1LjA4OCAxLjkxNy4yNTkuMDgyLjAyLjE2NC0uMDQuMTY0LS4xM20tNi4yNDggMS4wMS0uMzktLjM4OWEuOTc3Ljk3Ny4wIDAgMC0xLjM4Mi4wbC0uNDY1LjQ2NWEuOTczLjk3My4wIDAgMCAwIDEuMzhsLjM4My4zODNjLjA2Mi4wNjEuMTUuMDQ3LjIwNS0uMDE0LjIyNi0uMzA3LjQ3Mi0uNjAxLjc0Ni0uODc0LjI4MS0uMjguNTY4LS41MjYuODgzLS43NTEuMDY4LS4wNDIuMDc1LS4xMzcuMDItLjJtNC4xNiAyLjQ1M3YzLjM0MWMwIC4wOTYuMTA0LjE2NS4xOTIuMTE3bDIuOTctMS41MzdjLjA2OC0uMDM0LjA4OS0uMTE3LjA1NS0uMTg0YTMuNjk1IDMuNjk1LjAgMCAwLTMuMDgtMS44NjZjLS4wNjguMC0uMTM2LjA1NC0uMTM2LjEzbTAgOC4wNDhhNC40ODkgNC40ODkuMCAwIDEtNC40OS00LjQ4MiA0LjQ4OCA0LjQ4OC4wIDAgMSA0LjQ5LTQuNDgyIDQuNDg4IDQuNDg4LjAgMCAxIDQuNDg5IDQuNDgyIDQuNDg0IDQuNDg0LjAgMCAxLTQuNDkgNC40ODJtMC0xMC44NWE2LjM2MyA2LjM2My4wIDEgMCAwIDEyLjcyOSA2LjM3IDYuMzcuMCAwIDAgNi4zNzItNi4zNjggNi4zNTggNi4zNTguMCAwIDAtNi4zNzEtNi4zNiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=);background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}.overflow-x-scroll{-webkit-overflow-scrolling:touch}.row{-webkit-transition:450ms -webkit-transform;transition:450ms -webkit-transform;transition:450ms transform;transition:450ms transform,450ms -webkit-transform;font-size:0}.tile{-webkit-transition:450ms all;transition:450ms all}.details{background:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.9)),to(rgba(0,0,0,0)));background:linear-gradient(to top,rgba(0,0,0,.9) 0%,rgba(0,0,0,0) 100%);-webkit-transition:450ms opacity;transition:450ms opacity}.tile:hover .details{opacity:1}.row:hover .tile{opacity:.3}.row:hover .tile:hover{opacity:1}.chroma .lntable pre{padding:0;margin:0;border:0}.chroma .lntable pre code{padding:0;margin:0}pre,.pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}code{padding:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}pre code{display:block;padding:1.5em;font-size:.875rem;line-height:2;overflow-x:auto}pre{background-color:#fff;color:#333;white-space:pre;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;position:relative;border-width:1px;border-color:#ccc;border-style:solid}.highlight pre{background-color:inherit;color:inherit;padding:.5em;font-size:.875rem}.copy:after{content:"Copy"}.copied:after{content:"Copied"}@media screen and (min-width:60em){.full-width,pre.expand:hover{margin-right:-30vw;max-width:100vw}}.code-block .line-numbers-rows{background:#2f3a46;border:none;bottom:-50px;color:#98a4b3;left:-178px;padding:50px 0;top:-50px;width:138px}.code-block .line-numbers-rows>span:before{color:inherit;padding-right:30px}.tab-button{margin-bottom:1px;position:relative;z-index:1;color:#333;border-color:#ccc;outline:none;background-color:#fff}.tab-pane code{background:#f1f2f2;border-radius:0}.tab-pane .chroma{background:0 0;padding:0}.tab-button.active{border-bottom-color:#f1f2f2;background-color:#f1f2f2}.tab-content .tab-pane{display:none}.tab-content .tab-pane.active{display:block}.tab-content .copy,.tab-content .copied{display:none}.tab-content .tab-pane.active+.copy,.tab-content .tab-pane.active+.copied{display:block}.primary-color{color:#0594cb}.bg-primary-color{background-color:#0594cb}.hover-bg-primary-color:hover{background-color:#0594cb}.primary-color-dark{color:#0a1922}.bg-primary-color-dark{background-color:#0a1922}.hover-bg-primary-color-dark:hover{background-color:#0a1922}.primary-color-light{color:#f9f9f9}.bg-primary-color-light{background-color:#f9f9f9}.hover-bg-primary-color-light:hover{background-color:#f9f9f9}.accent-color{color:#ebb951}.bg-accent-color{background-color:#ebb951}.hover-bg-accent-color:hover{background-color:#ebb951}.accent-color-light{color:#ff4088}.hover-accent-color-light:hover{color:#ff4088}.bg-accent-color-light{background-color:#ff4088}.hover-bg-accent-color-light:hover{background-color:#ff4088}.accent-color-dark{color:#33ba91}.bg-accent-color-dark{background-color:#33ba91}.hover-bg-accent-color-dark:hover{background-color:#33ba91}.text-color-primary{color:#373737}.text-on-primary-color{color:#fff}.text-color-secondary{color:#ccc}.text-color-disabled{color:#f7f7f7}.divider-color{color:#f6f6f6}.warn-color{color:red}.nested-links a{color:#0594cb;text-decoration:none}.column-count-2{-webkit-column-count:1;column-count:1}.column-gap-1{-webkit-column-gap:0;column-gap:0}.break-inside-avoid{-webkit-column-break-inside:auto;break-inside:auto}@media screen and (min-width:60em){.column-count-3-l{-webkit-column-count:3;column-count:3}.column-count-2-l{-webkit-column-count:2;column-count:2}.column-gap-1-l{-webkit-column-gap:1;column-gap:1}.break-inside-avoid-l{-webkit-column-break-inside:avoid;break-inside:avoid}}.prose ul,.prose ol{margin-bottom:2em}.prose ul li,.prose ol li{margin-bottom:.5em}.prose li:hover{background-color:#eee}.prose ::selection{background:#0594cb;color:#fff}body{line-height:1.45}p{margin-bottom:1.3em}h1,h2,h3,h4{margin:1.414em 0 .5em;line-height:1.2}h1{margin-top:0;font-size:2.441em}h2{font-size:1.953em}h3{font-size:1.563em}h4{font-size:1.25em}small,.font_small{font-size:.8em}.prose table{width:100%;margin-bottom:3em;border-collapse:collapse;border-spacing:0;font-size:1em;border:1px solid #eee}.prose table th{background-color:#0594cb;border-bottom:1px solid #0594cb;color:#fff;font-weight:400;text-align:left;padding:.375em .5em}.prose table td,.prose table tc{padding:.75em .5em;text-align:left;border-right:1px solid #eee}.prose table tr:nth-child(even){background-color:#eee}dl dt{font-weight:700;font-size:1.125rem}dd{margin:.5em 0 2em;padding:0}.f2-fluid{font-size:2.25rem}@media screen and (min-width:60em){.f2-fluid{font-size:1.25rem;font-size:calc(0.70833rem + 0.83333vw)}}code,.code,pre code,.highlight pre{font-family:inconsolata,Menlo,Monaco,courier new,monospace}.sans-serif{font-family:muli,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.serif{font-family:Palatino,palatino linotype,palatino lt std,book antiqua,Georgia,serif}.courier{font-family:courier next,courier,monospace}.helvetica{font-family:helvetica neue,helvetica,sans-serif}.avenir{font-family:avenir next,avenir,sans-serif}.athelas{font-family:athelas,georgia,serif}.georgia{font-family:georgia,serif}.times{font-family:times,serif}.bodoni{font-family:bodoni mt,serif}.calisto{font-family:calisto mt,serif}.garamond{font-family:garamond,serif}.baskerville{font-family:baskerville,serif}.pagination{margin:3rem 0}.pagination li{display:inline-block;margin-right:.375rem;font-size:.875rem;margin-bottom:2.5em}.pagination li a{padding:.5rem .625rem;background-color:#fff;color:#333;border:1px solid #ddd;border-radius:3px;text-decoration:none}.pagination li.disabled{display:none}.pagination li.active a:link,.pagination li.active a:active,.pagination li.active a:visited{background-color:#ddd}#TableOfContents ul li ul li ul li{display:none}#TableOfContents ul li{color:#000;display:block;margin-bottom:.375em;line-height:1.375}#TableOfContents ul li a{width:100%;padding:.25em .375em;margin-left:-.375em}#TableOfContents ul li a:hover{background-color:#999;color:#fff}.no-js .needs-js{opacity:0}.js .needs-js{opacity:1;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.facebook,.twitter,.instagram,.youtube{fill:#bababa}.facebook:hover{fill:#3b5998}.twitter{fill:#55acee}.twitter:hover{fill:#bababa}.instagram:hover{fill:#e95950}.youtube:hover{fill:#b00}@media(min-width:75em){[data-scrolldir=down] .sticky{position:fixed;top:100px;right:0}[data-scrolldir=up] .sticky{position:fixed;top:100px;right:0}}.fill-current{fill:currentColor}.chroma{background-color:#fff}.chroma .err{color:#a61717;background-color:#e3d2d2}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffc}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{font-weight:700}.chroma .kc{font-weight:700}.chroma .kd{font-weight:700}.chroma .kn{font-weight:700}.chroma .kp{font-weight:700}.chroma .kr{font-weight:700}.chroma .kt{color:#458;font-weight:700}.chroma .na{color:teal}.chroma .nb{color:#999}.chroma .nc{color:#458;font-weight:700}.chroma .no{color:teal}.chroma .ni{color:purple}.chroma .ne{color:#900;font-weight:700}.chroma .nf{color:#900;font-weight:700}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv{color:teal}.chroma .s{color:#b84}.chroma .sa{color:#b84}.chroma .sb{color:#b84}.chroma .sc{color:#b84}.chroma .dl{color:#b84}.chroma .sd{color:#b84}.chroma .s2{color:#b84}.chroma .se{color:#b84}.chroma .sh{color:#b84}.chroma .si{color:#b84}.chroma .sx{color:#b84}.chroma .sr{color:olive}.chroma .s1{color:#b84}.chroma .ss{color:#b84}.chroma .m{color:#099}.chroma .mb{color:#099}.chroma .mf{color:#099}.chroma .mh{color:#099}.chroma .mi{color:#099}.chroma .il{color:#099}.chroma .mo{color:#099}.chroma .o{font-weight:700}.chroma .ow{font-weight:700}.chroma .c{color:#998;font-style:italic}.chroma .ch{color:#998;font-style:italic}.chroma .cm{color:#998;font-style:italic}.chroma .c1{color:#998;font-style:italic}.chroma .cs{color:#999;font-weight:700;font-style:italic}.chroma .cp{color:#999;font-weight:700}.chroma .cpf{color:#999;font-weight:700}.chroma .gd{color:#000;background-color:#fdd}.chroma .ge{font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{color:#000;background-color:#dfd}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .w{color:#bbb}.nested-blockquote blockquote{border-left:4px solid #0594cb;padding-left:1em}.mw-90{max-width:90%}
\ No newline at end of file
diff --git a/resources/_gen/assets/css/output/css/app.css_d11fe7b62c27961c87ecd0f2490357b9.json b/resources/_gen/assets/css/output/css/app.css_d11fe7b62c27961c87ecd0f2490357b9.json
deleted file mode 100644 (file)
index 91f089a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"Target":"output/css/app.min.2ac9b5935f7ff7709fe13c2b042a4a2d49fa96fb508e3e8870019ee9b72cf329.css","MediaType":"text/css","Data":{"Integrity":"sha256-Ksm1k19/93Cf4TwrBCpKLUn6lvtQjj6IcAGe6bcs8yk="}}
\ No newline at end of file
diff --git a/resources/_gen/assets/js/output/js/app.js_8848f55d07695b7ff7188138f23d69e3.content b/resources/_gen/assets/js/output/js/app.js_8848f55d07695b7ff7188138f23d69e3.content
deleted file mode 100644 (file)
index 3097ec5..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){!function(t,n){var r=function(e,t){"use strict";if(!t.getElementsByClassName)return;var n,r,i=t.documentElement,s=e.Date,o=e.HTMLPictureElement,a=e.addEventListener,c=e.setTimeout,u=e.requestAnimationFrame||c,l=e.requestIdleCallback,h=/^picture$/i,d=["load","error","lazyincluded","_lazyloaded"],f={},p=Array.prototype.forEach,g=function(e,t){return f[t]||(f[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")),f[t].test(e.getAttribute("class")||"")&&f[t]},m=function(e,t){g(e,t)||e.setAttribute("class",(e.getAttribute("class")||"").trim()+" "+t)},v=function(e,t){var n;(n=g(e,t))&&e.setAttribute("class",(e.getAttribute("class")||"").replace(n," "))},y=function(e,t,n){var r=n?"addEventListener":"removeEventListener";n&&y(e,t),d.forEach(function(n){e[r](n,t)})},b=function(e,r,i,s,o){var a=t.createEvent("Event");return i||(i={}),i.instance=n,a.initEvent(r,!s,!o),a.detail=i,e.dispatchEvent(a),a},w=function(t,n){var i;!o&&(i=e.picturefill||r.pf)?(n&&n.src&&!t.getAttribute("srcset")&&t.setAttribute("srcset",n.src),i({reevaluate:!0,elements:[t]})):n&&n.src&&(t.src=n.src)},_=function(e,t){return(getComputedStyle(e,null)||{})[t]},E=function(e,t,n){for(n=n||e.offsetWidth;n<r.minSize&&t&&!e._lazysizesWidth;)n=t.offsetWidth,t=t.parentNode;return n},x=function(){var e,n,r=[],i=[],s=r,o=function(){var t=s;for(s=r.length?i:r,e=!0,n=!1;t.length;)t.shift()();e=!1},a=function(r,i){e&&!i?r.apply(this,arguments):(s.push(r),n||(n=!0,(t.hidden?c:u)(o)))};return a._lsFlush=o,a}(),S=function(e,t){return t?function(){x(e)}:function(){var t=this,n=arguments;x(function(){e.apply(t,n)})}},C=function(e){var t,n,r=function(){t=null,e()},i=function(){var e=s.now()-n;e<99?c(i,99-e):(l||r)(r)};return function(){n=s.now(),t||(t=c(i,99))}};!function(){var t,n={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};for(t in r=e.lazySizesConfig||e.lazysizesConfig||{},n)t in r||(r[t]=n[t]);e.lazySizesConfig=r,c(function(){r.init&&O()})}();var A=function(){var o,u,d,f,E,A,O,T,k,R,M,L,I,D,P=/^img$/i,j=/^iframe$/i,$="onscroll"in e&&!/(gle|ing)bot/.test(navigator.userAgent),H=0,B=0,q=-1,z=function(e){B--,e&&e.target&&y(e.target,z),(!e||B<0||!e.target)&&(B=0)},F=function(e,n){var r,s=e,o="hidden"==_(t.body,"visibility")||"hidden"!=_(e.parentNode,"visibility")&&"hidden"!=_(e,"visibility");for(T-=n,M+=n,k-=n,R+=n;o&&(s=s.offsetParent)&&s!=t.body&&s!=i;)(o=(_(s,"opacity")||1)>0)&&"visible"!=_(s,"overflow")&&(r=s.getBoundingClientRect(),o=R>r.left&&k<r.right&&M>r.top-1&&T<r.bottom+1);return o},U=function(){var e,s,a,c,l,h,d,p,g,m=n.elements;if((f=r.loadMode)&&B<8&&(e=m.length)){s=0,q++,null==I&&("expand"in r||(r.expand=i.clientHeight>500&&i.clientWidth>500?500:370),L=r.expand,I=L*r.expFactor),H<I&&B<1&&q>2&&f>2&&!t.hidden?(H=I,q=0):H=f>1&&q>1&&B<6?L:0;for(;s<e;s++)if(m[s]&&!m[s]._lazyRace)if($)if((p=m[s].getAttribute("data-expand"))&&(h=1*p)||(h=H),g!==h&&(A=innerWidth+h*D,O=innerHeight+h,d=-1*h,g=h),a=m[s].getBoundingClientRect(),(M=a.bottom)>=d&&(T=a.top)<=O&&(R=a.right)>=d*D&&(k=a.left)<=A&&(M||R||k||T)&&(r.loadHidden||"hidden"!=_(m[s],"visibility"))&&(u&&B<3&&!p&&(f<3||q<4)||F(m[s],h))){if(X(m[s]),l=!0,B>9)break}else!l&&u&&!c&&B<4&&q<4&&f>2&&(o[0]||r.preloadAfterLoad)&&(o[0]||!p&&(M||R||k||T||"auto"!=m[s].getAttribute(r.sizesAttr)))&&(c=o[0]||m[s]);else X(m[s]);c&&!l&&X(c)}},K=function(e){var t,n=0,i=r.throttleDelay,o=r.ricTimeout,a=function(){t=!1,n=s.now(),e()},u=l&&o>49?function(){l(a,{timeout:o}),o!==r.ricTimeout&&(o=r.ricTimeout)}:S(function(){c(a)},!0);return function(e){var r;(e=!0===e)&&(o=33),t||(t=!0,(r=i-(s.now()-n))<0&&(r=0),e||r<9?u():c(u,r))}}(U),V=function(e){m(e.target,r.loadedClass),v(e.target,r.loadingClass),y(e.target,W),b(e.target,"lazyloaded")},J=S(V),W=function(e){J({target:e.target})},G=function(e){var t,n=e.getAttribute(r.srcsetAttr);(t=r.customMedia[e.getAttribute("data-media")||e.getAttribute("media")])&&e.setAttribute("media",t),n&&e.setAttribute("srcset",n)},Q=S(function(e,t,n,i,s){var o,a,u,l,f,g;(f=b(e,"lazybeforeunveil",t)).defaultPrevented||(i&&(n?m(e,r.autosizesClass):e.setAttribute("sizes",i)),a=e.getAttribute(r.srcsetAttr),o=e.getAttribute(r.srcAttr),s&&(u=e.parentNode,l=u&&h.test(u.nodeName||"")),g=t.firesLoad||"src"in e&&(a||o||l),f={target:e},g&&(y(e,z,!0),clearTimeout(d),d=c(z,2500),m(e,r.loadingClass),y(e,W,!0)),l&&p.call(u.getElementsByTagName("source"),G),a?e.setAttribute("srcset",a):o&&!l&&(j.test(e.nodeName)?function(e,t){try{e.contentWindow.location.replace(t)}catch(n){e.src=t}}(e,o):e.src=o),s&&(a||l)&&w(e,{src:o})),e._lazyRace&&delete e._lazyRace,v(e,r.lazyClass),x(function(){(!g||e.complete&&e.naturalWidth>1)&&(g?z(f):B--,V(f))},!0)}),X=function(e){var t,n=P.test(e.nodeName),i=n&&(e.getAttribute(r.sizesAttr)||e.getAttribute("sizes")),s="auto"==i;(!s&&u||!n||!e.getAttribute("src")&&!e.srcset||e.complete||g(e,r.errorClass)||!g(e,r.lazyClass))&&(t=b(e,"lazyunveilread").detail,s&&N.updateElem(e,!0,e.offsetWidth),e._lazyRace=!0,B++,Q(e,t,s,i,n))},Z=function(){if(!u)if(s.now()-E<999)c(Z,999);else{var e=C(function(){r.loadMode=3,K()});u=!0,r.loadMode=3,K(),a("scroll",function(){3==r.loadMode&&(r.loadMode=2),e()},!0)}};return{_:function(){E=s.now(),n.elements=t.getElementsByClassName(r.lazyClass),o=t.getElementsByClassName(r.lazyClass+" "+r.preloadClass),D=r.hFac,a("scroll",K,!0),a("resize",K,!0),e.MutationObserver?new MutationObserver(K).observe(i,{childList:!0,subtree:!0,attributes:!0}):(i.addEventListener("DOMNodeInserted",K,!0),i.addEventListener("DOMAttrModified",K,!0),setInterval(K,999)),a("hashchange",K,!0),["focus","mouseover","click","load","transitionend","animationend","webkitAnimationEnd"].forEach(function(e){t.addEventListener(e,K,!0)}),/d$|^c/.test(t.readyState)?Z():(a("load",Z),t.addEventListener("DOMContentLoaded",K),c(Z,2e4)),n.elements.length?(U(),x._lsFlush()):K()},checkElems:K,unveil:X}}(),N=function(){var e,n=S(function(e,t,n,r){var i,s,o;if(e._lazysizesWidth=r,r+="px",e.setAttribute("sizes",r),h.test(t.nodeName||""))for(i=t.getElementsByTagName("source"),s=0,o=i.length;s<o;s++)i[s].setAttribute("sizes",r);n.detail.dataAttr||w(e,n.detail)}),i=function(e,t,r){var i,s=e.parentNode;s&&(r=E(e,s,r),(i=b(e,"lazybeforesizes",{width:r,dataAttr:!!t})).defaultPrevented||(r=i.detail.width)&&r!==e._lazysizesWidth&&n(e,s,i,r))},s=C(function(){var t,n=e.length;if(n)for(t=0;t<n;t++)i(e[t])});return{_:function(){e=t.getElementsByClassName(r.autosizesClass),a("resize",s)},checkElems:s,updateElem:i}}(),O=function(){O.i||(O.i=!0,N._(),A._())};return n={cfg:r,autoSizer:N,loader:A,init:O,uP:w,aC:m,rC:v,hC:g,fire:b,gW:E,rAF:x}}(t,t.document);t.lazySizes=r,e.exports&&(e.exports=r)}(window)},function(e,t,n){"use strict";n.r(t);n(3),n(4),n(5),n(7),n(8),n(10),n(21),n(23),n(24),n(26),n(27),n(28);n(2)},function(e,t,n){},function(e,t,n){},function(e,t){var n=function(e){var t=document.createElement("a");return t.className="header-link",t.href="#"+e,t.innerHTML='  <svg class="fill-current o-60 hover-accent-color-light" height="22px" viewBox="0 0 24 24" width="22px" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>',t},r=function(e,t){for(var r=t.getElementsByTagName("h"+e),i=0;i<r.length;i++){var s=r[i];void 0!==s.id&&""!==s.id&&s.appendChild(n(s.id))}};document.onreadystatechange=function(){if("complete"===this.readyState){var e=document.getElementsByClassName("prose")[0];if(!e)return;for(var t=2;t<=4;t++)r(t,e)}}},function(e,t,n){function r(e,t){e.setAttribute("class","copied bg-primary-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2"),e.setAttribute("aria-label",t)}new(n(6))(".copy",{target:function(e){return e.classList.contains("copy-toggle")?e.previousElementSibling:e.nextElementSibling}}).on("success",function(e){r(e.trigger,"Copied!"),e.clearSelection()}).on("error",function(e){r(e.trigger,function(e,t){var n="",r="cut"===t?"X":"C";n=isMac?"Press ⌘-"+r:"Press Ctrl-"+r;return n}(e.action))})},function(e,t,n){
-/*!
- * clipboard.js v2.0.4
- * https://zenorocha.github.io/clipboard.js
- * 
- * Licensed MIT © Zeno Rocha
- */
-!function(t,n){e.exports=n()}(0,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=c(n(1)),o=c(n(3)),a=c(n(4));function c(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.resolveOptions(n),r.listenClick(e),r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.default),i(t,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===r(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,a.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new s.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return l("action",e)}},{key:"defaultTarget",value:function(e){var t=l("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return l("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}();function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}e.exports=u},function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=function(e){return e&&e.__esModule?e:{default:e}}(n(2));var o=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.resolveOptions(t),this.initSelection()}return i(e,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":r(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=o},function(e,t){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i),t=r.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function i(){r.off(e,i),t.apply(n,arguments)}return i._=t,this.on(e,i,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,i=n.length;r<i;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],i=[];if(r&&t)for(var s=0,o=r.length;s<o;s++)r[s].fn!==t&&r[s].fn._!==t&&i.push(r[s]);return i.length?n[e]=i:delete n[e],this}},e.exports=n},function(e,t,n){var r=n(5),i=n(6);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!r.string(t))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(r.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}(e,t,n);if(r.string(e))return function(e,t,n){return i(document.body,e,t,n)}(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},function(e,t,n){var r=n(7);function i(e,t,n,i,s){var o=function(e,t,n,i){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&i.call(e,n)}}.apply(this,arguments);return e.addEventListener(n,o,s),{destroy:function(){e.removeEventListener(n,o,s)}}}e.exports=function(e,t,n,r,s){return"function"==typeof e.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,function(e){return i(e,t,n,r,s)}))}},function(e,t){var n=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}e.exports=function(e,t){for(;e&&e.nodeType!==n;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}}])})},function(e,t){let n=document.getElementById("prose");if(n){let e=n.getElementsByTagName("code");for(let[t,n]of Object.entries(e)){n.scrollWidth-n.clientWidth>0&&n.parentNode.classList.add("expand")}}},function(e,t,n){n(9)({apiKey:"167e7998590aebda7f9fedcf86bc4a55",indexName:"hugodocs",inputSelector:"#search-input",debug:!0})},function(e,t,n){
-/*! docsearch 2.6.1 | © Algolia | github.com/algolia/docsearch */
-!function(t,n){e.exports=n()}("undefined"!=typeof self&&self,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=22)}([function(e,t,n){"use strict";var r=n(1);function i(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}e.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(e){if(void 0===e&&(e=navigator.userAgent),/(msie|trident)/i.test(e)){var t=e.match(/(msie |rv:)(\d+(.\d+)?)/i);if(t)return t[2]}return!1},escapeRegExChars:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(e){return"number"==typeof e},toStr:function(e){return void 0===e||null===e?"":e+""},cloneDeep:function(e){var t=this.mixin({},e),n=this;return this.each(t,function(e,r){e&&(n.isArray(e)?t[r]=[].concat(e):n.isObject(e)&&(t[r]=n.cloneDeep(e)))}),t},error:function(e){throw new Error(e)},every:function(e,t){var n=!0;return e?(this.each(e,function(r,i){if(!(n=t.call(null,r,i,e)))return!1}),!!n):n},any:function(e,t){var n=!1;return e?(this.each(e,function(r,i){if(t.call(null,r,i,e))return n=!0,!1}),n):n},getUniqueId:function(){var e=0;return function(){return e++}}(),templatify:function(e){if(this.isFunction(e))return e;var t=r.element(e);return"SCRIPT"===t.prop("tagName")?function(){return t.text()}:function(){return String(e)}},defer:function(e){setTimeout(e,0)},noop:function(){},formatPrefix:function(e,t){return t?"":e+"-"},className:function(e,t,n){return(n?"":".")+e+t},escapeHighlightedString:function(e,t,n){t=t||"<em>";var r=document.createElement("div");r.appendChild(document.createTextNode(t)),n=n||"</em>";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var o=document.createElement("div");return o.appendChild(document.createTextNode(e)),o.innerHTML.replace(RegExp(i(r.innerHTML),"g"),t).replace(RegExp(i(s.innerHTML),"g"),n)}}},function(e,t,n){"use strict";e.exports={element:null}},function(e,t){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;e.exports=function(e,t,i){if("[object Function]"!==r.call(t))throw new TypeError("iterator must be a function");var s=e.length;if(s===+s)for(var o=0;o<s;o++)t.call(i,e[o],o,e);else for(var a in e)n.call(e,a)&&t.call(i,e[a],a,e)}},function(e,t){e.exports=function(e){return JSON.parse(JSON.stringify(e))}},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";var r=n(12);function i(e,t){var r=n(2),i=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):i.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=e||"Unknown error",t&&r(t,function(e,t){i[t]=e})}function s(e,t){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(t),i.apply(this,n),this.name="AlgoliaSearch"+e+"Error"}return r(n,i),n}r(i,Error),e.exports={AlgoliaSearchError:i,UnparsableJSON:s("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:s("RequestTimeout","Request timedout before getting a response"),Network:s("Network","Network issue, see err.more for details"),JSONPScriptFail:s("JSONPScriptFail","<script> was loaded but did not call our provided callback"),JSONPScriptError:s("JSONPScriptError","<script> unable to load due to an `error` event on it"),Unknown:s("Unknown","Unknown error occured")}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){var r=n(2);e.exports=function(e,t){var n=[];return r(e,function(r,i){n.push(t(r,i,e))}),n}},function(e,t,n){(function(r){function i(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==r&&"env"in r&&(e=Object({NODE_ENV:"production"}).DEBUG),e}(t=e.exports=n(39)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),!n)return;var r="color: "+this.color;e.splice(1,0,r,"color: inherit");var i=0,s=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&"%c"===e&&(s=++i)}),e.splice(s,0,r)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}},t.load=i,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(i())}).call(t,n(9))},function(e,t){var n,r,i=e.exports={};function s(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function a(e){if(n===setTimeout)return setTimeout(e,0);if((n===s||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:s}catch(e){n=s}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(e){r=o}}();var c,u=[],l=!1,h=-1;function d(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&f())}function f(){if(!l){var e=a(d);l=!0;for(var t=u.length;t;){for(c=u,u=[];++h<t;)c&&c[h].run();h=-1,t=u.length}c=null,l=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===o||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function g(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new p(e,t)),1!==u.length||l||a(f)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,t,n){"use strict";var r=n(53),i=/\s+/;function s(e,t,n,r){var s;if(!n)return this;for(t=t.split(i),n=r?function(e,t){return e.bind?e.bind(t):function(){e.apply(t,[].slice.call(arguments,0))}}(n,r):n,this._callbacks=this._callbacks||{};s=t.shift();)this._callbacks[s]=this._callbacks[s]||{sync:[],async:[]},this._callbacks[s][e].push(n);return this}function o(e,t,n){return function(){for(var r,i=0,s=e.length;!r&&i<s;i+=1)r=!1===e[i].apply(t,n);return!r}}e.exports={onSync:function(e,t,n){return s.call(this,"sync",e,t,n)},onAsync:function(e,t,n){return s.call(this,"async",e,t,n)},off:function(e){var t;if(!this._callbacks)return this;e=e.split(i);for(;t=e.shift();)delete this._callbacks[t];return this},trigger:function(e){var t,n,s,a,c;if(!this._callbacks)return this;e=e.split(i),s=[].slice.call(arguments,1);for(;(t=e.shift())&&(n=this._callbacks[t]);)a=o(n.sync,this,[t].concat(s)),c=o(n.async,this,[t].concat(s)),a()&&r(c);return this}}},function(e,t,n){"use strict";var r=n(0),i={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};r.isMsie()&&r.mixin(i.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),r.isMsie()&&r.isMsie()<=7&&r.mixin(i.input,{marginTop:"-1px"}),e.exports=i},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){e.exports=function(e,t){return function(n,i,s){if("function"==typeof n&&"object"==typeof i||"object"==typeof s)throw new r.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof n?(s=n,n=""):1!==arguments.length&&"function"!=typeof i||(s=i,i=void 0),"object"==typeof n&&null!==n?(i=n,n=void 0):void 0!==n&&null!==n||(n="");var o,a="";return void 0!==n&&(a+=e+"="+encodeURIComponent(n)),void 0!==i&&(i.additionalUA&&(o=i.additionalUA,delete i.additionalUA),a=this.as._getSearchParams(i,a)),this._search(a,t,s,o)}};var r=n(5)},function(e,t,n){e.exports=function(e,t){var r=n(36),i={};return n(2)(r(e),function(n){!0!==t(n)&&(i[n]=e[n])}),i}},function(e,t){!function(t,n){e.exports=function(e){var t=function(){var t,n,r,i,s,o,a=[],c=a.concat,u=a.filter,l=a.slice,h=e.document,d={},f={},p={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,b=/([A-Z])/g,w=["val","css","html","text","data","width","height","offset"],_=h.createElement("table"),E=h.createElement("tr"),x={tr:h.createElement("tbody"),tbody:_,thead:_,tfoot:_,td:E,th:E,"*":h.createElement("div")},S=/complete|loaded|interactive/,C=/^[\w-]*$/,A={},N=A.toString,O={},T=h.createElement("div"),k={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},R=Array.isArray||function(e){return e instanceof Array};function M(e){return null==e?String(e):A[N.call(e)]||"object"}function L(e){return"function"==M(e)}function I(e){return null!=e&&e==e.window}function D(e){return null!=e&&e.nodeType==e.DOCUMENT_NODE}function P(e){return"object"==M(e)}function j(e){return P(e)&&!I(e)&&Object.getPrototypeOf(e)==Object.prototype}function $(e){var t=!!e&&"length"in e&&e.length,n=r.type(e);return"function"!=n&&!I(e)&&("array"==n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function H(e){return e.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function B(e){return e in f?f[e]:f[e]=new RegExp("(^|\\s)"+e+"(\\s|$)")}function q(e,t){return"number"!=typeof t||p[H(e)]?t:t+"px"}function z(e){return"children"in e?l.call(e.children):r.map(e.childNodes,function(e){if(1==e.nodeType)return e})}function F(e,t){var n,r=e?e.length:0;for(n=0;n<r;n++)this[n]=e[n];this.length=r,this.selector=t||""}function U(e,t){return null==t?r(e):r(e).filter(t)}function K(e,t,n,r){return L(t)?t.call(e,n,r):t}function V(e,t,n){null==n?e.removeAttribute(t):e.setAttribute(t,n)}function J(e,n){var r=e.className||"",i=r&&r.baseVal!==t;if(n===t)return i?r.baseVal:r;i?r.baseVal=n:e.className=n}function W(e){try{return e?"true"==e||"false"!=e&&("null"==e?null:+e+""==e?+e:/^[\[\{]/.test(e)?r.parseJSON(e):e):e}catch(t){return e}}return O.matches=function(e,t){if(!t||!e||1!==e.nodeType)return!1;var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.matchesSelector;if(n)return n.call(e,t);var r,i=e.parentNode,s=!i;return s&&(i=T).appendChild(e),r=~O.qsa(i,t).indexOf(e),s&&T.removeChild(e),r},s=function(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUpperCase():""})},o=function(e){return u.call(e,function(t,n){return e.indexOf(t)==n})},O.fragment=function(e,n,i){var s,o,a;return m.test(e)&&(s=r(h.createElement(RegExp.$1))),s||(e.replace&&(e=e.replace(v,"<$1></$2>")),n===t&&(n=g.test(e)&&RegExp.$1),n in x||(n="*"),(a=x[n]).innerHTML=""+e,s=r.each(l.call(a.childNodes),function(){a.removeChild(this)})),j(i)&&(o=r(s),r.each(i,function(e,t){w.indexOf(e)>-1?o[e](t):o.attr(e,t)})),s},O.Z=function(e,t){return new F(e,t)},O.isZ=function(e){return e instanceof O.Z},O.init=function(e,n){var i;if(!e)return O.Z();if("string"==typeof e)if("<"==(e=e.trim())[0]&&g.test(e))i=O.fragment(e,RegExp.$1,n),e=null;else{if(n!==t)return r(n).find(e);i=O.qsa(h,e)}else{if(L(e))return r(h).ready(e);if(O.isZ(e))return e;if(R(e))i=function(e){return u.call(e,function(e){return null!=e})}(e);else if(P(e))i=[e],e=null;else if(g.test(e))i=O.fragment(e.trim(),RegExp.$1,n),e=null;else{if(n!==t)return r(n).find(e);i=O.qsa(h,e)}}return O.Z(i,e)},(r=function(e,t){return O.init(e,t)}).extend=function(e){var r,i=l.call(arguments,1);return"boolean"==typeof e&&(r=e,e=i.shift()),i.forEach(function(i){!function e(r,i,s){for(n in i)s&&(j(i[n])||R(i[n]))?(j(i[n])&&!j(r[n])&&(r[n]={}),R(i[n])&&!R(r[n])&&(r[n]=[]),e(r[n],i[n],s)):i[n]!==t&&(r[n]=i[n])}(e,i,r)}),e},O.qsa=function(e,t){var n,r="#"==t[0],i=!r&&"."==t[0],s=r||i?t.slice(1):t,o=C.test(s);return e.getElementById&&o&&r?(n=e.getElementById(s))?[n]:[]:1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType?[]:l.call(o&&!r&&e.getElementsByClassName?i?e.getElementsByClassName(s):e.getElementsByTagName(t):e.querySelectorAll(t))},r.contains=h.documentElement.contains?function(e,t){return e!==t&&e.contains(t)}:function(e,t){for(;t&&(t=t.parentNode);)if(t===e)return!0;return!1},r.type=M,r.isFunction=L,r.isWindow=I,r.isArray=R,r.isPlainObject=j,r.isEmptyObject=function(e){var t;for(t in e)return!1;return!0},r.isNumeric=function(e){var t=Number(e),n=typeof e;return null!=e&&"boolean"!=n&&("string"!=n||e.length)&&!isNaN(t)&&isFinite(t)||!1},r.inArray=function(e,t,n){return a.indexOf.call(t,e,n)},r.camelCase=s,r.trim=function(e){return null==e?"":String.prototype.trim.call(e)},r.uuid=0,r.support={},r.expr={},r.noop=function(){},r.map=function(e,t){var n,i,s,o=[];if($(e))for(i=0;i<e.length;i++)null!=(n=t(e[i],i))&&o.push(n);else for(s in e)null!=(n=t(e[s],s))&&o.push(n);return function(e){return e.length>0?r.fn.concat.apply([],e):e}(o)},r.each=function(e,t){var n,r;if($(e)){for(n=0;n<e.length;n++)if(!1===t.call(e[n],n,e[n]))return e}else for(r in e)if(!1===t.call(e[r],r,e[r]))return e;return e},r.grep=function(e,t){return u.call(e,t)},e.JSON&&(r.parseJSON=JSON.parse),r.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){A["[object "+t+"]"]=t.toLowerCase()}),r.fn={constructor:O.Z,length:0,forEach:a.forEach,reduce:a.reduce,push:a.push,sort:a.sort,splice:a.splice,indexOf:a.indexOf,concat:function(){var e,t,n=[];for(e=0;e<arguments.length;e++)t=arguments[e],n[e]=O.isZ(t)?t.toArray():t;return c.apply(O.isZ(this)?this.toArray():this,n)},map:function(e){return r(r.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return r(l.apply(this,arguments))},ready:function(e){return S.test(h.readyState)&&h.body?e(r):h.addEventListener("DOMContentLoaded",function(){e(r)},!1),this},get:function(e){return e===t?l.call(this):this[e>=0?e:e+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(e){return a.every.call(this,function(t,n){return!1!==e.call(t,n,t)}),this},filter:function(e){return L(e)?this.not(this.not(e)):r(u.call(this,function(t){return O.matches(t,e)}))},add:function(e,t){return r(o(this.concat(r(e,t))))},is:function(e){return this.length>0&&O.matches(this[0],e)},not:function(e){var n=[];if(L(e)&&e.call!==t)this.each(function(t){e.call(this,t)||n.push(this)});else{var i="string"==typeof e?this.filter(e):$(e)&&L(e.item)?l.call(e):r(e);this.forEach(function(e){i.indexOf(e)<0&&n.push(e)})}return r(n)},has:function(e){return this.filter(function(){return P(e)?r.contains(this,e):r(this).find(e).size()})},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){var e=this[0];return e&&!P(e)?e:r(e)},last:function(){var e=this[this.length-1];return e&&!P(e)?e:r(e)},find:function(e){var t=this;return e?"object"==typeof e?r(e).filter(function(){var e=this;return a.some.call(t,function(t){return r.contains(t,e)})}):1==this.length?r(O.qsa(this[0],e)):this.map(function(){return O.qsa(this,e)}):r()},closest:function(e,t){var n=[],i="object"==typeof e&&r(e);return this.each(function(r,s){for(;s&&!(i?i.indexOf(s)>=0:O.matches(s,e));)s=s!==t&&!D(s)&&s.parentNode;s&&n.indexOf(s)<0&&n.push(s)}),r(n)},parents:function(e){for(var t=[],n=this;n.length>0;)n=r.map(n,function(e){if((e=e.parentNode)&&!D(e)&&t.indexOf(e)<0)return t.push(e),e});return U(t,e)},parent:function(e){return U(o(this.pluck("parentNode")),e)},children:function(e){return U(this.map(function(){return z(this)}),e)},contents:function(){return this.map(function(){return this.contentDocument||l.call(this.childNodes)})},siblings:function(e){return U(this.map(function(e,t){return u.call(z(t.parentNode),function(e){return e!==t})}),e)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(e){return r.map(this,function(t){return t[e]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=function(e){var t,n;d[e]||(t=h.createElement(e),h.body.appendChild(t),n=getComputedStyle(t,"").getPropertyValue("display"),t.parentNode.removeChild(t),"none"==n&&(n="block"),d[e]=n);return d[e]}(this.nodeName))})},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){var t=L(e);if(this[0]&&!t)var n=r(e).get(0),i=n.parentNode||this.length>1;return this.each(function(s){r(this).wrapAll(t?e.call(this,s):i?n.cloneNode(!0):n)})},wrapAll:function(e){if(this[0]){var t;for(r(this[0]).before(e=r(e));(t=e.children()).length;)e=t.first();r(e).append(this)}return this},wrapInner:function(e){var t=L(e);return this.each(function(n){var i=r(this),s=i.contents(),o=t?e.call(this,n):e;s.length?s.wrapAll(o):i.append(o)})},unwrap:function(){return this.parent().each(function(){r(this).replaceWith(r(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(e){return this.each(function(){var n=r(this);(e===t?"none"==n.css("display"):e)?n.show():n.hide()})},prev:function(e){return r(this.pluck("previousElementSibling")).filter(e||"*")},next:function(e){return r(this.pluck("nextElementSibling")).filter(e||"*")},html:function(e){return 0 in arguments?this.each(function(t){var n=this.innerHTML;r(this).empty().append(K(this,e,t,n))}):0 in this?this[0].innerHTML:null},text:function(e){return 0 in arguments?this.each(function(t){var n=K(this,e,t,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(e,r){var i;return"string"!=typeof e||1 in arguments?this.each(function(t){if(1===this.nodeType)if(P(e))for(n in e)V(this,n,e[n]);else V(this,e,K(this,r,t,this.getAttribute(e)))}):0 in this&&1==this[0].nodeType&&null!=(i=this[0].getAttribute(e))?i:t},removeAttr:function(e){return this.each(function(){1===this.nodeType&&e.split(" ").forEach(function(e){V(this,e)},this)})},prop:function(e,t){return e=k[e]||e,1 in arguments?this.each(function(n){this[e]=K(this,t,n,this[e])}):this[0]&&this[0][e]},removeProp:function(e){return e=k[e]||e,this.each(function(){delete this[e]})},data:function(e,n){var r="data-"+e.replace(b,"-$1").toLowerCase(),i=1 in arguments?this.attr(r,n):this.attr(r);return null!==i?W(i):t},val:function(e){return 0 in arguments?(null==e&&(e=""),this.each(function(t){this.value=K(this,e,t,this.value)})):this[0]&&(this[0].multiple?r(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var n=r(this),i=K(this,t,e,n.offset()),s=n.offsetParent().offset(),o={top:i.top-s.top,left:i.left-s.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)});if(!this.length)return null;if(h.documentElement!==this[0]&&!r.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+e.pageXOffset,top:n.top+e.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(e,t){if(arguments.length<2){var i=this[0];if("string"==typeof e){if(!i)return;return i.style[s(e)]||getComputedStyle(i,"").getPropertyValue(e)}if(R(e)){if(!i)return;var o={},a=getComputedStyle(i,"");return r.each(e,function(e,t){o[t]=i.style[s(t)]||a.getPropertyValue(t)}),o}}var c="";if("string"==M(e))t||0===t?c=H(e)+":"+q(e,t):this.each(function(){this.style.removeProperty(H(e))});else for(n in e)e[n]||0===e[n]?c+=H(n)+":"+q(n,e[n])+";":this.each(function(){this.style.removeProperty(H(n))});return this.each(function(){this.style.cssText+=";"+c})},index:function(e){return e?this.indexOf(r(e)[0]):this.parent().children().indexOf(this[0])},hasClass:function(e){return!!e&&a.some.call(this,function(e){return this.test(J(e))},B(e))},addClass:function(e){return e?this.each(function(t){if("className"in this){i=[];var n=J(this),s=K(this,e,t,n);s.split(/\s+/g).forEach(function(e){r(this).hasClass(e)||i.push(e)},this),i.length&&J(this,n+(n?" ":"")+i.join(" "))}}):this},removeClass:function(e){return this.each(function(n){if("className"in this){if(e===t)return J(this,"");i=J(this),K(this,e,n,i).split(/\s+/g).forEach(function(e){i=i.replace(B(e)," ")}),J(this,i.trim())}})},toggleClass:function(e,n){return e?this.each(function(i){var s=r(this),o=K(this,e,i,J(this));o.split(/\s+/g).forEach(function(e){(n===t?!s.hasClass(e):n)?s.addClass(e):s.removeClass(e)})}):this},scrollTop:function(e){if(this.length){var n="scrollTop"in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=e}:function(){this.scrollTo(this.scrollX,e)})}},scrollLeft:function(e){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=e}:function(){this.scrollTo(e,this.scrollY)})}},position:function(){if(this.length){var e=this[0],t=this.offsetParent(),n=this.offset(),i=y.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(r(e).css("margin-top"))||0,n.left-=parseFloat(r(e).css("margin-left"))||0,i.top+=parseFloat(r(t[0]).css("border-top-width"))||0,i.left+=parseFloat(r(t[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||h.body;e&&!y.test(e.nodeName)&&"static"==r(e).css("position");)e=e.offsetParent;return e})}},r.fn.detach=r.fn.remove,["width","height"].forEach(function(e){var n=e.replace(/./,function(e){return e[0].toUpperCase()});r.fn[e]=function(i){var s,o=this[0];return i===t?I(o)?o["inner"+n]:D(o)?o.documentElement["scroll"+n]:(s=this.offset())&&s[e]:this.each(function(t){(o=r(this)).css(e,K(this,i,t,o[e]()))})}}),["after","prepend","before","append"].forEach(function(n,i){var s=i%2;r.fn[n]=function(){var n,o,a=r.map(arguments,function(e){var i=[];return"array"==(n=M(e))?(e.forEach(function(e){return e.nodeType!==t?i.push(e):r.zepto.isZ(e)?i=i.concat(e.get()):void(i=i.concat(O.fragment(e)))}),i):"object"==n||null==e?e:O.fragment(e)}),c=this.length>1;return a.length<1?this:this.each(function(t,n){o=s?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var u=r.contains(h.documentElement,o);a.forEach(function(t){if(c)t=t.cloneNode(!0);else if(!o)return r(t).remove();o.insertBefore(t,n),u&&function e(t,n){n(t);for(var r=0,i=t.childNodes.length;r<i;r++)e(t.childNodes[r],n)}(t,function(t){if(!(null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src)){var n=t.ownerDocument?t.ownerDocument.defaultView:e;n.eval.call(n,t.innerHTML)}})})})},r.fn[s?n+"To":"insert"+(i?"Before":"After")]=function(e){return r(e)[n](this),this}}),O.Z.prototype=F.prototype=r.fn,O.uniq=o,O.deserializeValue=W,r.zepto=O,r}();return function(t){var n,r=1,i=Array.prototype.slice,s=t.isFunction,o=function(e){return"string"==typeof e},a={},c={},u="onfocusin"in e,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function d(e){return e._zid||(e._zid=r++)}function f(e,t,n,r){if((t=p(t)).ns)var i=function(e){return new RegExp("(?:^| )"+e.replace(" "," .* ?")+"(?: |$)")}(t.ns);return(a[d(e)]||[]).filter(function(e){return e&&(!t.e||e.e==t.e)&&(!t.ns||i.test(e.ns))&&(!n||d(e.fn)===d(n))&&(!r||e.sel==r)})}function p(e){var t=(""+e).split(".");return{e:t[0],ns:t.slice(1).sort().join(" ")}}function g(e,t){return e.del&&!u&&e.e in l||!!t}function m(e){return h[e]||u&&l[e]||e}function v(e,r,i,s,o,c,u){var l=d(e),f=a[l]||(a[l]=[]);r.split(/\s/).forEach(function(r){if("ready"==r)return t(document).ready(i);var a=p(r);a.fn=i,a.sel=o,a.e in h&&(i=function(e){var n=e.relatedTarget;if(!n||n!==this&&!t.contains(this,n))return a.fn.apply(this,arguments)}),a.del=c;var l=c||i;a.proxy=function(t){if(!(t=x(t)).isImmediatePropagationStopped()){try{var r=Object.getOwnPropertyDescriptor(t,"data");r&&!r.writable||(t.data=s)}catch(t){}var i=l.apply(e,t._args==n?[t]:[t].concat(t._args));return!1===i&&(t.preventDefault(),t.stopPropagation()),i}},a.i=f.length,f.push(a),"addEventListener"in e&&e.addEventListener(m(a.e),a.proxy,g(a,u))})}function y(e,t,n,r,i){var s=d(e);(t||"").split(/\s/).forEach(function(t){f(e,t,n,r).forEach(function(t){delete a[s][t.i],"removeEventListener"in e&&e.removeEventListener(m(t.e),t.proxy,g(t,i))})})}c.click=c.mousedown=c.mouseup=c.mousemove="MouseEvents",t.event={add:v,remove:y},t.proxy=function(e,n){var r=2 in arguments&&i.call(arguments,2);if(s(e)){var a=function(){return e.apply(n,r?r.concat(i.call(arguments)):arguments)};return a._zid=d(e),a}if(o(n))return r?(r.unshift(e[n],e),t.proxy.apply(null,r)):t.proxy(e[n],e);throw new TypeError("expected function")},t.fn.bind=function(e,t,n){return this.on(e,t,n)},t.fn.unbind=function(e,t){return this.off(e,t)},t.fn.one=function(e,t,n,r){return this.on(e,t,n,r,1)};var b=function(){return!0},w=function(){return!1},_=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,E={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function x(e,r){return!r&&e.isDefaultPrevented||(r||(r=e),t.each(E,function(t,n){var i=r[t];e[t]=function(){return this[n]=b,i&&i.apply(r,arguments)},e[n]=w}),e.timeStamp||(e.timeStamp=Date.now()),(r.defaultPrevented!==n?r.defaultPrevented:"returnValue"in r?!1===r.returnValue:r.getPreventDefault&&r.getPreventDefault())&&(e.isDefaultPrevented=b)),e}function S(e){var t,r={originalEvent:e};for(t in e)_.test(t)||e[t]===n||(r[t]=e[t]);return x(r,e)}t.fn.delegate=function(e,t,n){return this.on(t,e,n)},t.fn.undelegate=function(e,t,n){return this.off(t,e,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,r,a,c,u){var l,h,d=this;return e&&!o(e)?(t.each(e,function(e,t){d.on(e,r,a,t,u)}),d):(o(r)||s(c)||!1===c||(c=a,a=r,r=n),c!==n&&!1!==a||(c=a,a=n),!1===c&&(c=w),d.each(function(n,s){u&&(l=function(e){return y(s,e.type,c),c.apply(this,arguments)}),r&&(h=function(e){var n,o=t(e.target).closest(r,s).get(0);if(o&&o!==s)return n=t.extend(S(e),{currentTarget:o,liveFired:s}),(l||c).apply(o,[n].concat(i.call(arguments,1)))}),v(s,e,c,a,r,h||l)}))},t.fn.off=function(e,r,i){var a=this;return e&&!o(e)?(t.each(e,function(e,t){a.off(e,r,t)}),a):(o(r)||s(i)||!1===i||(i=r,r=n),!1===i&&(i=w),a.each(function(){y(this,e,i,r)}))},t.fn.trigger=function(e,n){return(e=o(e)||t.isPlainObject(e)?t.Event(e):x(e))._args=n,this.each(function(){e.type in l&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,n){var r,i;return this.each(function(s,a){(r=S(o(e)?t.Event(e):e))._args=n,r.target=a,t.each(f(a,e.type||e),function(e,t){if(i=t.proxy(r),r.isImmediatePropagationStopped())return!1})}),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(e,t){o(e)||(e=(t=e).type);var n=document.createEvent(c[e]||"Events"),r=!0;if(t)for(var i in t)"bubbles"==i?r=!!t[i]:n[i]=t[i];return n.initEvent(e,r,!0),x(n)}}(t),function(e){var n,r=[];t.fn.remove=function(){return this.each(function(){this.parentNode&&("IMG"===this.tagName&&(r.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",n&&clearTimeout(n),n=setTimeout(function(){r=[]},6e4)),this.parentNode.removeChild(this))})}}(),function(e){var t={},n=e.fn.data,r=e.camelCase,i=e.expando="Zepto"+ +new Date,s=[];function o(n,o,a){var c=n[i]||(n[i]=++e.uuid),u=t[c]||(t[c]=function(t){var n={};return e.each(t.attributes||s,function(t,i){0==i.name.indexOf("data-")&&(n[r(i.name.replace("data-",""))]=e.zepto.deserializeValue(i.value))}),n}(n));return void 0!==o&&(u[r(o)]=a),u}e.fn.data=function(s,a){return void 0===a?e.isPlainObject(s)?this.each(function(t,n){e.each(s,function(e,t){o(n,e,t)})}):0 in this?function(s,a){var c=s[i],u=c&&t[c];if(void 0===a)return u||o(s);if(u){if(a in u)return u[a];var l=r(a);if(l in u)return u[l]}return n.call(e(s),a)}(this[0],s):void 0:this.each(function(){o(this,s,a)})},e.data=function(t,n,r){return e(t).data(n,r)},e.hasData=function(n){var r=n[i],s=r&&t[r];return!!s&&!e.isEmptyObject(s)},e.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each(function(){var s=this[i],o=s&&t[s];o&&e.each(n||o,function(e){delete o[n?r(this):e]})})},["remove","empty"].forEach(function(t){var n=e.fn[t];e.fn[t]=function(){var e=this.find("*");return"remove"===t&&(e=e.add(this)),e.removeData(),n.call(this)}})}(t),t}(t)}(window)},function(e,t,n){"use strict";var r=n(0),i=n(1);function s(e){e&&e.el||r.error("EventBus initialized without el"),this.$el=i.element(e.el)}r.mixin(s.prototype,{trigger:function(e){var t=[].slice.call(arguments,1),n=r.Event("autocomplete:"+e);return this.$el.trigger(n,t),n}}),e.exports=s},function(e,t,n){"use strict";e.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},function(e,t){e.exports="0.32.0"},function(e,t,n){"use strict";e.exports=function(e){var t=e.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(t)return[t[1],t[2],t[3]]}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e){return e&&e.__esModule?e:{default:e}}(n(15));t.default=r.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="2.6.1"},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e:{default:e}}(n(23));e.exports=r.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(n(24)),i=o(n(25)),s=o(n(21));function o(e){return e&&e.__esModule?e:{default:e}}var a=(0,r.default)(i.default);a.version=s.default,t.default=a},function(e,t,n){"use strict";var r=Function.prototype.bind;e.exports=function(e){var t=function(){for(var t=arguments.length,n=Array(t),i=0;i<t;i++)n[i]=arguments[i];return new(r.apply(e,[null].concat(n)))};return t.__proto__=e,t.prototype=e.prototype,t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=d(n(26)),o=d(n(29)),a=d(n(49)),c=d(n(64)),u=d(n(65)),l=d(n(21)),h=d(n(20));function d(e){return e&&e.__esModule?e:{default:e}}var f=function(){function e(t){var n=t.apiKey,i=t.indexName,s=t.inputSelector,u=t.appId,d=void 0===u?"BH4D9OD16A":u,f=t.debug,p=void 0!==f&&f,g=t.algoliaOptions,m=void 0===g?{}:g,v=t.autocompleteOptions,y=void 0===v?{debug:!1,hint:!1,autoselect:!0}:v,b=t.transformData,w=void 0!==b&&b,_=t.queryHook,E=void 0!==_&&_,x=t.handleSelected,S=void 0!==x&&x,C=t.enhancedSearchInput,A=void 0!==C&&C,N=t.layout,O=void 0===N?"collumns":N;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),e.checkArguments({apiKey:n,indexName:i,inputSelector:s,debug:p,algoliaOptions:m,autocompleteOptions:y,transformData:w,queryHook:E,handleSelected:S,enhancedSearchInput:A,layout:O}),this.apiKey=n,this.appId=d,this.indexName=i,this.input=e.getInputFromSelector(s),this.algoliaOptions=r({hitsPerPage:5},m);var T=!(!y||!y.debug)&&y.debug;y.debug=p||T,this.autocompleteOptions=y,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||"ds",S=S||this.handleSelected,this.isSimpleLayout="simple"===O,this.client=(0,o.default)(this.appId,this.apiKey),this.client.addAlgoliaAgent("docsearch.js "+l.default),A&&(this.input=e.injectSearchBox(this.input)),this.autocomplete=(0,a.default)(this.input,y,[{source:this.getAutocompleteSource(w,E),templates:{suggestion:e.getSuggestionTemplate(this.isSimpleLayout),footer:c.default.footer,empty:e.getEmptyTemplate()}}]),S&&(0,h.default)(".algolia-autocomplete").on("click",".ds-suggestions a",function(e){e.preventDefault()}),this.autocomplete.on("autocomplete:selected",S.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on("autocomplete:shown",this.handleShown.bind(null,this.input)),A&&e.bindSearchBoxEvent()}return i(e,[{key:"getAutocompleteSource",value:function(t,n){var r=this;return function(i,s){n&&(i=n(i)||i),r.client.search([{indexName:r.indexName,query:i,params:r.algoliaOptions}]).then(function(n){var r=n.results[0].hits;t&&(r=t(r)||r),s(e.formatHits(r))})}}},{key:"handleSelected",value:function(e,t,n){e.setVal(""),window.location.assign(n.url)}},{key:"handleShown",value:function(e){var t=e.offset().left+e.width()/2,n=(0,h.default)(document).width()/2;isNaN(n)&&(n=900);var r=t-n>=0?"algolia-autocomplete-right":"algolia-autocomplete-left",i=t-n<0?"algolia-autocomplete-right":"algolia-autocomplete-left",s=(0,h.default)(".algolia-autocomplete");s.hasClass(r)||s.addClass(r),s.hasClass(i)&&s.removeClass(i)}}],[{key:"checkArguments",value:function(t){if(!t.apiKey||!t.indexName)throw new Error("Usage:\n  documentationSearch({\n  apiKey,\n  indexName,\n  inputSelector,\n  [ appId ],\n  [ algoliaOptions.{hitsPerPage} ]\n  [ autocompleteOptions.{hint,debug} ]\n})");if("string"!=typeof t.inputSelector)throw new Error("Error: inputSelector:"+t.inputSelector+"  must be a string. Each selector must match only one element and separated by ','");if(!e.getInputFromSelector(t.inputSelector))throw new Error("Error: No input element in the page matches "+t.inputSelector)}},{key:"injectSearchBox",value:function(e){e.before(c.default.searchBox);var t=e.prev().prev().find("input");return e.remove(),t}},{key:"bindSearchBoxEvent",value:function(){(0,h.default)('.searchbox [type="reset"]').on("click",function(){(0,h.default)("input#docsearch").focus(),(0,h.default)(this).addClass("hide"),a.default.autocomplete.setVal("")}),(0,h.default)("input#docsearch").on("keyup",function(){var e=document.querySelector("input#docsearch"),t=document.querySelector('.searchbox [type="reset"]');t.className="searchbox__reset",0===e.value.length&&(t.className+=" hide")})}},{key:"getInputFromSelector",value:function(e){var t=(0,h.default)(e).filter("input");return t.length?(0,h.default)(t[0]):null}},{key:"formatHits",value:function(t){var n=u.default.deepClone(t).map(function(e){return e._highlightResult&&(e._highlightResult=u.default.mergeKeyWithParent(e._highlightResult,"hierarchy")),u.default.mergeKeyWithParent(e,"hierarchy")}),r=u.default.groupBy(n,"lvl0");return h.default.each(r,function(e,t){var n=u.default.groupBy(t,"lvl1"),i=u.default.flattenAndFlagFirst(n,"isSubCategoryHeader");r[e]=i}),(r=u.default.flattenAndFlagFirst(r,"isCategoryHeader")).map(function(t){var n=e.formatURL(t),r=u.default.getHighlightedValue(t,"lvl0"),i=u.default.getHighlightedValue(t,"lvl1")||r,s=u.default.compact([u.default.getHighlightedValue(t,"lvl2")||i,u.default.getHighlightedValue(t,"lvl3"),u.default.getHighlightedValue(t,"lvl4"),u.default.getHighlightedValue(t,"lvl5"),u.default.getHighlightedValue(t,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> › </span>'),o=u.default.getSnippetedValue(t,"content"),a=i&&""!==i||s&&""!==s,c=s&&""!==s&&s!==i,l=!c&&i&&""!==i&&i!==r;return{isLvl0:!l&&!c,isLvl1:l,isLvl2:c,isLvl1EmptyOrDuplicate:!i||""===i||i===r,isCategoryHeader:t.isCategoryHeader,isSubCategoryHeader:t.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:a,category:r,subcategory:i,title:s,text:o,url:n}})}},{key:"formatURL",value:function(e){var t=e.url,n=e.anchor;return t?-1!==t.indexOf("#")?t:n?e.url+"#"+e.anchor:t:n?"#"+e.anchor:(console.warn("no anchor nor url for : ",JSON.stringify(e)),null)}},{key:"getEmptyTemplate",value:function(){return function(e){return s.default.compile(c.default.empty).render(e)}}},{key:"getSuggestionTemplate",value:function(e){var t=e?c.default.suggestionSimple:c.default.suggestion,n=s.default.compile(t);return function(e){return n.render(e)}}}]),e}();t.default=f},function(e,t,n){var r=n(27);r.Template=n(28).Template,r.template=r.Template,e.exports=r},function(e,t,n){!function(e){var t=/\S/,n=/\"/g,r=/\n/g,i=/\r/g,s=/\\/g,o=/\u2028/,a=/\u2029/;function c(e){"}"===e.n.substr(e.n.length-1)&&(e.n=e.n.substring(0,e.n.length-1))}function u(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function l(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var r=1,i=e.length;r<i;r++)if(t.charAt(n+r)!=e.charAt(r))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(n,r){var i=n.length,s=0,o=null,a=null,h="",d=[],f=!1,p=0,g=0,m="{{",v="}}";function y(){h.length>0&&(d.push({tag:"_t",text:new String(h)}),h="")}function b(n,r){if(y(),n&&function(){for(var n=!0,r=g;r<d.length;r++)if(!(n=e.tags[d[r].tag]<e.tags._v||"_t"==d[r].tag&&null===d[r].text.match(t)))return!1;return n}())for(var i,s=g;s<d.length;s++)d[s].text&&((i=d[s+1])&&">"==i.tag&&(i.indent=d[s].text.toString()),d.splice(s,1));else r||d.push({tag:"\n"});f=!1,g=d.length}function w(e,t){var n="="+v,r=e.indexOf(n,t),i=u(e.substring(e.indexOf("=",t)+1,r)).split(" ");return m=i[0],v=i[i.length-1],r+n.length-1}for(r&&(r=r.split(" "),m=r[0],v=r[1]),p=0;p<i;p++)0==s?l(m,n,p)?(--p,y(),s=1):"\n"==n.charAt(p)?b(f):h+=n.charAt(p):1==s?(p+=m.length-1,"="==(o=(a=e.tags[n.charAt(p+1)])?n.charAt(p+1):"_v")?(p=w(n,p),s=0):(a&&p++,s=2),f=p):l(v,n,p)?(d.push({tag:o,n:u(h),otag:m,ctag:v,i:"/"==o?f-m.length:p+v.length}),h="",p+=v.length-1,s=0,"{"==o&&("}}"==v?p++:c(d[d.length-1]))):h+=n.charAt(p);return b(f,!0),d};var h={_t:!0,"\n":!0,$:!0,"/":!0};function d(e,t){for(var n=0,r=t.length;n<r;n++)if(t[n].o==e.n)return e.tag="#",!0}function f(e,t,n){for(var r=0,i=n.length;r<i;r++)if(n[r].c==e&&n[r].o==t)return!0}function p(e){var t=[];for(var n in e.partials)t.push('"'+m(n)+'":{name:"'+m(e.partials[n].name)+'", '+p(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+m(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}e.stringify=function(t,n,r){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+p(t)+"}"};var g=0;function m(e){return e.replace(s,"\\\\").replace(n,'\\"').replace(r,"\\n").replace(i,"\\r").replace(o,"\\u2028").replace(a,"\\u2029")}function v(e){return~e.indexOf(".")?"d":"f"}function y(e,t){var n="<"+(t.prefix||"")+e.n+g++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+m(n)+'",c,p,"'+(e.indent||"")+'"));',n}function b(e,t){t.code+="t.b(t.t(t."+v(e.n)+'("'+m(e.n)+'",c,p,0)));'}function w(e){return"t.b("+e+");"}e.generate=function(t,n,r){g=0;var i={code:"",subs:{},partials:{}};return e.walk(t,i),r.asString?this.stringify(i,n,r):this.makeTemplate(i,n,r)},e.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(e,t,n){var r=this.makePartials(e);return r.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(r,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},e.codegen={"#":function(t,n){n.code+="if(t.s(t."+v(t.n)+'("'+m(t.n)+'",c,p,1),c,p,0,'+t.i+","+t.end+',"'+t.otag+" "+t.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+="});c.pop();}"},"^":function(t,n){n.code+="if(!t.s(t."+v(t.n)+'("'+m(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,n),n.code+="};"},">":y,"<":function(t,n){var r={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,r);var i=n.partials[y(t,n)];i.subs=r.subs,i.partials=r.partials},$:function(t,n){var r={subs:{},code:"",partials:n.partials,prefix:t.n};e.walk(t.nodes,r),n.subs[t.n]=r.code,n.inPartial||(n.code+='t.sub("'+m(t.n)+'",c,p,i);')},"\n":function(e,t){t.code+=w('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+v(e.n)+'("'+m(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=w('"'+m(e.text)+'"')},"{":b,"&":b},e.walk=function(t,n){for(var r,i=0,s=t.length;i<s;i++)(r=e.codegen[t[i].tag])&&r(t[i],n);return n},e.parse=function(t,n,r){return function t(n,r,i,s){var o,a=[],c=null,u=null;for(o=i[i.length-1];n.length>0;){if(u=n.shift(),o&&"<"==o.tag&&!(u.tag in h))throw new Error("Illegal content in < super tag.");if(e.tags[u.tag]<=e.tags.$||d(u,s))i.push(u),u.nodes=t(n,u.tag,i,s);else{if("/"==u.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+u.n);if(c=i.pop(),u.n!=c.n&&!f(u.n,c.n,s))throw new Error("Nesting error: "+c.n+" vs. "+u.n);return c.end=u.i,a}"\n"==u.tag&&(u.last=0==n.length||"\n"==n[0].tag)}a.push(u)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return a}(t,0,[],(r=r||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,n){n=n||{};var r=e.cacheKey(t,n),i=this.cache[r];if(i){var s=i.partials;for(var o in s)delete s[o].instance;return i}return i=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[r]=i}}(t)},function(e,t,n){!function(e){function t(e,t,n){var r;return t&&"object"==typeof t&&(void 0!==t[e]?r=t[e]:n&&t.get&&"function"==typeof t.get&&(r=t.get(e))),r}e.Template=function(e,t,n,r){e=e||{},this.r=e.code||this.r,this.c=n,this.options=r||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=c(e),a.test(e)?e.replace(n,"&amp;").replace(r,"&lt;").replace(i,"&gt;").replace(s,"&#39;").replace(o,"&quot;"):e},t:c,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],r=t[n.name];if(n.instance&&n.base==r)return n.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[e].base=r,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);r=function(e,t,n,r,i,s){function o(){}function a(){}var c;o.prototype=e,a.prototype=e.subs;var u=new o;for(c in u.subs=new a,u.subsText={},u.buf="",r=r||{},u.stackSubs=r,u.subsText=s,t)r[c]||(r[c]=t[c]);for(c in r)u.subs[c]=r[c];for(c in i=i||{},u.stackPartials=i,n)i[c]||(i[c]=n[c]);for(c in i)u.partials[c]=i[c];return u}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=r,r},rp:function(e,t,n,r){var i=this.ep(e,n);return i?i.ri(t,n,r):""},rs:function(e,t,n){var r=e[e.length-1];if(u(r))for(var i=0;i<r.length;i++)e.push(r[i]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,r,i,s,o){var a;return(!u(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,r,i,s,o)),a=!!e,!r&&a&&t&&t.push("object"==typeof e?e:t[t.length-1]),a)},d:function(e,n,r,i){var s,o=e.split("."),a=this.f(o[0],n,r,i),c=this.options.modelGet,l=null;if("."===e&&u(n[n.length-2]))a=n[n.length-1];else for(var h=1;h<o.length;h++)void 0!==(s=t(o[h],a,c))?(l=a,a=s):a="";return!(i&&!a)&&(i||"function"!=typeof a||(n.push(l),a=this.mv(a,n,r),n.pop()),a)},f:function(e,n,r,i){for(var s=!1,o=!1,a=this.options.modelGet,c=n.length-1;c>=0;c--)if(void 0!==(s=t(e,n[c],a))){o=!0;break}return o?(i||"function"!=typeof s||(s=this.mv(s,n,r)),s):!i&&""},ls:function(e,t,n,r,i){var s=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(c(e.call(t,r)),t,n)),this.options.delimiters=s,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,r,i,s,o){var a,c=t[t.length-1],u=e.call(c);return"function"==typeof u?!!r||(a=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(u,c,n,a.substring(i,s),o)):u},mv:function(e,t,n){var r=t[t.length-1],i=e.call(r);return"function"==typeof i?this.ct(c(i.call(r)),r,n):i},sub:function(e,t,n,r){var i=this.subs[e];i&&(this.activeSub=e,i(t,n,this,r),this.activeSub=!1)}};var n=/&/g,r=/</g,i=/>/g,s=/\'/g,o=/\"/g,a=/[&<>\"\']/;function c(e){return String(null===e||void 0===e?"":e)}var u=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)},function(e,t,n){"use strict";var r=n(30),i=n(41);e.exports=i(r,"(lite) ")},function(e,t,n){e.exports=c;var r=n(5),i=n(31),s=n(32),o=n(38),a=Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER&&parseInt(Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER,10)||12e4;function c(e,t,i){var s=n(8)("algoliasearch"),o=n(3),a=n(6),c=n(7),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(!0!==i._allowEmptyCredentials&&!e)throw new r.AlgoliaSearchError("Please provide an application ID. "+l);if(!0!==i._allowEmptyCredentials&&!t)throw new r.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=e,this.apiKey=t,this.hosts={read:[],write:[]},i=i||{},this._timeouts=i.timeouts||{connect:1e3,read:2e3,write:3e4},i.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=i.timeout);var h=i.protocol||"https:";if(/:$/.test(h)||(h+=":"),"http:"!==h&&"https:"!==h)throw new r.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+i.protocol+"`)");if(this._checkAppIdData(),i.hosts)a(i.hosts)?(this.hosts.read=o(i.hosts),this.hosts.write=o(i.hosts)):(this.hosts.read=o(i.hosts.read),this.hosts.write=o(i.hosts.write));else{var d=c(this._shuffleResult,function(t){return e+"-"+t+".algolianet.com"}),f=(!1===i.dsn?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+f].concat(d),this.hosts.write=[this.applicationID+".algolia.net"].concat(d)}this.hosts.read=c(this.hosts.read,u(h)),this.hosts.write=c(this.hosts.write,u(h)),this.extraHeaders={},this.cache=i._cache||{},this._ua=i._ua,this._useCache=!(void 0!==i._useCache&&!i._cache)||i._useCache,this._useRequestCache=this._useCache&&i._useRequestCache,this._useFallback=void 0===i.useFallback||i.useFallback,this._setTimeout=i._setTimeout,s("init done, %j",this)}function u(e){return function(t){return e+"//"+t.toLowerCase()}}function l(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var n=JSON.stringify(e);return Array.prototype.toJSON=t,n}function h(e){var t={};for(var n in e){var r;if(Object.prototype.hasOwnProperty.call(e,n))r="x-algolia-api-key"===n||"x-algolia-application-id"===n?"**hidden for security purposes**":e[n],t[n]=r}return t}c.prototype.initIndex=function(e){return new s(this,e)},c.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},c.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},c.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},c.prototype.addAlgoliaAgent=function(e){-1===this._ua.indexOf(";"+e)&&(this._ua+=";"+e)},c.prototype._jsonRequest=function(e){this._checkAppIdData();var t,s,o,a=n(8)("algoliasearch:"+e.url),c=e.additionalUA||"",u=e.cache,d=this,f=0,p=!1,g=d._useFallback&&d._request.fallback&&e.fallback;this.apiKey.length>500&&void 0!==e.body&&(void 0!==e.body.params||void 0!==e.body.requests)?(e.body.apiKey=this.apiKey,o=this._computeRequestHeaders({additionalUA:c,withApiKey:!1,headers:e.headers})):o=this._computeRequestHeaders({additionalUA:c,headers:e.headers}),void 0!==e.body&&(t=l(e.body)),a("request start");var m=[];function v(e,t,n){return d._useCache&&e&&t&&void 0!==t[n]}function y(t,n){if(v(d._useRequestCache,u,s)&&t.catch(function(){delete u[s]}),"function"!=typeof e.callback)return t.then(n);t.then(function(t){i(function(){e.callback(null,n(t))},d._setTimeout||setTimeout)},function(t){i(function(){e.callback(t)},d._setTimeout||setTimeout)})}if(d._useCache&&d._useRequestCache&&(s=e.url),d._useCache&&d._useRequestCache&&t&&(s+="_body_"+t),v(d._useRequestCache,u,s)){a("serving request from cache");var b=u[s];return y("function"!=typeof b.then?d._promise.resolve({responseText:b}):b,function(e){return JSON.parse(e.responseText)})}var w=function n(i,y){d._checkAppIdData();var b=new Date;if(d._useCache&&!d._useRequestCache&&(s=e.url),d._useCache&&!d._useRequestCache&&t&&(s+="_body_"+y.body),v(!d._useRequestCache,u,s)){a("serving response from cache");var w=u[s];return d._promise.resolve({body:JSON.parse(w),responseText:w})}if(f>=d.hosts[e.hostType].length)return!g||p?(a("could not get any response"),d._promise.reject(new r.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+d.applicationID,{debugData:m}))):(a("switching to fallback"),f=0,y.method=e.fallback.method,y.url=e.fallback.url,y.jsonBody=e.fallback.body,y.jsonBody&&(y.body=l(y.jsonBody)),o=d._computeRequestHeaders({additionalUA:c,headers:e.headers}),y.timeouts=d._getTimeoutsForRequest(e.hostType),d._setHostIndexByType(0,e.hostType),p=!0,n(d._request.fallback,y));var _=d._getHostByType(e.hostType),E=_+y.url,x={body:y.body,jsonBody:y.jsonBody,method:y.method,headers:o,timeouts:y.timeouts,debug:a,forceAuthHeaders:y.forceAuthHeaders};return a("method: %s, url: %s, headers: %j, timeouts: %d",x.method,E,x.headers,x.timeouts),i===d._request.fallback&&a("using fallback"),i.call(d,E,x).then(function(e){var n=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;a("received response: statusCode: %s, computed statusCode: %d, headers: %j",e.statusCode,n,e.headers);var i=2===Math.floor(n/100),c=new Date;if(m.push({currentHost:_,headers:h(o),content:t||null,contentLength:void 0!==t?t.length:null,method:y.method,timeouts:y.timeouts,url:y.url,startTime:b,endTime:c,duration:c-b,statusCode:n}),i)return d._useCache&&!d._useRequestCache&&u&&(u[s]=e.responseText),{responseText:e.responseText,body:e.body};if(4!==Math.floor(n/100))return f+=1,S();a("unrecoverable error");var l=new r.AlgoliaSearchError(e.body&&e.body.message,{debugData:m,statusCode:n});return d._promise.reject(l)},function(s){a("error: %s, stack: %s",s.message,s.stack);var c=new Date;return m.push({currentHost:_,headers:h(o),content:t||null,contentLength:void 0!==t?t.length:null,method:y.method,timeouts:y.timeouts,url:y.url,startTime:b,endTime:c,duration:c-b}),s instanceof r.AlgoliaSearchError||(s=new r.Unknown(s&&s.message,s)),f+=1,s instanceof r.Unknown||s instanceof r.UnparsableJSON||f>=d.hosts[e.hostType].length&&(p||!g)?(s.debugData=m,d._promise.reject(s)):s instanceof r.RequestTimeout?(a("retrying request with higher timeout"),d._incrementHostIndex(e.hostType),d._incrementTimeoutMultipler(),y.timeouts=d._getTimeoutsForRequest(e.hostType),n(i,y)):S()});function S(){return a("retrying request"),d._incrementHostIndex(e.hostType),n(i,y)}}(d._request,{url:e.url,method:e.method,body:t,jsonBody:e.body,timeouts:d._getTimeoutsForRequest(e.hostType),forceAuthHeaders:e.forceAuthHeaders});return d._useCache&&d._useRequestCache&&u&&(u[s]=w),y(w,function(e){return e.body})},c.prototype._getSearchParams=function(e,t){if(void 0===e||null===e)return t;for(var n in e)null!==n&&void 0!==e[n]&&e.hasOwnProperty(n)&&(t+=""===t?"":"&",t+=n+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[n])?l(e[n]):e[n]));return t},c.prototype._computeRequestHeaders=function(e){var t=n(2),r={"x-algolia-agent":e.additionalUA?this._ua+";"+e.additionalUA:this._ua,"x-algolia-application-id":this.applicationID};return!1!==e.withApiKey&&(r["x-algolia-api-key"]=this.apiKey),this.userToken&&(r["x-algolia-usertoken"]=this.userToken),this.securityTags&&(r["x-algolia-tagfilters"]=this.securityTags),t(this.extraHeaders,function(e,t){r[t]=e}),e.headers&&t(e.headers,function(e,t){r[t]=e}),r},c.prototype.search=function(e,t,r){var i=n(6),s=n(7);if(!i(e))throw new Error("Usage: client.search(arrayOfQueries[, callback])");"function"==typeof t?(r=t,t={}):void 0===t&&(t={});var o=this,a={requests:s(e,function(e){var t="";return void 0!==e.query&&(t+="query="+encodeURIComponent(e.query)),{indexName:e.indexName,params:o._getSearchParams(e.params,t)}})},c=s(a.requests,function(e,t){return t+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(e.indexName)+"?"+e.params)}).join("&");return void 0!==t.strategy&&(a.strategy=t.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/*/queries",body:a,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:c}},callback:r})},c.prototype.searchForFacetValues=function(e){var t=n(6),r=n(7),i="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!t(e))throw new Error(i);var s=this;return s._promise.all(r(e,function(e){if(!e||void 0===e.indexName||void 0===e.params.facetName||void 0===e.params.facetQuery)throw new Error(i);var t=n(3),r=n(14),o=e.indexName,a=e.params,c=a.facetName,u=r(t(a),function(e){return"facetName"===e}),l=s._getSearchParams(u,"");return s._jsonRequest({cache:s.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(o)+"/facets/"+encodeURIComponent(c)+"/query",hostType:"read",body:{params:l}})}))},c.prototype.setSecurityTags=function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var t=[],n=0;n<e.length;++n)if("[object Array]"===Object.prototype.toString.call(e[n])){for(var r=[],i=0;i<e[n].length;++i)r.push(e[n][i]);t.push("("+r.join(",")+")")}else t.push(e[n]);e=t.join(",")}this.securityTags=e},c.prototype.setUserToken=function(e){this.userToken=e},c.prototype.clearCache=function(){this.cache={}},c.prototype.setRequestTimeout=function(e){e&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=e)},c.prototype.setTimeouts=function(e){this._timeouts=e},c.prototype.getTimeouts=function(){return this._timeouts},c.prototype._getAppIdData=function(){var e=o.get(this.applicationID);return null!==e&&this._cacheAppIdData(e),e},c.prototype._setAppIdData=function(e){return e.lastChange=(new Date).getTime(),this._cacheAppIdData(e),o.set(this.applicationID,e)},c.prototype._checkAppIdData=function(){var e=this._getAppIdData(),t=(new Date).getTime();return null===e||t-e.lastChange>a?this._resetInitialAppIdData(e):e},c.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||function(e){var t,n,r=e.length;for(;0!==r;)n=Math.floor(Math.random()*r),t=e[r-=1],e[r]=e[n],e[n]=t;return e}([1,2,3]),this._setAppIdData(t)},c.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},c.prototype._partialAppIdDataUpdate=function(e){var t=n(2),r=this._getAppIdData();return t(e,function(e,t){r[t]=e}),this._setAppIdData(r)},c.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},c.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},c.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},c.prototype._setHostIndexByType=function(e,t){var r=n(3)(this._hostIndexes);return r[t]=e,this._partialAppIdDataUpdate({hostIndexes:r}),e},c.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},c.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},c.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}},function(e,t){e.exports=function(e,t){t(e,0)}},function(e,t,n){var r=n(13),i=n(33),s=n(34);function o(e,t){this.indexName=t,this.as=e,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}e.exports=o,o.prototype.clearCache=function(){this.cache={}},o.prototype.search=r("query"),o.prototype.similarSearch=r("similarQuery"),o.prototype.browse=function(e,t,r){var i,s,o=n(35);0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(i=0,r=arguments[0],e=void 0):"number"==typeof arguments[0]?(i=arguments[0],"number"==typeof arguments[1]?s=arguments[1]:"function"==typeof arguments[1]&&(r=arguments[1],s=void 0),e=void 0,t=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(r=arguments[1]),t=arguments[0],e=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(r=arguments[1],t=void 0),t=o({},t||{},{page:i,hitsPerPage:s,query:e});var a=this.as._getSearchParams(t,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{params:a},hostType:"read",callback:r})},o.prototype.browseFrom=function(e,t){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:e},hostType:"read",callback:t})},o.prototype.searchForFacetValues=function(e,t){var r=n(3),i=n(14);if(void 0===e.facetName||void 0===e.facetQuery)throw new Error("Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])");var s=e.facetName,o=i(r(e),function(e){return"facetName"===e}),a=this.as._getSearchParams(o,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(s)+"/query",hostType:"read",body:{params:a},callback:t})},o.prototype.searchFacet=i(function(e,t){return this.searchForFacetValues(e,t)},s("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),o.prototype._search=function(e,t,n,r){return this.as._jsonRequest({cache:this.cache,method:"POST",url:t||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:e},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:e}},callback:n,additionalUA:r})},o.prototype.getObject=function(e,t,n){1!==arguments.length&&"function"!=typeof t||(n=t,t=void 0);var r="";if(void 0!==t){r="?attributes=";for(var i=0;i<t.length;++i)0!==i&&(r+=","),r+=t[i]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/"+encodeURIComponent(e)+r,hostType:"read",callback:n})},o.prototype.getObjects=function(e,t,r){var i=n(6),s=n(7);if(!i(e))throw new Error("Usage: index.getObjects(arrayOfObjectIDs[, callback])");var o=this;1!==arguments.length&&"function"!=typeof t||(r=t,t=void 0);var a={requests:s(e,function(e){var n={indexName:o.indexName,objectID:e};return t&&(n.attributesToRetrieve=t.join(",")),n})};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:a,callback:r})},o.prototype.as=null,o.prototype.indexName=null,o.prototype.typeAheadArgs=null,o.prototype.typeAheadValueOption=null},function(e,t){e.exports=function(e,t){var n=!1;return function(){return n||(console.warn(t),n=!0),e.apply(this,arguments)}}},function(e,t){e.exports=function(e,t){return"algoliasearch: `"+e+"` was replaced by `"+t+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+e.toLowerCase().replace(/[\.\(\)]/g,"")}},function(e,t,n){var r=n(2);e.exports=function e(t){var n=Array.prototype.slice.call(arguments);return r(n,function(n){for(var r in n)n.hasOwnProperty(r)&&("object"==typeof t[r]&&"object"==typeof n[r]?t[r]=e({},t[r],n[r]):void 0!==n[r]&&(t[r]=n[r]))}),t}},function(e,t,n){"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,s=Array.prototype.slice,o=n(37),a=Object.prototype.propertyIsEnumerable,c=!a.call({toString:null},"toString"),u=a.call(function(){},"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(e){var t=e.constructor;return t&&t.prototype===e},d={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!d["$"+e]&&r.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{h(window[e])}catch(e){return!0}}catch(e){return!0}return!1}(),p=function(e){var t=null!==e&&"object"==typeof e,n="[object Function]"===i.call(e),s=o(e),a=t&&"[object String]"===i.call(e),d=[];if(!t&&!n&&!s)throw new TypeError("Object.keys called on a non-object");var p=u&&n;if(a&&e.length>0&&!r.call(e,0))for(var g=0;g<e.length;++g)d.push(String(g));if(s&&e.length>0)for(var m=0;m<e.length;++m)d.push(String(m));else for(var v in e)p&&"prototype"===v||!r.call(e,v)||d.push(String(v));if(c)for(var y=function(e){if("undefined"==typeof window||!f)return h(e);try{return h(e)}catch(e){return!1}}(e),b=0;b<l.length;++b)y&&"constructor"===l[b]||!r.call(e,l[b])||d.push(l[b]);return d};p.shim=function(){if(Object.keys){if(!function(){return 2===(Object.keys(arguments)||"").length}(1,2)){var e=Object.keys;Object.keys=function(t){return o(t)?e(s.call(t)):e(t)}}}else Object.keys=p;return Object.keys||p},e.exports=p},function(e,t,n){"use strict";var r=Object.prototype.toString;e.exports=function(e){var t=r.call(e),n="[object Arguments]"===t;return n||(n="[object Array]"!==t&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===r.call(e.callee)),n}},function(e,t,n){(function(t){var r,i=n(8)("algoliasearch:src/hostIndexState.js"),s="algoliasearch-client-js",o={state:{},set:function(e,t){return this.state[e]=t,this.state[e]},get:function(e){return this.state[e]||null}},a={set:function(e,n){o.set(e,n);try{var r=JSON.parse(t.localStorage[s]);return r[e]=n,t.localStorage[s]=JSON.stringify(r),r[e]}catch(t){return c(e,t)}},get:function(e){try{return JSON.parse(t.localStorage[s])[e]||null}catch(t){return c(e,t)}}};function c(e,n){return i("localStorage failed with",n),function(){try{t.localStorage.removeItem(s)}catch(e){}}(),(r=o).get(e)}function u(e,t){return 1===arguments.length?r.get(e):r.set(e,t)}function l(){try{return"localStorage"in t&&null!==t.localStorage&&(t.localStorage[s]||t.localStorage.setItem(s,JSON.stringify({})),!0)}catch(e){return!1}}r=l()?a:o,e.exports={get:u,set:u,supportsLocalStorage:l}}).call(t,n(4))},function(e,t,n){var r;function i(e){function n(){if(n.enabled){var e=n,i=+new Date,s=i-(r||i);e.diff=s,e.prev=r,e.curr=i,r=i;for(var o=new Array(arguments.length),a=0;a<o.length;a++)o[a]=arguments[a];o[0]=t.coerce(o[0]),"string"!=typeof o[0]&&o.unshift("%O");var c=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var i=t.formatters[r];if("function"==typeof i){var s=o[c];n=i.call(e,s),o.splice(c,1),c--}return n}),t.formatArgs.call(e,o),(n.log||t.log||console.log.bind(console)).apply(e,o)}}return n.namespace=e,n.enabled=t.enabled(e),n.useColors=t.useColors(),n.color=function(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}(e),"function"==typeof t.init&&t.init(n),n}(t=e.exports=i.debug=i.default=i).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){t.save(e),t.names=[],t.skips=[];for(var n=("string"==typeof e?e:"").split(/[\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&("-"===(e=n[i].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")))},t.enabled=function(e){var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(40),t.names=[],t.skips=[],t.formatters={}},function(e,t){var n=1e3,r=60*n,i=60*r,s=24*i,o=365.25*s;function a(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+n:Math.ceil(e/t)+" "+n+"s"}e.exports=function(e,t){t=t||{};var c=typeof e;if("string"===c&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var a=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return a*o;case"days":case"day":case"d":return a*s;case"hours":case"hour":case"hrs":case"hr":case"h":return a*i;case"minutes":case"minute":case"mins":case"min":case"m":return a*r;case"seconds":case"second":case"secs":case"sec":case"s":return a*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}(e);if("number"===c&&!1===isNaN(e))return t.long?function(e){return a(e,s,"day")||a(e,i,"hour")||a(e,r,"minute")||a(e,n,"second")||e+" ms"}(e):function(e){if(e>=s)return Math.round(e/s)+"d";if(e>=i)return Math.round(e/i)+"h";if(e>=r)return Math.round(e/r)+"m";if(e>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,n){"use strict";var r=n(42),i=r.Promise||n(43).Promise;e.exports=function(e,t){var s=n(12),o=n(5),a=n(44),c=n(46),u=n(47);function l(e,t,r){return(r=n(3)(r||{}))._ua=r._ua||l.ua,new d(e,t,r)}t=t||"",l.version=n(48),l.ua="Algolia for vanilla JavaScript "+t+l.version,l.initPlaces=u(l),r.__algolia={debug:n(8),algoliasearch:l};var h={hasXMLHttpRequest:"XMLHttpRequest"in r,hasXDomainRequest:"XDomainRequest"in r};function d(){e.apply(this,arguments)}return h.hasXMLHttpRequest&&(h.cors="withCredentials"in new XMLHttpRequest),s(d,e),d.prototype._request=function(e,t){return new i(function(n,r){if(h.cors||h.hasXDomainRequest){e=a(e,t.headers);var i,s,c=t.body,u=h.cors?new XMLHttpRequest:new XDomainRequest,l=!1;i=setTimeout(d,t.timeouts.connect),u.onprogress=function(){l||f()},"onreadystatechange"in u&&(u.onreadystatechange=function(){!l&&u.readyState>1&&f()}),u.onload=function(){if(s)return;var e;clearTimeout(i);try{e={body:JSON.parse(u.responseText),responseText:u.responseText,statusCode:u.status,headers:u.getAllResponseHeaders&&u.getAllResponseHeaders()||{}}}catch(t){e=new o.UnparsableJSON({more:u.responseText})}e instanceof o.UnparsableJSON?r(e):n(e)},u.onerror=function(e){if(s)return;clearTimeout(i),r(new o.Network({more:e}))},u instanceof XMLHttpRequest?(u.open(t.method,e,!0),t.forceAuthHeaders&&(u.setRequestHeader("x-algolia-application-id",t.headers["x-algolia-application-id"]),u.setRequestHeader("x-algolia-api-key",t.headers["x-algolia-api-key"]))):u.open(t.method,e),h.cors&&(c&&("POST"===t.method?u.setRequestHeader("content-type","application/x-www-form-urlencoded"):u.setRequestHeader("content-type","application/json")),u.setRequestHeader("accept","application/json")),c?u.send(c):u.send()}else r(new o.Network("CORS not supported"));function d(){s=!0,u.abort(),r(new o.RequestTimeout)}function f(){l=!0,clearTimeout(i),i=setTimeout(d,t.timeouts.complete)}})},d.prototype._request.fallback=function(e,t){return e=a(e,t.headers),new i(function(n,r){c(e,t,function(e,t){e?r(e):n(t)})})},d.prototype._promise={reject:function(e){return i.reject(e)},resolve:function(e){return i.resolve(e)},delay:function(e){return new i(function(t){setTimeout(t,e)})},all:function(e){return i.all(e)}},l}},function(e,t,n){(function(t){var n;n="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},e.exports=n}).call(t,n(4))},function(e,t,n){(function(t,n){
-/*!
- * @overview es6-promise - a tiny implementation of Promises/A+.
- * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
- * @license   Licensed under MIT license
- *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
- * @version   v4.2.4+314e4831
- */
-!function(t,n){e.exports=n()}(0,function(){"use strict";function e(e){return"function"==typeof e}var r=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},i=0,s=void 0,o=void 0,a=function(e,t){p[i]=e,p[i+1]=t,2===(i+=2)&&(o?o(g):m())};var c="undefined"!=typeof window?window:void 0,u=c||{},l=u.MutationObserver||u.WebKitMutationObserver,h="undefined"==typeof self&&void 0!==t&&"[object process]"==={}.toString.call(t),d="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function f(){var e=setTimeout;return function(){return e(g,1)}}var p=new Array(1e3);function g(){for(var e=0;e<i;e+=2){(0,p[e])(p[e+1]),p[e]=void 0,p[e+1]=void 0}i=0}var m=void 0;function v(e,t){var n=this,r=new this.constructor(w);void 0===r[b]&&D(r);var i=n._state;if(i){var s=arguments[i-1];a(function(){return L(i,r,s,n._result)})}else R(n,r,e,t);return r}function y(e){if(e&&"object"==typeof e&&e.constructor===this)return e;var t=new this(w);return N(t,e),t}m=h?function(){return t.nextTick(g)}:l?function(){var e=0,t=new l(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}():d?function(){var e=new MessageChannel;return e.port1.onmessage=g,function(){return e.port2.postMessage(0)}}():void 0===c?function(){try{var e=Function("return this")().require("vertx");return void 0!==(s=e.runOnLoop||e.runOnContext)?function(){s(g)}:f()}catch(e){return f()}}():f();var b=Math.random().toString(36).substring(2);function w(){}var _=void 0,E=1,x=2,S={error:null};function C(e){try{return e.then}catch(e){return S.error=e,S}}function A(t,n,r){n.constructor===t.constructor&&r===v&&n.constructor.resolve===y?function(e,t){t._state===E?T(e,t._result):t._state===x?k(e,t._result):R(t,void 0,function(t){return N(e,t)},function(t){return k(e,t)})}(t,n):r===S?(k(t,S.error),S.error=null):void 0===r?T(t,n):e(r)?function(e,t,n){a(function(e){var r=!1,i=function(e,t,n,r){try{e.call(t,n,r)}catch(e){return e}}(n,t,function(n){r||(r=!0,t!==n?N(e,n):T(e,n))},function(t){r||(r=!0,k(e,t))},e._label);!r&&i&&(r=!0,k(e,i))},e)}(t,n,r):T(t,n)}function N(e,t){e===t?k(e,new TypeError("You cannot resolve a promise with itself")):!function(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}(t)?T(e,t):A(e,t,C(t))}function O(e){e._onerror&&e._onerror(e._result),M(e)}function T(e,t){e._state===_&&(e._result=t,e._state=E,0!==e._subscribers.length&&a(M,e))}function k(e,t){e._state===_&&(e._state=x,e._result=t,a(O,e))}function R(e,t,n,r){var i=e._subscribers,s=i.length;e._onerror=null,i[s]=t,i[s+E]=n,i[s+x]=r,0===s&&e._state&&a(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r=void 0,i=void 0,s=e._result,o=0;o<t.length;o+=3)r=t[o],i=t[o+n],r?L(n,r,i,s):i(s);e._subscribers.length=0}}function L(t,n,r,i){var s=e(r),o=void 0,a=void 0,c=void 0,u=void 0;if(s){if((o=function(e,t){try{return e(t)}catch(e){return S.error=e,S}}(r,i))===S?(u=!0,a=o.error,o.error=null):c=!0,n===o)return void k(n,new TypeError("A promises callback cannot return that same promise."))}else o=i,c=!0;n._state!==_||(s&&c?N(n,o):u?k(n,a):t===E?T(n,o):t===x&&k(n,o))}var I=0;function D(e){e[b]=I++,e._state=void 0,e._result=void 0,e._subscribers=[]}var P=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(w),this.promise[b]||D(this.promise),r(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?T(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&T(this.promise,this._result))):k(this.promise,new Error("Array Methods must be provided an Array"))}return e.prototype._enumerate=function(e){for(var t=0;this._state===_&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===y){var i=C(e);if(i===v&&e._state!==_)this._settledAt(e._state,t,e._result);else if("function"!=typeof i)this._remaining--,this._result[t]=e;else if(n===j){var s=new n(w);A(s,e,i),this._willSettleAt(s,t)}else this._willSettleAt(new n(function(t){return t(e)}),t)}else this._willSettleAt(r(e),t)},e.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===_&&(this._remaining--,e===x?k(r,n):this._result[t]=n),0===this._remaining&&T(r,this._result)},e.prototype._willSettleAt=function(e,t){var n=this;R(e,void 0,function(e){return n._settledAt(E,t,e)},function(e){return n._settledAt(x,t,e)})},e}();var j=function(){function e(t){this[b]=I++,this._result=this._state=void 0,this._subscribers=[],w!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof e?function(e,t){try{t(function(t){N(e,t)},function(t){k(e,t)})}catch(t){k(e,t)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return e.prototype.catch=function(e){return this.then(null,e)},e.prototype.finally=function(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){throw n})})},e}();return j.prototype.then=v,j.all=function(e){return new P(this,e).promise},j.race=function(e){var t=this;return r(e)?new t(function(n,r){for(var i=e.length,s=0;s<i;s++)t.resolve(e[s]).then(n,r)}):new t(function(e,t){return t(new TypeError("You must pass an array to race."))})},j.resolve=y,j.reject=function(e){var t=new this(w);return k(t,e),t},j._setScheduler=function(e){o=e},j._setAsap=function(e){a=e},j._asap=a,j.polyfill=function(){var e=void 0;if(void 0!==n)e=n;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var r=null;try{r=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===r&&!t.cast)return}e.Promise=j},j.Promise=j,j})}).call(t,n(9),n(4))},function(e,t,n){"use strict";e.exports=function(e,t){/\?/.test(e)?e+="&":e+="?";return e+r(t)};var r=n(45)},function(e,t,n){"use strict";var r=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,a){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?s(o(e),function(o){var a=encodeURIComponent(r(o))+n;return i(e[o])?s(e[o],function(e){return a+encodeURIComponent(r(e))}).join(t):a+encodeURIComponent(r(e[o]))}).join(t):a?encodeURIComponent(r(a))+n+encodeURIComponent(r(e)):""};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function s(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r));return n}var o=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},function(e,t,n){"use strict";e.exports=function(e,t,n){if("GET"!==t.method)return void n(new Error("Method "+t.method+" "+e+" is not supported by JSONP."));t.debug("JSONP: start");var s=!1,o=!1;i+=1;var a=document.getElementsByTagName("head")[0],c=document.createElement("script"),u="algoliaJSONP_"+i,l=!1;window[u]=function(e){!function(){try{delete window[u],delete window[u+"_loaded"]}catch(e){window[u]=window[u+"_loaded"]=void 0}}(),o?t.debug("JSONP: Late answer, ignoring"):(s=!0,f(),n(null,{body:e,responseText:JSON.stringify(e)}))},e+="&callback="+u,t.jsonBody&&t.jsonBody.params&&(e+="&"+t.jsonBody.params);var h=setTimeout(function(){t.debug("JSONP: Script timeout"),o=!0,f(),n(new r.RequestTimeout)},t.timeouts.complete);function d(){t.debug("JSONP: success"),l||o||(l=!0,s||(t.debug("JSONP: Fail. Script loaded but did not call the callback"),f(),n(new r.JSONPScriptFail)))}function f(){clearTimeout(h),c.onload=null,c.onreadystatechange=null,c.onerror=null,a.removeChild(c)}c.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||d()},c.onload=d,c.onerror=function(){if(t.debug("JSONP: Script error"),l||o)return;f(),n(new r.JSONPScriptError)},c.async=!0,c.defer=!0,c.src=e,a.appendChild(c)};var r=n(5),i=0},function(e,t,n){e.exports=function(e){return function(t,i,s){var o=n(3);(s=s&&o(s)||{}).hosts=s.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof t&&void 0!==t||(t="",i="",s._allowEmptyCredentials=!0);var a=e(t,i,s),c=a.initIndex("places");return c.search=r("query","/1/places/query"),c.getObject=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(e),hostType:"read",callback:t})},c}};var r=n(13)},function(e,t,n){"use strict";e.exports="3.30.0"},function(e,t,n){"use strict";e.exports=n(50)},function(e,t,n){"use strict";var r=n(15);n(1).element=r;var i=n(0);i.isArray=r.isArray,i.isFunction=r.isFunction,i.isObject=r.isPlainObject,i.bind=r.proxy,i.each=function(e,t){r.each(e,function(e,n){return t(n,e)})},i.map=r.map,i.mixin=r.extend,i.Event=r.Event;var s="aaAutocomplete",o=n(51),a=n(16);function c(e,t,n,c){n=i.isArray(n)?n:[].slice.call(arguments,2);var u=r(e).each(function(e,i){var u=r(i),l=new a({el:u}),h=c||new o({input:u,eventBus:l,dropdownMenuContainer:t.dropdownMenuContainer,hint:void 0===t.hint||!!t.hint,minLength:t.minLength,autoselect:t.autoselect,autoselectOnBlur:t.autoselectOnBlur,tabAutocomplete:t.tabAutocomplete,openOnFocus:t.openOnFocus,templates:t.templates,debug:t.debug,clearOnSelected:t.clearOnSelected,cssClasses:t.cssClasses,datasets:n,keyboardShortcuts:t.keyboardShortcuts,appendTo:t.appendTo,autoWidth:t.autoWidth});u.data(s,h)});return u.autocomplete={},i.each(["open","close","getVal","setVal","destroy","getWrapper"],function(e){u.autocomplete[e]=function(){var t,n=arguments;return u.each(function(i,o){var a=r(o).data(s);t=a[e].apply(a,n)}),t}}),u}c.sources=o.sources,c.escapeHighlightedString=i.escapeHighlightedString;var u="autocomplete"in window,l=window.autocomplete;c.noConflict=function(){return u?window.autocomplete=l:delete window.autocomplete,c},e.exports=c},function(e,t,n){"use strict";var r="aaAttrs",i=n(0),s=n(1),o=n(16),a=n(52),c=n(59),u=n(17),l=n(11);function h(e){var t,n;if((e=e||{}).input||i.error("missing input"),this.isActivated=!1,this.debug=!!e.debug,this.autoselect=!!e.autoselect,this.autoselectOnBlur=!!e.autoselectOnBlur,this.openOnFocus=!!e.openOnFocus,this.minLength=i.isNumber(e.minLength)?e.minLength:1,this.autoWidth=void 0===e.autoWidth||!!e.autoWidth,this.clearOnSelected=!!e.clearOnSelected,this.tabAutocomplete=void 0===e.tabAutocomplete||!!e.tabAutocomplete,e.hint=!!e.hint,e.hint&&e.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=e.css=i.mixin({},l,e.appendTo?l.appendTo:{}),this.cssClasses=e.cssClasses=i.mixin({},l.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix=i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=e.listboxId=[this.cssClasses.root,"listbox",i.getUniqueId()].join("-");var a=function(e){var t,n,o,a;t=s.element(e.input),n=s.element(u.wrapper.replace("%ROOT%",e.cssClasses.root)).css(e.css.wrapper),e.appendTo||"block"!==t.css("display")||"table"!==t.parent().css("display")||n.css("display","table-cell");var c=u.dropdown.replace("%PREFIX%",e.cssClasses.prefix).replace("%DROPDOWN_MENU%",e.cssClasses.dropdownMenu);o=s.element(c).css(e.css.dropdown).attr({role:"listbox",id:e.listboxId}),e.templates&&e.templates.dropdownMenu&&o.html(i.templatify(e.templates.dropdownMenu)());(a=t.clone().css(e.css.hint).css(function(e){return{backgroundAttachment:e.css("background-attachment"),backgroundClip:e.css("background-clip"),backgroundColor:e.css("background-color"),backgroundImage:e.css("background-image"),backgroundOrigin:e.css("background-origin"),backgroundPosition:e.css("background-position"),backgroundRepeat:e.css("background-repeat"),backgroundSize:e.css("background-size")}}(t))).val("").addClass(i.className(e.cssClasses.prefix,e.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();t.data(r,{"aria-autocomplete":t.attr("aria-autocomplete"),"aria-expanded":t.attr("aria-expanded"),"aria-owns":t.attr("aria-owns"),autocomplete:t.attr("autocomplete"),dir:t.attr("dir"),role:t.attr("role"),spellcheck:t.attr("spellcheck"),style:t.attr("style"),type:t.attr("type")}),t.addClass(i.className(e.cssClasses.prefix,e.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":e.datasets&&e.datasets[0]&&e.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":e.ariaLabel,"aria-owns":e.listboxId}).css(e.hint?e.css.input:e.css.inputWithNoHint);try{t.attr("dir")||t.attr("dir","auto")}catch(e){}return(n=e.appendTo?n.appendTo(s.element(e.appendTo).eq(0)).eq(0):t.wrap(n).parent()).prepend(e.hint?a:null).append(o),{wrapper:n,input:t,hint:a,menu:o}}(e);this.$node=a.wrapper;var c=this.$input=a.input;t=a.menu,n=a.hint,e.dropdownMenuContainer&&s.element(e.dropdownMenuContainer).css("position","relative").append(t.css("top","0")),c.on("blur.aa",function(e){var n=document.activeElement;i.isMsie()&&(t[0]===n||t[0].contains(n))&&(e.preventDefault(),e.stopImmediatePropagation(),i.defer(function(){c.focus()}))}),t.on("mousedown.aa",function(e){e.preventDefault()}),this.eventBus=e.eventBus||new o({el:c}),this.dropdown=new h.Dropdown({appendTo:e.appendTo,wrapper:this.$node,menu:t,datasets:e.datasets,templates:e.templates,cssClasses:e.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:c,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(e),this._setLanguageDirection()}i.mixin(h.prototype,{_bindKeyboardShortcuts:function(e){if(e.keyboardShortcuts){var t=this.$input,n=[];i.each(e.keyboardShortcuts,function(e){"string"==typeof e&&(e=e.toUpperCase().charCodeAt(0)),n.push(e)}),s.element(document).keydown(function(e){var r=e.target||e.srcElement,i=r.tagName;if(!r.isContentEditable&&"INPUT"!==i&&"SELECT"!==i&&"TEXTAREA"!==i){var s=e.which||e.keyCode;-1!==n.indexOf(s)&&(t.focus(),e.stopPropagation(),e.preventDefault())}})}},_onSuggestionClicked:function(e,t){var n;(n=this.dropdown.getDatumForSuggestion(t))&&this._select(n)},_onCursorMoved:function(e,t){var n=this.dropdown.getDatumForCursor(),r=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(r),n&&(t&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var e=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",e.width+"px");var t=this.$node[0].getBoundingClientRect(),n=e.bottom-t.top;this.$node.css("top",n+"px");var r=e.left-t.left;this.$node.css("left",r+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var e=this.input.getQuery();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var e,t;e=this.dropdown.getDatumForCursor(),t=this.dropdown.getDatumForTopSuggestion(),this.debug||(this.autoselectOnBlur&&e?this._select(e):this.autoselectOnBlur&&t?this._select(t):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(e,t){var n,r;n=this.dropdown.getDatumForCursor(),r=this.dropdown.getDatumForTopSuggestion(),n?(this._select(n),t.preventDefault()):this.autoselect&&r&&(this._select(r),t.preventDefault())},_onTabKeyed:function(e,t){var n;this.tabAutocomplete?(n=this.dropdown.getDatumForCursor())?(this._select(n),t.preventDefault()):this._autocomplete(!0):this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var e=this.input.getQuery();this.dropdown.isEmpty&&e.length>=this.minLength?this.dropdown.update(e):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(e,t){this.input.clearHintIfInvalid(),t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var e=this.input.getLanguageDirection();this.dir!==e&&(this.dir=e,this.$node.css("direction",e),this.dropdown.setLanguageDirection(e))},_updateHint:function(){var e,t,n,r,s;(e=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(t=this.input.getInputValue(),n=a.normalizeQuery(t),r=i.escapeRegExChars(n),(s=new RegExp("^(?:"+r+")(.+$)","i").exec(e.value))?this.input.setHint(t+s[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(e){var t,n,r,i;t=this.input.getHint(),n=this.input.getQuery(),r=e||this.input.isCursorAtEnd(),t&&n!==t&&r&&((i=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(i.value),this.eventBus.trigger("autocompleted",i.raw,i.datasetName))},_select:function(e){void 0!==e.value&&this.input.setQuery(e.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(e.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",e.raw,e.datasetName).isDefaultPrevented()&&(this.dropdown.close(),i.defer(i.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var e=this.input.getInputValue();e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(e){e=i.toStr(e),this.isActivated?this.input.setInputValue(e):(this.input.setQuery(e),this.input.setInputValue(e,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(e,t){var n=e.find(i.className(t.prefix,t.input));i.each(n.data(r),function(e,t){void 0===e?n.removeAttr(t):n.attr(t,e)}),n.detach().removeClass(i.className(t.prefix,t.input,!0)).insertAfter(e),n.removeData&&n.removeData(r);e.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=c,h.Input=a,h.sources=n(61),e.exports=h},function(e,t,n){"use strict";var r;r={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=n(0),s=n(1),o=n(10);function a(e){var t,n,o,a,c=this;(e=e||{}).input||i.error("input is missing"),t=i.bind(this._onBlur,this),n=i.bind(this._onFocus,this),o=i.bind(this._onKeydown,this),a=i.bind(this._onInput,this),this.$hint=s.element(e.hint),this.$input=s.element(e.input).on("blur.aa",t).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",function(e){r[e.which||e.keyCode]||i.defer(i.bind(c._onInput,c,e))}):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=function(e){return s.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:e.css("font-family"),fontSize:e.css("font-size"),fontStyle:e.css("font-style"),fontVariant:e.css("font-variant"),fontWeight:e.css("font-weight"),wordSpacing:e.css("word-spacing"),letterSpacing:e.css("letter-spacing"),textIndent:e.css("text-indent"),textRendering:e.css("text-rendering"),textTransform:e.css("text-transform")}).insertAfter(e)}(this.$input)}function c(e){return e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}a.normalizeQuery=function(e){return(e||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(e){var t=r[e.which||e.keyCode];this._managePreventDefault(t,e),t&&this._shouldTrigger(t,e)&&this.trigger(t+"Keyed",e)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(e,t){var n,r,i;switch(e){case"tab":r=this.getHint(),i=this.getInputValue(),n=r&&r!==i&&!c(t);break;case"up":case"down":n=!c(t);break;default:n=!1}n&&t.preventDefault()},_shouldTrigger:function(e,t){var n;switch(e){case"tab":n=!c(t);break;default:n=!0}return n},_checkInputValue:function(){var e,t,n;n=!(!(t=function(e,t){return a.normalizeQuery(e)===a.normalizeQuery(t)}(e=this.getInputValue(),this.query))||!this.query)&&this.query.length!==e.length,this.query=e,t?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(e){this.query=e},getInputValue:function(){return this.$input.val()},setInputValue:function(e,t){void 0===e&&(e=this.query),this.$input.val(e),t?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(e){this.$input.attr("aria-activedescendant",e)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(e){this.$hint.val(e)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var e,t,n;n=(e=this.getInputValue())!==(t=this.getHint())&&0===t.indexOf(e),""!==e&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var e=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=e},isCursorAtEnd:function(){var e,t,n;return e=this.$input.val().length,t=this.$input[0].selectionStart,i.isNumber(t)?t===e:!document.selection||((n=document.selection.createRange()).moveStart("character",-e),e===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),e.exports=a},function(e,t,n){"use strict";var r,i,s,o=[n(54),n(55),n(56),n(57),n(58)],a=-1,c=[],u=!1;function l(){r&&i&&(r=!1,i.length?c=i.concat(c):a=-1,c.length&&h())}function h(){if(!r){u=!1,r=!0;for(var e=c.length,t=setTimeout(l);e;){for(i=c,c=[];i&&++a<e;)i[a].run();a=-1,e=c.length}i=null,a=-1,r=!1,clearTimeout(t)}}for(var d=-1,f=o.length;++d<f;)if(o[d]&&o[d].test&&o[d].test()){s=o[d].install(h);break}function p(e,t){this.fun=e,this.array=t}p.prototype.run=function(){var e=this.fun,t=this.array;switch(t.length){case 0:return e();case 1:return e(t[0]);case 2:return e(t[0],t[1]);case 3:return e(t[0],t[1],t[2]);default:return e.apply(null,t)}},e.exports=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new p(e,t)),u||r||(u=!0,s())}},function(e,t,n){"use strict";(function(e){t.test=function(){return void 0!==e&&!e.browser},t.install=function(t){return function(){e.nextTick(t)}}}).call(t,n(9))},function(e,t,n){"use strict";(function(e){var n=e.MutationObserver||e.WebKitMutationObserver;t.test=function(){return n},t.install=function(t){var r=0,i=new n(t),s=e.document.createTextNode("");return i.observe(s,{characterData:!0}),function(){s.data=r=++r%2}}}).call(t,n(4))},function(e,t,n){"use strict";(function(e){t.test=function(){return!e.setImmediate&&void 0!==e.MessageChannel},t.install=function(t){var n=new e.MessageChannel;return n.port1.onmessage=t,function(){n.port2.postMessage(0)}}}).call(t,n(4))},function(e,t,n){"use strict";(function(e){t.test=function(){return"document"in e&&"onreadystatechange"in e.document.createElement("script")},t.install=function(t){return function(){var n=e.document.createElement("script");return n.onreadystatechange=function(){t(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},e.document.documentElement.appendChild(n),t}}}).call(t,n(4))},function(e,t,n){"use strict";t.test=function(){return!0},t.install=function(e){return function(){setTimeout(e,0)}}},function(e,t,n){"use strict";var r=n(0),i=n(1),s=n(10),o=n(60),a=n(11);function c(e){var t,n,s,o=this;(e=e||{}).menu||r.error("menu is required"),r.isArray(e.datasets)||r.isObject(e.datasets)||r.error("1 or more datasets required"),e.datasets||r.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=e.minLength||0,this.templates={},this.appendTo=e.appendTo||!1,this.css=r.mixin({},a,e.appendTo?a.appendTo:{}),this.cssClasses=e.cssClasses=r.mixin({},a.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),t=r.bind(this._onSuggestionClick,this),n=r.bind(this._onSuggestionMouseEnter,this),s=r.bind(this._onSuggestionMouseLeave,this);var u=r.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=i.element(e.menu).on("mouseenter.aa",u,n).on("mouseleave.aa",u,s).on("click.aa",u,t),this.$container=e.appendTo?e.wrapper:this.$menu,e.templates&&e.templates.header&&(this.templates.header=r.templatify(e.templates.header),this.$menu.prepend(this.templates.header())),e.templates&&e.templates.empty&&(this.templates.empty=r.templatify(e.templates.empty),this.$empty=i.element('<div class="'+r.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=r.map(e.datasets,function(t){return function(e,t,n){return new c.Dataset(r.mixin({$menu:e,cssClasses:n},t))}(o.$menu,t,e.cssClasses)}),r.each(this.datasets,function(e){var t=e.getRoot();t&&0===t.parent().length&&o.$menu.append(t),e.onSync("rendered",o._onRendered,o)}),e.templates&&e.templates.footer&&(this.templates.footer=r.templatify(e.templates.footer),this.$menu.append(this.templates.footer()));var l=this;i.element(window).resize(function(){l._redraw()})}r.mixin(c.prototype,s,{_onSuggestionClick:function(e){this.trigger("suggestionClicked",i.element(e.currentTarget))},_onSuggestionMouseEnter:function(e){var t=i.element(e.currentTarget);if(!t.hasClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout(function(){n._setCursor(t,!1)},0)}},_onSuggestionMouseLeave:function(e){if(e.relatedTarget&&i.element(e.relatedTarget).closest("."+r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(e,t){if(this.isEmpty=r.every(this.datasets,function(e){return e.isEmpty()}),this.isEmpty)if(t.length>=this.minLength&&this.trigger("empty"),this.$empty)if(t.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else r.any(this.datasets,function(e){return e.templates&&e.templates.empty})?t.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),t.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(e,t){e.first().addClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",t)},_removeCursor:function(){this._getCursor().removeClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(e){var t,n,r,i;this.isOpen&&(n=this._getCursor(),t=this._getSuggestions(),this._removeCursor(),-1!==(r=((r=t.index(n)+e)+1)%(t.length+1)-1)?(r<-1&&(r=t.length-1),this._setCursor(i=t.eq(r),!0),this._ensureVisible(i)):this.trigger("cursorRemoved"))},_ensureVisible:function(e){var t,n,r,i;n=(t=e.position().top)+e.height()+parseInt(e.css("margin-top"),10)+parseInt(e.css("margin-bottom"),10),r=this.$menu.scrollTop(),i=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),t<0?this.$menu.scrollTop(r+t):i<n&&this.$menu.scrollTop(r+(n-i))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(e){this.$menu.css("ltr"===e?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(e){var t=null;return e.length&&(t={raw:o.extractDatum(e),value:o.extractValue(e),datasetName:o.extractDatasetName(e)}),t},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(e){r.each(this.datasets,function(t){t.update(e)})},empty:function(){r.each(this.datasets,function(e){e.clear()}),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,r.each(this.datasets,function(e){e.destroy()})}}),c.Dataset=o,e.exports=c},function(e,t,n){"use strict";var r="aaDataset",i="aaValue",s="aaDatum",o=n(0),a=n(1),c=n(17),u=n(11),l=n(10);function h(e){(e=e||{}).templates=e.templates||{},e.source||o.error("missing source"),e.name&&!function(e){return/^[_a-zA-Z0-9-]+$/.test(e)}(e.name)&&o.error("invalid dataset name: "+e.name),this.query=null,this._isEmpty=!0,this.highlight=!!e.highlight,this.name=void 0===e.name||null===e.name?o.getUniqueId():e.name,this.source=e.source,this.displayFn=function(e){return e=e||"value",o.isFunction(e)?e:function(t){return t[e]}}(e.display||e.displayKey),this.debounce=e.debounce,this.cache=!1!==e.cache,this.templates=function(e,t){return{empty:e.empty&&o.templatify(e.empty),header:e.header&&o.templatify(e.header),footer:e.footer&&o.templatify(e.footer),suggestion:e.suggestion||function(e){return"<p>"+t(e)+"</p>"}}}(e.templates,this.displayFn),this.css=o.mixin({},u,e.appendTo?u.appendTo:{}),this.cssClasses=e.cssClasses=o.mixin({},u.defaultClasses,e.cssClasses||{}),this.cssClasses.prefix=e.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var t=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=e.$menu&&e.$menu.find(t+"-"+this.name).length>0?a.element(e.$menu.find(t+"-"+this.name)[0]):a.element(c.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=e.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(e){return a.element(e).data(r)},h.extractValue=function(e){return a.element(e).data(i)},h.extractDatum=function(e){var t=a.element(e).data(s);return"string"==typeof t&&(t=JSON.parse(t)),t},o.mixin(h.prototype,l,{_render:function(e,t){if(this.$el){var n,u=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=t&&t.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!0}].concat(t),u.templates.empty.apply(this,t)}.apply(this,l)).prepend(u.templates.header?h.apply(this,l):null).append(u.templates.footer?d.apply(this,l):null);else if(n)this.$el.html(function(){var e,n,l=[].slice.call(arguments,0),h=this,d=c.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return e=a.element(d).css(this.css.suggestions),n=o.map(t,function(e){var t,n=c.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(t=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(u.templates.suggestion.apply(this,[e].concat(l)))).data(r,u.name),t.data(i,u.displayFn(e)||void 0),t.data(s,JSON.stringify(e)),t.children().each(function(){a.element(this).css(h.css.suggestionChild)}),t}),e.append.apply(e,n),e}.apply(this,l)).prepend(u.templates.header?h.apply(this,l):null).append(u.templates.footer?d.apply(this,l):null);else if(t&&!Array.isArray(t))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",e)}function h(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),u.templates.header.apply(this,t)}function d(){var t=[].slice.call(arguments,0);return t=[{query:e,isEmpty:!n}].concat(t),u.templates.footer.apply(this,t)}},getRoot:function(){return this.$el},update:function(e){function t(t){if(!this.canceled&&e===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(e,t,n),this._render.apply(this,[e,t].concat(n))}}if(this.query=e,this.canceled=!1,this.shouldFetchFromCache(e))t.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,r=function(){n.canceled||n.source(e,t.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout(function(){n.debounceTimeout=null,r()},this.debounce)}else r()}},cacheSuggestions:function(e,t,n){this.cachedQuery=e,this.cachedSuggestions=t,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(e){return this.cache&&this.cachedQuery===e&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),e.exports=h},function(e,t,n){"use strict";e.exports={hits:n(62),popularIn:n(63)}},function(e,t,n){"use strict";var r=n(0),i=n(18),s=n(19);e.exports=function(e,t){var n=s(e.as._ua);return n&&n[0]>=3&&n[1]>20&&((t=t||{}).additionalUA="autocomplete.js "+i),function(n,i){e.search(n,t,function(e,t){e?r.error(e.message):i(t.hits,t)})}}},function(e,t,n){"use strict";var r=n(0),i=n(18),s=n(19);e.exports=function(e,t,n,o){var a=s(e.as._ua);if(a&&a[0]>=3&&a[1]>20&&((t=t||{}).additionalUA="autocomplete.js "+i),!n.source)return r.error("Missing 'source' key");var c=r.isFunction(n.source)?n.source:function(e){return e[n.source]};if(!n.index)return r.error("Missing 'index' key");var u=n.index;return o=o||{},function(a,l){e.search(a,t,function(e,a){if(e)r.error(e.message);else{if(a.hits.length>0){var h=a.hits[0],d=r.mixin({hitsPerPage:0},n);delete d.source,delete d.index;var f=s(u.as._ua);return f&&f[0]>=3&&f[1]>20&&(t.additionalUA="autocomplete.js "+i),void u.search(c(h),d,function(e,t){if(e)r.error(e.message);else{var n=[];if(o.includeAll){var i=o.allTitle||"All departments";n.push(r.mixin({facet:{value:i,count:t.nbHits}},r.cloneDeep(h)))}r.each(t.facets,function(e,t){r.each(e,function(e,i){n.push(r.mixin({facet:{facet:t,value:i,count:e}},r.cloneDeep(h)))})});for(var s=1;s<a.hits.length;++s)n.push(a.hits[s]);l(n,a)}})}l([])}})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="algolia-docsearch-suggestion",i={suggestion:'\n  <a class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    "\n    aria-label="Link to the result"\n    href="{{{url}}}"\n    >\n    <div class="'+r+'--category-header">\n        <span class="'+r+'--category-header-lvl0">{{{category}}}</span>\n    </div>\n    <div class="'+r+'--wrapper">\n      <div class="'+r+'--subcategory-column">\n        <span class="'+r+'--subcategory-column-text">{{{subcategory}}}</span>\n      </div>\n      {{#isTextOrSubcategoryNonEmpty}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--subcategory-inline">{{{subcategory}}}</div>\n        <div class="'+r+'--title">{{{title}}}</div>\n        {{#text}}<div class="'+r+'--text">{{{text}}}</div>{{/text}}\n      </div>\n      {{/isTextOrSubcategoryNonEmpty}}\n    </div>\n  </a>\n  ',suggestionSimple:'\n  <div class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    suggestion-layout-simple\n  ">\n    <div class="'+r+'--category-header">\n        {{^isLvl0}}\n        <span class="'+r+"--category-header-lvl0 "+r+'--category-header-item">{{{category}}}</span>\n          {{^isLvl1}}\n          {{^isLvl1EmptyOrDuplicate}}\n          <span class="'+r+"--category-header-lvl1 "+r+'--category-header-item">\n              {{{subcategory}}}\n          </span>\n          {{/isLvl1EmptyOrDuplicate}}\n          {{/isLvl1}}\n        {{/isLvl0}}\n        <div class="'+r+"--title "+r+'--category-header-item">\n            {{#isLvl2}}\n                {{{title}}}\n            {{/isLvl2}}\n            {{#isLvl1}}\n                {{{subcategory}}}\n            {{/isLvl1}}\n            {{#isLvl0}}\n                {{{category}}}\n            {{/isLvl0}}\n        </div>\n    </div>\n    <div class="'+r+'--wrapper">\n      {{#text}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--text">{{{text}}}</div>\n      </div>\n      {{/text}}\n    </div>\n  </div>\n  ',footer:'\n    <div class="algolia-docsearch-footer">\n      Search by <a class="algolia-docsearch-footer--logo" href="https://www.algolia.com/docsearch">Algolia</a>\n    </div>\n  ',empty:'\n  <div class="'+r+'">\n    <div class="'+r+'--wrapper">\n        <div class="'+r+"--content "+r+'--no-results">\n            <div class="'+r+'--title">\n                <div class="'+r+'--text">\n                    No results found for query <b>"{{query}}"</b>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n  ',searchBox:'\n  <form novalidate="novalidate" onsubmit="return false;" class="searchbox">\n    <div role="search" class="searchbox__wrapper">\n      <input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>\n      <button type="submit" title="Submit your search query." class="searchbox__submit" >\n        <svg width=12 height=12 role="img" aria-label="Search">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>\n        </svg>\n      </button>\n      <button type="reset" title="Clear the search query." class="searchbox__reset hide">\n        <svg width=12 height=12 role="img" aria-label="Reset">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>\n        </svg>\n      </button>\n    </div>\n</form>\n\n<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">\n  <svg xmlns="http://www.w3.org/2000/svg">\n    <symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>\n    <symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>\n  </svg>\n</div>\n  '};t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(e){return e&&e.__esModule?e:{default:e}}(n(20));var s={mergeKeyWithParent:function(e,t){if(void 0===e[t])return e;if("object"!==r(e[t]))return e;var n=i.default.extend({},e,e[t]);return delete n[t],n},groupBy:function(e,t){var n={};return i.default.each(e,function(e,r){if(void 0===r[t])throw new Error("[groupBy]: Object has no key "+t);var i=r[t];"string"==typeof i&&(i=i.toLowerCase()),Object.prototype.hasOwnProperty.call(n,i)||(n[i]=[]),n[i].push(r)}),n},values:function(e){return Object.keys(e).map(function(t){return e[t]})},flatten:function(e){var t=[];return e.forEach(function(e){Array.isArray(e)?e.forEach(function(e){t.push(e)}):t.push(e)}),t},flattenAndFlagFirst:function(e,t){var n=this.values(e).map(function(e){return e.map(function(e,n){return e[t]=0===n,e})});return this.flatten(n)},compact:function(e){var t=[];return e.forEach(function(e){e&&t.push(e)}),t},getHighlightedValue:function(e,t){return e._highlightResult&&e._highlightResult.hierarchy_camel&&e._highlightResult.hierarchy_camel[t]&&e._highlightResult.hierarchy_camel[t].matchLevel&&"none"!==e._highlightResult.hierarchy_camel[t].matchLevel&&e._highlightResult.hierarchy_camel[t].value?e._highlightResult.hierarchy_camel[t].value:e._highlightResult&&e._highlightResult&&e._highlightResult[t]&&e._highlightResult[t].value?e._highlightResult[t].value:e[t]},getSnippetedValue:function(e,t){if(!e._snippetResult||!e._snippetResult[t]||!e._snippetResult[t].value)return e[t];var n=e._snippetResult[t].value;return n[0]!==n[0].toUpperCase()&&(n="…"+n),-1===[".","!","?"].indexOf(n[n.length-1])&&(n+="…"),n},deepClone:function(e){return JSON.parse(JSON.stringify(e))}};t.default=s}])})},function(e,t,n){var r=n(11);r.registerLanguage("bash",n(12)),r.registerLanguage("css",n(13)),r.registerLanguage("markdown",n(14)),r.registerLanguage("diff",n(15)),r.registerLanguage("javascript",n(16)),r.registerLanguage("json",n(17)),r.registerLanguage("yaml",n(18)),r.registerLanguage("xml",n(19)),r.registerLanguage("html",n(20)),r.registerLanguage("go",function(e){var t={keyword:"code output note warning break default func interface select case map struct chan else goto package switch const fallthrough if range end type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune id autoplay Get",literal:"file download copy true false iota nil Pages with",built_in:"append cap close complex highlight copy imag len make new panic print println real recover delete Site Data tweet youtube ref relref vimeo instagram gist figure innershortcode"};return{aliases:["golang","hugo"],k:t,i:"</",c:[e.CLCM,e.CBCM,{cN:"string",v:[e.QSM,{b:"'",e:"[^\\\\]'"},{b:"`",e:"`"}]},{cN:"number",v:[{b:e.CNR+"[dflsi]",r:1},e.CNM]},{b:/:=/},{cN:"function",bK:"func",e:/\s*\{/,eE:!0,c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:t,i:/["']/}]}]}}),r.initHighlightingOnLoad()},function(e,t,n){!function(e){"object"==typeof window&&window||"object"==typeof self&&self;(function(e){var t=[],n=Object.keys,r={},i={},s=/^(no-?highlight|plain|text)$/i,o=/\blang(?:uage)?-([\w-]+)\b/i,a=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,c="</span>",u={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function l(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function h(e){return e.nodeName.toLowerCase()}function d(e,t){var n=e&&e.exec(t);return n&&0===n.index}function f(e){return s.test(e)}function p(e){var t,n={},r=Array.prototype.slice.call(arguments,1);for(t in e)n[t]=e[t];return r.forEach(function(e){for(t in e)n[t]=e[t]}),n}function g(e){var t=[];return function e(n,r){for(var i=n.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:r,node:i}),r=e(i,r),h(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:i}));return r}(e,0),t}function m(e){function t(e){return e&&e.source||e}function r(n,r){return new RegExp(t(n),"m"+(e.case_insensitive?"i":"")+(r?"g":""))}!function i(s,o){if(s.compiled)return;s.compiled=!0;s.keywords=s.keywords||s.beginKeywords;if(s.keywords){var a={},c=function(t,n){e.case_insensitive&&(n=n.toLowerCase()),n.split(" ").forEach(function(e){var n=e.split("|");a[n[0]]=[t,n[1]?Number(n[1]):1]})};"string"==typeof s.keywords?c("keyword",s.keywords):n(s.keywords).forEach(function(e){c(e,s.keywords[e])}),s.keywords=a}s.lexemesRe=r(s.lexemes||/\w+/,!0);o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")\\b"),s.begin||(s.begin=/\B|\b/),s.beginRe=r(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(s.endRe=r(s.end)),s.terminator_end=t(s.end)||"",s.endsWithParent&&o.terminator_end&&(s.terminator_end+=(s.end?"|":"")+o.terminator_end));s.illegal&&(s.illegalRe=r(s.illegal));null==s.relevance&&(s.relevance=1);s.contains||(s.contains=[]);s.contains=Array.prototype.concat.apply([],s.contains.map(function(e){return function(e){e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map(function(t){return p(e,{variants:null},t)}));return e.cached_variants||e.endsWithParent&&[p(e)]||[e]}("self"===e?s:e)}));s.contains.forEach(function(e){i(e,s)});s.starts&&i(s.starts,o);var u=s.contains.map(function(e){return e.beginKeywords?"\\.?("+e.begin+")\\.?":e.begin}).concat([s.terminator_end,s.illegal]).map(t).filter(Boolean);s.terminators=u.length?r(u.join("|"),!0):{exec:function(){return null}}}(e)}function v(e,t,n,i){function s(e){return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}function o(e,t){var n=g.case_insensitive?t[0].toLowerCase():t[0];return e.keywords.hasOwnProperty(n)&&e.keywords[n]}function a(e,t,n,r){var i=r?"":u.classPrefix,s='<span class="'+i,o=n?"":c;return(s+=e+'">')+t+o}function h(){x+=null!=w.subLanguage?function(){var e="string"==typeof w.subLanguage;if(e&&!r[w.subLanguage])return l(S);var t=e?v(w.subLanguage,S,!0,_[w.subLanguage]):y(S,w.subLanguage.length?w.subLanguage:void 0);w.relevance>0&&(C+=t.relevance);e&&(_[w.subLanguage]=t.top);return a(t.language,t.value,!1,!0)}():function(){var e,t,n,r;if(!w.keywords)return l(S);r="",t=0,w.lexemesRe.lastIndex=0,n=w.lexemesRe.exec(S);for(;n;)r+=l(S.substring(t,n.index)),(e=o(w,n))?(C+=e[1],r+=a(e[0],l(n[0]))):r+=l(n[0]),t=w.lexemesRe.lastIndex,n=w.lexemesRe.exec(S);return r+l(S.substr(t))}(),S=""}function f(e){x+=e.className?a(e.className,"",!0):"",w=Object.create(e,{parent:{value:w}})}function p(e,t){if(S+=e,null==t)return h(),0;var r=function(e,t){var n,r;for(n=0,r=t.contains.length;n<r;n++)if(d(t.contains[n].beginRe,e))return t.contains[n].endSameAsBegin&&(t.contains[n].endRe=s(t.contains[n].beginRe.exec(e)[0])),t.contains[n]}(t,w);if(r)return r.skip?S+=t:(r.excludeBegin&&(S+=t),h(),r.returnBegin||r.excludeBegin||(S=t)),f(r),r.returnBegin?0:t.length;var i=function e(t,n){if(d(t.endRe,n)){for(;t.endsParent&&t.parent;)t=t.parent;return t}if(t.endsWithParent)return e(t.parent,n)}(w,t);if(i){var o=w;o.skip?S+=t:(o.returnEnd||o.excludeEnd||(S+=t),h(),o.excludeEnd&&(S=t));do{w.className&&(x+=c),w.skip||w.subLanguage||(C+=w.relevance),w=w.parent}while(w!==i.parent);return i.starts&&(i.endSameAsBegin&&(i.starts.endRe=i.endRe),f(i.starts)),o.returnEnd?0:t.length}if(function(e,t){return!n&&d(t.illegalRe,e)}(t,w))throw new Error('Illegal lexeme "'+t+'" for mode "'+(w.className||"<unnamed>")+'"');return S+=t,t.length||1}var g=E(e);if(!g)throw new Error('Unknown language: "'+e+'"');m(g);var b,w=i||g,_={},x="";for(b=w;b!==g;b=b.parent)b.className&&(x=a(b.className,"",!0)+x);var S="",C=0;try{for(var A,N,O=0;w.terminators.lastIndex=O,A=w.terminators.exec(t);)N=p(t.substring(O,A.index),A[0]),O=A.index+N;for(p(t.substr(O)),b=w;b.parent;b=b.parent)b.className&&(x+=c);return{relevance:C,value:x,language:e,top:w}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{relevance:0,value:l(t)};throw e}}function y(e,t){t=t||u.languages||n(r);var i={relevance:0,value:l(e)},s=i;return t.filter(E).filter(x).forEach(function(t){var n=v(t,e,!1);n.language=t,n.relevance>s.relevance&&(s=n),n.relevance>i.relevance&&(s=i,i=n)}),s.language&&(i.second_best=s),i}function b(e){return u.tabReplace||u.useBR?e.replace(a,function(e,t){return u.useBR&&"\n"===e?"<br>":u.tabReplace?t.replace(/\t/g,u.tabReplace):""}):e}function w(e){var n,r,s,a,c,d=function(e){var t,n,r,i,s=e.className+" ";if(s+=e.parentNode?e.parentNode.className:"",n=o.exec(s))return E(n[1])?n[1]:"no-highlight";for(s=s.split(/\s+/),t=0,r=s.length;t<r;t++)if(f(i=s[t])||E(i))return i}(e);f(d)||(u.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n"):n=e,c=n.textContent,s=d?v(d,c,!0):y(c),(r=g(n)).length&&((a=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=s.value,s.value=function(e,n,r){var i=0,s="",o=[];function a(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function c(e){s+="<"+h(e)+t.map.call(e.attributes,function(e){return" "+e.nodeName+'="'+l(e.value).replace('"',"&quot;")+'"'}).join("")+">"}function u(e){s+="</"+h(e)+">"}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var f=a();if(s+=l(r.substring(i,f[0].offset)),i=f[0].offset,f===e){o.reverse().forEach(u);do{d(f.splice(0,1)[0]),f=a()}while(f===e&&f.length&&f[0].offset===i);o.reverse().forEach(c)}else"start"===f[0].event?o.push(f[0].node):o.pop(),d(f.splice(0,1)[0])}return s+l(r.substr(i))}(r,g(a),c)),s.value=b(s.value),e.innerHTML=s.value,e.className=function(e,t,n){var r=t?i[t]:n,s=[e.trim()];e.match(/\bhljs\b/)||s.push("hljs");-1===e.indexOf(r)&&s.push(r);return s.join(" ").trim()}(e.className,d,s.language),e.result={language:s.language,re:s.relevance},s.second_best&&(e.second_best={language:s.second_best.language,re:s.second_best.relevance}))}function _(){if(!_.called){_.called=!0;var e=document.querySelectorAll("pre code");t.forEach.call(e,w)}}function E(e){return e=(e||"").toLowerCase(),r[e]||r[i[e]]}function x(e){var t=E(e);return t&&!t.disableAutodetect}e.highlight=v,e.highlightAuto=y,e.fixMarkup=b,e.highlightBlock=w,e.configure=function(e){u=p(u,e)},e.initHighlighting=_,e.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",_,!1),addEventListener("load",_,!1)},e.registerLanguage=function(t,n){var s=r[t]=n(e);s.aliases&&s.aliases.forEach(function(e){i[e]=t})},e.listLanguages=function(){return n(r)},e.getLanguage=E,e.autoDetection=x,e.inherit=p,e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(t,n,r){var i=e.inherit({className:"comment",begin:t,end:n,contains:[]},r||{});return i.contains.push(e.PHRASAL_WORDS_MODE),i.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),i},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0}})(t)}()},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,n,{className:"string",begin:/'/,end:/'/},t]}}},function(e,t){e.exports=function(e){var t={begin:/[A-Z\_\.\-]+\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(font-face|page)",lexemes:"[a-z-]+",keywords:"font-face page"},{begin:"@",end:"[{;]",illegal:/:/,contains:[{className:"keyword",begin:/\w+/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,t]}]}}},function(e,t){e.exports=function(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```w*s*$",end:"^```s*$"},{begin:"`.+?`"},{begin:"^( {4}|\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},function(e,t){e.exports=function(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/\*{5}/,end:/\*{5}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}},function(e,t){e.exports=function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",n={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},i={className:"subst",begin:"\\$\\{",end:"\\}",keywords:n,contains:[]},s={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,i]};i.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,r,e.REGEXP_MODE];var o=i.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["js","jsx"],keywords:n,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{begin:/[{,]\s*/,relevance:0,contains:[{begin:t+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:t,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+t+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,contains:o}]}]},{begin:/</,end:/(\/\w+|\w+\/)>/,subLanguage:"xml",contains:[{begin:/<\w+\s*\/>/,skip:!0},{begin:/<\w+/,end:/(\/\w+|\w+\/)>/,skip:!0,contains:[{begin:/<\w+\s*\/>/,skip:!0},"self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:t}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}},function(e,t){e.exports=function(e){var t={literal:"true false null"},n=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],r={end:",",endsWithParent:!0,excludeEnd:!0,contains:n,keywords:t},i={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(r,{begin:/:/})],illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[e.inherit(r)],illegal:"\\S"};return n.splice(n.length,0,i,s),{contains:n,keywords:t,illegal:"\\S"}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][\\w\\-]*",n={className:"attr",variants:[{begin:"^[ \\-]*"+t+":"},{begin:'^[ \\-]*"'+t+'":'},{begin:"^[ \\-]*'"+t+"':"}]},r={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]};return{case_insensitive:!0,aliases:["yml","YAML","yaml"],contains:[n,{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>] *$",returnEnd:!0,contains:r.contains,end:n.variants[0].begin},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!"+e.UNDERSCORE_IDENT_RE},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"^ *-",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:"true false yes no null",keywords:{literal:"true false yes no null"}},e.C_NUMBER_MODE,r]}}},function(e,t){e.exports=function(e){var t={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],case_insensitive:!0,contains:[{className:"meta",begin:"<!DOCTYPE",end:">",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:"<style(?=\\s|>|$)",end:">",keywords:{name:"style"},contains:[t],starts:{end:"</style>",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"<script(?=\\s|>|$)",end:">",keywords:{name:"script"},contains:[t],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},t]}]}}},function(e,t){e.exports=function(e){var t={"builtin-name":"each in with if else unless bindattr action collection debugger log outlet template unbound view yield"};return{aliases:["hbs","html.hbs","html.handlebars"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT("{{!(--)?","(--)?}}"),{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,keywords:t,starts:{endsWithParent:!0,relevance:0,contains:[e.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,keywords:t}]}}},function(e,t,n){n(0),n(22)},function(e,t,n){!function(t,r){var i=function(){r(t.lazySizes),t.removeEventListener("lazyunveilread",i,!0)};r=r.bind(null,t,t.document),e.exports?r(n(0)):t.lazySizes?i():t.addEventListener("lazyunveilread",i,!0)}(window,function(e,t,n){"use strict";var r,i,s={};function o(e,n){if(!s[e]){var r=t.createElement(n?"link":"script"),i=t.getElementsByTagName("script")[0];n?(r.rel="stylesheet",r.href=e):r.src=e,s[e]=!0,s[r.src||r.href]=!0,i.parentNode.insertBefore(r,i)}}t.addEventListener&&(i=/\(|\)|\s|'/,r=function(e,n){var r=t.createElement("img");r.onload=function(){r.onload=null,r.onerror=null,r=null,n()},r.onerror=r.onload,r.src=e,r&&r.complete&&r.onload&&r.onload()},addEventListener("lazybeforeunveil",function(e){var t,s,a;e.detail.instance==n&&(e.defaultPrevented||("none"==e.target.preload&&(e.target.preload="auto"),(t=e.target.getAttribute("data-link"))&&o(t,!0),(t=e.target.getAttribute("data-script"))&&o(t),(t=e.target.getAttribute("data-require"))&&(n.cfg.requireJs?n.cfg.requireJs([t]):o(t)),(s=e.target.getAttribute("data-bg"))&&(e.detail.firesLoad=!0,r(s,function(){e.target.style.backgroundImage="url("+(i.test(s)?JSON.stringify(s):s)+")",e.detail.firesLoad=!1,n.fire(e.target,"_lazyloaded",{},!0,!0)})),(a=e.target.getAttribute("data-poster"))&&(e.detail.firesLoad=!0,r(a,function(){e.target.poster=a,e.detail.firesLoad=!1,n.fire(e.target,"_lazyloaded",{},!0,!0)}))))},!1))})},function(e,t){for(var n=document.getElementsByClassName("js-toggle"),r=0;r<n.length;r++)n[r].addEventListener("click",i,!1);function i(){for(var e=this.dataset.target.split(" "),t=document.querySelector(".mobilemenu:not(.dn)"),n=document.querySelector(".desktopmenu:not(.dn)"),r=document.querySelector(".desktopmenu:not(.dn)"),i=0;i<e.length;i++){var s=document.querySelectorAll(e[i]);[].forEach.call(s,function(e){return e.classList.contains("dn")?e.classList.remove("dn"):e.classList.add("dn"),!1}),t&&t.classList.add("dn"),n&&n.classList.add("dn"),r&&r.classList.remove("db")}}},function(e,t,n){n(25)},function(e,t,n){!function(){"use strict";var e,t,n="data-scrolldir",r="down",i=document.documentElement,s=window,o=document.body,a=32,c=512,u=64,l=Array(a),h=0;function d(){var d=s.scrollY||s.pageYOffset,f=e.timeStamp,p="down"===r?Math.max:Math.min,g=o.scrollHeight-s.innerHeight;if(d=Math.max(0,d),d=Math.min(g,d),l.unshift({y:d,t:f}),l.pop(),d===p(t,d))return h=f,void(t=d);var m=f-c;if(h<m){t=d;for(var v=0;v<a&&l[v]&&!(l[v].t<m);v+=1)t=p(t,l[v].y)}Math.abs(d-t)>u&&(t=d,h=f,r="down"===r?"up":"down",i.setAttribute(n,r))}function f(t){return e=t,s.requestAnimationFrame(d)}t=s.scrollY||s.pageYOffset,i.setAttribute(n,r),s.addEventListener("scroll",f)}()},function(e,t){!function(){"use strict";if("querySelector"in document&&"addEventListener"in window&&Array.prototype.forEach){var e=document.querySelectorAll("#TableOfContents ul li a");[].forEach.call(e,function(e){e.addEventListener("click",function(t){t.preventDefault();var n=e.getAttribute("href"),r=document.querySelector(n),i=e.getAttribute("data-speed");r&&function(e,t){var n,r=window.pageYOffset,i=e.offsetTop,s=(i-r)/(t/16);n=s>=0?function(){var e=window.pageYOffset;(e>=i-s||window.innerHeight+e>=document.body.offsetHeight)&&clearInterval(o)}:function(){window.pageYOffset<=(i||0)&&clearInterval(o)};var o=setInterval(function(){window.scrollBy(0,s),n()},16)}(r,i||500)},!1)})}}()},function(e,t){var n,r=document.querySelectorAll("[data-toggle-tab]"),i=document.querySelectorAll("[data-pane]");function s(e){if(e.target){e.preventDefault();var t=e.currentTarget.getAttribute("data-toggle-tab")}else t=e;window.localStorage&&window.localStorage.setItem("configLangPref",t);for(var n=document.querySelectorAll("[data-toggle-tab='"+t+"']"),s=document.querySelectorAll("[data-pane='"+t+"']"),o=0;o<r.length;o++)r[o].classList.remove("active"),i[o].classList.remove("active");for(o=0;o<n.length;o++)n[o].classList.add("active"),s[o].classList.add("active")}for(n=0;n<r.length;n++)r[n].addEventListener("click",s);window.localStorage.getItem("configLangPref")&&s(window.localStorage.getItem("configLangPref"))},function(e,t){document.documentElement.className=document.documentElement.className.replace(/\bno-js\b/,"js")}]);
\ No newline at end of file
diff --git a/resources/_gen/assets/js/output/js/app.js_8848f55d07695b7ff7188138f23d69e3.json b/resources/_gen/assets/js/output/js/app.js_8848f55d07695b7ff7188138f23d69e3.json
deleted file mode 100644 (file)
index 06787c1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"Target":"output/js/app.09ca7921ca2b6e15c2dc516eccf642c08861fe5c249cc9073fb370c0a8a9022c.js","MediaType":"application/javascript","Data":{"Integrity":"sha256-Ccp5IcorbhXC3FFuzPZCwIhh/lwknMkHP7NwwKipAiw="}}
\ No newline at end of file
diff --git a/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_1024x512_fill_catmullrom_top_2.png b/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_1024x512_fill_catmullrom_top_2.png
deleted file mode 100644 (file)
index 545cfb2..0000000
Binary files a/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_1024x512_fill_catmullrom_top_2.png and /dev/null differ
diff --git a/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_640x0_resize_catmullrom_2.png b/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_640x0_resize_catmullrom_2.png
deleted file mode 100644 (file)
index 417ac69..0000000
Binary files a/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_640x0_resize_catmullrom_2.png and /dev/null differ
diff --git a/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_8298a1fa052279512823ecd663d6f9c8.png b/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_8298a1fa052279512823ecd663d6f9c8.png
deleted file mode 100644 (file)
index e090035..0000000
Binary files a/resources/_gen/images/showcase/alora-labs/featured_hu15e97d42270c9e985a93353bc5eb2110_83801_8298a1fa052279512823ecd663d6f9c8.png and /dev/null differ