From 8b9803425e63e1b1801f8d5d676e96368d706722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 21 Jun 2024 09:35:57 +0200 Subject: [PATCH] Squashed 'docs/' changes from 8c46b304a..9b06f951e MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 9b06f951e Update theme aa24b5319 Improve quick start example 08e4e626d Update index.md f4c1a8ce1 Update Disqus comments implementation notes (#2631) aac3c0279 Update data sources 6ac3d7617 Fix typo 017da70a0 Ensure consistent use of method instead of variable 820881dcf Fix typo dc6fa5ac6 Document LiveReload debugging 18b8c79f3 Improve url function examples 89e6997f1 Improve url function examples 53134e05c Remove static files page 27645a90f Improve data file/source documentation f86b95bd4 Correct manual summary divider example f0e95c8d1 Add examples to comparison operators c5c6aa798 Document Pager methods 015049af9 Fix typos ea6a9fa3f Remove new-in label 0359c4a1e Fix links 3ab8bb4e3 Update performance.md b5393c65d Update configuration.md ca9697630 Update Sections.md 927c90562 Document HTTP cache config 6da219643 netlify: Hugo 0.127.0 de236b58b Deprecate .Sites.First in favor of .Sites.Default 076067b47 netlify: Hugo 0.126.3 c37dd680e Change GetPage examples to single argument 24282c554 Clarify cardinalityThreshold a4ce1a2d2 Revert "Update summaries.md" 466bc7e0f Update summaries.md 168800d5a Fix typo 65f6ca106 content adapters: Use --printPathWarnings to detect page collisions 9c7a700ea Update CLI docs 993aa40d3 netlify: Hugo 0.126.2 0242ec396 Replace file tree image with text 7670da499 rel and relref: Add note about which language version is picked 5dbd7ee26 Add cautionary note to virus scanner exclusion instructions 3c52fab72 Fix typo 868620bcd Improve content summary page 6bca7bc77 Rework safe functions e30d17947 Rework index function b76e81697 Miscellaneous edits 35849e55a Update formats.md 8f939ed5d Update menus.md ea2fd0384 Update docs.yaml (#2592) 2f5d1712b Add security.http.mediaTypes to security page d218b9c44 Change twitter.com to x.com cb2255821 content adapters: Note to exclude file extension when specifying page path 2d5a1690f Indicate that .Page.Sites.First returns the site corresponding to the default content language 60071d923 Indicate that .Site.Sites.First returns the site corresponding to the default content language 0a115cfda Add content adapters section to features summary 011742c24 timer: Adjust output example 977101061 Describe possibility of page collisions with content adapters d57b8a8cf Document virus scanning performance impact and remedy dd5c3af04 netlify: Hugo 0.126.1 0b16c842d Update description of Markdown content format e42ff7609 Fix typo a120ccd0d Update Scratch and Store descriptions cbb2294e3 Update content-adapters.md c39aa4e25 netlify: Upgrade to Hugo 0.126.0 58b9554b7 Update version references 6140802d8 Update docs.yaml 5ee96971a Document content adapters 653069a0d Document the Goldmark extras extension b8ca2833d Update sample data efad994ee Describe .Language.LanguageCode fallback value 3336532fe Update Colors.md 40b49a1f4 Update embedded.md f31741b47 Remove references to symlinks 1d5f40c90 Update sample data fb76580f8 Update function signatures 463adcf26 Use key-value consistently throughout documentation d03ed1887 Update sample data fc59e1f6f Remove examples of LanguageCode fallback b608f3165 Clarify purpose of multilingual site `title` b677f9424 use-modules: clarify the example of initializing a new module 774d64a4d Update theme 417e869f0 Update site configuration docs 1dbe9ee20 Update sample data file fa494af4b Move sample data file 300b4a319 Add sample data file b4fc35c3e Change transform.Unmarshal remote data examples (#2557) 4b79599b9 netlify: Hugo 0.125.6 e8cb250f3 Improve external learning resources 9b0c02e46 Rework content formats 886f952e0 Clarify descriptions of permalink tokens 2f0d8c98c Fix a misused word 3b3b0693d Update Dart Sass version refs c5d0fbcb0 netlify: Hugo 0.125.5 bf7d4f4fd Add Discourse to the comment system list 86a29bd43 Clarify language key format 6126c901a Update multilingual.md 6ec03c2c7 Update WorkingDir: Add new-in d48f40ded Document multilingual 404 redirects b161cc0c5 Update version references 02732fe91 Remove layouts directory 5befe5f28 Vendor theme 21247df4e Update link render hook 7d2fd8647 Update link render hook af9e6bbe7 Update Colors.md 0442f8264 Document images.Color.Luminance and images.Color.ColorHex d58b0b2f5 Update views.md 48ef3ad18 netlify: Hugo 0.125.4 b5721dff2 Update cross-references.md 27905febb Fix typo d16acd658 netlify: Hugo 0.125.3 o 28a1b9dce Update Parse.md 842b20d2c Update YouTube shortcode argument description a133a4828 Clarify that generated syntax highlighter css overrides markup.highlight.style 6e739fcbf Fix alias in /about/security.md a9859e4e2 netlify: Hugo 0.125.2 326fcb518 Update CLI docs 1d3afb6b0 Fix netlify.toml examples in hosting-on-netlify f4628189a Document front matter params expected by embedded templates 8a12d3c48 Fix typo 4b411d3fb Fix typo a7fa25d7f Update CLI docs 7c9a1b864 Add related funcs/methods to time.Round and time.Truncate 79f22ead4 Update strings.Diff description 8085d85e3 Document time.Truncate and time.Round 76a1263e7 netlify: Hugo 0.125.1 6ea4cb709 Update introduction.md e59a8805b Fix typo eace2624a Fix PageInner reference links ba66d6b90 Fix typo 3dcf32e25 Update debug.Dump 38d6731e2 netlify: Hugo 0.125.0 34362b62f Merge branch 'tempv0.125.0' 2221162fa Update privacy defaults and description 3873cf209 Remove "same path" restriction when using resources.Copy 66237fe12 Update youtube shortcode args 961639dfa Document additional changes in v0.125.0 3aa75ee74 Document taxonomies Page method 7f26f69e8 docs: Regen docshelper 05494b7d2 Fix conflicting text for global site function 264fe788e Add missing example to TOC page de8d008e4 Update formats.md 8559c70c3 Update comments.md 987f9424e Update comments.md b77011c93 Improve function descriptions ae663793b all: Fix duplicate words in comments 585095cf8 Fix home page feed 37c6954ac Improve RSS feeds 6cd1b77af Update front-matter.md 3d95ad715 Fix RSS last build date 2c6153461 Improve RSS feed for news section (#2521) 898d7c261 Fix typo 0241936e1 Add installation instructions for Exherbo 62df9bd73 Add missing links to warnidf function c9551d433 Fix a typo in templates docs 09ff1f27c Update YearDay.md 4b278d920 Fix literal usage of manual summary divider 8dec28c50 Fix literal usage of manual summary divider 16102faa8 Add introduction video b276bb17f Fix default data type 61319af7a Fix file extension typo in page-bundles.md ea74d798a Update shortcodes.md 9d18e239f tpl/tplimpl: Optionally exclude content from sitemap 4fe2efc76 Update page-bundles.md 34f099e1e Revise page bundle descriptions 021eea7b1 Update link to Modules page of Go Wiki 6972a9a83 Fix reference link 5ebfdea40 Fix configuration file tree example 12bebaaea Fixing typos b179f3b7f Update segments example ad3e26cec Update segments example 6970a9eeb Fix typo 194139ce7 Update configuration-markup.md 8fb8af286 tpl/tplimpl: Update Google Analytics template and config 4f8fd82ad Add wp2hugo migration tool 39261556a Update directory-structure.md 1e2c0b880 netlify: Hugo 0.124.1 55d5a2787 Update partial function example e26b4634f Fix typo bdada4361 Fix typo and capitalization 4a1fcfc29 Miscellaneous edits 6d6092058 Rework the about section 77ec9d696 Fix typo 6efbf5a39 Update configuration.md dc1fe4405 Update configuration.md 3d1cd3383 Miscellaneous updates 8049e7701 Update IsMultihost method 939281f3a Update version references 5e9567046 Add segments documentation 8e267d780 Update MultiLingual and MultiHost methods/functions c6aeeb747 netlify: Hugo 0.124.0 9fcd40fb5 Merge branch 'tempv0.124.0' 2f7a4ed68 docs: Regen CLI docs 5162805d7 docs: Regen docshelper e1fa18bf8 Update versions in GitHub hosting example 70653e4b2 Add PubCrank to list of front ends 5f81464d5 Update opengraph configuration example cc8a99633 Update hosting-on-gitlab.md 3af715f77 Clarify .Page.File behavior when page is not backed by a file cab417dee Update cspell rules 29f4dde19 Rename section menu entries from "Overview" to "In this section" e04291a99 Miscellaneous edits towards the goal of consistent language f9fc2d5d6 Update page collection quick reference a4893d9ba Update multilingual.md ed81ac6b0 Fix typo 1f522e32e Fix typo c4611eab5 Rework introduction to templating 64154fb8f Fix typo ad71bdfbf Miscellaneous multilingual edits 016adc81b Sync CLI docs 346a5fb02 netlify: Hugo 0.123.8 ff0bedd97 Document hugo.IsMultihost 0e234715c docs: Fix hyphens and grammar in synopsis of command 'hugo server' c8ef1da97 Add the Hugo dedicated Quiqr CMS 59dfe253b Fix grammatical error 1c6ca8022 Standardize usage of the term open-source e6fd6e68c Update Translations.md f6728e79b Update AllTranslations.md 18812d030 Fix typo 3b2d738c9 Correct isCJKLanguage description a1188fe28 Bump version references b51bd5548 Sync and vendor theme da3ba4902 Replace the github logo png with svg f75112195 Add diego to developer tools a4b001470 netlify: Hugo 0.123.7 c37107fda Fix typo 37c1d9c92 Fix typo 48a5ac213 Correct description of MENUENTRY.Title f434e25e8 Correct RESOURCE.Title example de03cd28c netlify: Hugo 0.123.5 3c103d0f9 Revise and improve RESOURCE.Name and RESOURCE.Title examples 4aafbb2f4 netlify: Hugo 0.123.4 f2bf6c365 Clarify archetype context 98ddc91a2 List page kinds to which a taxonomy term may be applied 6094e59bb Remove refs to RESOURCE.Key 208d44a04 Update Key.md 46dd28266 Document the capitalizeListTitles site config option 2ed3b7732 netlify: Hugo 0.123.3 73d35c02f Merge branch 'tempv0.123.3' 93eb216ca js: Support JSX and JSXImportSourceOptions c0cd22cc8 netlify: Hugo 0.123.2 94256ecd0 Add "comma" to list of comments solutions 6a4f38fc3 Update RESOURCE.Name examples 8cf5046f5 netlify: Hugo 0.123.1 c11c8e0da Fix link to embedded code block render hook for GoAT diagrams 08c4af7af Fix typos 1c20eb91a Update all transform.Unmarshal examples d41da7450 Clarify functionality of sectionPagesMenu 5bb3752f7 Update list of methods that use logical path fcab32c62 Update version strings 5770d37c0 Add new-in badge to images.Dither 9f9a9315f Remove variables section 313b1d85e Define and describe the concept of a logical path 97a8d2963 Document HUGO_MEMORYLIMIT c60cd20a8 Capitalize the word Markdown throughout the documentation f9b5938dd Create links to referenced embedded templates df31318d1 Improve quick start guide a76fa0de4 Rework Netlify hosting instructions and examples a3184764d Provide examples of content rendering before accessing Scratch or Store 0206b9699 Include examples of building from source ab268c395 Create FAQ reqarding file watcher c89cf2baa More updates for v0.123.00 b8d5383f7 Replace links to variable pages with links to method pages ad4a124c0 Updates for v0.123.0 24eda1cb0 netlify: Hugo 0.123.0 f7436b6a3 Merge commit '2658a71e1b6fe24a8b754a62ce0398a09d270d86' da2d6ba11 docs: Regen docshelper 411374a58 Add images.Dither filter 36937d58d docs: Regen CLI docs 7c4b77317 docs: Regenerate docshelper a9f56bf9b Merge commit '6efb279bfacbd7304cef994be8181c6f804e7dd4' b3346da53 docs: Make null booleans falsy in the docs helper 88286d1ea docs: Regen docs helper a8ad989c6 Merge commit '9b0050e9aabe4be65c78ccf292a348f309d50ccd' as 'docs' fc7de7136 docs: Prepare for new sub tree 1083bf7c0 releaser: Prepare repository for 0.123.0-DEV b9a03bd59 releaser: Bump versions for release of 0.122.0 e0021f496 build(deps): bump golang.org/x/tools from 0.16.0 to 0.17.0 d25902c0d build(deps): bump github.com/rogpeppe/go-internal from 1.11.0 to 1.12.0 50042ee1f docs: Regen docshelper 3758456b3 Merge commit '7125ad401ad043e46262afc7eca8dceb6d54bb9e' 7125ad401 Squashed 'docs/' changes from 4dd2d6415..3b1a8579d d0d2c6795 markup/goldmark: Support passthrough extension 2dd608378 build(deps): bump github.com/pelletier/go-toml/v2 from 2.1.0 to 2.1.1 45f52be7f build(deps): bump github.com/evanw/esbuild from 0.19.8 to 0.19.12 87bf2b968 tpl/tplimpl: Fix incorrect lastBuildDate f281ef8a4 tpl: fix incorrect lastBuildDate 46f618756 parser/metadecoders: Accumulate org keywords into arrays 891534307 deps: Update github.com/tdewolff/minify/v2 v2.20.9 => v2.20.13 a541e3b4d Upgrade to Go 1.21.6 912c6576b parser/metadecoders: Add CSV lazyQuotes option to transform.Unmarshal 911bc60a7 README: Update minimum Go version to 1.20 5ff632332 releaser: Prepare repository for 0.122.0-DEV 6d5b44305 releaser: Bump versions for release of 0.121.2 1ccd3147a build(deps): bump golang.org/x/crypto from 0.16.0 to 0.17.0 e40b9fbbc tpl/math: Add math.Rand template function 9cd8fbb33 Adjust site benchmark abcc61002 Simplify baseline benchmark 648d00c7d resources/images: Create AutoOrient image filter 8adba648c all: Remove unused code 6f13430d4 releaser: Prepare repository for 0.122.0-DEV 00b46fed8 releaser: Bump versions for release of 0.121.1 eb9f1eb65 Upgrade to Go 1.21.5 5186e762a releaser: Prepare repository for 0.122.0-DEV e321c3502 releaser: Bump versions for release of 0.121.0 255e0a971 docs: Regen docshelper 558f3258a build(deps): bump github.com/alecthomas/chroma/v2 from 2.11.1 to 2.12.0 6580cd30a docs: Adjust last merge from docs repository 7617de86c docs: Regen docs helper d19ed4d4e Merge commit '35dec7c96f7ee3eb17dd444f7067f0c776fb56ae' 35dec7c96 Squashed 'docs/' changes from 4d936aee6..4dd2d6415 9f978d387 Pull in the latest code from Go's template packages (#11771) 14d85ec13 tpl: Allow using page resources on the images page parameter for `opengraph`, `schema` and `twitter_cards` templates 171836cdf hugolib: Apply titleCaseStyle to automatic section pages 9ea7103db tpl/urls: Retain query and fragment with absURL and absLangURL 3fc42da3d markup: Add Level to Heading struct d24da1712 tpl/fmt: Print suppression help with erroridf 4583b4130 tpl/transform: Display Chroma highlighting errors 507f4e356 build(deps): bump github.com/tdewolff/minify/v2 from 2.20.8 to 2.20.9 a7e721e02 build(deps): bump github.com/spf13/cast from 1.5.1 to 1.6.0 2627b91d3 build(deps): bump github.com/getkin/kin-openapi from 0.121.0 to 0.122.0 6d4b01241 github: Fix CI build on Windows e536d461a build(deps): bump golang.org/x/image from 0.13.0 to 0.14.0 bfc325f56 deps: Update github.com/tdewolff/minify/v2 v2.20.7 => v2.20.8 36a60f65d build(deps): bump github.com/spf13/afero from 1.10.0 to 1.11.0 de2fcc5e1 build(deps): bump github.com/evanw/esbuild from 0.19.7 to 0.19.8 26a8ec207 Fix handling of dropped error in test 9ca889ba4 build(deps): bump google.golang.org/api from 0.151.0 to 0.152.0 e2a624dd6 common/para: Skip flaky test on CI 4fb40ee87 deps: Upgrade to libwebp 1.3.2 bc93a3613 build(deps): bump github.com/aws/aws-sdk-go from 1.48.4 to 1.48.6 3e5bc6f3b build(deps): bump golang.org/x/tools from 0.15.0 to 0.16.0 7c47036f1 build(deps): bump github.com/getkin/kin-openapi from 0.120.0 to 0.121.0 4d07e1fe8 build(deps): bump github.com/bep/logg from 0.3.0 to 0.4.0 1c41232e6 deps: Upgrade to github.com/bep/simplecobra v0.4.0 f11ca0fad build(deps): bump github.com/aws/aws-sdk-go from 1.48.2 to 1.48.4 30a18e882 watcher: Skip flaky test for now d7a2f3f98 build(deps): bump golang.org/x/tools from 0.14.0 to 0.15.0 b4c5df42f tpl/transform: Add transform.XMLEscape template function ef12d169c build(deps): bump github.com/gorilla/websocket from 1.5.0 to 1.5.1 a62bbfa9e build(deps): bump github.com/fatih/color from 1.15.0 to 1.16.0 8d32ca223 tpl/tplimpl: Remove superfluous type attr on script elements 5887230b7 build(deps): bump golang.org/x/net from 0.17.0 to 0.18.0 a4a66b821 build(deps): bump github.com/evanw/esbuild from 0.19.5 to 0.19.7 813390b5a build(deps): bump github.com/alecthomas/chroma/v2 from 2.10.0 to 2.11.1 d528bbd6d build(deps): bump github.com/tdewolff/minify/v2 from 2.20.5 to 2.20.7 af7f6c8b3 build(deps): bump google.golang.org/api from 0.138.0 to 0.151.0 e70849ea7 build(deps): bump github.com/aws/aws-sdk-go from 1.45.14 to 1.48.2 (#11724) dd6cd6268 resources/resource: Fix GroupByParamDate with raw TOML dates 27620daa2 common/para: Skip flaky tests on Windows 80d2fdbaa navigation: Unexport menu entry methods 805cc1773 markup/goldmark: Sync image render hook code with Goldmark 0bde6931a helpers: Fix TrimShortHTML used by markdownify and RenderString ac7cffa7e releaser: Prepare repository for 0.121.0-DEV f11bca5fe releaser: Bump versions for release of 0.120.4 9315a2d2c Upgrade to go 1.21.4 cee3a56a9 Add a new test helper da2a8e640 releaser: Prepare repository for 0.121.0-DEV a4892a07b releaser: Bump versions for release of 0.120.3 cb98e9061 tpl/tplimpl: Fix deprecation logic in embedded templates 5fa97ee96 Remove some old and unused deprecation code 4d38f4725 Add a field prefix to the deprecated log statements 80f793c38 Avoid double printing INFO deprecation messages a9079d7a6 build(deps): bump github.com/tdewolff/parse/v2 from 2.7.1 to 2.7.3 4914b7f18 build(deps): bump github.com/tdewolff/minify/v2 from 2.20.1 to 2.20.5 9e06fd339 releaser: Prepare repository for 0.121.0-DEV 9c2b2414d releaser: Bump versions for release of 0.120.2 ab2143368 Fix deprecation printing on info level 23fcfb7f7 tpl/tplimpl: Fix deprecation logic in RSS template 47bf2fcbe releaser: Prepare repository for 0.121.0-DEV 16fb2cae8 releaser: Bump versions for release of 0.120.1 2bedcf3d1 deps: Update github.com/tdewolff/minify/v2 v2.20.0 => v2.20.1 935999e2f releaser: Prepare repository for 0.121.0-DEV 20c3bae2c releaser: Bump versions for release of 0.120.0 29b6e133a docs: Regen docshelper 7f8ab7468 Add Solaris build 59bcc098c build(deps): bump github.com/fsnotify/fsnotify from 1.6.0 to 1.7.0 e26ba752d build(deps): bump github.com/google/go-cmp from 0.5.9 to 0.6.0 bcf07fa63 build(deps): bump github.com/alecthomas/chroma/v2 from 2.9.1 to 2.10.0 b6a756813 Make site.BaseURL and $pager.URL a string acf01bfb7 create/skeletons: Fix menu template 27b22cd87 commands/new: Remove format flag from new content cmd a2488b1c9 hugolib: Display correct markup identifier in error message 8f60c0c1e livereloadinject: Save some allocations 9dc608084 livereloadinject: Use more robust injection method a349aafb7 tpl/urls: Return strings from URL functions b8fbd4a57 transform/livereloadinject: Add benchmark e2b2092ce build(deps): bump golang.org/x/tools from 0.13.0 to 0.14.0 f4df7b88b build(deps): bump github.com/tdewolff/minify/v2 from 2.12.9 to 2.20.0 3d9bd404e build(deps): bump github.com/mattn/go-isatty from 0.0.19 to 0.0.20 5f5e55aa8 build(deps): bump golang.org/x/image from 0.12.0 to 0.13.0 aaaf1c8df Squashed 'docs/' changes from 417593493..4d936aee6 0baa4f983 Merge commit 'aaaf1c8df5d6aa061609d20510f7fa6c42e5cc1a' d3d4ab41a docs: Regenerate docshelper 28d844642 Revert "modules: Throttle the "downloading modules …" log entries" eb5fd3127 Revert "modules: Adjust the log throttle logic a little" 3ed28e4bf resources/images: Create padding image filter db14238ba markup/goldmark: Update the CJK extension to allow specifying line break styles 3f64b5a3d modules: Adjust the log throttle logic a little 66904097e modules: Throttle the "downloading modules …" log entries e54139c85 tpl/collections: Make delimit return a string 3710a5ec7 Squashed 'docs/' changes from cb18a5183..417593493 705e3cd5f Merge commit '3710a5ec7efe6baca6e452f43632c05d22bab3c4' 8c61fd254 build(deps): bump golang.org/x/net from 0.15.0 to 0.17.0 d3145e4e5 build(deps): bump github.com/evanw/esbuild from 0.19.3 to 0.19.5 743a1da3e build(deps): bump github.com/spf13/afero from 1.9.5 to 1.10.0 123901b74 build(deps): bump github.com/bep/logg from 0.2.0 to 0.3.0 71fd79a3f Revise the deprecation logging c4a530f10 Remove rest of the now unused emoji code 272484f8b markdown: Pass emoji codes to yuin/goldmark-emoji de4e46603 Fix so hugo get -u updates transitively c23a0c4a0 watcher/filenotify: Remove redundant duplicated comments a95670b98 docs: Remove outdated note from CONTRIBUTING.md 46bdc0388 tpl/debug: Add average and median to timer output 5160c7efa tpl/debug: Add debug.Timer e2dd4cd05 Merge commit 'e509cac533600cf4fa8382c9cdab78ddd82db688' e509cac53 Squashed 'docs/' changes from 7ef2dbce4..cb18a5183 fd3817181 Add some convenient integration test helpers 2eca1b3cc hugolib: Deprecate .Site.DisqusShortname 625162674 tpl/tplimpl: Fix dropped error a692278bc hugolib: Deprecate .Site.GoogleAnalytics d4016dd5c tpl/tplimpl: Deprecate .Site.Author usage in RSS template 4910312ee tpl/tplimpl: Deprecate .Site.Social usage with internal templates 1b5f78b6b markup/tableofcontents: Return template.HTML from .Fragments.ToHTML d5d0f420d deps: Update github.com/tdewolff/minify/v2 v2.12.7 => v2.12.9 5993afa4c commands: Update message displayed when running CLI from GUI d1b445853 common/hugo: Add hugo.IsServer and hugo.IsDevelopment 274852bcf all: Format files with gofmt 37a2d5eb4 magefile: Update isGoLatest to check for Go 1.21 4c95389c2 resources/integrity: Return string instead of template.HTMLAttr 3af8bded2 Update README.md 46da0b7aa tpl/lang: Formally deprecate lang.NumFmt 75f56b4ce tpl/collections: Fix and deprecate echoParams d234a963e releaser: Prepare repository for 0.120.0-DEV b84644c00 releaser: Bump versions for release of 0.119.0 a9d19dbdd docs: Even more about images.Process 12d713176 docs: More about images.Process 6b65b2fae common: Remove unused constants 1768684d8 docs: Regen docshelper 9aec42c54 Squashed 'docs/' changes from 686c7b6eb..7ef2dbce4 eb0ed33df Merge commit '9aec42c5452b3eb224888c50ba1c3f3b68a447e9' 6a246d115 Add images.Process filter ef0e7149d Add $image.Process c32094ace google_analytics_async.html: Add deprecation warning a262fd4dd build(deps): bump golang.org/x/tools from 0.12.0 to 0.13.0 f0d32455d build(deps): bump github.com/alecthomas/chroma/v2 from 2.8.0 to 2.9.1 e8bc8e6d0 build(deps): bump github.com/evanw/esbuild from 0.19.2 to 0.19.3 f9b3c0f48 Add images.Opacity filter 11fcda971 build(deps): bump github.com/aws/aws-sdk-go from 1.44.314 to 1.45.14 f31375d4c build(deps): bump github.com/getkin/kin-openapi from 0.118.0 to 0.120.0 6415b599b build(deps): bump golang.org/x/image from 0.11.0 to 0.12.0 1e9b87f76 Upgrade to Go 1.21.1 275c0acbf commands: Update CLI docs with the important -u flag in hugo mod get f9163155d create/skeletons: Improve viewport meta tag 79a17d9e5 Fix tests for Go 1.21.1 75c0f8828 commands/gen: Remove default highlight style 18ce85462 Fix recently broken benchmark 69f5bad40 Adjust baseline benchmarks 525bed991 commands: Print language code after web server address info 2ae4786ca releaser: Prepare repository for 0.119.0-DEV da7983ac4 releaser: Bump versions for release of 0.118.2 df5d76fed release: Revert to building with Go 1.20 7362ba220 releaser: Prepare repository for 0.119.0-DEV 0eb480aa1 releaser: Bump versions for release of 0.118.1 7e9092eee Revert to bullseye as the release build image 0200eaf58 releaser: Prepare repository for 0.119.0-DEV 28b640a22 releaser: Bump versions for release of 0.118.0 db45dbbee Merge commit '77b976dd92b4f66657d83d875aef0c617df492d9' 77b976dd9 Squashed 'docs/' changes from a7e1e9be8..686c7b6eb e847a98db docs: Regen docs helper 45c9bbc6c Don't use the OS environment when creating config for docs 94fbab2a8 Delay the creation of cache directories until they're used c3f273b2d deploy: Create AWS session for CloudFront invalidation via Go CDK d7dcc76d2 markup/goldmark: Add CJK extension 9bf76fd7e build(deps): bump google.golang.org/api from 0.134.0 to 0.138.0 15d3e48ce Fix RegularPagesRecursive for the home page b2a02c3c5 build(deps): bump golang.org/x/tools from 0.11.1 to 0.12.0 6821d6f15 build(deps): bump gocloud.dev from 0.33.0 to 0.34.0 93c7ad12e build(deps): bump github.com/pelletier/go-toml/v2 from 2.0.9 to 2.1.0 d2ae9e136 testscripts: Move hugo new tests to where they belong 3a8aad6b1 Fix .RawContent for empty content pages (#11407) a7b93e656 hugolib: Handle dropped error 65871d5cf common/loggers: Fix typo in option name 2e4bf89ec misc: Change dart-sass labels in workflows and snapcraft ebaa733d4 Make sure resources directory isn't created in hugo new theme 24b1be45c Go 1.21 Upgrade 111f02db2 testscripts: Make mod vendor test stable 8a08f91d5 dockerfile: Update Docker images dcf425c84 Fix it so disable a module does not disable transitive dependency required by others 9a8c84d60 create/skeletons: Move theme's site config to top level a19d03b0e build(deps): bump github.com/yuin/goldmark from 1.5.5 to 1.5.6 cdf0b3b7a modules: Make new cache directories read/write d979831db deploy: Update InvalidateCloudFront to use Go CDK helper bcf7421ea Avoid escaping HTML chars inside hugo_stats.json b6538532f commands/new: Embed site and theme skeletons 90944aa26 docshelper: Improve template lookup order descriptions db7bc4969 build(deps): bump github.com/evanw/esbuild from 0.18.17 to 0.19.2 a2f6400d6 cache: Hide IsResourceDir from the exported config 7d74cd0cc commands: Handle floats without decimals in hugo config d139f3023 docs: Replace docs.json with docs.yaml b1b691241 config: Add a type value for the tags related config entry 0de81c643 build(deps): bump golang.org/x/net from 0.13.0 to 0.14.0 851bf3515 Add all config to docshelper.json d4a6c16c1 build(deps): bump golang.org/x/image from 0.10.0 to 0.11.0 5d5fb22ea Merge commit '7c62d6ef1654c0383eae474d3bd9ddf7754c1f30' 7c62d6ef1 Squashed 'docs/' changes from c43daf45f..a7e1e9be8 641390f8f Try to make test more stable 2e6191b2e deps: Sync go-i18n with upstream 22861cb4d Return original error on resources.GetRemote retry timeouts 16da1ade7 testing: Write test caches to /tmp a3d42a277 Add retry in resources.GetRemote for temporary HTTP errors 2c20fd557 build(deps): bump gocloud.dev from 0.24.0 to 0.33.0 243736e75 build(deps): bump golang.org/x/net from 0.11.0 to 0.13.0 bf891c225 build(deps): bump github.com/marekm4/color-extractor from 1.2.0 to 1.2.1 da0df0ada build(deps): bump github.com/frankban/quicktest from 1.14.5 to 1.14.6 0885f8ec2 build(deps): bump golang.org/x/image from 0.9.0 to 0.10.0 61be050a9 build(deps): bump github.com/clbanning/mxj/v2 from 2.5.7 to 2.7.0 65af75fb0 build(deps): bump golang.org/x/tools from 0.9.3 to 0.11.1 2d75f74b8 build(deps): bump go.uber.org/automaxprocs from 1.5.2 to 1.5.3 2ac3d6160 build(deps): bump github.com/hairyhenderson/go-codeowners ade7ec818 Add Page.RenderShortcodes 8fa8ce3e4 Update GitHub issue template 9dce45c25 build(deps): bump github.com/pelletier/go-toml/v2 from 2.0.8 to 2.0.9 239f2e2c9 releaser: Prepare repository for 0.117.0-DEV 3e1ea030a releaser: Bump versions for release of 0.116.1 30885a6c5 Fix module config watch regression 58da8554c deps: Fix Chroma dependency version 92c159437 releaser: Prepare repository for 0.117.0-DEV 5a7e0da84 releaser: Bump versions for release of 0.116.0 d7db096a9 build(deps): bump github.com/evanw/esbuild from 0.18.11 to 0.18.17 c1df5b1b0 config: Do not fail on unknown config keys be8e2de59 resources: Fix spelling in method name d297c8e1b docs: Regenerate CLI docs fbb8eb39e Fix so temporary images do not get published 87d9bffe7 readme: Fix link d9fdcbe93 commands: Update cacheDir description 295d73388 Update where.md d5247788e docs: Update where 036e260d8 docs: Update where function operators a50356b9a docs: Rework the cacheDir documentation 8859be1c0 Merge commit '87de22d7464e239c775fbd48ebce1665d5b1e80d' 87de22d74 Squashed 'docs/' changes from 85befbb4d..c43daf45f bec9b80d9 Deprecate taxonomyTerm 1c97095ac Warn about unknown kinds in disableKinds b3cb6788b Move all Kind constants to its own package 5542f02fb build(deps): bump github.com/rogpeppe/go-internal 0bc7ed9a1 build(deps): bump golang.org/x/image from 0.8.0 to 0.9.0 36b512605 Remove unused autogenerated method 2589b1295 commands: Replace deprecated ioutil with os ef6e813ca tpl/collections: Add BenchmarkWhereOps f4598a098 tpl/collections: Add like operator to where function dc2a544fa tpl/collections: Fix description of apply function 916397320 snap: Set cache location to $HOME/.cache/hugo_cache b3f10556f Use os.UserCacheDir as first fallback if cacheDir is not set 4d7af757c Add a common regexp cache 7f058b8ba Fix multiple languages in HUGO_DISABLELANGUAGES 575d7f806 snap: Allow access to SSH keys and $HOME/.config/hugo 739d10e8b deps: Upgrade github.com/yuin/goldmark v1.5.4 => v1.5.5 0dbe0f1a0 releaser: Prepare repository for 0.116.0-DEV dc9524521 releaser: Bump versions for release of 0.115.4 d70b6c7d0 Fix broken handling of legacy taxonomyTerm in disableKinds d947db371 commands: Move testscript into its correct place d8c94c354 publisher: Improve class collector for dynamic classes 6bbec9001 Fix cache busting setup 5bd22ba85 commands: Delay server builds after the watcher is set up 7ae62f4aa Create hugo_stats.json if it's mounted but does not exists f1a061e9e Re-instate disableLiveReload as a config option (and not just a flag) 2f11e673c common/htime: Fix localization of abbreviated month names 387c5f60f Improve error messages for PostCSS etc. c406fd3a0 Fix setting config from env with complex (e.g. YAML) strings 286821e36 Fix for data mounts in sub folders 79f15be5b releaser: Prepare repository for 0.116.0-DEV 5c2e014a5 releaser: Bump versions for release of 0.115.3 cc44583cc Improve behavior of defaultContentLanguageInSubdir when only the default language is enabled 4da672af8 Return error when .Render is invoked without arg f1886f8c3 js: Pass tsconfig.json to esBuild 5bec50838 tpl/collections: Fix WordCount (etc.) regression in Where, Sort, Delimit f650e4d75 config/allconfig: Update timeout description c934a4506 docs: Refresh docs.json 91b02091a releaser: Prepare repository for 0.116.0-DEV 8966424e0 releaser: Bump versions for release of 0.115.2 72510969a snap: Allow access to AWS, Azure, and GCS config/credentials 70c5e485b snap: Update metadata and security.exec.osEnv a78b17d7f Make imageConfig work with modules a48194253 Restore language.disabled config 0f921ace6 Fix hugo mod vendor for modules with hugo.toml 601995376 Fix static content files multilingual root regression 92e86702e Fix defaultContentLanguageInSubdir with only 1 language 6c9ea022a config: Expand default security.exec.osEnv policy 12d3469dd Add titleCaseStyle none and firstupper bf7ee8a91 Bump github.com/bep/clock v0.3.0 to renamed github.com/bep/clocks v0.5.0 d912491f2 releaser: Prepare repository for 0.116.0-DEV 857374e69 releaser: Bump versions for release of 0.115.1 c27639b9a docs: Regen docs helper ceb486f98 Fix buildStats when tags and classes are disabled 5afc89f2b Rework the build.writeStats struct c1eac616d snap: Explicitly set security.exec.osenv during build 3c8256a13 snap: Restore security.exec.osenv whitelist 19d76ae96 github: Build for Dragonfly in CI build 11ecea610 Make build.writeStats a struct da98724bc build(deps): bump github.com/evanw/esbuild from 0.18.10 to 0.18.11 4d470bb73 build(deps): bump github.com/alecthomas/chroma/v2 from 2.7.0 to 2.8.0 0ff8e13c1 commands: Fix index out of range in hugo mod get ffd37d4f7 Only print the path warnings once b4b65245b Update README.md 87886f40d releaser: Prepare repository for 0.116.0-DEV 67caf5069 releaser: Bump versions for release of 0.115.0 7917961d5 Misc permalinks adjustments 80ecb9589 commands: Handle hugo mod get --help 58e09cc6c Update README.md 635cc346c commands: Fix panic when running hugo new theme without theme name 12646750a Print help message when triggered with no flags 79639c981 Fix output formats and media type per language config regression 9b313cec1 build(deps): bump github.com/evanw/esbuild from 0.18.5 to 0.18.10 b74b8d647 common/collections: Fix append regression to allow appending nil 793e38f5c commands: Fix help message for hugo new theme 7f698c893 Don't panic on invalid security whitelist regexp fa0e16f4c Fix false path warnings with resources.PostProcess 12e4c4d5d docs: Update permalinks documentation bac03f407 Merge branch 'master' of github.com:gohugoio/hugo cc14c6a52 resources/page: Allow section and taxonomy pages to have a permalink configuration e3308a0bb tpl/tplimpl: Fix typo in global variable name 019299b0b commands: Enable format flag with hugo new site 23ed087c4 Update README.md a018259bc Merge branch 'release-0.114.1' ad5e04daa releaser: Prepare repository for 0.115.0-DEV e9b716ad9 releaser: Bump versions for release of 0.114.1 ae31dbdd1 Revert "build(deps): bump gocloud.dev from 0.24.0 to 0.30.0" 5b4bfc2db Fix broken nodeploy setup 92f55f112 build(deps): bump github.com/niklasfasching/go-org from 1.6.6 to 1.7.0 078226dd6 Fix broken nodeploy setup 06d228aad snap: Switch from Embedded Dart Sass to Dart Sass (#11146) b1016d2e2 commands: Make hugo env respect --logLevel 49336bfc5 commands: Update Jekyll post-import output 941818295 build(deps): bump gocloud.dev from 0.24.0 to 0.30.0 5491e5547 build(deps): bump github.com/evanw/esbuild from 0.18.4 to 0.18.5 bf7af9043 deps: Update github.com/tdewolff/minify/v2 v2.12.5 => v2.12.7 5e12bf7dc releaser: Prepare repository for 0.115.0-DEV 9df2ec798 releaser: Bump versions for release of 0.114.0 59300faae Revert "build(deps): bump gocloud.dev from 0.24.0 to 0.29.0" 9f98b3e71 docs: Regen docshelper 3ab84651c Add empty Environ when loading test config 7241b5fd5 docs: Regen CLI docs 6dfbd2479 common/loggers: Drop the bold INFO etc. prefixes f59c3c021 loggers: Avoid using Logf for the LevelLoggerToWriter 3ca29b156 tocss/dartsas: Avoid using Logf for the internal Dart Sass logging fdb0b7fb1 helpers: Remove superflous formatting flag in deprecation warnings 49dd53a40 Revert "deps: Update github.com/tdewolff/minify/v2 v2.12.5 => v2.12.6" 68d9d3ebd all: Fix some typos 9009c8cdc all: Fix typos in function names and comments 12dc9a6e4 deploy: Fix deploy defaults for non-zero flag values (e.g. maxDeletes, invalidateCDN) 1b85303ac common/loggers: Re-add trailing newline in logger.Printf 8a04d47ab build(deps): bump github.com/evanw/esbuild from 0.18.3 to 0.18.4 7c9fada77 Replace the old log setup, with structured logging etc. 0e7944658 Revert "snap: Transition base snap from core20 to core22 (#11101)" (#11125) aaf2e9693 build(deps): bump github.com/evanw/esbuild from 0.18.2 to 0.18.3 ee359df17 Fix upstream Go templates bug with reversed key/value assignment 0f989d5e2 build(deps): bump golang.org/x/sync from 0.2.0 to 0.3.0 f73c56753 common/collections: Always make a copy of the input slice in Append d178fe94f tpl/collections: Fix append when appending a slice to a slice of slices 732dcb848 build(deps): bump google.golang.org/api from 0.123.0 to 0.127.0 944859f1a build(deps): bump golang.org/x/tools from 0.9.1 to 0.9.3 90b2674dd Re-add site.RSSLink (and deprecate it) bb9377b5e build(deps): bump github.com/kyokomi/emoji/v2 from 2.2.11 to 2.2.12 e88f1b80b build(deps): bump github.com/getkin/kin-openapi from 0.117.0 to 0.118.0 516f0cb6c build(deps): bump golang.org/x/net from 0.10.0 to 0.11.0 21d17566a Fix .Width and .Height for animated gifs 35e9b3ed1 snap: Transition base snap from core20 to core22 (#11101) 3c1deaf20 Squashed 'docs/' changes from 1d5548d73..85befbb4d a0009e070 Merge commit '3c1deaf201a35de08d23cc58f8f03682cace3349' 7bed16c30 build(deps): bump gocloud.dev from 0.24.0 to 0.29.0 2ba2271e4 tpl/math: Allow variadic math functions to take slice args, add math.Product, math.Sum 60a2cdf72 Fix config merge regression with root slices (e.g. disableKinds) e08cfc8ca build(deps): bump golang.org/x/image from 0.7.0 to 0.8.0 ef147f4e8 commands: Remove flags log, verboseLog, add flag logLevel, deprecate flags verbose and debug 489519566 build(deps): bump github.com/magefile/mage from 1.14.0 to 1.15.0 91c0b0f76 build(deps): bump github.com/pelletier/go-toml/v2 from 2.0.6 to 2.0.8 baef235d5 build(deps): bump github.com/evanw/esbuild from 0.17.19 to 0.18.2 0541a1b57 Fix handling of aliases (e.g. hugo serve) 258884f44 cache: Set default cache path based on $USER 254c2b323 build(deps): bump go.uber.org/atomic from 1.10.0 to 1.11.0 84f71ba8f build(deps): bump github.com/hairyhenderson/go-codeowners 69f0e88a4 resources: Remove failing and superflous test assertion 82adc972e build(deps): bump github.com/frankban/quicktest from 1.14.4 to 1.14.5 60533fdc0 build(deps): bump github.com/mattn/go-isatty from 0.0.17 to 0.0.19 261143bbb build(deps): bump github.com/spf13/afero from 1.9.3 to 1.9.5 b8526f32f commands,config: Fix typo in log and error messages ed7e25006 helpers: Avoid url.Parse in RelURL and AbsURL if we can 6a09e7f28 Adjust benchmarks 29e5cbb69 Adjust benchmark ded686600 Add BenchmarkAbsURL e1d43021c helpers: Improve schema detection when creating relative URLs 5db215d4d helpers: Add a basic benchmark for RelURL b7dc93ca1 config: Remove unexpected _merge keys introduced in author and social maps f210188da Upgrade to v2 of the Dart Sass Embedded Protocol c782ebd89 Fix indented SASS imports for Dart Sass 73779707a releaser: Prepare repository for 0.114.0-DEV 085c1b3d6 releaser: Bump versions for release of 0.113.0 6c955cc3d docs: Regenerate CLI docs 5446900de commands: Update CLI docs vs server and production cf38c73f5 commands: Add TLS/HTTPS support to hugo server 536bf71ab releaser: Prepare repository for 0.113.0-DEV ea3c95a7b releaser: Bump versions for release of 0.112.7 5e5ce00d4 Fix menuItem.URL when pageRef is not set a191b38ac Don't inject livereload script on hugo -w 382c726e6 markup: Fix typo in function and struct names 4c46f9400 all: Replace deprecated ioutil with io and os 8c7a4e995 releaser: Prepare repository for 0.113.0-DEV 2ca0fcc44 releaser: Bump versions for release of 0.112.6 a6d774e80 docs: Regenerate CLI docs dfb1895e4 Squashed 'docs/' changes from 1798dc0d5..1d5548d73 9e4072ac2 Merge commit 'dfb1895e4b82b2249d9baaed37ac7ae5e855a126' 0ef295284 commands: Add --lang to hugo config e3ae8f025 Make sure any default mounts show up in "hugo config" 06faee5be github: Fix Windows build 409c6c3fc deps: Update github.com/tdewolff/minify/v2 v2.12.5 => v2.12.6 ff77a927f tpl/tplimpl: Use .Language.LanguageCode in built-in templates 9cdca1f95 Fail on invalid defaultContentLanguage 6462eecfb Avoid panic in invalid language config a7d6b1413 Don't panic on empty yaml config params 3f497d496 Prevent double escaping of image alt-text in Goldmar typographer 32585696b Fix potential deadlock in ByParam d47225ce9 releaser: Bump versions for release of 0.112.5 e3dfc76fa Fix it so languageCode on top level config still works cd59216de releaser: Prepare repository for 0.113.0-DEV e285153d7 releaser: Bump versions for release of 0.112.4 20ea2e0c6 docs: Regenerate CLI docs 51d0a0ab0 commands: Add the common build flags to the config commands fd099331e Fix Processed images count regression for multiple languages 43f1282e7 commands: Reinstate some of the removed build flags (e.g. --theme) to new and mod e96cdfe96 Don't create the public folder unless needed ffdbce578 docs: Regen CLI docs a838a27e4 Merge commit 'd3927310d5b2404c3238f9b899db3329ea516490' d3927310d Squashed 'docs/' changes from 39af43ef1..1798dc0d5 273d9f69a commands: Fail the build when no config file or config dir a6257d8a4 langs: Remove the Language.Params deprecation message for now 6c2db0dfb Add language.LanguageCode 8f293a185 Fix --renderStaticToDisk regression 901cd970d commands: Re-introduce the -f shorthand for hugo new site f86b5f70a commands: Move the --format flag to only the commands that support it 3297b395d releaser: Prepare repository for 0.113.0-DEV ba6f74e40 releaser: Bump versions for release of 0.112.3 231374a1f Fix regression when loading config -e is empty or HUGO_ENV or HUGO_ENVIRONMENT is set 5adc83790 releaser: Prepare repository for 0.113.0-DEV f89108f2b releaser: Bump versions for release of 0.112.2 dd6792201 minifiers: Make sure JS.Version always has a value 9a235d0af Fix regression with site.IsServer when not running a server 99407c39b releaser: Prepare repository for 0.113.0-DEV 7c90c19d2 releaser: Bump versions for release of 0.112.1 ed906a86e Fix regression when config for OutputFormat.BaseName is an empty string d666edad7 releaser: Prepare repository for 0.113.0-DEV 0a95d6704 releaser: Bump versions for release of 0.112.0 70b2aaf87 circleci: Add github.com to known hosts f01492115 Revert "build(deps): bump gocloud.dev from 0.24.0 to 0.29.0" bd38e35f9 Revert "postcss: Improve validation of option 'config'" 85b13c105 Add --format to hugo config b6e6438f7 docs: Regen docshelper 943ff7f7c commands: Add missing gen docshelper command 288be1976 Fix "unknown command" message when no suggestion 9a0370e8e postcss: Improve validation of option 'config' 10d0fcc01 docs: Regen CLI docs b95e15694 Merge commit 'f96384a3b596f9bc0a3a035970b09b2c601f0ccb' f96384a3b Squashed 'docs/' changes from 6e32d0591..39af43ef1 4cac5f5e3 Avoid writing to hugo_stats.json when there are no changes 2c3d4dfb7 Add cache busting config to support Tailwind 3 1292d5a26 build(deps): bump github.com/tdewolff/parse/v2 from 2.6.5 to 2.6.6 baa556904 build(deps): bump gocloud.dev from 0.24.0 to 0.29.0 a5413c1f8 build(deps): bump github.com/gobuffalo/flect from 0.3.0 to 1.0.2 9cea58a8a build(deps): bump golang.org/x/image from 0.5.0 to 0.7.0 1a5dce4cc build(deps): bump github.com/tdewolff/minify/v2 from 2.12.4 to 2.12.5 6ca8a40f2 commands: Make all list commands list what 'all' did before 2db7ec622 tpl/tplimpl: Add img loading attribute to figure shortcode (#10927) e6dc8053b commands: Fix build logic when listing expired/future draft content 2637b4ef4 Allow whitelisting mediaTypes used in resources.GetRemote 7c7baa618 Add hugo.WorkingDir 4f085e80d Make language merging of markup etc. config without values in the root 150d190ff tpl/urls: Return empty string when JoinPath has zero args 065ae003a build(deps): bump github.com/dustin/go-humanize from 1.0.0 to 1.0.1 1a7d57c0b build(deps): bump google.golang.org/api from 0.76.0 to 0.123.0 bba54e694 build(deps): bump golang.org/x/tools from 0.4.0 to 0.9.1 737054311 build(deps): bump github.com/cli/safeexec from 1.0.0 to 1.0.1 f6269ee92 build(deps): bump github.com/getkin/kin-openapi from 0.110.0 to 0.117.0 715d48404 deps: Update github.com/evanw/esbuild v0.17.0 => v0.17.19 0a51dfac9 commands: Fix data race c371171ab deps: Update github.com/alecthomas/chroma/v2 v2.7.0 d6197a41f Re-add --printUnusedTemplates and --printPathWarnings e4e0313c8 tpl/urls: Fix build broken by a merge 5b3e165ba tpl/urls: Add JoinPath template function 03cb38e6c Allow legacy taxonomyTerm in disableKinds ad4bc969d Fix warn message about custom params on the language top level 4003c7903 Fix some spelling mistakes 610cedaa6 all: Fix comments for exported functions and packages 24e7d0c17 deps: Update github.com/bep/golibsass v1.1.0 => v1.1.1 008170c8a Make GOMAXPROCS to be CPU limit aware 7c647bcae Allow empty params.mainSections 95818e27d modules: Fix format flag in error 3f00f4753 commands: Load config before creating the filesystem 834b3d7e4 Fix some recently introduced error handling issues 1155bbca9 tpl/lang: document delimiter option for FormatNumberCustom 86b2a2743 Re-add site.LanguagePrefix 35955f50e github: Trim the test flow a little 8a69ccbb0 commands: Improve the common build flag handling 7ce033a89 Support, but warn, about top level language custom params 05542130b Handle transient errors in config loading etc. 5251f015b Re-establish all the server flags 5d857165f Deprecate site.Language.Params and some other fixes 0106cf1a6 Revert "Make GOMAXPROCS CPU limit aware" 59050f97f Make GOMAXPROCS CPU limit aware faa6998f2 Add Sections to Site interface 3d90871e9 helpers: simplify path tests with T.TempDir bda082c98 tpl: Add math.Abs 241b21b0f Create a struct with all of Hugo's config options 6aededf6b Improve date parsing performance for the common case 0988b76a7 Add a counter helper e0e19a934 Expand the baseline benchmark a little bcd7ac770 Revert "Update syntax-highlighting.md (#10929)" (#10930) a4fb8dc6b Update syntax-highlighting.md (#10929) 4f341fa1a Update README.md 5c7b79cf7 tpl/strings: Clarify findRESubmatch description 0cb6ca590 langs/i18n: Fallback to defaultContentLanguage instead of English f1062519a tpl/debug: Add VisualizeSpaces 46a3cf618 Update README.md 9906c1ae5 Prevent the global error collector to panic when sending on closed channel 5596dc24a markup/goldmark: Add config options for the typographer extension d01731d53 readme: Fix build command f1e8f010f Update README.md 5748133d5 Add test for ToC vs include 05c095a0e resources.functions: improve validation 891b2918d resources: Fix typos in error message and variables b0b1b76dc markup/goldmark: Fail on invalid Markdown attributes 0fbab7cbc commands: Fix data race in test f5eddf89b tpl/math: Return error if less than 2 input numbers 0e8ab20a8 releaser: Prepare repository for 0.112.0-DEV 5d4eb5154 releaser: Bump versions for release of 0.111.3 1c841ec91 deps: Update go-org to v1.6.6 e7148f335 Fix "unknown shortcode token" when calling shortcode within fenced code block d55af2abf Run gofmt -s on source files b6f44aaf1 docs: Improve examples of variadic math functions 84201e8d5 tpl/math: Allow multi numbers in add, sub, mul, div, min and max 04b981164 readme: Update dependency list 9818724b5 Improve error message for unclosed shortcode with inner content 34a86e13f Don't fail when calling Paginate with an empty pages.PagesGroup 0f01bd463 server: Replace golang.org/x/net/context with context d171d1543 tpl: Add hasSuffix alias 02ab77da3 watcher: use time.NewTicker to prevent leaks 873be9f90 ensure we default to 10 correctly bebb2b8d0 switch transfers to workers e6f029bde customize parallel transfer count bdbfacb86 metadecoders: Add support for native org dates in frontmatter PR #7433 added support for Org timestamps for the DATE header. This PR widens the support with additional front matter headers LASTMOD, PUBLISHDATE and EXPIRYDATE. 32ea40aa8 releaser: Prepare repository for 0.112.0-DEV 4164f8fef releaser: Bump versions for release of 0.111.2 b83050cb4 Fix .Fragments when called cross sites on uninitialized output format df5608f8a Allow page.TableOfContents on self in shortcode f56ce01ae tpl/partial: Consolidate GoDoc 3bbeb5688 Fix "context canceled" with partial 184a67ac4 cache: Fix --gc failure on Windows 6c798eba6 Page context handling in i18n ec1c97e7e Work around --gc failure on Windows <= 10 f10009e7f Update to Go 1.20.1 a950950f1 snap: Fix dart-sass-embedded installation 36ce3a4a9 Correct typos in Go comments 17e60b77e releaser: Prepare repository for 0.112.0-DEV 39a4a3cf6 releaser: Bump versions for release of 0.111.1 52f339dad Merge branch 'release-0.111.0' eef23a7f2 Fix "page" not defined 18cf75805 releaser: Prepare repository for 0.112.0-DEV 3fa8bb831 releaser: Bump versions for release of 0.111.0 db9f74d24 Revert "build(deps): bump gocloud.dev from 0.24.0 to 0.28.0 (#10610)" 60e6fa798 build: Bump build images 7e51ba03c build: Update Linux ARM build image 66f94b494 tpl/tplimpl: Remove the Google News internal template c0d15a289 strings: fix Truncate behavior for formatted html 2a61910e8 tpl/strings: Adjust benchmark 079d1b654 tpl/strings: Add BenchmarkTruncate a56b9071d cods: Regen docs helper 5c317c55e Move the Related doc counter to prevent a race a669467d9 Misc ioutil deprecation adjustments d453c1274 Replace deprecated ioutil with io and os 336622d5e Squashed 'docs/' changes from 36dd5483f..6e32d0591 97b010f52 Merge commit '336622d5e7afd9334cd2de7150d4f16bdf7c24f9' 4d36b99a4 build(deps): bump github.com/tdewolff/parse/v2 from 2.6.4 to 2.6.5 807237bc0 build(deps): bump github.com/mattn/go-isatty from 0.0.16 to 0.0.17 79b03b3f7 build(deps): bump golang.org/x/image e31441031 Remove unused temp directory 39cc3a2a7 exif: Return the proper exposure time value in some special cases ce524d0b5 Add a page template func 2662faf61 dartsass: Import CSS without extension at compile time 271318ad7 Split parse and render for Goldmark e442a63bb related: Add config option cardinalityThreshold d5601e839 docs: Another fix related docs example cedd04db3 docs: Fix related docs example 4bf91b975 build(deps): bump golang.org/x/net from 0.4.0 to 0.7.0 ae48507d6 Fix shortcode error when closing without .Inner 7d78a498e Throw an error when shortcode is expected to be closed 0dbeac80c Add some shortcode testcases b99d073ca sass: Remove some unused leftover code e965cb679 resources/sass: Remove debug statements cf591b7c0 Squashed 'docs/' changes from 1214f6ffb..36dd5483f 7e539cb39 Merge commit 'cf591b7c0c598d34896709db6d28598da37e3ff6' 586fea0de page: Move the cache double check right after the lock fa2d7adf1 page: Add some concurrency to the building of the related page index 4346987fa related: Adjust benchmark 2dad13c0e create: Fix typo in error message ecf3cd514 tocss: Simplify the hugo:vars type handling a1a9c08b5 resource_transformers/tocss: Fixed hugo:vars casting 6abd15e78 Adjust tests for GO 1.20 094135ff9 tpl/internal: Sync Go template src to Go 1.20 4801e2e8e build: Update to Go 1.20 90da7664b Add page fragments support to Related 0afec0a9f related: Adjust benchmark 28540ed13 related: Add benchmark 9af78d110 tpl/collections: Improve error message in Index d33a7ebcc Make the HTML collector parsing more robust 2a364cca6 Revert "build(deps): bump github.com/getkin/kin-openapi from 0.110.0 to 0.114.0" 3fb2417cb deps: Upgrade github.com/yuin/goldmark v1.5.3 => v1.5.4 fce089048 tpl/strings: Add strings.ContainsNonSpace 87c78bd3e build(deps): bump github.com/getkin/kin-openapi from 0.110.0 to 0.114.0 69c369e11 deps: Upgrade github.com/alecthomas/chroma v2.4.0 => v2.5.0 73ece30d8 markup: Fix linenos codeblock hl option case regression f9fc0e045 Fix slow HTML elements collector for the pre case 4f4a1c00b publisher: Add benchmark 76c6140c5 snap: Install dart-sass-embedded for 32-bit ARM (armhf) too d4482e8bf snap: Add read access for ~/.gitconfig.local and ~/.config/git/* too 1477d0ba9 commands: Fix server url rewrites (http status 200) dd37163f5 build(deps): bump github.com/kyokomi/emoji/v2 from 2.2.10 to 2.2.11 c3a59a7d5 build(deps): bump gocloud.dev from 0.24.0 to 0.28.0 (#10610) 4ccc8cfb4 Fix description of collections.Uniq e2cfc3d5a Update CONTRIBUTING.md 168858331 Fix shortcode detection in RenderString 4ef9baf5b Only invoke a given cached partial once 93ed6e447 Update README.md 0d1161b26 releaser: Prepare repository for 0.111.0-DEV e32a493b7 releaser: Bump versions for release of 0.110.0 19e960562 dos: Regen CLI docs 80e8bd3b7 docs: Regen docshelper b661132e0 Merge commit 'ef6f101e75256c3bb88a6f1f3b5c1273bf8d7382' ef6f101e7 Squashed 'docs/' changes from 2c0125b52..1214f6ffb d59541903 related: Handly []any 671f64b2e Fix permalinks issue with repeated sections 2fb40ece5 tpl/strings: Add findRESubmatch c6b388769 config/security: Add O\w+ (e.g. GOROOT) to the default allowed list 21af5b359 Preserve front matter slice value types (e.g. int) f38a2fbd2 Make hugo.toml the new config.toml 6a579ebac Add fill HTTP Response info into .Data in resources.GetRemote f13531e60 Fix HEAD method in resources.GetRemote b5d485060 Fix order when reading custom headers in resources.GetRemote 6e9fa9e0f deps: Upgrade github.com/evanw/esbuild v0.15.18 => v0.17.0 c4f3a46ce Update README.md fbc3e08c6 resource: Fix Go Doc vs .Data.Integrity e402d91ee Misc doc, code refactoring to improve documentation 3c51625c7 Make readFile return nil when file not found (note) dd6d0a6de Remove reference to Goreleaser in code comment f95fd57aa tpl/compare: Sort special float values as string e754d5cb3 tpl/diagrams: Move Goat to its own file 002cd5280 Update CONTRIBUTING.md a76c405d4 Update CONTRIBUTING.md c0a03a2a3 Update README.md e127d3e5c releaser: Prepare repository for 0.110.0-DEV 47b12b83e releaser: Bump versions for release of 0.109.0 180dfeba0 Adjust "you need the extended version" error message 10bb29d7f docs: Regen docs helper JSON eb0c8f9d0 resource/page: Slight adjustment of Page.Ancestors 3a216186b resource/page: Add Page.Ancestors 7874b9681 build(deps): bump golang.org/x/tools from 0.3.0 to 0.4.0 71832328f Annotate test assertions 37ab1cf12 hugolib: Exclude non-linkable pages from translations map 59af05cab Add HUGO_PUBLISHDIR to the Node environment 4989da653 Revert "tpl/tplimpl: Use https in sitemap templates" cd1ed563a tpl: Improve template funcs GoDoc aa2c72419 tpl/resources: Fix data race in ToCSS effa6a422 tocss: Add some more test cases 5d5f0a237 tocss: Fix unquote case with double quotes d20d2651e Allow "fast render mode" even if --disableLiveReload is set 41a080b26 tocss: Add vars option 41bc6f702 Squashed 'docs/' changes from 2201ac0e5..2c0125b52 9a215d695 Merge commit '41bc6f702aa54200530efbf4267e5c823df3028d' eda1e720c modules: Improve "module workspace" not found error 330fa8941 modules: Adjust watch logic vs workspace use definitions 6db527483 Add any configured Go Workspace file to the config watcher 0d4b17d4c modules: Make the module.workspace=off as default (note) 3afaca758 release: Add a note section in release notes 2d217cba5 helpers: Allow at signs in UnicodeSanitize (note) 17055d1fa parser/metadecoders: Remove superflous cast in test 2a81a4949 parser/metadecoders: Simplify nil check in Unmarshal e30d711c2 parser/metadecoders: Add empty /data JSON file as empty map ad2059878 Also consider wrapped errors when checking for file IsNotExist errors 87e898a17 tpl/openapi3: Wrap *kopenapi3.T b54de1bd9 resources/js: Fix some import discrepancies between Hugo and ESBuild c9354d546 github: Update to Dart Sass 1.56.2 d89426985 github: Use ruby/setup-ruby 3fd0b7849 tpl/tplimpl: Use https in sitemap templates e0e63f35e parser/metadecoders: Fix spelling cc574ef12 releaser: Prepare repository for 0.109.0-DEV a0d64a46e releaser: Bump versions for release of 0.108.0 f97544a83 Make the hugo env non verbose output slightly more verbose d8efe085c Add dart-sass-embedded version info to hugo env -v f5b5b71c6 deps: Upgrade github.com/bep/godartsass v0.15.0 => v0.16.0 b82b547ac tpl/embedded: Make Open Graph's series optional da670c38e Squashed 'docs/' changes from 4c1309cdf..2201ac0e5 c9f2fa266 Merge commit 'da670c38ee63a7fef25e2b9f42519232055b60dc' 5067775a6 common/hugio: Fix multiWriteCloser.Close 50549c867 build(deps): bump github.com/getkin/kin-openapi from 0.109.0 to 0.110.0 de9c5542c docs: Add basic doc for wrapStandAloneImageWithinParagraph etc. e93138dfd dartsass: Add sourceMapIncludeSources option 7d16c3c0c github: Update Dart Sass Embedded to 1.56.1 63126c635 markup/goldmark: Add removeSurroundingParagraph for Markdown images 535ea8cc9 build(deps): bump github.com/evanw/esbuild from 0.15.16 to 0.15.18 8bbec426c build(deps): bump golang.org/x/text from 0.4.0 to 0.5.0 0bfa293dc build(deps): bump github.com/evanw/esbuild from 0.15.15 to 0.15.16 0b976d2b4 tpl/tplimpl: Allow alternate comment syntax a49e51fd0 resources: Increase timeout for http.Client d373774cb tpl/collections: Fix some index cases where the indices given is a slice and be more lenient with nil inputs 7d5e3ab8a tpl: Misco GoDoc improvements dc44bca96 config/security: Add CI env var to whitelist da1652789 Squashed 'docs/' changes from 32cb8785e..4c1309cdf ef518485c Merge commit 'da16527896d3087585c5e758083ea498dcabc2c3' 83080df61 deps: Upgrade github.com/bep/godartsass v0.14.0 => v0.15.0 b8d5c378b tpl: Use consistent delimiter spacing in examples 75f782a5a docs: Regen docs helper 2221b5b30 releaser: Bump versions for release of 0.107.0 6a004b8d9 build(deps): bump github.com/getkin/kin-openapi from 0.108.0 to 0.109.0 092362242 build(deps): bump github.com/evanw/esbuild from 0.15.14 to 0.15.15 7855b47f0 Add a cache for lexers.Get 34d1150d9 markup/goldmark: Improve benchmark 85e2ac1a4 commands: Create assets directory with new site 74776726d build(deps): bump github.com/frankban/quicktest from 1.14.3 to 1.14.4 63f7f0ff5 build(deps): bump golang.org/x/tools from 0.2.0 to 0.3.0 bcb62d891 deps: Upgrade github.com/alecthomas/chroma/v2 v2.4.0 00fe7e040 hugo/parser: Fix shortcode boolean param parsing df85cb9ae releaser: Prepare repository for 0.107.0-DEV e08ce30fe releaser: Bump versions for release of 0.106.0 a99fed485 resources/tpl: Add a test for resources.Get db945a6ed tlp/resources: resources.Get returns nil when given empty string bafb389b3 build(deps): bump github.com/pelletier/go-toml/v2 from 2.0.4 to 2.0.6 0a019a1a5 docs: Regen CLI docs 9f7fb0a73 docs: Regenerate docs helper f04cc581e Merge commit '00c4484c7092181729f6f470805bc7d72e8ad17b' 00c4484c7 Squashed 'docs/' changes from 392668f4f..32cb8785e cdd83bf3c build(deps): bump github.com/evanw/esbuild from 0.15.13 to 0.15.14 e00220a06 deps: Update the libweb version string a662ddae1 deps: Upgrade github.com/bep/gowebp v0.1.0 => v0.2.0 13adf3e02 readme: Update ToC fe08d35f2 build(deps): bump github.com/yuin/goldmark from 1.5.2 to 1.5.3 4b675ddd4 build(deps): bump github.com/spf13/afero from 1.9.2 to 1.9.3 24eaa290c build(deps): bump github.com/getkin/kin-openapi from 0.107.0 to 0.108.0 f6ab9553f tpl/internal: Sync go_templates 58a98c775 build(deps): bump github.com/clbanning/mxj/v2 from 2.5.6 to 2.5.7 900904fd1 build(deps): bump golang.org/x/net from 0.1.0 to 0.2.0 24eca0cbe build(deps): bump github.com/evanw/esbuild from 0.15.12 to 0.15.13 60e0e2c1d Add Go 1.16+ install method to README 52ea07d2e Fix taxonomy weight sort regression 77fc74a5b releaser: Prepare repository for 0.106.0-DEV 0e3b42b4a releaser: Bump versions for release of 0.105.0 f50585442 build(deps): bump golang.org/x/tools from 0.1.12 to 0.2.0 2aedccc9a build(deps): bump github.com/getkin/kin-openapi from 0.106.0 to 0.107.0 c10931404 build(deps): bump golang.org/x/text from 0.3.7 to 0.4.0 4732c47d1 build(deps): bump github.com/spf13/cobra from 1.5.0 to 1.6.1 62780ec8d build(deps): bump github.com/getkin/kin-openapi from 0.103.0 to 0.106.0 351d6b062 build(deps): bump github.com/tdewolff/minify/v2 from 2.12.1 to 2.12.4 631d768be Revise the fix for shortcode vs output format nilpointer e5d2a8f6a Avoid nilpointer when shortcode page content output nil 00ff161b6 livereload: Use text/javascript here, too 588710a7a media: Rename application/javascript, application/typescript to text/javascript etc. ed930db2f build(deps): bump github.com/yuin/goldmark from 1.4.15 to 1.5.2 05df96481 build(deps): bump github.com/fsnotify/fsnotify from 1.5.4 to 1.6.0 20ef6dcf9 Skip flakey server tests on GitHub Action on Windows 9860e0e18 build(deps): bump github.com/magefile/mage from 1.13.0 to 1.14.0 d1cd1db0e github: Avoid duplicate test runs 09e10110a tpl/encoding: Add noHTMLEscape option to jsonify 2ef60dbd2 build(deps): bump github.com/evanw/esbuild from 0.15.9 to 0.15.12 6275aad9e Update Go and Alpine version in Dockerfile 01ebb6e30 Don't use self-closing generator tag a066e9885 build: Update to Go 1.19.2 1fd3320dc github: Use SHA versions 0fb2b3d14 Resolve dependency-path not found error in workflow db05232d5 Use setup-go action to cache dependencies 2734f956c releaser: Prepare repository for 0.105.0-DEV 58b824581 releaser: Bump versions for release of 0.104.3 ec57cf2c3 resources: Update golden image dithering exception list 3a9cb7b0f resources/images: Fix 2 animated GIF resize issues 0addb302a server: Fix flaky TestServerPathEncodingIssues tests b002d4795 commands: Remove extraneous newline from result of convert toTOML e3f31352d config/security: Fix filename ec02c537e releaser: Prepare repository for 0.105.0-DEV 84cbe7249 releaser: Bump versions for release of 0.104.2 4611b6920 Fix htimes /: operation not permitted error on config changes 2171e3c9a Revert "Adjust a test" cac773aef Adjust a test 51010a69b releaser: Prepare repository for 0.105.0-DEV 8958b8741 releaser: Bump versions for release of 0.104.1 29ccb3606 Fix /static performance regression from Hugo 0.103.0 d8aba18e0 releaser: Prepare repository for 0.105.0-DEV c744dbd6e releaser: Bump versions for release of 0.104.0 5c4165336 Consolidate the glob case logic 281554ee9 hugofs: Fix glob case-sensitivity bug f3560aa0e server: Fix 404 redirects on Windows edf9038a9 build(deps): bump github.com/evanw/esbuild from 0.15.8 to 0.15.9 78f49b4c0 build(deps): bump github.com/yuin/goldmark from 1.4.14 to 1.4.15 fa4b77e7e build(deps): bump github.com/getkin/kin-openapi from 0.100.0 to 0.103.0 8377c3cea docs: Regen docs helper 4d909d476 build(deps): bump github.com/alecthomas/chroma/v2 from 2.2.0 to 2.3.0 4eb6d9740 build(deps): bump github.com/evanw/esbuild from 0.15.7 to 0.15.8 4f9cb4f34 docs: Regenerate CLI docs 0171fb201 Run go mod tidy a4028112e resources/images: Add $image.Colors 08f0984f9 commands: Skip flaky test on CI 86653fa38 config/security: Allow proxy variables in subcommands c46d10498 releaser: Prepare repository for 0.104.0-DEV b665f1e8f releaser: Bump versions for release of 0.103.1 6be6752c8 server: Fix redirects when file path contains bytes > 0x80 8e9dce109 Merge branch 'release-0.103.0' 00b71668b releaser: Prepare repository for 0.104.0-DEV beebf2afb releaser: Bump versions for release of 0.103.0 3f0b40f67 Use standard GOOS/GOARCH values in release archives 0bd79d30c Use standard GOOS/GOARCH values in release archives 8e77bcc93 Filter out any duplicate files to post process 74daca6b3 Support PostProcess for all file types 1fd4c562a build(deps): bump github.com/gobuffalo/flect from 0.2.5 to 0.3.0 a5cda5ca4 server: Add 404 support 5e2b28d6e build(deps): bump github.com/getkin/kin-openapi from 0.98.0 to 0.100.0 f2019f0a2 build(deps): bump github.com/evanw/esbuild from 0.15.5 to 0.15.7 475638fe0 build(deps): bump github.com/yuin/goldmark from 1.4.13 to 1.4.14 203cc5457 Feat/sponsors in readme (#10273) 90ad80450 Squashed 'docs/' changes from e5aa641a6..392668f4f af23cdca9 Merge commit '90ad8045056167004d27857a95542936657b8a16' ab5ce5989 Fix usage description 7d40da876 Add `--force` to `hugo new` 02c89a446 scss: Handle single-file sourcemaps correctly 06c3ac674 release: Bump Hugoreleaser version 5e03de0dd Update stale.yml bef31b58a releaser: Prepare repository for 0.103.0-DEV b76146b12 releaser: Bump versions for release of 0.102.3 8e5044d7f Fix shortcode parser regression with quoted param values 5046a6c7c deps: Update github.com/tdewolff/minify/v2 v2.12.0 => v2.12.1 160a067c8 snap: Use "snapcraftctl set-grade" e0ba1a805 snap: Use "snapcraftctl set-version" 7b49c56a6 snap: Make external dependencies actually work dffca5788 release: Add the releaser commits to the ignore list 79932e722 release: Fix the Deb archives 9eb9b70a2 releaser: Prepare repository for 0.103.0-DEV 0ff4a9326 releaser: Bump versions for release of 0.102.0 45e1084ff Add linux/arm64 extended to release setup c98348416 license: Add copyright info 2de393c79 build(deps): bump go.uber.org/atomic from 1.9.0 to 1.10.0 7efb35680 build(deps): bump github.com/kyokomi/emoji/v2 from 2.2.9 to 2.2.10 ddbcc6712 build(deps): bump github.com/getkin/kin-openapi from 0.97.0 to 0.98.0 fd75f129b deps: Update github.com/pelletier/go-toml/v2 v2.0.2 => v2.0.4 14878ca0a build(deps): bump github.com/spf13/afero from 1.8.2 to 1.9.2 e88873b80 build(deps): bump github.com/tdewolff/parse/v2 from 2.6.1 to 2.6.2 4219993b0 build(deps): bump github.com/mattn/go-isatty from 0.0.14 to 0.0.16 988e1417a build(deps): bump github.com/rogpeppe/go-internal from 1.8.1 to 1.9.0 42529882c build(deps): bump github.com/yuin/goldmark from 1.4.12 to 1.4.13 45f1b1cfc build(deps): bump github.com/spf13/cobra from 1.4.0 to 1.5.0 369bdf22f build(deps): bump github.com/tdewolff/minify/v2 from 2.11.10 to 2.12.0 d1b03a093 build(deps): bump github.com/evanw/esbuild from 0.14.43 to 0.15.5 941c28ab0 readme: Add Golang URL to Go links ffbdcc75a Update README.md 95d976451 Update README.md b66f9f266 Update README.md f7e00c039 github: Use GitHub's Choco-Install function to retry installs f5ba6fd45 common/hugio: One more fix for non-OS fs c4bbc1eee common/hugio: Fix CopyDir when fs is not OS 0e0fb1b64 snap: Delete obsolete custom x-nodejs plugins b017f7cb0 livereload: Inject script without head or body tag 7fb28085a releaser: Fat MacOS binaries 0cd1929b9 Update to Go 1.19 cbdaff213 markup/goldmark/codeblock: Fix attributes when no language identifier in CodeBlock 3fefea06b commands: Fix embed in livereload.go 5c48ba934 Update README.md 21562e3aa Externalise and embed livereload.js string 9c24b86e4 Cache when not found in LookupLayout 223bf2800 parser/pageparser: Don't store the byte slices 72b0ccdb0 Make the baseline benchmark's test files stable bdf935d66 Squashed 'docs/' changes from 30f32a624..e5aa641a6 65e52a7f5 Merge commit 'bdf935d66c1f02dfc942a30e9fc00519bba3aacb' 8ebcaa539 Accept vendor-specified build date if .git/ is unavailable 241481931 snap: Replace mage with "go build" and set VendorInfo=snap 5caed8a71 snap: Use interface names etc-gitconfig and gitconfig, Take 2 d1278f696 Extract the baseline benchmark to a test 92f31ae63 Add a baseline benchmark fd3953c18 snap: Use interface names etc-gitconfig and gitconfig 15463f835 releaser: Prepare repository for 0.102.0-DEV 466fa43c1 releaser: Bump versions for release of 0.101.0 6072ce0bc releaser: Add release notes for 0.101.0 [ci skip] 2c5943ddc build: Update to Go 1.18.3 0cb459a20 docs: Regen docshelper 475f87f68 Squashed 'docs/' changes from 96fdc246c..30f32a624 604cfffc5 Merge commit '475f87f685439de0f907a9ffc29bfd1361eb1c59' d863dde6c markup/highlight: Add hl_inline option 580b214a4 deps: Update github.com/alecthomas/chroma/v2 v2.1.0 => v2.2.0 ddb954708 build(deps): bump github.com/clbanning/mxj/v2 from 2.5.5 to 2.5.6 288b0fb15 build(deps): bump github.com/pelletier/go-toml/v2 from 2.0.1 to 2.0.2 3e1344632 build(deps): bump golang.org/x/tools from 0.1.10 to 0.1.11 7a9ce0eca build(deps): bump github.com/tdewolff/minify/v2 from 2.11.5 to 2.11.10 f2ba0cc8c build(deps): bump github.com/evanw/esbuild from 0.14.42 to 0.14.43 62ceaabdc build(deps): bump github.com/getkin/kin-openapi from 0.94.0 to 0.97.0 35fa19283 deps: Udpate to github.com/alecthomas/chroma/v2 09ac73338 common: Add hugo.GoVersion 66da1b7b2 resources: Panic on Copy of Resource with .Err 5a9ecb82a resources/page: Add :slugorfilename attribute cbc35c48d Respect NO_COLOR 44f3c0796 readme: Update dependency list a5a4422aa Fix relURL with leading slash when baseURL includes a subdirectory 617e09448 js: Resolve index.esm.js cf12fa616 Add animated GIF support 2e1c81770 resources: Add a Gif source file to golden tests 4276075c7 releaser: Prepare repository for 0.101.0-DEV d25cb2943 releaser: Bump versions for release of 0.100.2 8b9bdc403 releaser: Add release notes for 0.100.2 [ci skip] 4e94d1db7 Update CONTRIBUTING.md 0566bbf7c Fix raw TOML dates in where/eq 534e7155b deps: Update to github.com/pelletier/go-toml/v2 v2.0.1 953f215f3 tpl/path: Add path.BaseName function 8e2fd5592 livereload: Use `X-Forwarded-Host` for Codespace 311b8008b helpers: Fix panic with invalid defaultMarkdownHandler c7d5f9f06 resources: Register MediaTypes before build bfebd8c02 releaser: Prepare repository for 0.101.0-DEV 0afb4866e releaser: Bump versions for release of 0.100.1 b1ec0c226 releaser: Add release notes for 0.100.1 [ci skip] 212d9e301 Fix panic with markdownify/RenderString with shortcode on Page with no content file 4daac654d releaser: Prepare repository for 0.101.0-DEV 27b077544 releaser: Bump versions for release of 0.100.0 0f8343a2c releaser: Add release notes for 0.100.0 [ci skip] 3fcbee261 docs: Regen CLI docs db9d27427 docs: Regen docs helper 95baafeac Merge commit 'e4bfe59c4e043c92d3992587d8c64d264b262a22' e4bfe59c4 Squashed 'docs/' changes from 2d9da3a56..96fdc246c 6f7bf3f2d Fix indentation in highlight shortcode 9e904d756 Make .RenderString render shortcodes d2cfaede5 Improve shortcode indentation handling 322d19a81 Add Markdown as an output format 7cb484e12 build(deps): bump github.com/evanw/esbuild from 0.14.39 to 0.14.42 0b395f0b4 Run go mod tidy c1a83076b Add a shortcode benchmark 0f8dc4703 Remove Blackfriday markdown engine 3b478f50b Fix HasMenuCurrent and IsDescendant/IsAncestor when comparing to itself f343b8eb7 build(deps): bump github.com/sanity-io/litter from 1.5.4 to 1.5.5 60ede146b deps: Update to github.com/tdewolff/minify/v2 v2.11.5 dd9eaf19f Don't use the baseURL /path as part of the resource cache key 46a2ea6d0 postcss: Make the resource cache key more stable 653ab2cc1 commands: Fix case where languages cannot be configured 52edea0fe github: Set HUGO_BUILD_TAGS: extended when running tests 6a5acd753 metrics: Fix divide by zero error 805b21555 Fix error message when PostCSS config file is not found 8ca705252 server: Skip watching dirs in ignoreFiles bb232a351 resources: Improve error message on .Resize etc. on SVGs 3854a6fa6 Fix Plainify edge cases cd0112a05 Add resources.Copy 6f7fbe03b basefs: add `noBuildLock` flag 2fc2e9c87 import: Fix importing jekyll site e164834f0 releaser: Prepare repository for 0.100.0-DEV d52406738 releaser: Bump versions for release of 0.99.1 31ce89f7f releaser: Add release notes for 0.99.1 [ci skip] ee55fde5e releaser: Fix version replacement 2f9eac480 server: Fix multihost crash 3a8189ee9 Update stale.yml 7bc3401eb common/hugo: Fix version logic 1de333e7a releaser: Bump versions for release of 0.99.0 35cb6eefb releaser: Add release notes for 0.99.0 [ci skip] 657d1a2d9 server: Refresh the error template 87a22eb6d server: Fix SIGINT handling after loading bad configuration fc9f315d8 Improve SASS errors 4b189d8fd postcss: Fix import error handling c2fa0a332 build(deps): bump github.com/fsnotify/fsnotify from 1.5.3 to 1.5.4 48ea24f89 common/herrors: Remove unused struct 9f563856c build(deps): bump github.com/evanw/esbuild from 0.14.38 to 0.14.39 5c96bda70 errors: Misc improvements 4a96df96d server: Always rebuild the files involved in an error e8537e6dd postcss: Fix line numbers in error messages 2fbdee726 Update CONTRIBUTING.md 91fe1b6c6 js: Bump test dependency 7de629121 deps: Update github.com/spf13/cast v1.4.1 => v1.5.0 9d7f16624 hugolib: Check for nil in shouldRender 51f08b0b6 Revise the use of htime.Since/htime.Now 860c51c31 tpl/collections: Make sort stable 855e5869c docs: Regen CLI docs 327aaed6d Squashed 'docs/' changes from 7030fe3a2..2d9da3a56 1c7759028 Merge commit '327aaed6d8ca57d8e5e3acb99ff53402ff1c556d' 35c88a7f9 Use configured timeZone for the clock e77ca3c10 Add `clock` cli flag f2946da9e Improve error messages, esp. when the server is running 6eea32bd6 tpl: Improve godoc a6d545854 github: Add permissions to test action e5f217316 tpl/crypto: Add example for FNV32a 89c1655ec releaser: Prepare repository for 0.99.0-DEV 165d299cd releaser: Bump versions for release of 0.98.0 e94dc6710 releaser: Add release notes for 0.98.0 [ci skip] a4fff5753 docs: Regen docs helper 3902f9a47 Squashed 'docs/' changes from 4c5edacfe..7030fe3a2 4852a3765 Merge commit '3902f9a4767fe6e62ac5146728d8311b8cd227e0' fa80fe3c8 Some godoc adjustments and image struct renames 11047534e tpl/crypto: Add FNV32a d7b54a4c3 markup/goldmark: Fix attribute nilpointer 13ceef759 deps: Update to gocloud.dev v0.24.0 942d0dd2c build(deps): bump github.com/mitchellh/mapstructure from 1.4.3 to 1.5.0 a022ca271 deps: Update github.com/yuin/goldmark v1.4.11 => v1.4.12 d56b33955 build(deps): bump github.com/evanw/esbuild from 0.14.36 to 0.14.38 55e28c239 deps: Update github.com/tdewolff/minify/v2 v2.11.1 => v2.11.2 9a888c243 Some godoc adjustments 05b45c35c tpl/lang: Handle nil values in lang.Merge 625be77e0 resources/page: Mark some more interface methods as internal 097fd588c Deprecate page.Author and page.Authors 41cc4e4ba releaser: Prepare repository for 0.98.0-DEV 078053a43 releaser: Bump versions for release of 0.97.3 7d9f88808 releaser: Add release notes for 0.97.3 [ci skip] 9b352f04a Fix syncing of /static regression e66e2e9ce Revert "Revert "Fix PostProcess regression for hugo server"" 5de6f8a02 releaser: Prepare repository for 0.98.0-DEV 5099abe60 releaser: Bump versions for release of 0.97.2 99ec88d42 releaser: Add release notes for 0.97.2 [ci skip] 6c35a1a9e Revert "Fix PostProcess regression for hugo server" 363bc907c releaser: Prepare repository for 0.98.0-DEV 04efcb2a6 releaser: Bump versions for release of 0.97.1 456072552 releaser: Add release notes for 0.97.1 [ci skip] 4deb5c606 Fix PostProcess regression for hugo server 397fce560 Fix MediaType when reading images from cache 0093eaa68 deps: Upgrade github.com/bep/overlayfs v0.4.0 => v0.5.0 d0f731c03 releaser: Prepare repository for 0.98.0-DEV c07f3626e releaser: Bump versions for release of 0.97.0 42b5d1653 releaser: Add release notes for 0.97.0 [ci skip] d80d5a104 releaser: Reduce parallelism 842262f65 Revert "build(deps): bump gocloud.dev from 0.20.0 to 0.25.0" 2dbdf38a5 resources: Add `key` to reources.GetRemote options map f8c4e1690 build(deps): bump github.com/evanw/esbuild from 0.14.34 to 0.14.36 627eed1d6 Make string sorting (e.g. ByTitle, ByLinkTitle and ByParam) language aware 82ba634ed Fix gosum checksum errors d417a6cf7 build(deps): bump github.com/tdewolff/minify/v2 from 2.11.0 to 2.11.1 13dac7f3c compare: Add a string sort benchmark 30c2e54c2 Replace all usage of CopyOnWriteFs with OverlayFs 3117e5859 deps: Update github.com/tdewolff/minify/v2 v2.10.0 => v2.11.0 ec920363c Squashed 'docs/' changes from 63386081c..4c5edacfe 5b5dcb8d5 Merge commit 'ec920363cdeb687c8bcac9c242767d366fb058cb' ffe3eb919 docs: Regen CLI docs d070bdf10 Rework the Destination filesystem to make --renderStaticToDisk work b08193971 Revert "Revert "Some minor adjustments to the new static filesystem logic"" 0a56f2af4 Revert "Revert "Allow rendering static files to disk and dynamic to memory in server mode"" 9e360d384 build(deps): bump github.com/evanw/esbuild from 0.14.31 to 0.14.34 a8c221d33 modules/client: Vendor config directory if present e58a54089 resources: Create a common ResourceFinder interface 20162518c build(deps): bump gocloud.dev from 0.20.0 to 0.25.0 6b469cc8f build(deps): bump golang.org/x/tools from 0.1.9 to 0.1.10 080dcac6b build(deps): bump github.com/magefile/mage from 1.12.1 to 1.13.0 072fc8cc3 build(deps): bump github.com/gobuffalo/flect from 0.2.4 to 0.2.5 658e11eba Localize all the GroupBy*Date methods e0a882fd3 build(deps): bump github.com/getkin/kin-openapi from 0.93.0 to 0.94.0 d0657a436 deploy: Set an MD5 attribute and use that if eTag not available a6e2e38bb build(deps): bump github.com/sanity-io/litter from 1.5.2 to 1.5.4 510e17900 build(deps): bump github.com/evanw/esbuild from 0.14.25 to 0.14.31 21484f9e1 build(deps): bump github.com/frankban/quicktest from 1.14.2 to 1.14.3 da00e7714 Add environment as a new filter to _cascade.target ed9aa374d Merge branch 'release-0.96.0' 2a231b0b5 Snap: Add {system,user}-gitconfig plugs to read gitconfig (#9619) 69c590080 releaser: Prepare repository for 0.97.0-DEV 2fd4a7d3d releaser: Bump versions for release of 0.96.0 5a4ac2dac releaser: Add release notes for 0.96.0 [ci skip] db1562e13 docs: Regen docshelper 5b18e1084 docs: Regen CLI docs d276e901b Squashed 'docs/' changes from a393f4cf4..63386081c d7497b28c Merge commit 'd276e901b36d2576ef8350ed96b17f66254eac1b' 94459680b Deprecate .File.Extension 9202117ba resources: Add more details to .Err a6fa290f6 commands: Change link protocol to https 0bbc2fb52 build(deps): bump github.com/getkin/kin-openapi from 0.91.0 to 0.93.0 94e8a9076 tpl/crypto: Add optional encoding arg to hmac function a461e9d01 Fix typo 48c98a8d2 Fix some typos bbd455fe7 Update CONTRIBUTING.md to use "go install" to install mage 8309a2b1c Dockerfile: Make it build with Go 1.18 2b7231097 snap: Make it build with Go 1.18 13ff4ded7 build(deps): bump github.com/yuin/goldmark from 1.4.10 to 1.4.11 c3289eb5b build(deps): bump github.com/spf13/cobra from 1.3.0 to 1.4.0 9539069f5 commands: Improve server startup to make tests less flaky 0e305d695 all: Use strings.Cut 5adb81ce3 Support '-u=patch' in hugo mod get 1c0e7c1ae Make sure file mounts higher up wins cad2d8cc7 resources/images: Require width and height for Crop, Fill, and Fit b80853de9 all: gofmt -w -r 'interface{} -> any' . 423594e03 dartsass: Enable deprecation, @warn and @debug logging 64afb7ca5 Use revision etc. from debug.BuildInfo 004bec2e9 releaser: Prepare repository for 0.96.0-DEV 9f2e76af6 releaser: Bump versions for release of 0.95.0 f1d157682 releaser: Add release notes for 0.95.0 [ci skip] 5930173cd readme: Add note about Go 1.18 3476b5334 tpl: Pull in Go 1.18 patch that fixes the "no space in {{ continue }} and {{ break }}" bug e792d2701 readme: Add a contribution note 9d6495d77 github: Make it build with Go 1.18 42cc5f88b tpl: Adjustments and an integration test for Go 1.18 a6488e7ba Remove Go 1.17 support 65a78cae1 tpl: Sync go_templates for Go 1.18 4d6d1d08d build: Bump to Go 1.18 b60e1bbdf dartsass: Improve error message when no read access 61cf3c9f6 Fix and refactor typos 31fbc081c Improve server startup/shutdown cebd886ac commands: Improve server tests 38f778cfc releaser: Prepare repository for 0.95.0-DEV 48fb9e4de releaser: Bump versions for release of 0.94.2 0958167b3 releaser: Add release notes for 0.94.2 [ci skip] b37183e48 deps: Update github.com/yuin/goldmark v1.4.9 => v1.4.10 04ccde3e9 releaser: Prepare repository for 0.95.0-DEV 0fcd9a5d8 releaser: Bump versions for release of 0.94.1 414608436 releaser: Add release notes for 0.94.1 [ci skip] 3bc742bea docs: Regenerate CLI docs 1a796d723 deps: Fix Goldmark regression with HTML comments 64b7b7a89 Revert "Allow rendering static files to disk and dynamic to memory in server mode" 5ef8a9f32 Revert "Some minor adjustments to the new static filesystem logic" 3bc34666c releaser: Prepare repository for 0.95.0-DEV 63b236603 releaser: Bump versions for release of 0.94.0 b107b4b29 releaser: Add release notes for 0.94.0 [ci skip] a4ac188c1 docs: Regenerate docshelper b82d95575 Revert "markup/highlight: Add hl_inline option" 4e14cf760 Fail with error when double-rendering text in markdownify/RenderString 5697348e1 markup/goldmark: Default to https for linkify f98e570b1 Add lang attribute to internal alias template cdb8b0842 docs: Regenerate docshelper a360cab75 markup/highlight: Add hl_inline option c97fed08f minifiers: Make keepWhitespace = false default for HTML (note) 53a6210d8 markup/goldmark/codeblocks: Fix slice bounds out of range 7182809d9 docs: Regenerate CLI docs 1f8cd2614 docs: Regenerate docshelper 9d76b8fa3 Merge commit 'd706529720b3b2ccb99719ccd578062ca25a0cc2' d70652972 Squashed 'docs/' changes from 3f95a2ace..a393f4cf4 4576c82ed Cache reflect.MethodByName ff02d4172 releaser: Remove the GitHub link syntax around release contributors 63bb2a5b1 Some minor adjustments to the new static filesystem logic 7d8011ed6 Allow rendering static files to disk and dynamic to memory in server mode b9a1be2f9 build(deps): bump github.com/kyokomi/emoji/v2 from 2.2.8 to 2.2.9 097824503 build(deps): bump github.com/evanw/esbuild from 0.14.23 to 0.14.25 ff37df830 build(deps): bump github.com/niklasfasching/go-org from 1.6.0 to 1.6.2 5857d5524 build(deps): bump github.com/getkin/kin-openapi from 0.90.0 to 0.91.0 d86eca5bb releaser: Prepare repository for 0.94.0-DEV 44e3c002a releaser: Bump versions for release of 0.93.3 9177849f9 releaser: Add release notes for 0.93.3 [ci skip] 0e0d672bc Remove the decorator from the fs used in ReadDir 19f816f77 Update stale.yml 970f385c4 build(deps): bump github.com/yuin/goldmark from 1.4.7 to 1.4.8 76c1248f7 Remove the examples/ folder 9e76507da releaser: Prepare repository for 0.94.0-DEV 643b5ae9c releaser: Bump versions for release of 0.93.2 2f7feca9a releaser: Add release notes for 0.93.2 [ci skip] 673cde1eb tpl/os: Revert readDir in theme behaviour e46e9ceb2 markup/goldmark: Escape image alt attribute 883e71c96 releaser: Prepare repository for 0.94.0-DEV e9669fed1 releaser: Bump versions for release of 0.93.1 fefb1caac releaser: Add release notes for 0.93.1 [ci skip] 0327da050 tpl/transform: Fix it when template.HTML is passes as option to Hightlight 9b8b6d34e tpl/partials: Fix partialCached deadlock regression 376704d38 tpl/collections: Fix apply when function have Context as first arg c1398b91a Squashed 'docs/' changes from 93f7baf80..3f95a2ace 41b5bc963 Merge commit 'c1398b91a9f4c67876b31feb67516b252e654d3c' 5a1b394f2 releaser: Prepare repository for 0.94.0-DEV 074690824 releaser: Bump versions for release of 0.93.0 75084bfc7 releaser: Add release notes for 0.93.0 [ci skip] 12d00d288 docs: Regenerate docs helper 260ff1374 markup/highlight: Ignore HL_lines_parsed in the gen docs 14915a0c3 cod: Regen CLI docs fd0c1a5e9 tpl/diagrams: Rename the SVG accessor to Wrapped 3ad39001d markup/highlight: Rework the return value from HighlightCodeblock 39261b689 tpl/transform: Add CanHighlight cff14144a Rename Codeowners() to CodeOwners() 5f6715155 tpl/diagrams: Rename Body to Inner f7109771a CodeblockContext method renames e1f696911 build(deps): bump github.com/tdewolff/minify/v2 from 2.9.29 to 2.10.0 5f65c17a1 markup/goldmark: Adjust test for Windows 579ff9b65 markup/goldmark: Improve attributes vs options 928a89696 markup/goldmark: Add Position to CodeblockContext 2e54c0093 markup/goldmark: Unify some code block tests 10928a4f7 Remove the trailing new line in .Code afd63bf7d markup/goldmark: Rename extension struct 228126b7f build(deps): bump github.com/gobuffalo/flect from 0.2.3 to 0.2.4 0f80be341 markup/goldmark: Use Ordinal to create default lineanchors 78afdb88a build(deps): bump github.com/gorilla/websocket from 1.4.2 to 1.5.0 3ed83227b build(deps): bump github.com/sanity-io/litter from 1.5.1 to 1.5.2 1a257bb2b Move the Goat template to the correct place 97514f17d build(deps): bump google.golang.org/api from 0.63.0 to 0.70.0 0df096b86 Update error message about failed menus in config.toml 308ad611b build(deps): bump github.com/getkin/kin-openapi from 0.85.0 to 0.90.0 6bffcdbd2 Add test for line anchor attributes with code fences 7248f4318 build(deps): bump github.com/evanw/esbuild from 0.14.22 to 0.14.23 08fdca9d9 Add Markdown diagrams and render hooks for code blocks 2c20f5bc0 build(deps): bump github.com/aws/aws-sdk-go from 1.41.14 to 1.43.5 723b2c485 build(deps): bump github.com/google/go-cmp from 0.5.6 to 0.5.7 06bac57ab Add support for CODEOWNERS ec8b767fa Remove Viper as a dependency 6407b2cd0 helpers: Allow hyphens in UnicodeSanitize 6ff39fd90 Change `disqus_config` to `window.disqus_config` 96c0bdf3a deps: Update github.com/spf13/cobra v1.2.1 => v1.3.0 e97d3c640 Add page.Store 7732da9f9 Allow images to be cropped without being resized aebde49b8 commands: Fix server panic regression 4ada09415 markup/goldmark: Add BenchmarkCodeblocks bddcfd911 deps: Update github.com/gohugoio/localescompressed v0.14.0 => v0.15.0 d485f9543 deps: Update github.com/yuin/goldmark v1.4.4 => v1.4.7 a87be597a modules: Add modules.Workspace config for Go 1.18 b0eea0075 Update stale.yml ef8b781b1 Update stale.yml 3136ff67d github: Configure stale to be run manually 929808190 tpl/partials: Fix recently introduced deadlock in partials cache 667f3a4ba tpl/partials: Add some more partials to BenchmarkIncludeCached c061b253a deps: Update github.com/evanw/esbuild v0.14.11 => v0.14.22 0927cf739 tpl/partials: Make sure a cached partial is invoked only once 26a5e89fa build(deps): bump github.com/rogpeppe/go-internal from 1.8.0 to 1.8.1 e9fa7e81b build(deps): bump github.com/magefile/mage from 1.11.0 to 1.12.1 ff545f427 markup/goldmark: Exclude event attributes from markdown render hook b2a827c52 markup/goldmark: Fix mangling of headers/links in render hooks 77c7059ff markup/goldmark: Add a render hook benchmark f4c90bd6b Fix BenchmarkCascadeTarget d16228334 metrics: Add cached count tracking ea6bcd694 tpl: Remove TODO comment f2e7b49ac Add --printUnusedTemplates 923419d7f deps: Update github.com/tdewolff/minify/v2 v2.9.22 => v2.9.29 837fdfdf4 commands: Rename --i18n-warnings to printI18nWarnings 6819feab6 commands: Rename --path-warnings, --print-men to --printPathWarnings, --printMemoryUsage ea54a99ca deps: Update github.com/alecthomas/chroma v0.9.4 => v0.10.0 9563c7d13 Finally remove deprecated Page methods 230a49594 Squashed 'docs/' changes from b8b20e9a2..93f7baf80 c707b71cd Merge commit '230a495941b191af0bdaa7e2fc8c61607cb38207' b0a9cf0a7 tpl: Use go:embed to load internal templates 9433cc256 releaser: Prepare repository for 0.93.0-DEV cdf6a0d62 releaser: Bump versions for release of 0.92.2 bf1fa7137 releaser: Add release notes for 0.92.2 [ci skip] 4f4cec73b Add HUGO_ENV to the os/exec environment da4866c2b Simplify some integration tests d1109f590 Fix validation of Page Kind in cascade target map a7d182cea Add another cascade benchmark a2a660ed1 commands: Fix server deadlock on config error f7bc4cc50 Exclude event attributes when rendering markdown 54f8d8a70 Remove the "check" command 3036d0ac9 Update the application/javascript media type 6a238a727 tpl/templates: Fix templates.Exist issue with base templates f60714b5a Add a migration test helper 215a715dd babel: Port integration tests to their own package d128d260b js: Port integration tests to its own package c4aaf1d51 postcss: Move integration test to its own package 94f10cf4f minifier: Port integration tests to its package b06c2103b templates: Port integration test to its package d22f7795c tocss: Port integration tests to their package 39f69ca7f openapi3: Port integration test into correct package 64f75adcf Add a new integration test framework 926271909 Validate comparison operator argument count 333676293 Remove hugo gen autocomplete 5ca40c8f7 deps: Update github.com/pelletier/go-toml/v2 to v2.0.0-beta.6 ef7d14a24 Fix erroneous warning with .Page.RenderString on a page without a backing file c05c99f0c Fix typo in panicOnWarning message ff7689ce0 releaser: Prepare repository for 0.93.0-DEV 85e2e8626 releaser: Bump versions for release of 0.92.1 515f8a6d8 releaser: Add release notes for 0.92.1 [ci skip] f22c4aba0 Make the RenderString content provider fix more general 85d31f7bf Fix .RenderString issue in .Translations 22055176d general: Fix issue causing log threads to hang indefinitely when print() panics 7a080b624 Fix duplicate mount sources 265573994 tpl/collections: Fix apply with namespaced template funcs 348d300a7 common: Remove unused code 6f07bdb15 common/paths: Remove unused code 55a9bc1e7 helpers: Remove unused code 20a7ce7c1 Do not render hl_style as an HTML attribute 8cd449240 build(deps): bump github.com/spf13/viper from 1.8.1 to 1.10.1 9d8f318aa Fixing typos (#9387) fcbbbef22 Fix typo in warning message 6041adc16 github: Clean up the issue templates a little 408da4365 github: Add lock-threads step ed04ed574 releaser: Prepare repository for 0.93.0-DEV b35494036 releaser: Bump versions for release of 0.92.0 bd89aef8b releaser: Add release notes for 0.92.0 [ci skip] f2bc13dd9 docs: Regenerate docshelper 098254f17 Merge commit 'a8e9fc699a6ff7d578f97a7c553ce844efad8fdb' a8e9fc699 Squashed 'docs/' changes from 4eb10c1a9..b8b20e9a2 cdcd15b6c Only create LazyContentProvider for the non-rendering Site 25d645f47 Fix missing page data for alternative formats fbb3c181c docs: Add dependency table to maintainance page 9af4ca386 deps: Upgrade github.com/evanw/esbuild v0.14.8 => v0.14.11 7396aa945 Add hugo.Deps d82cef5c5 hugolib: Fix livereload problem with files including NFC characters in MacOs 74f0777c5 docs. Regen CLI docs e334a4066 commands: Fix CLI help text for hugo new 5bd3c8df4 Update to Go 1.17.6 0aca99fe0 create: Correctly pass newContentEditor flags c8b5ab75b Add --panicOnWarning flag 85c5b8959 github: Increase stale days 965760835 docs: Regenerate CLI docs 4a0b55330 docs: Regenerate docshelper 1651beb2c Remove mmark 2b6063c3e Misc depreation updates 56ab83a59 Make the deprecated Page/File methods (from Hugo 0.55) ERROR dad0dc8d8 github: Add add stale GitHub action d3c4fdb8f Fix surprise OutputFormat.Rel overwriting d632dd7d7 hugolib: Make an RST test optional 0671ef559 deps: Upgrade github.com/niklasfasching/go-org v1.5.0 => v1.6.0 672481f1f Update stale.yml 1dbfc0f93 releaser: Prepare repository for 0.92.0-DEV 1798bd3fd releaser: Bump versions for release of 0.91.2 f0b55a68e releaser: Add release notes for 0.91.2 [ci skip] 623dda717 Revert "config/security: Add HOME to default exec env var whitelist" aee9e11a4 Make sure we always create the /public folder bd63c1aa5 Fix "stuck on build" in error situations in content processing 9eb05807c deps: Run "go mod tidy" 654f513a4 deps: Upgrade github.com/evanw/esbuild v0.14.7 => v0.14.8 759cdf3fc releaser: Prepare repository for 0.92.0-DEV f42350574 releaser: Bump versions for release of 0.91.1 af165d5b6 releaser: Add release notes for 0.91.1 [ci skip] 6779117f7 media: Also consider extension in FromContent ce0401109 media: Add missing BMP and GIF to the default MediaTypes list cdc73526a media: Add PDF MIME type 425c7d90f deps: Update github.com/evanw/esbuild v0.14.5 => v0.14.7 fca266ebb config/security: Add HOME to default exec env var whitelist 0016e21cd modules: Set GOCACHE env var 728feaecf releaser: Prepare repository for 0.92.0-DEV d1dc0e9a5 releaser: Bump versions for release of 0.91.0 072bca69d releaser: Add release notes for 0.91.0 [ci skip] e26e13fbb releaser: Drop running tests as part of the release 6df2f080c docs: Regen docs helper b84745d49 tpl/resources: Add empty method mapping for GetRemote 44954497b Always use content to resolve content type in resources.GetRemote 22ef5da20 Add resources.GetRemote 5758c370e Allow for return partials with falsy arguments (#9298) 8ee6de6d9 deps: Upgrade github.com/evanw/esbuild v0.14.2 => v0.14.5 a4b9f1a92 don't use path.Join, because it cleans the final path f4389e48c Add some basic security policies with sensible defaults 803f572e6 Simplify Babel test assertions 6183184b9 Merge commit '45e6fdb315d113ba13e20a633ed0c67e3f25170d' 45e6fdb31 Squashed 'docs/' changes from 316cec249..4eb10c1a9 a037be774 Improve handling of remote image/jpeg resources (#9278) 8a005538d Fix Dockerfile 657d0272e Remove debug statement 159120cdd Fix deprecation notice 3f0d49e50 releaser: Prepare repository for 0.91.0-DEV 489078897 releaser: Bump versions for release of 0.90.1 3075eaa3b releaser: Add release notes for 0.90.1 [ci skip] 3bc683041 Remove the retries on error in remote resources.Get e4d6ec94b Allow user to handle/ignore errors in resources.Get 6260455ba Make resource.Get return nil on 404 not found c397975af Update to Go 1.17.5 965a6cbff Update to Go 1.17.4 and remove timeout in resources.Get 34a96290f releaser: Prepare repository for 0.91.0-DEV dd0d3fdbb releaser: Bump versions for release of 0.90.0 b92175233 releaser: Add release notes for 0.90.0 [ci skip] 0fa40ce58 releaser: Simplify the release process bf537f1c6 releaser: Remove unused code e86b33113 docs: Regenerate docs helper 6c841a691 Merge commit '8d9511a08f14260cbfb73119e4afae50e5a9966d' 8d9511a08 Squashed 'docs/' changes from 39a7fac34..316cec249 e71d715b9 Add custom font support to images.Text e61cdf335 images: Fix cache busting of image text filter 6c3bc5eba build(deps): bump github.com/getkin/kin-openapi from 0.80.0 to 0.85.0 283394a4f images: Text filter that draws text with the given options (#9239) 5538507e9 tpl/transform: Optional options for highlight func b4f27ef8e deps: Upgrade github.com/evanw/esbuild v0.13.12 => v0.14.2 (note) 3473e31eb releaser: Add "note" to Note regexp fa0da004a build(deps): bump github.com/mitchellh/mapstructure from 1.4.2 to 1.4.3 24a893cf8 releaser: Rework and simplify to use GitHub only for release notes bf1564bd2 build(deps): bump google.golang.org/api from 0.51.0 to 0.61.0 cd44d409b media: Add rss suffix for application/rss+xml 9a326d563 parser: Add a test case in format resolution b10381fbe lazy: Reset error in Reset 0eaaa8fee Implement XML data support 58adbeef8 Validate private use language tags 93572e531 resources: Add timeout to the HTTP request in Get 94f149b21 Add a remote retry for resources.Get 66753416b Make resources.Get use a file cache for remote resources 133e4bfbe Remove empty href element from pagination template f122771fb Check for empty deployment targets and matchers 08a863e1e resources: Adjust the remote Get cache so it does not get evicted on restarts 8aa7257f6 Add remote support to resources.Get 75a823a36 Add deprecation warning to google_news template 5e0947c5b helpers: Make UniqueStringsReuse allocation free 0b70b46aa releaser: Prepare repository for 0.90.0-DEV ab01ba6e7 releaser: Add release notes to /docs for release of 0.89.4 cc08c0959 releaser: Bump versions for release of 0.89.4 f97da9eca releaser: Add release notes for 0.89.4 [ci skip] 2e70f61fb Fix content dir resolution when main project is a Hugo Module 1ed8069a3 releaser: Prepare repository for 0.90.0-DEV c88cdb561 releaser: Add release notes to /docs for release of 0.89.3 e1064d219 releaser: Bump versions for release of 0.89.3 bf489b96d releaser: Add release notes for 0.89.3 [ci skip] b8155452a Improve error when we cannot determine content directory in "hugo new" 08552a7a4 deps: Upgrade github.com/yuin/goldmark v1.4.3 => v1.4.4 fdad91fd9 commands: Make sure pollInterval is always set 5f3f60898 create: Improve archetype directory discovery and tests 057d02de2 create: Add a log statement when archetype is a directory 43ac59da8 create: Always print "Content ... created" ab5c6990a commands: Fix missing file locking in server partial render 9369d13e5 modules: Improve error message 805c24c32 releaser: Prepare repository for 0.90.0-DEV 63e3a5ebb releaser: Add release notes to /docs for release of 0.89.2 eaa6c96a7 releaser: Bump versions for release of 0.89.2 cf3eb580b releaser: Add release notes for 0.89.2 [ci skip] 2b01c85d1 Fix path resolution in hugo new c09f5c5fd deps: Upgrade github.com/yuin/goldmark v1.4.2 => v1.4.3 9232e2844 releaser: Prepare repository for 0.90.0-DEV b6a4ae4ad releaser: Add release notes to /docs for release of 0.89.1 84de0c325 releaser: Bump versions for release of 0.89.1 a07410226 releaser: Add release notes for 0.89.1 [ci skip] da4406ea5 Revert "releaser: Fat MacOS binaries" 166862a09 create: Make sure the build lock is released before we open editor 82c33c710 readme: Update dependency list 41e9e9fe1 releaser: Prepare repository for 0.90.0-DEV ade966b84 releaser: Add release notes to /docs for release of 0.89.0 a93d4ba64 releaser: Bump versions for release of 0.89.0 110512a65 releaser: Add release notes for 0.89.0 f503b6395 docs: Regen CLI docs 30aba7fb0 source: Make ContentBaseName() return the directory for branch bundles 04a3b45db Fix description of lang.FormatNumberCustom 0cc39af68 Update Twitter shortcode oEmbed endpoint ed6fd26ce common/htime: Fix time.Format with Go layouts 7fa66425a build(deps): bump github.com/evanw/esbuild from 0.13.10 to 0.13.12 69210cfdf build(deps): bump github.com/yuin/goldmark from 1.4.1 to 1.4.2 4b36498a8 Merge commit 'aa5ac36a3eb68b86c803caec703869efefc8447e' aa5ac36a3 Squashed 'docs/' changes from 327003421..39a7fac34 3a977485e releaser: Fat MacOS binaries 0f248606d releaser: Only build amd64 binary for freebsd, netbsd, openbsd, dragonfly e82cbd746 tpl/time: Use configured location when date passed to Format is string 3339c2bb6 build(deps): bump github.com/aws/aws-sdk-go from 1.40.8 to 1.41.14 03bbdba8b build(deps): bump github.com/getkin/kin-openapi from 0.79.0 to 0.80.0 a772b8fc3 build(deps): bump github.com/evanw/esbuild from 0.13.8 to 0.13.10 dce49d133 resources: Rename excepted filenames for image golden testdata 61c5b7a2e build(deps): bump github.com/frankban/quicktest from 1.13.1 to 1.14.0 1d60bd1ef Fix typo in error message 75c9b893d create: Validate the target path in hugo new 64e1613fb Fix panic when specifying multiple excludeFiles directives b959ecbc8 htime: Set zone of datetime from from `go-toml` 70e454812 Added nodesource apt repository to snap package 355ff83e7 config: Set HUGO_ENABLEGITINFO=false override in Set_in_string 471ed91c6 hugofs: Add includeFiles and excludeFiles to mount configuration 94a5bac5b build(deps): bump github.com/mitchellh/mapstructure from 1.4.1 to 1.4.2 9830ca9e3 resources: Always preserve the original transform error b64fd0577 readme: Add hyperlink to the banner 2706437a7 build(deps): bump github.com/getkin/kin-openapi from 0.78.0 to 0.79.0 ec7c993cf deps: github.com/evanw/esbuild v0.13.5 => v0.13.8 32c6f656d create: Return error on no content dirs e02e0727e Fix file permissions in new archetype implementation 096f5e192 Fix the "page picker" logic in --navigateToChanged ba35e6985 Add a cross process build lock and use it in the archetype content builder c7957c90e readme: Fix a typo on OpenBSD bb0537703 deps: github.com/alecthomas/chroma v0.9.2 => v0.9.4 9185e11ef Reimplement archetypes 168a3aab4 build(deps): bump github.com/tdewolff/minify/v2 from 2.9.21 to 2.9.22 8bcfa3bdf deps: Update github.com/evanw/esbuild v0.13.5 d7331aaa7 releaser: Fix regexp cd4e67af1 build(deps): bump github.com/mattn/go-isatty from 0.0.13 to 0.0.14 e6ad1f0e7 build(deps): bump github.com/getkin/kin-openapi from 0.75.0 to 0.78.0 625d2c257 releaser: Update to Go go1.17.2 e6e44b7c4 Fix value of useResourceCacheWhen in TestResourceChainPostCSS 64abc83fc Allow multiple plugins in the PostCSS options map f8d132d73 docs: Create path.Clean documentation 26f1919ae Skip a test assertion on CI e55466ce7 tpl/path: Add path.Clean ecf025f00 readme: Remove tracking image fab1e43de Revert "Remove credit from release notes" e03f82eef Pass minification errors to the user a864ffe9a Clarify "precision" in currency format functions b49da3328 build(deps): bump github.com/evanw/esbuild from 0.12.24 to 0.12.29 7c21eca74 resources: Use default math/rand.Source for concurrency safety 13ad8408f commands: Make the error handling for the mod commands more lenient 1cabf61dd modules: Add some help text to the 'unknown revision' error 268e3069f deps: Update github.com/yuin/goldmark v1.4.0 => v1.4.1 3efc2e2af releaser: Prepare repository for 0.89.0-DEV 5bc547389 releaser: Add release notes to /docs for release of 0.88.1 bb3254385 releaser: Bump versions for release of 0.88.1 9b1d6d7e3 releaser: Add release notes for 0.88.1 [ci skip] e1ead4dbc Bump down again to Go 1.16.7 for the release builds 5b59b9c17 releaser: Prepare repository for 0.89.0-DEV acc5eb5b5 releaser: Add release notes to /docs for release of 0.88.0 6cacfa329 releaser: Bump versions for release of 0.88.0 4d03cd780 Release 0.88.0 8b14fdbf8 Update 0.88.0-relnotes.md fc21b63b4 releaser: Add release notes for 0.88.0 6631c9c7e Run go mod tidy cf73cc2ec js: Fix import order for ./foo when both ./foo.js and ./foo/index.js exists 7d1f806ec commands: Don't fail on template errors on go mod graph etc. 04b595996 build(deps): bump github.com/getkin/kin-openapi from 0.74.0 to 0.75.0 c278b6e45 build(deps): bump github.com/frankban/quicktest from 1.13.0 to 1.13.1 107c86feb build(deps): bump github.com/evanw/esbuild from 0.12.22 to 0.12.24 a0489c2df Avoid failing with "module not found" for hugo mod init and similar 0fc2ce9e4 Update to Go 1.17 32569285c Remove Pygments from snapcraft.yml 5a46eefbc Revert "build(deps): bump github.com/fsnotify/fsnotify from 1.4.9 to 1.5.0" 7a15edafe highlight: Add tabindex when code is not highlighted 2f0945baf build(deps): bump github.com/evanw/esbuild from 0.12.17 to 0.12.22 f4ffeea71 Fix it so disableKinds etc. does not get merged in from theme 7ba3f3d20 build(deps): bump golang.org/x/text from 0.3.6 to 0.3.7 f70165242 build(deps): bump github.com/fsnotify/fsnotify from 1.4.9 to 1.5.0 bc0743ed8 Prevent minifier from removing quoutes around post-processed attributes ffa2fe611 Revert "commands: Avoid too many watch file handles causing the server to fail to start" d966f5d08 highlight: Remove some pygments references 3f38c785b commands: Avoid too many watch file handles causing the server to fail to start 24589c081 build(deps): bump github.com/getkin/kin-openapi from 0.68.0 to 0.74.0 efebd756e deps: Update github.com/spf13/cast v1.4.0 => v1.4.1 58b6742cf Import time/tzdata on Windows 32ead4b1e releaser: Bump to Go 1.16.7 abd969a67 Revert "tpl/time: Handle nil values in time.AsTime" 3e1107289 tpl/time: Handle nil values in time.AsTime 9bba9a3a9 parser: Indent TOML tables d6c8cd771 Fix `lang.FormatPercent` description dfe54d321 releaser: Prepare repository for 0.88.0-DEV b0c541e49 releaser: Add release notes to /docs for release of 0.87.0 2ed7be295 releaser: Bump versions for release of 0.87.0 d9d1ef8b0 Release 0.87 ec1c1c345 Merge branch 'b087' into release-0.87.0 c7fd13462 Update 0.87.0-relnotes.md a5d2632eb Update 0.87.0-relnotes.md 494f284be docs: Adjust config docs bf738d2f4 docs: Regen CLI docs 8d19850e2 docs: Regen docs helper 093498352 Merge commit 'bd77f6e1c99e04a476f0b1bb4e44569134e02399' into release-0.87.0 bd77f6e1c Squashed 'docs/' changes from 60a58d123..327003421 1c5b025dd docs: Adjust time zone docs c13d33dd5 releaser: Add release notes for 0.87.0 d70c48570 Make sure module config loading errors have file positioning info 9ff17c332 tpl/time: Adjust tests to handle matching local time zones 7aaaf7e33 mod: Remove superflous replace statement 3a9665559 Reduce binary size vs locale, update to CLDR v36.1 9a7383caf deps: Update github.com/tdewolff/minify/v2 v2.9.20 => v2.9.21 6c70e1f22 Fix error handling for the time func alias 4d221ce46 Fail on invalid time zone e3dc5240f Improve handling of Params 268065cb2 Merge branch 'release-0.86.1' e0304c06e releaser: Add release notes for 0.86.1 [ci skip] 7aa8b1cd7 releaser: Prepare repository for 0.87.0-DEV f6821b88a releaser: Add release notes to /docs for release of 0.86.1 580d320a6 releaser: Bump versions for release of 0.86.1 b75d4526e releaser: Add release notes for 0.86.1 [ci skip] 94b616bdf config: Fix a potential deadlock in config reading e90b3591a build(deps): bump github.com/evanw/esbuild from 0.12.16 to 0.12.17 4b7da6a9d build(deps): bump github.com/getkin/kin-openapi from 0.67.0 to 0.68.0 7907d24ba tpl/lang: Add new localized versions of lang.FormatNumber etc. 726fe9c3c Go back to WARNING for Page deprecations b5de37ee7 Handle toml.LocalDate and toml.LocalDateTime in front matter bf301daf1 deps: Upgrade github.com/pelletier/go-toml/v2 v2.0.0-beta.3 => v2.0.0-beta.3.0.20210727221244-fa0796069526 a3701e093 Switch to go-toml v2 40b6016cf build(deps): bump github.com/tdewolff/minify/v2 from 2.9.19 to 2.9.20 7e1305710 Add a TOML front matter benchmark efa5760db Add timezone support for front matter dates without one a57dda854 Localize time.Format f9afba933 build(deps): bump github.com/getkin/kin-openapi from 0.61.0 to 0.67.0 a5d2ba429 build(deps): bump github.com/spf13/cast from 1.3.1 to 1.4.0 31972f364 build(deps): bump google.golang.org/api from 0.45.0 to 0.51.0 2e58782f9 build(deps): bump github.com/sanity-io/litter from 1.5.0 to 1.5.1 7b68f6524 build(deps): bump github.com/mattn/go-isatty from 0.0.12 to 0.0.13 81265af2c build(deps): bump github.com/spf13/cobra from 1.1.3 to 1.2.1 c102c9719 build(deps): bump github.com/mitchellh/mapstructure from 1.3.3 to 1.4.1 7c0f904f2 build(deps): bump github.com/google/go-cmp from 0.5.5 to 0.5.6 b2fbd4d13 build(deps): bump github.com/mitchellh/hashstructure from 1.0.0 to 1.1.0 90041d1b6 build(deps): bump github.com/gobuffalo/flect from 0.2.2 to 0.2.3 05047096f build(deps): bump github.com/pelletier/go-toml from 1.9.0 to 1.9.3 a469156ea build(deps): bump github.com/aws/aws-sdk-go from 1.38.23 to 1.40.8 18fdd85bc build(deps): bump github.com/tdewolff/minify/v2 from 2.9.18 to 2.9.19 aeb1935d4 deps: Update github.com/evanw/esbuild v0.11.16 => v0.12.16 c7252224c Deprecate Blackfriday and fix a potential deadlock in config e09d7882c deps: Update github.com/yuin/goldmark v1.3.9 => v1.4.0 15c0eed04 build(deps): bump github.com/frankban/quicktest from 1.12.0 to 1.13.0 91cbb9630 Bump all long-living deprecations to ERRORs a352d19d8 Fix theme count in release notes 11bb67dcf releaser: Prepare repository for 0.87.0-DEV 41c6c52ea releaser: Add release notes to /docs for release of 0.86.0 d270eaf4f releaser: Bump versions for release of 0.86.0 b2e67505f Release 0.86.0 32508045d navigation: Check Page first in URL() e521c9a36 Update 0.86.0-relnotes.md dfb1cc431 releaser: Add release notes for 0.86.0 0294a4a4f Merge commit '53a352795a69a9d4a373f50ec62138595948c6ea' 53a352795 Squashed 'docs/' changes from 6ebb5dad9..60a58d123 351ed0f56 commands: Fix panic on invalid config in "hugo mod get" and similar d831d2fce Simplify "active menu" logic for section menus 634481ba8 Fix Params case handling for menu items defined in site config c19f65f95 minifiers: Make keepWhitespace = true default for HTML 022c47955 hugofs: Make FileMeta a struct f27e54244 markup: Add tabindex="0" to default
 wrapper
ae6cf93c8 Fix default values when loading from config dir
a70da2b74 Fix the deprecation error/warn log levels
805664818 markup/goldmark: Rename/reorder the hook methods
ee3d2bb1d markup/goldmark: Support auto links in render hook
eb2a50036 Adjust a test helper
5cb52c231 Add config.cascade
30eea3915 resources: Regenerate image golden testdata
8f40f34cd Fix transparency problem when converting 32-bit images to WebP
8ddbc9546 releaser: Prepare repository for 0.86.0-DEV
724d5db58 releaser: Add release notes to /docs for release of 0.85.0
875fe4050 releaser: Bump versions for release of 0.85.0
56362e4bc Update 0.85.0-relnotes.md
f5cfb9e25 releaser: Add release notes for 0.85.0
04dc469fb commands: Move time notification to after any build errors
07919d1cc exif: Log warning for metadata decode error
f75f90079 Fix tab selection of disabled items in internal pagination template
e31b1d194 commands: Make the --poll flag a duration
43a23239b docs: Regen CLI docs
4479f09c9 Merge commit '7eb0e10a80708c638554b8221a3120dc1168566c'
7eb0e10a8 Squashed 'docs/' changes from 710856e5a..6ebb5dad9
24ce98b6d Add polling as a fallback to native filesystem events in server watch
0019d60f6 deps: Bump github.com/yuin/goldmark v1.3.9
e451b984c Fix panic when theme has permalinks config
b4d60b3db releaser: Prepare repository for 0.85.0-DEV
020e4acee releaser: Add release notes to /docs for release of 0.84.4
4c34faf42 releaser: Bump versions for release of 0.84.4
a339f6266 releaser: Add release notes for 0.84.4 [ci skip]
4c8552b11 Fix Cloudflare vs Netlify cache dir issue
34e4742f0 Fix date format in schema and opengraph templates
bffa2a2a9 releaser: Prepare repository for 0.85.0-DEV
a1b0353cc releaser: Add release notes to /docs for release of 0.84.3
bc6f84c58 releaser: Bump versions for release of 0.84.3
80410257e releaser: Add release notes for 0.84.3 [ci skip]
6c8c0c8b6 config: Fix Netlify default cache dir logic
49fedbc51 config: Fix handling of invalid OS env config overrides
829072010 releaser: Prepare repository for 0.85.0-DEV
e0c67958f releaser: Add release notes to /docs for release of 0.84.2
f6b9ce6eb releaser: Bump versions for release of 0.84.2
4b03399b7 releaser: Add release notes for 0.84.2 [ci skip]
40dfdd095 modules: Add module.import.noMounts config
3a6dc6d3f modules: Use value type for module.Time
6cd2110ab commands: Add version time to "hugo config mounts"
6a365c271 commands: Add some more info to "hugo config mounts"
19aa95fc7 Fix config handling with empty config entries after merge
923dd9d1c Fix config loading for "hugo mod init"
d9bdd37d3 deps: Update to Minify v2.9.18
b2eaf4c8c Remove credit from release notes
efb6ee6c1 releaser: Prepare repository for 0.85.0-DEV
4bd65e224 releaser: Add release notes to /docs for release of 0.84.1
ff2266300 releaser: Bump versions for release of 0.84.1
8677cfb04 releaser: Add release notes for 0.84.1 [ci skip]
093dacab2 Fix language menu config regression
4a9d408fe config: Fix merge of config with map[string]string values.
931205988 releaser: Bump to Goreleaser v0.171.0
a7e3da242 markup: Rename Header(s) to Heading(s) in ToC struct
b70a12ec4 Merge commit '4dd90050f154c91373329a5d7e348289c40be12f'
4dd90050f Squashed 'docs/' changes from 3a923e155..710856e5a
3d544c9ae releaser: Prepare repository for 0.85.0-DEV
2c4689f7b releaser: Add release notes to /docs for release of 0.84.0
9c0860f74 releaser: Bump versions for release of 0.84.0
a1694b06a releaser: Increase timeout
219ec3800 releaser: Add release notes for 0.84.0
be6b901cf docs: Regenerate docs helper
643b67193 output: Make WebAppManifestFormat NotAlternative=true
ab4e1dfa4 media: Adjust  test assertion
02f31897b media: support application/manifest+json
402da3f8f docs: Regenerate docshelper
92405e5b0 Squashed 'docs/' changes from 4c81c6c2a..3a923e155
a074f758b Merge commit '92405e5b0adc5d8c3dfde88d6a8b67eb09169190'
bb2aa0870 Implement configuration in a directory for modules
9096842b0 tpl: Rename err-missing-instagram-accesstoken => error-missing-instagram-accesstoken
3aa7f0b27 deps: Update github.com/alecthomas/chroma v0.9.1 => v0.9.2
9b870aa78 deps: Run go mod tidy
93aad3c54 Split out the puthe path/filepath functions into common/paths
5af045eba resources/image: Fix fill with smartcrop sometimes returning 0 bytes images
8eafe0845 deps: Update to Goldmark v1.3.8
31fb29fb3 Do not read config from os.Environ when running tests
d392893cd Misc config loading fixes
a886dd53b github: Set a dummy Instagram token
a91cd7652 docs: Regenerate docs helper
162f41d0e Merge commit '32ba623541d74ee0b7ae4efb1b8326dc49af28b8'
32ba62354 Squashed 'docs/' changes from bcc4f9324..4c81c6c2a
552cef5c5 Update to Go 1.16.5, Goreleaser 0.169.0
73483d0f9 tpl: Add a terse pagination template variant to improve performance
9b5debe4b Upgrade Instagram shortcode
12530519d Fix nested OS env config override when parent does not exist
f55d2f437 tpl/fmt: Add erroridf template func
282f1aa3d tpl/data: Print response body on HTTP errors
fcd63de3a tpl/data: Misc header improvements, tests, allow multiple headers of same key
150d75738 tpl/data: Allows user-defined HTTP headers with getJSON and getCSV
06d295427 hugofs: Set modTime at creation time
26ae12c0c Fix invalid timestamp of the "public" folder
ee733085b config: Fix env split to allow = character in  values
01758f99b Add math.Max and math.Min
845a7ba4f Catch incomplete shortcode error
10f60de89 Use SPDX license identifier
785a31b5b navigation: Cache and copy Menu for sorting
bc1e05286 deps: Update to LibSASS 3.6.5
f518b4f71 publisher: Make the HTML element collector more robust
dc6b7a75f Revert "publisher: Make the HTML element collector more robust"
3f515f0e3 Revert "publisher: Get the collector in line with the io.Writer interface"
a9bcd3818 publisher: Get the collector in line with the io.Writer interface
ef0f1a726 publisher: Make the HTML element collector more robust
abbc99d4c common/maps: Add Scratch.DeleteInMap
76c95f55a Display version when building site (#8533)
2c7f5b62f docs: Update querify function description and examples
c46fc838a tpl: Allow 'Querify' to take lone slice/interface argument
504c78da4 modules/npm: Change SetEscapeHTML to false
b660ea8d5 Add a benchmark
64f88f301 readme: Update dependency list
7a2c10ae6 tpl: Fix countwords to handle special chars
e1c328df2 releaser: Prepare repository for 0.84.0-DEV
5afe0a57d releaser: Add release notes to /docs for release of 0.83.1
8900e3391 releaser: Bump versions for release of 0.83.1
9753e1b9c releaser: Add release notes for 0.83.1 [ci skip]
ececd1b12 langs/i18n: Fix warning regression in i18n
b0ca723eb releaser: Prepare repository for 0.84.0-DEV
4c65ceccc releaser: Add release notes to /docs for release of 0.83.0
57a471a0d releaser: Bump versions for release of 0.83.0
9b63af55b Update 0.83.0-relnotes.md
23fc65832 docs: Fix shortcode
e7b5e36e0 releaser: Add release notes for 0.83.0
a9b52b417 docs: Regenerate docs helper
b073a1c97 docs: Regenerate CLI docs
4227cc1bd commands: Remove all dates from gendoc
c239c643f Squashed 'docs/' changes from fb551cc75..bcc4f9324
d7b22aee4 Merge commit 'c239c643fee10bfa217cb108755b798f8f5f3b10'
3cc4fdd6f deps: Update getkin/kin-openapi v0.60.0 => v0.61.
7eb80a9e6 langs/i18n: Fix multiple unknown language codes
78c1a6a7c deps: Update github.com/evanw/esbuild v0.11.14 => v0.11.16
f6745ad35 Remove .Site.Authors from embedded templates
f523e9f0f deploy: Don't treat a NotFound response for Delete as a fatal error.
63cd05ce5 snap: Switch to deb packages of nodejs and python3-pygments
902535ef1 snapcraft.yaml: Install bin/node from node/14/stable
70aebba04 build(deps): bump github.com/getkin/kin-openapi from 0.55.0 to 0.60.0
3e3b7d447 build(deps): bump github.com/evanw/esbuild from 0.11.13 to 0.11.14
c13d36874 resources/page: Fix permalinks pattern detection for some of the sections variants
048418ba7 deps: Update to Chroma v0.9.1
eebde0c2a langs/i18n: Improve plural handling of floats
e4dc9a82b tpl/collections: Fix where on type mismatches
0d86a32d8 Make the shortcode template lookup for output formats stable
65c502cc8 build(deps): bump github.com/evanw/esbuild from 0.11.12 to 0.11.13
537c905ec langs/i18n: Revise the plural implementation
243951ebe snapcraft.yaml: Update to "base: core20"
fe2ee0280 build(deps): bump github.com/frankban/quicktest from 1.11.3 to 1.12.0
316d65cd7 build(deps): bump google.golang.org/api from 0.44.0 to 0.45.0
b95229ab4 build(deps): bump github.com/aws/aws-sdk-go from 1.37.11 to 1.38.23
0551df090 Correct function name in comment
bca40cf0c Fix Params case handling in where with slices of structs (e.g. Pages)
057e5a22a deps: Upgraded github.com/evanw/esbuild v0.11.0 => v0.11.12
fd96f65a3 docs: Regen docs helper
8f7891e70 Merge commit '07b8d9466dfb59c429c1b470a0443337bc0aeefe'
07b8d9466 Squashed 'docs/' changes from 9cece6640..fb551cc75
d3a64708f build(deps): bump github.com/tdewolff/minify/v2 from 2.9.15 to 2.9.16
3b56244f4 build(deps): bump golang.org/x/text from 0.3.5 to 0.3.6
f5d3d635e publisher: Remove some unreachable code
0d3c42da5 build(deps): bump github.com/getkin/kin-openapi from 0.39.0 to 0.55.0
ef34dd8f0 publisher: Some performance tweaks for the HTML elements collector
bc80022e0 publisher: Exclude comment and doctype elements from writeStats
2bb9496ce Merge branch 'release-0.82.1'
fda3c4d1e releaser: Prepare repository for 0.83.0-DEV
60618210b releaser: Add release notes to /docs for release of 0.82.1
f8b064f3c releaser: Bump versions for release of 0.82.1
4713e509b releaser: Add release notes for 0.82.1 [ci skip]
6e9d2bf0c Regression in media type suffix lookup
e73f7a770 Regression in media type suffix lookup
3ddffd064 build(deps): bump github.com/yuin/goldmark from 1.3.2 to 1.3.5
6fc52d185 Remove duplicate references from release notes
73c3ae818 build(deps): bump github.com/spf13/afero from 1.5.1 to 1.6.0
7ca118fdf build(deps): bump github.com/pelletier/go-toml from 1.8.1 to 1.9.0
33d5f8059 Add webp image encoding support
509d39fa6 build(deps): bump google.golang.org/api from 0.40.0 to 0.44.0
7725c41d4 build(deps): bump github.com/nicksnyder/go-i18n/v2 from 2.1.1 to 2.1.2
5d36d8015 build(deps): bump github.com/rogpeppe/go-internal from 1.6.2 to 1.8.0
9b34d42bb Remove extraneous space from figure shortcode
c2d8f87cf build(deps): bump github.com/magefile/mage from 1.10.0 to 1.11.0
cbc246616 build(deps): bump github.com/google/go-cmp from 0.5.4 to 0.5.5
fa432b17b org: Disable broken pretty relative links feature
0cd55c66d deps: Update go-org to v1.5.0
0d5cf256e build(deps): bump github.com/jdkato/prose from 1.2.0 to 1.2.1
36527576b build(deps): bump github.com/spf13/cobra from 1.1.1 to 1.1.3
9b83f45b6 Add complete dependency list in "hugo env -v"
7fdd2b95e Add hugo.IsExtended
3d5dbdcb1 publisher: Also test minified HTML in the element collector
8a308944e publisher: Skip script, pre and textarea content when looking for HTML elements
7b4ade56d output: Only output mediaType once in docshelper JSON
7c7974b71 Fix typo in docshelper.go
5656a908d tpl: Remove the FuzzMarkdownify func for now
2dc222cec Add slice syntax to sections permalinks config
4d22ad580 deps: Upgrade github.com/evanw/esbuild v0.9.6 => v0.11.0
5e2f12891 Try to fix the fuzz build
97934779e releaser: Prepare repository for 0.83.0-DEV
9d9607843 releaser: Add release notes to /docs for release of 0.82.0
1efd93c09 releaser: Bump versions for release of 0.82.0
584a9b3e2 releaser: Add release notes for 0.82.0
86b4fd35e docs: Regenerate docs helper
195d108da docs: Regen CLI docs
81689af79 Squashed 'docs/' changes from bb15e9804..9cece6640
c94aa5cf4 Merge commit '81689af79901f0cdaff765cda6322dd4a9a7ccb3'
df8bb8812 Simplify some config loading code
57d8d208e deps: Update github.com/evanw/esbuild v0.9.0 => v0.9.6
fc06e8508 Apply OS env overrides twice
b725253f9 Attributes for code fences should be placed after the lang indicator only
35dedf15c deps: Bump github.com/tdewolff/minify/v2 v2.9.15
7ed56c694 Fix OS env override for nested config param only available in theme
24c716cac Fix `new theme` command description
137d2dab3 github: More explicit support link to discourse
ba1d0051b media: Make Type comparable
1b1dcf586 deps: Update to esbuild v0.9.0
f6612d8bd exif: Fix handling of utf8 runes in nullString()
0a2ab3f8f exif: Allow more spacing characters in strings
4d24e2a32 media: Add a basic benchmark
18074d0c2 Fix output format handling for render hooks
35bfb6622 Rename a test
6d21559fb Add a debug helper
ba16a14c6 Add support for Google Analytics v4
782c79ae6 Bump go.mod to Go 1.16
5afcae7e0 #8210 Upgrade golang version for Dockerfile
60469f429 Update CONTRIBUTING.md
aed7df62a markup: Handle attribute lists in code fences
cd0c5d7ef Allow markdown attribute lists to be used in title render hooks
e7e194435 Merge commit '9d31f650da964a52f05fc27b7fb99cf3e09778cf'
9d31f650d Squashed 'docs/' changes from d343ebf71..bb15e9804
88a85dcea build(deps): bump github.com/kyokomi/emoji/v2 from 2.2.7 to 2.2.8
7f8530039 tpl: Add method mappings for strings.Contains, strings.ContainsAny
01dd7c16a Fixes #7698.
c8f45d1d8 commands: Fix autocomplete docs
b3504a0ee releaser: Prepare repository for 0.82.0-DEV
59d15c97d releaser: Add release notes to /docs for release of 0.81.0
9e2d086ca releaser: Bump versions for release of 0.81.0
b65518ac6 releaser: Increase build timeout
0e9cd8128 releaser: Add release notes for 0.81.0
fe77f7434 tpl: Make the build green again
9e99950c6 docs: Regen CLI docs
1b364b003 docs: Regen docs helper
acb9109df Squashed 'docs/' changes from ef9c4913c..d343ebf71
7d0a26198 Merge commit 'acb9109df778fa4a51c0d8b29b3212b12988908f'
c60806550 tpl: Regenerate internal templates
ffd9dac42 tpl: Update date logic of opengraph and schema internal templates
88b93a09d Run go mod tidy
29fb456c9 build: Add arm64 to Darwinextended build and add vendorInfo
718fba7d6 Update Travis, GitHub, CircleCI and Snap to Go 1.16 (only)
9650e5684 tpl: Add temporary patch to fix template data race
e77b2e3aa Pull in latest Go 1.16 template source
b5485aeae Add breaking tests for "map read and map write in templates"
ccb822eb5 Pull in latest Go template source
21e9eb18a Expand template newline testcase to commands
ae57ba6a9 Add a test case for Go 1.16 template action newlines
cf3e077da tpl/internal: Synch Go templates fork with Go 1.16dev
66beac99c deps: Update github.com/tdewolff/minify/v2 v2.6.2 => v2.9.13
968dd7a71 build(deps): bump github.com/frankban/quicktest from 1.11.2 to 1.11.3
38f29e817 build(deps): bump github.com/getkin/kin-openapi from 0.32.0 to 0.39.0
cd87813aa build(deps): bump github.com/aws/aws-sdk-go from 1.36.33 to 1.37.11
4e815b063 build(deps): bump github.com/sanity-io/litter from 1.3.0 to 1.5.0
652a59d38 build(deps): bump github.com/olekukonko/tablewriter from 0.0.4 to 0.0.5
84f0ec7f8 deps: Update to esbuild v0.8.46
bdfbcf6f4 modules: Add config option modules.vendorClosest
b60e9279a js: Fix potential path issue on Windows
a9b0fea6a build(deps): bump google.golang.org/api from 0.26.0 to 0.40.0
e8df09774 Change version string format and add VendorInfo to help with issue triaging
3a5ee0d2d modules: Allow absolute paths for any modules resolved via project replacement
4ffaeaf15 modules: Throw an error running hugo mod vendor on mountless module
bf55afd71 Fix some humanize issues
5f621df25 commands: Add PowerShell completion support
7118f89cf Refer to mage instead of make in comment regarding commitHash
e6dd31281 markup/goldmark: Fix handling of legacy attribute config
2681633db markup/goldmark: Add attributes support for blocks (tables etc.)
1b2472825 deps: Update to Goldmark v1.3.2
441b11bee Update to Dart Sass Protocol beta6
4867cd1de tpl/embedded: Exclude pages without Permalink from sitemap
92c6c4041 langs/i18n: Support translation files with suffix *.yml
d36fd5b3e Refactor: Write to stdout by default
a7c515e1b Refactor: Remove powershell support
216b00f35 Feat: Add zsh, fish and powershell completion support
144943798 github: Enable NPM tests on Windows
440fdb0eb deps: Update to esbuild v0.8.39
b2a48dce5 Trim whitespace in elements written to hugo_stats.json
35def0ae4 tpl/data: Add default user-agent header for getJSON requests
2f9dadae4 build(deps): bump github.com/aws/aws-sdk-go from 1.35.0 to 1.36.33
ed3071b75 docs: Remove mention of a file size limit for readFile
ee9c13676 tpl/os: remove 1mb limit for readFile.
32b86076e js: Add Inject config option
241b7483e tpl: Fix race condition in text template baseof
e19a046c4 js: Add Shims option
a1fe552fc Fix nilpointer in js.Build error handling
a1a9f088b Merge commit 'e48ffb763572814a3788780bb9653dfa2daeae22'
e48ffb763 Squashed 'docs/' changes from 1de7a358c..ef9c4913c
07ad283f6 build(deps): bump github.com/spf13/afero from 1.4.1 to 1.5.1
2c8b5d916 pipes: Add external source map support to js.Build and Babel
0004a733c tpl: Fix metrics hint tracking
8a26ab0bc tpl: Do not return errors in substr for out-of-bounds cases
788e50ad3 tpl: Add missing test scenario for strings.Substr
4d2b6fc4c Run go mod tidy
212e5e554 deps: Update go-org to v1.4.0
4fdec67b1 rst: Adjust log level
9b681ecfb releaser: Prepare repository for 0.81.0-DEV
792ef0f41 releaser: Add release notes to /docs for release of 0.80.0
5b3fc1c67 releaser: Bump versions for release of 0.80.0
63a33afee Update 0.80.0-relnotes.md
69aa3d459 releaser: Add release notes for 0.80.0
ffbf5e45f Allow Dart Sass transformations to be cached on disk
48994ea76 dartsass: Dart Sass only supports `expanded` and `compressed`
428b0b329 dartsass: Add missing OutputStyle option
1f7e9f733 Update emoji import paths and version
cea157402 Add Dart Sass support
f9f779786 GroupByParamDate now supports datetimes
a9718f44c para: Skip para test when not on CI
f802bb236 Update SECURITY.md
6c2941827 releaser: Add release notes to /docs for release of 0.79.1
10ae7c321 Improve LookPath
ae2d1bd52 docs: create a SECURITY.md
81975f847 Fix Resource.ResourceType so it always returns MIME's main type
8103188b9 para: Show more detail on failed time test
3ba147e70 images: Add images.Overlay filter
a2d146ec3 tpl: Regenerate templates
d2d493ab5 tpl: Fix series detection in opengraph
ce96895de hugolib/paths: Fix typo
04b89857e all: Fix minor typos
21fa1e86f Fix BenchmarkMergeByLanguage
c84ad8db8 deps: Bump github.com/spf13/cobra from 0.15.0 to 0.20.0
4e0acb89b chore: configure proper link to discourse.gohugo.io (#8020)
718e09ed4 tpl/internal/go_templates: Revert formatting
d90e37e0c all: Format code with gofumpt
32471b57b build(deps): bump github.com/evanw/esbuild from 0.8.15 to 0.8.17
4fc918e02 tpl: Add title parameter to YouTube shortcode
0ad378b09 Use --baseURL path for live-reload URL
aebfe156f Fix RelURL and AbsURL when path starts with language
907d9e926 build(deps): bump github.com/getkin/kin-openapi from 0.31.0 to 0.32.0
5862fd2a6 tpl: Fix substr when length parameter is zero
64789fb5d tpl: Refactor and fix substr logic
32d4bf68d releaser: Prepare repository for 0.80.0-DEV
1415efdcd releaser: Add release notes to /docs for release of 0.79.0
4e6bf7907 releaser: Bump versions for release of 0.79.0
50be4370b Update 0.79.0-relnotes.md
3d2e6a30d releaser: Add release notes for 0.79.0
4f1e4bb3f Merge commit '9f1265fde4b9ef186148337c99f08601633b6056'
9f1265fde Squashed 'docs/' changes from 57c1d1a67..1de7a358c
d162bbd79 publisher: Fix memory usage in writeStats
17e0bbe82 build(deps): bump gopkg.in/yaml.v2 from 2.3.0 to 2.4.0
e442cf30a Fix server rebuild issue with partials referenced from render hooks
7e223b3ba Allow setting the delimiter used for setting config via OS env, e.g. HUGO_
8a6e70605 deps: Update to github.com/evanw/esbuild 0.8.11 to 0.8.14
34061706e output: Add more layout lookup tests
6f7633df7 build(deps): bump github.com/google/go-cmp from 0.5.2 to 0.5.3
a546059a9 examples: Remove unneeded meta tag from blog example
b5d906e31 build(deps): bump github.com/getkin/kin-openapi from 0.30.0 to 0.31.0
fd70bdafe docs: Regen docshelper
8f5c9a747 Add menu params
e4fcb672e resources: Preserve url set in frontmatter without sanitizing
18c13adcd watcher: Add file deleted by accident
20a35374a Revert "docs: Regenerate docshelper"
caf16c208 docs: Regenerate docshelper
b298c06e0 deps: Update to Chroma v0.8.2
55e290af4 build(deps): bump github.com/evanw/esbuild from 0.8.8 to 0.8.11
506a190a8 build(deps): bump github.com/getkin/kin-openapi from 0.26.0 to 0.30.0
fc81de643 build(deps): bump github.com/evanw/esbuild from 0.8.6 to 0.8.8
fcaa324e3 releaser: Prepare repository for 0.79.0-DEV
959724f0e releaser: Add release notes to /docs for release of 0.78.2
a3012d85d releaser: Bump versions for release of 0.78.2
fc7f73927 releaser: Add release notes for 0.78.2 [ci skip]
78f227b66 js: Let ESBuild handle all imports from node_modules
5e03f644a build(deps): bump github.com/evanw/esbuild from 0.8.5 to 0.8.6
a92ef20ff build(deps): bump github.com/evanw/esbuild from 0.8.4 to 0.8.5
0d54a8440 build(deps): bump github.com/getkin/kin-openapi from 0.22.1 to 0.26.0
943f3c932 Update GH docs to say "main" as default branch
4f20bf29e Updated year in header
4c613d5d5 Added first fuzzer
82a182e52 build(deps): bump github.com/frankban/quicktest from 1.11.1 to 1.11.2
dfc662b20 build(deps): bump golang.org/x/text from 0.3.3 to 0.3.4
2f0917cc0 build(deps): bump github.com/evanw/esbuild from 0.8.3 to 0.8.4
7565cda1f releaser: Prepare repository for 0.79.0-DEV
347f2de67 releaser: Add release notes to /docs for release of 0.78.1
210f6d38a releaser: Bump versions for release of 0.78.1
03f87f8f0 releaser: Add release notes for 0.78.1 [ci skip]
3437174c3 Disable NPM test on Travis on Windows
f66302ca0 travis: Install nodejs on Windows
944150baf js: Remove external source map option
bf2837a31 js: Misc fixes
cf6131dc1 releaser: Prepare repository for 0.79.0-DEV
fd62817bb releaser: Add release notes to /docs for release of 0.78.0
3ebe83aea releaser: Bump versions for release of 0.78.0
0c16debc7 Update 0.78.0-relnotes.md
794e1f9e7 releaser: Add release notes for 0.78.0
c64e9504d Merge commit 'b74591123eac47a20d1f26ff3e2d291cd9c5cfc0'
b74591123 Squashed 'docs/' changes from d1157b687..57c1d1a67
3b2fe3cd3 js: Add avoidTDZ option
85e4dd737 Make js.Build fully support modules
3089fc0ba js.Build: Generate tsconfig files
e10e36cf7 releaser: Prepare repository for 0.78.0-DEV
ef290125c releaser: Add release notes to /docs for release of 0.77.0
5d2fceeca releaser: Bump versions for release of 0.77.0
0696df668 Release 0.77.0
5ba49c877 Update 0.77.0-relnotes.md
c3ccda8fa releaser: Add release notes for 0.77.0
beabc8d99 modules: Allow absolute paths for project imports
332b65e4c docs: Regen docs helper
3553fc533 Merge commit '9cabb46f68bae01aeb1859727dcb21e8a10f5ec7'
9cabb46f6 Squashed 'docs/' changes from 9abd3043a..d1157b687
173187e26 Add module.replacements
8a1c637c4 Fix setting HUGO_MODULE_PROXY etc. via env vars
6d95dc9d7 tpl: Fix reflection bug in merge
56a343507 deploy: Do not call CDN service invalidation when executing a dry run deployment
d48a98c47 create: Pass editor arguments from newContentEditor correctly
3261678f6 deps: Bump github.com/spf13/cobra from 0.0.7 to 1.1.1
f465c5c30 build: Allow optional "nodeploy" tag to exclude deploy command from bin
3400aff25 Allow cascade _target to work with non toml fm
fdfa4a5fe Allow getJSON errors to be ignored
8cbe2bbfa build(deps): bump github.com/evanw/esbuild from 0.7.15 to 0.7.18
807db97af tpl: Refactor time.AsTime location implementation
26eeb2914 tpl: Update Hugo time to support optional [LOCATION] parameter
b886fa46b Revert "Add benchmark for building docs site"
14bce18a6 highlight: Avoid making unnecessary allocation
837e084bb Add benchmark for building docs site
08e4f9ff9 embedded: Always show page number when 5 pages or less
acfa15386 output: Improve layout path construction
f033d9f01 build(deps): bump github.com/frankban/quicktest from 1.11.0 to 1.11.1
59fe27942 build(deps): bump github.com/evanw/esbuild from 0.7.14 to 0.7.15
62119022d Merge branch 'release-0.76.5'
2f3f41f73 releaser: Prepare repository for 0.77.0-DEV
60f0725b3 releaser: Add release notes to /docs for release of 0.76.5
dcf70ea5a releaser: Bump versions for release of 0.76.5
7487c0abf releaser: Add release notes for 0.76.5 [ci skip]
79a022a15 Render aliases even if render=link
ead5799f7 Render aliases even if render=link
d57be1132 build(deps): bump github.com/spf13/afero from 1.4.0 to 1.4.1
d07059669 build(deps): bump github.com/evanw/esbuild from 0.7.9 to 0.7.14
f5ea359dd docker: Update to Go 1.15 and Alpine 3.12
78b26d538 output: Test all lookup permutations in TestLayout
28179bd55 output: Reformat TestLayout table
fef057b48 releaser: Prepare repository for 0.77.0-DEV
50dfe40b9 releaser: Add release notes to /docs for release of 0.76.4
1ef4211fe releaser: Bump versions for release of 0.76.4
b148063ec releaser: Add release notes for 0.76.4 [ci skip]
e9a7ebaf6 snap: Install postcss v8 explicitly as it is now a peer dependency
506820435 lang/i18n: Fix for language code case issue with pt-br etc.
49972d079 Merge branch 'release-0.76.3'
c98132e30 Add merge helper
af19253f4 releaser: Prepare repository for 0.77.0-DEV
e96234590 releaser: Add release notes to /docs for release of 0.76.3
d62bc7477 releaser: Bump versions for release of 0.76.3
1b1d62fdc releaser: Add release notes for 0.76.3 [ci skip]
33e9d79b7 langs/i18n: Add workaround for known language, but missing plural rule error
fc6abc39c langs/i18n: Fix for bare TOML keys
18ed22be5 releaser: Prepare repository for 0.77.0-DEV
207913f34 releaser: Add release notes to /docs for release of 0.76.2
830b1a94d releaser: Bump versions for release of 0.76.2
605cff407 releaser: Add release notes for 0.76.2 [ci skip]
6dd60fca7 Revert "deps: Update to  github.com/tdewolff/minify v2.9.4"
138a02591 releaser: Prepare repository for 0.77.0-DEV
58ac83a98 releaser: Add release notes to /docs for release of 0.76.1
2b8e8e6d9 releaser: Bump versions for release of 0.76.1
aef836986 releaser: Add release notes for 0.76.1 [ci skip]
f9e798e8c langs/i18n: Fix i18n .Count regression
ee56efffc Fix typo in 0.76.0 release note
2c4e76e96 releaser: Prepare repository for 0.77.0-DEV
9c7d6e475 releaser: Add release notes to /docs for release of 0.76.0
4482958f9 releaser: Bump versions for release of 0.76.0
e1ec3bc2b Release 0.76.0
1cfa63b9e releaser: Add release notes for 0.76.0
b9318e431 docs: Regen docshelper
5e39eb20a Merge commit 'e5568488051a571df48401e03f1304b95dbc9028'
e55684880 Squashed 'docs/' changes from 4895c29c5..9abd3043a
634938908 pagemeta: Make BuildConfig.Render an enum
c63db7f1f Allow cascade to be a slice with a _target discriminator
5e2a547cb Add force flag to server redirects config
ee090c094 build(deps): bump github.com/evanw/esbuild from 0.7.8 to 0.7.9
edc5c4741 tpl: Add Do Not Track (dnt) option to Vimeo shortcode
05e358fd3 build(deps): bump github.com/tdewolff/minify/v2 from 2.9.5 to 2.9.7
a2e85d9a7 build(deps): bump github.com/aws/aws-sdk-go from 1.34.34 to 1.35.0
4fba78dd0 build(deps): bump github.com/getkin/kin-openapi from 0.22.0 to 0.22.1
c011b4667 build(deps): bump github.com/aws/aws-sdk-go from 1.34.33 to 1.34.34
35348b4b3 build(deps): bump github.com/evanw/esbuild from 0.7.7 to 0.7.8
34915777c build(deps): bump github.com/aws/aws-sdk-go from 1.34.27 to 1.34.33
0f4a837ed build(deps): bump github.com/evanw/esbuild from 0.7.4 to 0.7.7
b395d686e build(deps): bump github.com/tdewolff/minify/v2 from 2.9.4 to 2.9.5
97987e5c0 langs/i18n: Upgrade to go-i18n v2
111344113 publisher: Fix writeStats with quote inside quotes
4855c186d build(deps): bump github.com/evanw/esbuild from 0.7.2 to 0.7.4
0c3d2b67e Fix CLI example for PostCSS 8
6f07ec7e9 build(deps): bump github.com/aws/aws-sdk-go from 1.34.26 to 1.34.27
4318dc72f build(deps): bump github.com/alecthomas/chroma from 0.8.0 to 0.8.1
acdc27a32 build(deps): bump github.com/evanw/esbuild from 0.7.1 to 0.7.2
3acde9ae0 Make sure CSS is rebuilt when postcss.config.js or tailwind.config.js changes
473b6610d Fix typo in redirect error message
0bce97703 build(deps): bump github.com/aws/aws-sdk-go from 1.34.22 to 1.34.26
b254532b5 deps: Update to  github.com/tdewolff/minify v2.9.4
05a228929 snap: Bump bundled Node.js from v12.18.3 to v12.18.4
8e553dcde markup/asciidocext: Add preserveTOC option
d4fc70a3b build(deps): bump github.com/frankban/quicktest from 1.10.2 to 1.11.0
d905abc00 build(deps): bump github.com/evanw/esbuild from 0.6.32 to 0.7.1
8f3946746 build(deps): bump github.com/rogpeppe/go-internal from 1.5.1 to 1.6.2
b01b2564e build(deps): bump github.com/jdkato/prose from 1.1.1 to 1.2.0
9fa5ebe2c build(deps): bump github.com/spf13/afero from 1.2.2 to 1.4.0
efaed306b releaser: Prepare repository for 0.76.0-DEV
a4a7bab73 releaser: Add release notes to /docs for release of 0.75.1
2a9dce423 releaser: Bump versions for release of 0.75.1
30159b58e releaser: Add release notes for 0.75.1 [ci skip]
cd00f7f96 resources/image: Fix nilpointer for images with no Exif
214afe4c1 modules/npm: Preserve the original package.json if it exists
cd830bb02 tpl: Fix grammar in the new 'requires non-zero' error message
a8458bfb2 releaser: Prepare repository for 0.76.0-DEV
fef924baf releaser: Add release notes to /docs for release of 0.75.0
07b5e602f releaser: Bump versions for release of 0.75.0
70f16e84e Release 0.75.0
abadf2954 releaser: Add release notes for 0.75.0
377ad87a5 Set PWD in environment when running the Node apps
292b0e26e typo: already -> already
534ae9c57 Squashed 'docs/' changes from d3eb97a33..4895c29c5
df56682a1 Merge commit '534ae9c57a902aea9ed6e62390dec11fa74b7122'
be2404c8b docs: Regen docs helper
c8da8eb1f docs: Regenerate CLI docs
787da6bd5 releaser: Drop 32-bit for MacOS
85ba9bfff Add "hugo mod npm pack"
9df60b62f Print layout name if it was specified when showing missing layout file error
4fad43c8b build(deps): bump github.com/aws/aws-sdk-go from 1.34.21 to 1.34.22
fb0f2cc71 markup/highlight: Add support to linkable line anchors on Chroma
748fd4cb0 snap: Bump bundled Node.js from v8.12.0 to v12.18.3
b82f440c5 Revert "snap: Change confinement from strict to classic"
c8143efa5 build(deps): bump github.com/getkin/kin-openapi from 0.14.0 to 0.22.0
c80132bbe build(deps): bump github.com/aws/aws-sdk-go from 1.34.20 to 1.34.21
75fa4c5c9 build(deps): bump github.com/spf13/viper from 1.6.1 to 1.7.1
fd7969e0b deps: Run "go mod tidy"
b7fa3c4bb deps: Update to Goldmark v1.2.1
6a848cbc3 markup/asciidocext: Fix AsciiDoc TOC with code
746ba803a build(deps): bump github.com/aws/aws-sdk-go from 1.27.1 to 1.34.20
612b7d376 build(deps): bump github.com/mitchellh/mapstructure from 1.1.2 to 1.3.3
6f4ff1a46 snap: Change confinement from strict to classic
ddeca4593 build(deps): bump github.com/spf13/cobra from 0.0.5 to 0.0.7
31f2091f5 build(deps): bump github.com/sanity-io/litter from 1.2.0 to 1.3.0
d4611c432 modules: Add noVendor to module config
20af9a078 modules: Add ignoreImports to module imports config
9a1e6d15a modules: Make ignoreVendor a glob pattern
84adecf97 build(deps): bump github.com/gorilla/websocket from 1.4.1 to 1.4.2
573558a07 build(deps): bump github.com/fsnotify/fsnotify from 1.4.7 to 1.4.9
8b10c22f8 build(deps): bump github.com/kyokomi/emoji
195bd1243 build(deps): bump github.com/markbates/inflect from 1.0.0 to 1.0.4
6a544ece2 build(deps): bump github.com/frankban/quicktest from 1.7.2 to 1.10.2
4b430d456 Encode & in livereload injected code
b9f10c75c build(deps): bump github.com/niklasfasching/go-org from 1.3.1 to 1.3.2
537c598e9 build(deps): bump github.com/bep/golibsass from 0.6.0 to 0.7.0
67348676f build(deps): bump golang.org/x/text from 0.3.2 to 0.3.3
f9cc0ec76 build(deps): bump github.com/evanw/esbuild from 0.6.5 to 0.6.32
b5483eed6 build(deps): bump github.com/nicksnyder/go-i18n from 1.10.0 to 1.10.1
90285f475 Revert "Update dependabot.yml"
4949bdc2e markup/asciidocext: Fix broken test
f7c1b5fe1 docs: Update replaceRE func
183e86260 docs: Update replace func
f50ee6bbe docs: Update merge function
c0655ba6c Update dependabot.yml
a2dda22c3 Create dependabot.yml
910d81a69 Remove Pygments from requirements.txt
8c490a73b docs: Regen CLI docs
e6cd9da42 docs: Regen docs helper
dcf25c0b4 markup/asciidocext: Revert trace=true
7d7771b67 Squashed 'docs/' changes from 7297c1172..d3eb97a33
b9e4f5898 Merge commit '7d7771b673e5949f554515a2c236b23192c765c8'
e820b366b Update to Go 1.15.1 and 1.14.8
4055c1218 Fix some change detection issues on server reloads
3ba7c9253 markup/asciidoc: Add support for .TableOfContents
19ef27b98 markup/goldmark: Add a test case
c6b661de8 js.Build: Add SourceMap flag with inline option
cdfd1c99b tpl: Add limit support to replaceRE
047af7cfe tpl: Extend merge to accept multiple parameters
f9ebaaed1 tpl: Add limit option to replace template function
d39636a5f commands: Remove logic that hides 'Building Sites' message after build completes
ad01aea3f Fixed misspelled words
ec3742046 Improve stderr logging for PostCSS and simlilar
ae63c2b5c Fail on  partials with return when given none or a zero argument
e627449c0 Update to Go 1.15
c2235c6a6 Revert "Update stale.yml"
4f69ade71 Update stale.yml
f8b8b091f Merge commit 'cb39847dee488c373dd5bc2a3706385342a59355'
cb39847de Squashed 'docs/' changes from a26d0e610..7297c1172
5f4259014 Remove trailing whitespace and tabs from RSS templates
f3cb0be35 Fix a typo in CONTRIBUTING.md
bffc4e12f Revert "Fix ellipsis display logic in pagination template"
12f6a1cdc Respect mediatypes for deploy
2fa851e65 Fix ellipsis display logic in pagination template
21dbfa1f1 mage: Add uninstall target
e5591e89d deps: Update Chroma to 0.8.0
88929bc23 deps: Update go-org to v1.3.1
850c18bfe releaser: Prepare repository for 0.75.0-DEV
da0437b48 releaser: Add release notes to /docs for release of 0.74.3
90fe00df0 releaser: Bump versions for release of 0.74.3
02efadc24 releaser: Add release notes for 0.74.3 [ci skip]
00e00da23 publisher: Collect transition attributes as classes
45c665d39 Fix Asciidoctor args
a06c06a5c Fix date format in internal schema template
0256959a3 resources/js: Add option for setting bundle format
eded9ac2a resources/js: Simplify options handling
8d7251282 make sure documentation intro text only appears once
e81aef0a9 resources/js: Add es5 build target
673e622fa Merge commit '28bd06265e88454b061810578919d891909a83ad'
28bd06265 Squashed 'docs/' changes from c3b4f8410..a26d0e610
9f9191471 deps: esbuild v0.6.5
3727a9d11 releaser: Prepare repository for 0.75.0-DEV
48565de62 releaser: Add release notes to /docs for release of 0.74.2
808e12621 releaser: Bump versions for release of 0.74.2
aa85a46dc releaser: Add release notes for 0.74.2 [ci skip]
35011bcb2 Add .Defines to js.Build options
084624baa releaser: Prepare repository for 0.75.0-DEV
15163266c releaser: Add release notes to /docs for release of 0.74.1
a74f7d3cc releaser: Bump versions for release of 0.74.1
cb84d9816 releaser: Add release notes for 0.74.1 [ci skip]
c91dbe4ce Fix baseof block regression
6e0452e18 releaser: Prepare repository for 0.75.0-DEV
d2b116268 releaser: Add release notes to /docs for release of 0.74.0
626518430 releaser: Bump versions for release of 0.74.0
797127010 Release 0.74.0
1672a332d releaser: Add release notes for 0.74.0
823ce055e Squashed 'docs/' changes from cfd74b57d..c3b4f8410
5f7a65a08 Merge commit '823ce055ed3356da37e9ec4ac70446bdbbaa8de8'
25e3da334 docs: Regenerate docs helper
9df98ec49 Add proper Media Type handling in js.Build
2fc338070 Add js.Build asset bundling
f1916f114 Merge commit '6aa5c9117fd34644459ea9bcfb1b3f5010658d5d'
6aa5c9117 Squashed 'docs/' changes from ac2c4a487..cfd74b57d
12a65e76d Add openapi3.Unmarshal
58c0f5e61 Remove trailing hyphen from auto heading ID
a1c3e3c1f deploy: Ensure that non-trivial default flag values are passed through.
42e150fbf Fix server reload when non-HTML shortcode changes
028b35678 tpl/strings: Add strings.Count
e9f87c4e3 Update formats.md doc for new allowed extensions.
defd7106b tpl: Add debug.Dump
beb6c03bc Update config.go to add two Asciidoctor extensions
4a3efea7e Add support for inline partials
c66dc6c74 Add support for native Org dates in frontmatter
127d5feb3 deps: Update go-org to v1.3.0
2d42ba912 deps: Update go-org to v1.2.0
5b7b5dea1 Update bug_report.md
ccfaeb678 hugolib: Add missing zero check on file
057b1377c cache: Remove some unused code
48dbb593f commands: Add an option to print memory usage at intervals
f0266e2ef Rework external asciidoctor integration
77aa385b8 Enable the embedded template test when race detector is off
545a1c1ce Merge branch 'release-0.73.0'
47aaa52e3 releaser: Prepare repository for 0.74.0-DEV
428907cc3 releaser: Add release notes to /docs for release of 0.73.0
a78b3e341 releaser: Bump versions for release of 0.73.0
cfcb01451 Release 0.73.0
0b579db80 Updated installation instruction about Sass/SCSS support
ee5d027cd releaser: Add release notes for 0.73.0
4a340ba25 Remove some old release notes
3466884e3 Create robots.txt in the domain root directory
6ff435aa3 Make GroupByParamDate work with string params
82abca32f Add GroupByLastmod
fc045e12a Rename taxonomy kinds from taxonomy to term, taxonomyTerm to taxonomy
9679023f2 Fix aliases with path in baseURL
0a9172672 Merge commit 'efa74c5c6e6ff1daddeb5834ea7c69bed2acf171'
efa74c5c6 Squashed 'docs/' changes from 9be494de3..ac2c4a487
6408c1cbc Fix server data race/nil pointer in withMaps
522ba1cd9 Fix order of GetTerms
889dc47ce Add genDocsHelper mage target
f720fe56d Fix aliases with uglyURLs
d6ed17c60 Fix crash for closing shortcode with no .Inner set
145b3fcce Fix aliases with relativeURLs
01e249e97 Regenerate templates
4b560cc11 Beautify HTML generated by pagination template
e3e627e6b Add a nested data dir test
83d03a520 hugofs: Use os.PathError  in RootMappingFs.doLstat
fc0f13b68 commands: Fix URL rewrites vs fast render server mode
7eeebe1e5 tpl/crypto: Add hmac
740fa4a91 Remove credit (#7347)
f8c67f93e Allow hook template per section/type
3d9235e8f tpl: Fix bad rounding in NumFmt
f7d909f39 releaser: Prepare repository for 0.73.0-DEV
8a7ef3cf4 releaser: Add release notes to /docs for release of 0.72.0
2dfe242ea releaser: Bump versions for release of 0.72.0
7a1464e54 Release 0.72.0
41d50b4dd releaser: Add release notes for 0.72.0
4d53ae697 releaser: Adjust the "thanks" section
626b16e02 Merge commit '9e1dcefc5f559944b70d2fa520f6acd5c56a69f2'
9e1dcefc5 Squashed 'docs/' changes from 6c2195936..9be494de3
2919a6a50 common/maps: Add Scratch.Values
432885c49 deps: Update Goldmark to improve Typographer
6a3e89743 Add redirect support to the server
9613e3e8a Fix typo in install instructions
c950c86b4 publisher: Fix tag collector for nested table elements
915202494 snap: Fix build error: my previous commits did not fix it
b3e4f911f releaser: Prepare repository for 0.72.0-DEV
a301f6b2a releaser: Add release notes to /docs for release of 0.71.1
646bc8508 releaser: Bump versions for release of 0.71.1
5c0d10045 releaser: Add release notes for 0.71.1 [ci skip]
81f563324 Add some more date test cases
9698b0dab Fix RenderString vs render hooks
32344fe3d Prevent WARNINGs in RenderString
4d7fa9f11 Fix IsAncestor/IsDescendant for taxonomies
a985efcec Fix GetPage on section/bundle name overlaps
6c3c6686f Fix Go template script escaping
c34bf4856 Add a test helper
833d16d46 releaser: Prepare repository for 0.72.0-DEV
06150c87b releaser: Add release notes to /docs for release of 0.71.0
330e52ebe releaser: Bump versions for release of 0.71.0
9e7823537 Release 0.71
7cd66c53b releaser: Add release notes for 0.71.0
723ec555e Fix Babel on Windows
518d14964 commands: Use WARN log level also for the early initialization
e0e81b280 Merge commit 'c9403cbceaaeff53ff4833561f4eefe1dc1a405e'
c9403cbce Squashed 'docs/' changes from ec0abe052..6c2195936
3cc41523b Update to Go 1.14.3 and Go 1.13.11
2fd0a5a67 Improve error message when no Babel installed
6e051c053 Add test for headings render hook
423b8f2fb Add render template hooks for headings
991934497 Add math.Pow
558c09305 deploy: Do not suppress .well-known/ directory
b69a36140 snap: Quote "@babel/cli" to solve build error
a0103864a snap: Remove custom x-nodejs plugin
b342e8fbd Upgrade chroma to 0.7.3 to fix invalid css
6205d56b8 Use .Lastmod for og:updated_time
a5039ddda releaser: Prepare repository for 0.71.0-DEV
7f47b99ea releaser: Add release notes to /docs for release of 0.70.0
b98e2f66b releaser: Bump versions for release of 0.70.0
57ebab7c2 Release 0.70.0
0e314925f releaser: Add release notes for 0.70.0
e4621446c Merge commit '89044b8f8795f17c36396c67823183a20fc88139'
89044b8f8 Squashed 'docs/' changes from 19f44e150..ec0abe052
01befcce3 deps: Update minify to v2.6.2
04b1a6d99 Add support for sort by boolean
dd31e8000 deps: Update to Libsass 3.6.4
6add6d77b Rename transpileJS to babel
2a171ff1c resources: Add JavaScript transpiling solution
67f920419 Disable a test locally
c03ea2b66 Fix some missing JS class collector cases
fe60b7d9e Add diagnostic hints to init timeout message
c2d9fd1eb releaser: Prepare repository for 0.70.0-DEV
ec9dcf304 releaser: Add release notes to /docs for release of 0.69.2
03802ff3c releaser: Bump versions for release of 0.69.2
5e31198c9 releaser: Add release notes for 0.69.2 [ci skip]
8d5766d41 Fix IsAncestor and IsDescendant when the same page is passed
5c41f41ad deps: Update goldmark-highlighting
27a4c4410 Fix IsAncestor and IsDescendant under subsection
ade27699e releaser: Prepare repository for 0.70.0-DEV
17661debb releaser: Add release notes to /docs for release of 0.69.1
8549189e8 releaser: Bump versions for release of 0.69.1
c2c7a4ce5 releaser: Add release notes for 0.69.1 [ci skip]
49e6c8cb4  hugolib/filesystems: Fix typo in test suite
f37e77f2d Fix class collector when running with --minify
27af5a339 related: Fix toLower
b3c825756 Fix broken test
5146dc614 tpl/tmplimpl/template: Change defer RLock to RUnlock
736f84b2d hugolib: Add Unlock before panic
cd4d82020 docs: Fix typo in Hugo's Security Model
2b28e5a9c deps: Update go-org to v1.1.0
102ec2da7 commands: Modify gen chromastyles to output all CSS classes
feaa582cb deps: Update to goldmark v1.1.28
ee67dbeff Fix query parameter handling in server fast render mode
4a3f2427e releaser: Prepare repository for 0.70.0-DEV
4205844bc releaser: Add release notes to /docs for release of 0.69.0
9b55d1358 releaser: Bump versions for release of 0.69.0
6f56a636f Update 0.69.0-relnotes.md
5ec7fa343 releaser: Add release notes for 0.69.0
b7ff4dc23 docs: Regen docs helper
da3c3e5fb Squashed 'docs/' changes from 20d77860b..19f44e150
30748decf Merge commit 'da3c3e5fbd0de65f956618cd2e35401460a3cd02'
095bf64c9 Collect HTML elements during the build to use in PurgeCSS etc.
7791a804e deps: Update to latest emoji package
c774b230e Update hosting-on-aws-amplify.md
2f721f8ec Add basic "post resource publish support"
8568928aa tpl: Extend Jsonify to support options map
1bc93021e tpl: Extend Jsonify to support optional indent parameter
7eba37ae9 Typo correction
efc61d6f3 commands: Use semver for min_version per recommendations
d8d6a25b5 modules: Fix hugo mod vendor for regular file mounts
9f12be54e Revert "Revert "common/herrors: Fix typos in comments""
4437e918c Revert "common/herrors: Fix typos in comments"
4de3ecdc2 deps: Updateto gitmap v1.1.2
1123711b0 common/herrors: Fix typos in comments
3d84ef972 Merge commit 'c494c37a4523fbf2db6274dc87e0877fd5bec24b'
c494c37a4 Squashed 'docs/' changes from 2a0ea423d..20d77860b
9c9987535 helpers: Fix TrimShortHTML
4a39564ef Fix IsDescendant/IsAncestor for overlapping section names
b6e097cfe fix typo in getting started
19a8accc9 releaser: Prepare repository for 0.69.0-DEV
157669a0e releaser: Add release notes to /docs for release of 0.68.3
8f49df946 releaser: Bump versions for release of 0.68.3
1a68ad4e3 releaser: Add release notes for 0.68.3 [ci skip]
523d51948 Fix _build.list.local logic
971b28904 releaser: Prepare repository for 0.69.0-DEV
63bbb40df releaser: Add release notes to /docs for release of 0.68.2
73ae6d581 releaser: Bump versions for release of 0.68.2
e18a2ad3f releaser: Add release notes for 0.68.2 [ci skip]
cfa73050a Fix cache reset for a page's collections on server live reload
244e49c0e releaser: Prepare repository for 0.69.0-DEV
98dc46e1a releaser: Add release notes to /docs for release of 0.68.1
87dd5725d releaser: Bump versions for release of 0.68.1
8c6a03a92 releaser: Add release notes for 0.68.1 [ci skip]
1ce3e7d52 releaser: Include "Revert" commits in change log
c9dc316ad Revert "resources: Add data context to the key in ExecuteAsTemplate"
1664a0e89 releaser: Prepare repository for 0.69.0-DEV
1e67854b1 releaser: Add release notes to /docs for release of 0.68.0
e1b609af9 releaser: Bump versions for release of 0.68.0
8e5566af6 Release 0.68.0
1005f754e Update 0.68.0-relnotes.md
efde7078e releaser: Add release notes for 0.68.0
2ebb9f548 Fix Go build version
7204b354a Some minify configuration adjustments
574c2959b Add minify config
99958f90f Allow headless bundles to list pages via $page.Pages and $page.RegularPages
1d91d8e14 Update to Go 1.14.1 and 1.13.9
95f492114 Fix GetTerms nil pointer
c947351d7 Merge commit 'aa54803a84208816e9c678359bd3f86760484ce0'
aa54803a8 Squashed 'docs/' changes from 988f7d5c2..2a0ea423d
cc2a5d52a Pass directory name to filters in LstatIfPossible in the same way as Readdir
52c159c45 Update to goldmark 1.1.25.
c7b6d74e8 resources: Fix scss vs css import regexp
1a8af7d4f Add workaround for regular CSS imports in SCSS
03b93bb98 Add .RegularPagesRecursive
94fb4dc3d releaser: Prepare repository for 0.68.0-DEV
4f44227bd releaser: Add release notes to /docs for release of 0.67.1
99d36237c releaser: Bump versions for release of 0.67.1
e371162c3 releaser: Add release notes for 0.67.1 [ci skip]
5eadc4c0a metrics: Fix --templateMetricsHints
18cb21ff2 resources: Add data context to the key in ExecuteAsTemplate
df298558a Improve Tailwind/PostCSS error messages
b1106f871 deps: Update Blackfriday
c0177fe2b resources: Try to fix a Go 1.15 go vet error
5914f91b6 Add languageDirection to language configuration
5b4659fa0 releaser: Prepare repository for 0.68.0-DEV
7f1da3efc releaser: Add release notes to /docs for release of 0.67.0
f7d4b01c6 releaser: Bump versions for release of 0.67.0
b809b9680 Update 0.67.0-relnotes.md
a9c91361c releaser: Add release notes for 0.67.0
63393230c docs: Doument the server config
6b61f2a5b Merge commit '14e369b961943a0b977776899e24e8bea63834df'
14e369b96 Squashed 'docs/' changes from 341ecabb2..988f7d5c2
6cceef65c Fix ambigous error on site.GetPage
ffcb4aeb8 Fix handling of HTML files without front matter
8279d2e22 Support unComparable args of uniq/complement/in
c4fa2f079 tpl: Fix error with unicode in file paths
108314444 Add HTTP header support for the dev server
51e178a6a deploy: Add include and exclude support for remote
cb12f41a9 releaser: Prepare repository for 0.67.0-DEV
78c3c78fc releaser: Add release notes to /docs for release of 0.66.0
713132cd4 releaser: Bump versions for release of 0.66.0
bbaefd7e3 Update 0.66.0-relnotes.md
cc1a71886 releaser: Add release notes for 0.66.0
6a34f88dc Skip some tests on CircleCI
ae383f04c {{ in }} should work with html.Template type
ee31e61fb docs: Regen CLI docs
760a87a45 commands: Add --all flag to hugo mod clean
3d3fa5c3f Add build.UseResourceCacheWhen
ee3d02134 Update dependency list in README.md
8947c3fa0 Fix ref/relref short lookup for pages in sub-folder
d7798906d tpl: Change error message on missing resource
305ce1c9e resources: Add full filename to image when processing fails
3e9db2ad9 hugolib: Fix error handling in page collector
449deb7f9 Update dependency list in README
1746e8a9b Fix ref/relRef regression for relative refs from bundles
6f48146e7 identity: Fix potential infinite recursion in server change detection
b0d850321 Fix rebuild logic when editing template using a base template
b66d38c41 resources: Add basic @import support to resources.PostCSS
05a74eaec deploy: Implement include/exclude filters for deploy
33ae62108 Update to Go 1.14 and 1.13.8
1352bc880 Add hugo.IsProduction function
d184e5059 tpl: Add math.Sqrt
322c285ba releaser: Prepare repository for 0.66.0-DEV
211ba42a9 releaser: Add release notes to /docs for release of 0.65.3
0ac528d74 releaser: Bump versions for release of 0.65.3
d8bde266c releaser: Add release notes for 0.65.3 [ci skip]
0bd6356c6 Fix panic when home page is drafted
ca68abf0b Fix goldmark toc rendering
a524124be Fix crashes for 404 in IsAncestor etc.
c1eb62512 releaser: Add release notes to /docs for release of 0.65.2
1510f0778 releaser: Bump versions for release of 0.65.2
aa2ef4542 releaser: Add release notes for 0.65.2 [ci skip]
76b2afe64 Apply missing go fmt
f46053034 Fix panic on no output formats
4c2a0de41 Fix panic in 404.Parent
6be6684cc releaser: Add release notes to /docs for release of 0.65.1
dbaa15d40 releaser: Bump versions for release of 0.65.1
a449e87da releaser: Add release notes for 0.65.1 [ci skip]
7ef5a4c83 hugolib: Fix 2 Paginator.Pages taxonomy regressions
a70bbd069 hugolib: Fix deletion of orphaned sections
24afe2b82 releaser: Add release notes to /docs for release of 0.65.0
9fd7d3957 releaser: Bump versions for release of 0.65.0
c45025cb9 releaser: Add release notes for 0.65.0
a5ebdf7d1 docs: Regenerate CLI docs
9bdedb251 Fix lazy publishing with publishResources=false
dce210ab5 modules: Improve "hugo mod clean"
0b96aba02 commands: Add "hugo mod verify"
fa520a2d9 Add Page.GetTerms
4b670bc8c Squashed 'docs/' changes from 16753a78d..341ecabb2
82029c1ec Merge commit '4b670bc8cc38103c2c60e5090c2f56bf30832b8d'
7489a8645 Add a list terms benchmark
da54787cf Handle disabled RSS even if it's defined in outputs
c7975b48b Fix goMinorVersion on non-final Go releases
b2dcd53e3 Use the tree for taxonomy.Pages()
36983e618 Add some cagegories to the site collections benchmarks
d73e37387 tpl: Adjust the RSS taxonomy logic
aa3e18305 tpl: Fix RSS template for the terms listing
1b7acfe76 Fix taxonomy
19e12caf8 Fix RenderString for pages without content
20f2211fc modules: Do not try to get local themes in "hugo mod get"
a21a9373e deps: Update goldmark-highlighting
775c7c247 commands: Support "hugo mod get -u ./..."
eada236f8 Introduce a tree map for all content
e5329f13c Another benchmark rename
5b145ddc4 Rename the Edit benchmarks
3c568ad01 markup/highlight: Fix chroma highlight
54bdcaaca Refactor a benchmark to make it runnable as test
1622510a5 Add benchmark for content edits
56d0b6588 Add "go mod verify" to build scripts
75c3787fc Add git to Dockerfile
9babb1f0c deps: Update go.sum
8a5124d6b commands: Rename doWithCommandeer to cfgInit/cfgSetAndInit
898a0a96a deps: Update golibsass
3b721110d Shuffle test files before insertion
40ba7e6d6 Update to LibSass v3.6.3
4f43c9022 releaser: Prepare repository for 0.65.0-DEV
c327e75d0 releaser: Add release notes to /docs for release of 0.64.1
8bd8d4fe9 releaser: Bump versions for release of 0.64.1
ad7c38cd6 releaser: Add release notes for 0.64.1 [ci skip]
b78576fd3 hugofs: Fix mount with hole regression
18888e09b Fix bundle resource ordering regression
1e5eb8679 Merge commit '3c0036805d64fdd8290f1c4a31371780ff3ea365'
3c0036805 Squashed 'docs/' changes from bd0e15bb6..16753a78d
7f0ebd4a3 CONTRIBUTING: Fix note about CGO
23ea43180 Update Go version requirement
6a74cbe91 releaser: Prepare repository for 0.65.0-DEV
241db8f78 releaser: Add release notes to /docs for release of 0.64.0
7624ab028 releaser: Bump versions for release of 0.64.0
8490a0aa9 Update 0.64.0-relnotes.md
bd731d27b releaser: Add release notes for 0.64.0
80dd6ddde Fix module mount in sub folder
299731012 Mention a "no CGO rule"
2bbc865f7 commands: Fix config environment handling
0792cfa9f Update to Go 1.13.7 and Go 1.12.16
b3f0674b8 transform/livereloadinject: Add defer to livereload script tag
ef78a0d18 transform/livereloadinject: Don't use document.write to inject livereload
585958645 hubolig: Add a render hook whitespace test
2d159e9cc Do not render alias paginator pages for non-HTML outputs
f45cb3172 Fix base template handling with preceding comments
49ef64720 modules: Fix "hugo mod get -u" with no arguments
8f08cdd0a transform/livereloadinject: Inject livereload script right after head if possible
281abb18e deps: Update goldmark to v1.1.22
d8e685154 releaser: Prepare repository for 0.64.0-DEV
934ee21fa releaser: Add release notes to /docs for release of 0.63.2
c7427a50e releaser: Bump versions for release of 0.63.2
49e2931eb releaser: Add release notes for 0.63.2 [ci skip]
e8831a056 hubolib: Revert to .Type = "page" when empty
74b6c4e5f And now finally fix the 404 templates
8df5d76e7 Fix 404 with base template regression
8ae2c9c3d releaser: Prepare repository for 0.64.0-DEV
ce9aceb74 releaser: Add release notes to /docs for release of 0.63.1
fd32849bf releaser: Bump versions for release of 0.63.1
417f9ddf5 releaser: Add release notes for 0.63.1 [ci skip]
0df7bd62d deps: Make the build flags shared between sites
f441f6751 Fix baseof with regular define regression
7ed22e9fb Revert to minify v2.6.1
fb974ae87 releaser: Prepare repository for 0.64.0-DEV
745ddcbba releaser: Add release notes to /docs for release of 0.63.0
3b3f5a259 releaser: Bump versions for release of 0.63.0
d10ed683c Release 0.63.0
19e387d18 releaser: Add release notes for 0.63.0
cafb1d53c docs, output: Add base template lookup variant to docs.json
4f466db66 docs: Regen docs helper
17af79a03 Fix 0.62.1 server rebuild slowdown regression
2fefc0160 tpl/compare: Fix eq when > 2 args
0c251be66 Allow multiple arguments in ne/ge/gt/le/lt functions Treat op arg1 arg2 arg3 ... as (arg1 op arg2) && (arg1 op arg3) and so on for ne/ge/gt/le/lt.
836c24261 hugolib: Disable a test assertion on ARM
c6d650c8c tpl/tplimpl: Rework template management to get rid of concurrency issues
8585b388d deps: Update go-org
d61bee5e0 examples: Fix blog not building
21ca2e9ce Add support for newline characters in raw string shortcode
3efa1d812 deps: Update github.com/alecthomas/chroma
65ec8fe82 deps: Update minify to v2.7.2
d3e8ab2e3 deps: Update Goldmark to v1.1.21
da8145565 Allow raw string literals in shortcode params
0c0bb3728 deps: Update github.com/gohugoio/testmodBuilder
ddd75f212 hugolib: Some more benchmark adjustments
4ed6ebef4 hugolib: Adjust site benchmarks
94cfdf6be deps: Update direct dependencies
451380177 minifiers: Update to new CSS config
56354a63b deps: Update to Minify v2.7.0
b9b73a2f6 Revert "Add support for freebsd/arm64"
aead8108b Add support for freebsd/arm64
1cf235412 tpl: Put Go's internal template funcs in Hugo's map
df6e9efd8 Update releasenotes_writer.go
ea05c0e84 hugolib: Add a benchmark with lots of templates
273047b5b releaser: Prepare repository for 0.63.0-DEV
83e501849 releaser: Add release notes to /docs for release of 0.62.2
12230b689 releaser: Bump versions for release of 0.62.2
afdb180e2 releaser: Add release notes for 0.62.2 [ci skip]
196a9df58 hugolib: Fix relative .Page.GetPage from bundle
9b6e61464 markup/goldmark: Adjust auto ID space handling
d62ede8e9 docs: Document the new autoHeadingIDType setting
81b7e48a5 docs: Regenerate docshelper
16e7c1120 markup/goldmark: Add an optional Blackfriday auto ID strategy
8f071fc15 markup/goldmark: Make the autoID type config a string
469351d5b Merge commit '26f1458a2df6b55eee3a5de46f5fec23a43a7c7d'
26f1458a2 Squashed 'docs/' changes from 54f0e8776..bd0e15bb6
5ee1f0876 markup/goldmark: Simplify code
a82d2700f markup/goldmark: Make auto IDs GitHub compatible
ae816452b releaser: Prepare repository for 0.63.0-DEV
a1518704a releaser: Add release notes to /docs for release of 0.62.1
3a21a1708 releaser: Bump versions for release of 0.62.1
451746ddd releaser: Add release notes for 0.62.1 [ci skip]
ff6253bc7 Support files in content mounts
aa4ccb8a1 Update alpine base image in Dockerfile to 3.11
5509954c7 hugolib: Fix inline shortcode regression
6b59b64f0 releaser: Prepare repository for 0.63.0-DEV
6608f1557 releaser: Add release notes to /docs for release of 0.62.0
b361d9a46 releaser: Bump versions for release of 0.62.0
592a7d104 Release 0.62.0
93216fda7 releaser: Add release notes for 0.62.0
8a4005cf2 Squashed 'docs/' changes from af4b7ac5b..54f0e8776
740b72558 Merge commit '8a4005cf2b0ef34265ff8051a6b76226685fc226'
1fb17be9a deps: Update Goldmark to v1.1.18
51d89dab1 deps: Update go-org
c8bfe47c6 docs: More on hooks
50cc7fe54 tpl: Do not return any value in errorf
1773d71d5 tpl: Add a warnf template func
8a58ebb31 hugolib: Improve error and reload handling  of hook templates in server mode
045368381 deps: Update to Goldmark v1.1.17
55c29d4de docs: Regen docshelper
ccb1bf1ab tpl/collections: Some more params merge adjustments
a67d95fe1 Preserve HTML Text for image render hooks
ad6504e6b Fix abs path handling in module mounts
158e7ec20 Fix incorrect MIME type from image/jpg to image/jpeg
eef934ae7 deps: Update Goldmark
00954c5d1 Preserve HTML Text for link render hooks
1b785a7a6 tpl/collections: Fix merge vs Params
d20ca3700 tpl: Get rid of the custom template truth logic
3e316155c docs: Footnote
e625088ef Add render template hooks for links and images
67f3aa72c Merge commit '2e711a28c71e8667258e5ab824f9b9a71c261b0a'
2e711a28c Squashed 'docs/' changes from 51c4f3184..af4b7ac5b
0947cf958 Enhance accessibility to issues
3c24ae030 hugolib: Fix test
03d6960a1 deps: Re-introduce the correct version of Goldmark
92c7f7ab8 tpl: Add some comments
a03c631c4 Rework template handling for function and map lookups
167c01530 Create lightweight forks of text/template and html/template
4c804319f markup/tableofcontents: Add config option for ordered list
186a5ebfc releaser: Prepare repository for 0.62.0-DEV
9b445b9da releaser: Add release notes to /docs for release of 0.61.0
3af783966 releaser: Bump versions for release of 0.61.0
31f322a61 Release 0.61.0
38c60f2be releaser: Add release notes for 0.61.0
3cc217a65 deps: Update Goldmark
5f8c2818f Deprecate Ace and Amber
c5f2f5837 markup: Add typographic chars from goldmark to toc
0efb00c2a tpl/partials: Allow any key type in partialCached
40a092b06 markup: Reimplement pygmentsCodefencesGuessSyntax
d534ce942 deps: Update Goldmark
a6b6b135a releaser: Prepare repository for 0.61.0-DEV
960667561 releaser: Add release notes to /docs for release of 0.60.1
6c0556308 releaser: Bump versions for release of 0.60.1
f5250ec09 releaser: Add release notes for 0.60.1 [ci skip]
86a5b59f6 deps: Update minify
bb80fff69 Fix headless regression
347cfb0c1 deps: Update Goldmark
b60ae35b9 hugolib: Fix timeout number parsing for YAML/JSON config
003ba5b10 releaser: Prepare repository for 0.61.0-DEV
f2dea9b03 releaser: Add release notes to /docs for release of 0.60.0
763b0dcb9 releaser: Bump versions for release of 0.60.0
b2969b7a7 Release 0.60.0
60fea562c releaser: Add release notes for 0.60.0
14a1de14f modules: Add some more output if modules download takes time
dcde8af8c Add some internal template image tests
c91970c08 tpl/tplimpl: Featured and Site.Params image support for Schema
dd1e5fc0b hugolib: Disable test assertion on Windows
b0c7749fa deps: Update Goldmark
25a6b3369 tpl/tplimpl: Add support for featured and global image to OpenGraph template
017664392 hugolib: Fix cascade in server mode
da5352359 hugolib: Fix .Sections vs siblings
96f09659c Fix language handling in ExecuteAsTemplate
03b369e67 hugolib: Adjust .Site.Permalinks deprecation level
69fd1c60d hugolib: Remove .Site.Ref/RelRef
33d733300 Deprecate mmark
e3451371b hugolib: Fix recently broken timeout config
5c5231e09 commands: Use HUGO_ENV if set
d6f7a9e28 resources/images: Make the image cache more robust
031f948f8 Update to Go 1.13.4 and Go 1.12.13
71597bd1a mage: Restore -v behaviour
a8e9f8389 hugolib: Increase default timeout value to 30s
03e2d7462 hubolig: Fix potential data race
ea96e1dc5 Revert "deps: Update Goldmark"
822191286 deps: Update Goldmark
8beaa4c25 mage: Fix mage check on darwin and add debugging output
8a89b8582 commands: Fix jekyll metadata import on individual posts
e1175ae83 Improve grammar in README.md
a2d77f4a8 markup/highlight: Replace the temp for with a dependency
b546417a2 deps: Update Chroma
4175b0468 deps: Update Goldmark
55f951cbb markup/tableofcontents: GoDoc etc.
20f351ee4 Minor cleanups
bfb9613a1 Add Goldmark as the new default markdown handler
a3fe5e5e3 Fix Params case handling in the index, sort and where func
cd07e6d57 Fix GetPage Params case issue
628efd6e2 common/para: Add parallel task executor helper
2dcc1318d Add some more output if loading modules takes time
14a985f8a Update homepage.md
0cf85c071 hugolib: Add a benchmark
20ec9fa2b modules: Do not check for remote modules if main project is vendored
812688fc2 hugolib: Fix emoji handling inside shortcodes
a2670bf46 tpl/collections: Allow dict to create nested structures
1a36ce9b0 commands: Add hint when dir not empty
90d0cdf23 tpl/collections: Add collections.Reverse
95ef93be6 tpl/collections: Make index work with slice as the last arg
79355043e Merge commit 'efc0b1bb6c6564f54d596467dbc6a18cb206954e'
efc0b1bb6 Squashed 'docs/' changes from 723da4a37..51c4f3184
d1d1f240a hubolib: Headless bundles should not be listed in .Pages
70a1aa345 Support Go time format strings in permalinks
cafecca44 travis: Increase timeout to 30000 for mage -v check
5f6b6ec68 Prepare for Goldmark
366ee4d8d deps: Update quicktest
c26d00db6 hugolib: Fix ref/relref anhcor handling
8483b53ae deps: Update to Chroma v0.6.9 for Java lexer fix
9f46a72c7 tpl/collections: Add some index map test cases
9abd39678 helpers: Use pointer receiver for ContentSpec
ad4c56b55 travis: Allow arm64 to fail
3717db1f9 minifiers: Add a JSON roundtrip test
ae4fde086 Update .travis.yml for arm64 support, etc.
c6d69d0c9 mage: Skip Test386 on non-AMD64 architectures
c3d433af5 Update past go-cmp's checkptr fix
07a203406 releaser: Prepare repository for 0.60.0-DEV
d5dab232c releaser: Add release notes to /docs for release of 0.59.1
e04a22c5e releaser: Bump versions for release of 0.59.1
d14265da8 releaser: Add release notes for 0.59.1 [ci skip]
33c474b9b hugofs: Fix crash in multilingual content fs
ed2682325 Dockerfile: Switch to mage builds, various optimizations
66fe68ffc resources/images: Add exception for new test image
c5e1e8241 Adjust benchmark templates
baa975082 deps: Update to Chroma v0.6.8 to fix a crash
3e8b5a5c0 deps: Update quicktest
e6aa6edb4 Do not attempt to build if there is no config file
6bcc5ad8b releaser: Prepare repository for 0.60.0-DEV
1dd0c69c7 releaser: Add release notes to /docs for release of 0.59.0
b084af4bf releaser: Bump versions for release of 0.59.0
0237d4595 Release 0.59.0
109ac877c releaser: Add release notes for 0.59.0
5ac0f751a Squashed 'docs/' changes from 0584815c8..723da4a37
de8ca7e4d Merge commit '5ac0f751aa47e52625662215f66efa99a6abfc2e'
5070ba6c9 Squashed 'docs/' changes from fdea5430f..0584815c8
ec5962278 Merge commit '5070ba6c9e6c492deade3c30cfe769b9dbf7151d'
b9bd35d72 Squashed 'docs/' content from commit fdea5430f
27aef3f1f Merge commit 'b9bd35d72e14932fb6588ff62b90cddef0a060fc' as 'docs'

git-subtree-dir: docs
git-subtree-split: 9b06f951e61081c503927bb772b75f93504aeba8
---
 .cspell.json                                  |  82 +-
 .../gohugoio/gohugoioTheme/data/sponsors.toml |  14 +-
 .../layouts/_default/_markup/render-link.html |  14 +-
 .../gohugoioTheme/layouts/index.rss.xml       |  98 ++-
 .../gohugoioTheme/layouts/news/list.html      |  15 +-
 .../gohugoioTheme/layouts/news/list.xml       |  68 ++
 .../open-source-involvement.html              |   2 +-
 .../partials/home-page-sections/sponsors.html |  40 +-
 .../partials/utilities/get-remote-data.html   |  23 +
 .../layouts/shortcodes/eturl.html             |  36 +
 .../gohugoioTheme/layouts/shortcodes/img.html |   8 +-
 .../layouts/shortcodes/new-in.html            |   4 +-
 .../static/images/GitHub-Mark-64px.png        | Bin 924 -> 0 bytes
 .../gohugoioTheme/static/images/Github.svg    |   1 +
 _vendor/modules.txt                           |   2 +-
 .../examples/zion-national-park-grayscale.jpg | Bin 42537 -> 0 bytes
 config/_default/menus/menus.en.toml           |  44 +-
 content/en/_index.md                          |   2 +-
 content/en/about/_index.md                    |   8 +-
 content/en/about/benefits.md                  |  36 -
 content/en/about/features.md                  | 190 ++--
 content/en/about/introduction.md              |  39 +
 content/en/about/license.md                   |   6 +-
 .../en/about/{hugo-and-gdpr.md => privacy.md} |  26 +-
 .../about/{security-model.md => security.md}  |  19 +-
 content/en/about/what-is-hugo.md              |  57 --
 content/en/commands/hugo.md                   |   3 +-
 content/en/commands/hugo_completion.md        |   1 +
 content/en/commands/hugo_completion_bash.md   |   1 +
 content/en/commands/hugo_completion_fish.md   |   1 +
 .../en/commands/hugo_completion_powershell.md |   1 +
 content/en/commands/hugo_completion_zsh.md    |   1 +
 content/en/commands/hugo_config.md            |  16 +-
 content/en/commands/hugo_config_mounts.md     |  12 +-
 content/en/commands/hugo_convert.md           |   1 +
 content/en/commands/hugo_convert_toJSON.md    |   1 +
 content/en/commands/hugo_convert_toTOML.md    |   1 +
 content/en/commands/hugo_convert_toYAML.md    |   1 +
 content/en/commands/hugo_deploy.md            |   1 +
 content/en/commands/hugo_env.md               |   1 +
 content/en/commands/hugo_gen.md               |   1 +
 content/en/commands/hugo_gen_chromastyles.md  |  10 +-
 content/en/commands/hugo_gen_doc.md           |   1 +
 content/en/commands/hugo_gen_man.md           |   1 +
 content/en/commands/hugo_import.md            |   1 +
 content/en/commands/hugo_import_jekyll.md     |   1 +
 content/en/commands/hugo_list.md              |  10 +-
 content/en/commands/hugo_list_all.md          |   5 +-
 content/en/commands/hugo_list_drafts.md       |   5 +-
 content/en/commands/hugo_list_expired.md      |   5 +-
 content/en/commands/hugo_list_future.md       |   5 +-
 content/en/commands/hugo_list_published.md    |  45 +
 content/en/commands/hugo_mod.md               |   1 +
 content/en/commands/hugo_mod_clean.md         |  16 +-
 content/en/commands/hugo_mod_get.md           |   1 +
 content/en/commands/hugo_mod_graph.md         |  14 +-
 content/en/commands/hugo_mod_init.md          |  12 +-
 content/en/commands/hugo_mod_npm.md           |   1 +
 content/en/commands/hugo_mod_npm_pack.md      |  12 +-
 content/en/commands/hugo_mod_tidy.md          |  12 +-
 content/en/commands/hugo_mod_vendor.md        |  12 +-
 content/en/commands/hugo_mod_verify.md        |  14 +-
 content/en/commands/hugo_new.md               |   1 +
 content/en/commands/hugo_new_content.md       |  18 +-
 content/en/commands/hugo_new_site.md          |   1 +
 content/en/commands/hugo_new_theme.md         |   1 +
 content/en/commands/hugo_server.md            |  95 +-
 content/en/commands/hugo_server_trust.md      |   1 +
 content/en/commands/hugo_version.md           |   1 +
 .../en/content-management/_common/_index.md   |   2 +-
 content/en/content-management/_index.md       |   4 +-
 content/en/content-management/archetypes.md   |  33 +-
 .../en/content-management/build-options.md    |  32 +-
 content/en/content-management/comments.md     |  42 +-
 .../en/content-management/content-adapters.md | 355 ++++++++
 .../en/content-management/cross-references.md |  18 +-
 content/en/content-management/data-sources.md | 126 +++
 content/en/content-management/diagrams.md     |  24 +-
 content/en/content-management/formats.md      | 166 ++--
 content/en/content-management/front-matter.md | 477 +++++++---
 .../image-processing/index.md                 |  26 +-
 .../content-management/markdown-attributes.md | 115 +++
 content/en/content-management/mathematics.md  |  17 +-
 content/en/content-management/menus.md        |   5 +-
 content/en/content-management/multilingual.md | 168 +---
 .../content-management/organization/index.md  |  33 +-
 content/en/content-management/page-bundles.md | 214 ++---
 .../en/content-management/page-resources.md   | 110 ++-
 content/en/content-management/related.md      |   2 +-
 content/en/content-management/sections.md     |   5 +-
 content/en/content-management/shortcodes.md   | 295 ++++---
 content/en/content-management/static-files.md |  68 --
 content/en/content-management/summaries.md    | 137 +--
 .../content-management/syntax-highlighting.md |   8 +-
 content/en/content-management/taxonomies.md   |  27 +-
 content/en/content-management/toc.md          | 117 ---
 content/en/content-management/urls.md         |  46 +-
 content/en/contribute/_index.md               |   4 +-
 content/en/contribute/development.md          |  30 +-
 content/en/contribute/documentation.md        |  82 +-
 content/en/functions/_common/_index.md        |   2 +-
 .../_common/go-html-template-package.md       |  14 +
 content/en/functions/_index.md                |   4 +-
 content/en/functions/collections/After.md     |   4 +-
 .../en/functions/collections/Complement.md    |   2 +-
 .../en/functions/collections/Dictionary.md    |  35 +-
 content/en/functions/collections/First.md     |   2 +-
 .../en/functions/collections/IndexFunction.md |  86 +-
 content/en/functions/collections/KeyVals.md   |   6 +-
 .../en/functions/collections/NewScratch.md    |   4 +-
 content/en/functions/collections/Querify.md   |  25 +-
 content/en/functions/collections/Slice.md     |  10 +-
 content/en/functions/collections/Sort.md      |   2 +-
 content/en/functions/collections/Where.md     |  16 +-
 content/en/functions/compare/Default.md       |   2 +-
 content/en/functions/compare/Eq.md            |   2 +
 content/en/functions/compare/Ge.md            |   8 +
 content/en/functions/compare/Gt.md            |   8 +
 content/en/functions/compare/Le.md            |   8 +
 content/en/functions/compare/Lt.md            |   8 +
 content/en/functions/compare/Ne.md            |   2 +
 content/en/functions/data/GetCSV.md           |  28 +-
 content/en/functions/data/GetJSON.md          |  28 +-
 content/en/functions/debug/Dump.md            |  33 +-
 content/en/functions/debug/Timer.md           |   2 +-
 content/en/functions/diagrams/Goat.md         |  16 +-
 content/en/functions/fmt/Errorf.md            |   5 +-
 content/en/functions/fmt/Erroridf.md          |  11 +-
 content/en/functions/fmt/Warnf.md             |   7 +-
 content/en/functions/fmt/Warnidf.md           |  43 +
 content/en/functions/fmt/_common/_index.md    |   2 +-
 content/en/functions/global/page.md           |   6 +-
 content/en/functions/global/site.md           |  10 +-
 .../functions/go-template/_common/_index.md   |   2 +-
 content/en/functions/go-template/define.md    |   4 +-
 content/en/functions/go-template/else.md      |   6 +-
 content/en/functions/go-template/end.md       |  10 +-
 content/en/functions/go-template/if.md        |   2 +-
 content/en/functions/go-template/range.md     |   8 +-
 content/en/functions/go-template/return.md    |   2 +-
 content/en/functions/go-template/template.md  |   4 +-
 content/en/functions/go-template/with.md      |   2 +-
 content/en/functions/hugo/Generator.md        |   2 +-
 content/en/functions/hugo/IsMultihost.md      |  40 +
 content/en/functions/hugo/IsMultilingual.md   |  37 +
 content/en/functions/hugo/Version.md          |   2 +-
 content/en/functions/hugo/WorkingDir.md       |   2 +
 content/en/functions/images/Config.md         |   6 +-
 content/en/functions/images/Dither.md         | 162 ++++
 content/en/functions/images/Filter.md         |   2 +-
 content/en/functions/images/Padding.md        |   2 +-
 content/en/functions/images/Process.md        |   2 +-
 content/en/functions/images/UnsharpMask.md    |   6 +-
 content/en/functions/images/_common/_index.md |   2 +-
 .../images/_common/apply-image-filter.md      |   4 +-
 content/en/functions/inflect/Singularize.md   |   2 -
 content/en/functions/js/Build.md              |  23 +
 .../en/functions/lang/FormatNumberCustom.md   |   2 +-
 content/en/functions/math/Counter.md          |   4 +-
 content/en/functions/os/Getenv.md             |   2 +-
 content/en/functions/partials/Include.md      |  17 +-
 .../en/functions/partials/IncludeCached.md    |   2 +-
 content/en/functions/resources/ByType.md      |   2 +-
 content/en/functions/resources/Concat.md      |   6 +-
 content/en/functions/resources/Copy.md        |   2 -
 .../functions/resources/ExecuteAsTemplate.md  |   6 +-
 content/en/functions/resources/FromString.md  |  24 +-
 content/en/functions/resources/Get.md         |   2 +-
 content/en/functions/resources/GetMatch.md    |   2 +-
 content/en/functions/resources/GetRemote.md   |  31 +-
 content/en/functions/resources/Match.md       |   2 +-
 content/en/functions/resources/ToCSS.md       |  10 +-
 .../en/functions/resources/_common/_index.md  |   2 +-
 content/en/functions/safe/CSS.md              |  48 +-
 content/en/functions/safe/HTML.md             |  43 +-
 content/en/functions/safe/HTMLAttr.md         |  53 +-
 content/en/functions/safe/JS.md               |  50 +-
 content/en/functions/safe/JSStr.md            |  29 +-
 content/en/functions/safe/URL.md              |  72 +-
 .../en/functions/strings/ContainsNonSpace.md  |   4 +-
 content/en/functions/strings/CountRunes.md    |   2 +-
 .../strings/Diff/diff-screen-capture.png      | Bin 0 -> 7290 bytes
 content/en/functions/strings/Diff/index.md    |  33 +
 .../en/functions/strings/FindRESubmatch.md    |   2 +-
 content/en/functions/strings/RuneCount.md     |   2 +-
 content/en/functions/strings/SliceString.md   |  20 +-
 content/en/functions/strings/Split.md         |   2 +-
 content/en/functions/strings/Substr.md        |  13 +-
 content/en/functions/strings/Trim.md          |   2 +-
 content/en/functions/strings/Truncate.md      |   2 +-
 content/en/functions/time/Duration.md         |   2 +-
 content/en/functions/time/Now.md              |   2 +-
 content/en/functions/time/ParseDuration.md    |   2 +-
 content/en/functions/time/_common/_index.md   |   2 +-
 .../en/functions/transform/HTMLUnescape.md    |   2 +-
 content/en/functions/transform/Markdownify.md |   6 +-
 content/en/functions/transform/Unmarshal.md   |  31 +-
 content/en/functions/urls/AbsLangURL.md       |  34 +-
 content/en/functions/urls/AbsURL.md           |  36 +-
 content/en/functions/urls/Anchorize.md        |   4 +-
 content/en/functions/urls/JoinPath.md         |   2 +-
 content/en/functions/urls/Parse.md            |   1 +
 content/en/functions/urls/RelLangURL.md       |  38 +-
 content/en/functions/urls/RelURL.md           |  40 +-
 content/en/functions/urls/_common/_index.md   |   2 +-
 .../urls/_common/anchorize-vs-urlize.md       |   4 +-
 content/en/getting-started/_index.md          |   4 +-
 .../getting-started/configuration-markup.md   | 282 ++++--
 content/en/getting-started/configuration.md   | 243 +++++-
 .../en/getting-started/directory-structure.md |  57 +-
 .../build-websites-with-hugo.png              | Bin 0 -> 18058 bytes
 .../external-learning-resources/hia.jpg       | Bin 66768 -> 0 bytes
 .../hugo-in-action.png                        | Bin 0 -> 22891 bytes
 .../external-learning-resources/index.md      |  75 +-
 content/en/getting-started/glossary.md        | 138 ++-
 content/en/getting-started/quick-start.md     |  12 +-
 content/en/getting-started/usage.md           |  14 +-
 content/en/hosting-and-deployment/_index.md   |   4 +-
 .../hosting-on-github/index.md                |  13 +-
 .../hosting-on-gitlab.md                      |   6 +-
 .../hosting-on-netlify.md                     | 145 ----
 .../hosting-on-netlify/index.md               | 129 +++
 .../hosting-on-netlify/netlify-step-02.png    | Bin 0 -> 8618 bytes
 .../hosting-on-netlify/netlify-step-03.png    | Bin 0 -> 15960 bytes
 .../hosting-on-netlify/netlify-step-04.png    | Bin 0 -> 10563 bytes
 .../hosting-on-netlify/netlify-step-05.png    | Bin 0 -> 5097 bytes
 .../hosting-on-netlify/netlify-step-06.png    | Bin 0 -> 24253 bytes
 .../hosting-on-netlify/netlify-step-07.png    | Bin 0 -> 2952 bytes
 .../hosting-on-netlify/netlify-step-08.png    | Bin 0 -> 8539 bytes
 .../hosting-on-netlify/netlify-step-09.png    | Bin 0 -> 11745 bytes
 .../hosting-on-netlify/netlify-step-10.png    | Bin 0 -> 7194 bytes
 .../hosting-on-netlify/netlify-step-11.png    | Bin 0 -> 2330 bytes
 .../hosting-on-netlify/netlify-step-12.png    | Bin 0 -> 5795 bytes
 .../hosting-on-netlify/netlify-step-13.png    | Bin 0 -> 10431 bytes
 content/en/hugo-modules/_index.md             |   6 +-
 content/en/hugo-modules/configuration.md      |   2 +-
 content/en/hugo-modules/use-modules.md        |   2 +-
 content/en/hugo-pipes/_index.md               |   4 +-
 content/en/hugo-pipes/js.md                   |  27 +-
 .../en/hugo-pipes/transpile-sass-to-css.md    |   8 +-
 .../_common/03-prebuilt-binaries.md           |   2 +-
 content/en/installation/_common/_index.md     |   2 +-
 content/en/installation/_index.md             |   4 +-
 content/en/installation/linux.md              |  21 +-
 content/en/methods/_common/_index.md          |   2 +-
 ...next-prev-on-page-vs-next-prev-on-pages.md |  16 +-
 content/en/methods/_index.md                  |   5 +-
 content/en/methods/menu-entry/KeyName.md      |   2 +-
 content/en/methods/menu-entry/Menu.md         |   4 +-
 content/en/methods/menu-entry/Name.md         |   4 +-
 content/en/methods/menu-entry/Page.md         |   6 +-
 content/en/methods/menu-entry/Title.md        |   6 +-
 content/en/methods/menu-entry/URL.md          |   2 +-
 content/en/methods/menu-entry/Weight.md       |   2 +-
 .../en/methods/menu-entry/_common/_index.md   |   2 +-
 content/en/methods/menu/ByName.md             |   2 +-
 content/en/methods/menu/ByWeight.md           |   2 +-
 content/en/methods/page/AllTranslations.md    |   8 +-
 content/en/methods/page/BundleType.md         |   2 +-
 content/en/methods/page/CodeOwners.md         |   2 +-
 content/en/methods/page/Content.md            |   2 +-
 content/en/methods/page/Data.md               |   2 +-
 content/en/methods/page/Date.md               |   4 +-
 content/en/methods/page/Description.md        |   4 +-
 content/en/methods/page/ExpiryDate.md         |   4 +-
 content/en/methods/page/File.md               |  35 +-
 content/en/methods/page/Fragments.md          |  12 +-
 content/en/methods/page/FuzzyWordCount.md     |   2 +-
 content/en/methods/page/GetPage.md            |   4 +-
 content/en/methods/page/HeadingsFiltered.md   |   2 +-
 content/en/methods/page/InSection.md          |   4 +-
 content/en/methods/page/IsAncestor.md         |   6 +-
 content/en/methods/page/IsDescendant.md       |   6 +-
 content/en/methods/page/Keywords.md           |   6 +-
 content/en/methods/page/Language.md           |   4 +-
 content/en/methods/page/Lastmod.md            |   6 +-
 content/en/methods/page/LinkTitle.md          |   2 +-
 content/en/methods/page/NextInSection.md      |   8 +-
 content/en/methods/page/Pages.md              |   2 +-
 content/en/methods/page/Paginator.md          |   2 +-
 content/en/methods/page/Param.md              |   1 +
 content/en/methods/page/Params.md             |   5 +-
 content/en/methods/page/Parent.md             |   2 +-
 content/en/methods/page/Path.md               | 157 ++++
 content/en/methods/page/Plain.md              |   4 +-
 content/en/methods/page/PlainWords.md         |   4 +-
 content/en/methods/page/PrevInSection.md      |   8 +-
 content/en/methods/page/PublishDate.md        |   4 +-
 content/en/methods/page/RawContent.md         |   4 +-
 content/en/methods/page/RegularPages.md       |   2 +-
 content/en/methods/page/Render.md             |   4 +-
 content/en/methods/page/RenderShortcodes.md   |  13 +-
 content/en/methods/page/RenderString.md       |   2 +-
 content/en/methods/page/Resources.md          |  10 +-
 content/en/methods/page/Scratch.md            |  27 +-
 content/en/methods/page/Section.md            |   4 +-
 content/en/methods/page/Sections.md           |   4 +-
 content/en/methods/page/Site.md               |   2 +-
 content/en/methods/page/Sitemap.md            |  15 +-
 content/en/methods/page/Sites.md              |   4 +-
 content/en/methods/page/Store.md              |  27 +-
 content/en/methods/page/Summary.md            |   8 +-
 content/en/methods/page/TableOfContents.md    |   3 +-
 content/en/methods/page/Title.md              |  16 +-
 content/en/methods/page/Translations.md       |   8 +-
 content/en/methods/page/Truncated.md          |   4 +-
 content/en/methods/page/WordCount.md          |   2 +-
 content/en/methods/page/_common/_index.md     |   2 +-
 .../page/_common/output-format-definition.md  |   2 +-
 content/en/methods/pager/First.md             |  44 +
 content/en/methods/pager/HasNext.md           |  72 ++
 content/en/methods/pager/HasPrev.md           |  72 ++
 content/en/methods/pager/Last.md              |  44 +
 content/en/methods/pager/Next.md              |  44 +
 content/en/methods/pager/NumberOfElements.md  |  25 +
 content/en/methods/pager/PageGroups.md        |  29 +
 content/en/methods/pager/PageNumber.md        |  31 +
 content/en/methods/pager/PageSize.md          |  24 +
 content/en/methods/pager/Pagers.md            |  30 +
 content/en/methods/pager/Pages.md             |  22 +
 content/en/methods/pager/Prev.md              |  44 +
 .../en/methods/pager/TotalNumberOfElements.md |  25 +
 content/en/methods/pager/TotalPages.md        |  41 +
 content/en/methods/pager/URL.md               |  39 +
 content/en/methods/pager/_index.md            |  14 +
 content/en/methods/pages/_common/_index.md    |   2 +-
 content/en/methods/resource/Colors.md         | 164 +++-
 content/en/methods/resource/Content.md        |   2 +-
 content/en/methods/resource/Data.md           |   4 +-
 content/en/methods/resource/Err.md            |   2 +-
 content/en/methods/resource/Exif.md           |   4 +-
 content/en/methods/resource/Filter.md         |   2 +-
 content/en/methods/resource/Key.md            |   7 +-
 content/en/methods/resource/Name.md           |  63 +-
 content/en/methods/resource/Params.md         |   2 +-
 content/en/methods/resource/Permalink.md      |   1 -
 content/en/methods/resource/Process.md        |  10 +-
 content/en/methods/resource/Publish.md        |   1 -
 content/en/methods/resource/RelPermalink.md   |   1 -
 content/en/methods/resource/Title.md          |  58 +-
 content/en/methods/resource/_common/_index.md |   2 +-
 content/en/methods/shortcode/Get.md           |  22 +-
 content/en/methods/shortcode/Inner.md         |  20 +-
 content/en/methods/shortcode/InnerDeindent.md |   8 +-
 content/en/methods/shortcode/IsNamedParams.md |   4 +-
 content/en/methods/shortcode/Name.md          |   8 +-
 content/en/methods/shortcode/Ordinal.md       |   4 +-
 content/en/methods/shortcode/Params.md        |   6 +-
 content/en/methods/shortcode/Parent.md        |   6 +-
 content/en/methods/shortcode/Position.md      |   8 +-
 content/en/methods/shortcode/Scratch.md       |   4 +-
 content/en/methods/shortcode/Site.md          |   2 +-
 content/en/methods/site/AllPages.md           |   2 +-
 content/en/methods/site/BaseURL.md            |   8 +-
 content/en/methods/site/Data.md               |  12 +-
 content/en/methods/site/DisqusShortname.md    |   2 +-
 content/en/methods/site/GetPage.md            |   2 +-
 content/en/methods/site/GoogleAnalytics.md    |   2 +-
 content/en/methods/site/IsDevelopment.md      |   2 +-
 content/en/methods/site/IsMultiLingual.md     |   8 +-
 content/en/methods/site/IsServer.md           |   2 +-
 content/en/methods/site/Language.md           |  14 +-
 content/en/methods/site/Languages.md          |   4 +-
 content/en/methods/site/LastChange.md         |  12 +-
 content/en/methods/site/Lastmod.md            |  23 +
 content/en/methods/site/Menus.md              |   6 +-
 content/en/methods/site/Pages.md              |   2 +-
 content/en/methods/site/Params.md             |   4 +-
 content/en/methods/site/Sites.md              |   6 +-
 content/en/methods/site/Taxonomies.md         |   2 +-
 content/en/methods/taxonomy/Alphabetical.md   |   2 +-
 content/en/methods/taxonomy/ByCount.md        |   2 +-
 content/en/methods/taxonomy/Get.md            |   4 +-
 content/en/methods/taxonomy/Page.md           |  26 +
 content/en/methods/taxonomy/_common/_index.md |   2 +-
 .../taxonomy/_common/get-a-taxonomy-object.md |  10 +-
 .../ordered-taxonomy-element-methods.md       |   2 +-
 content/en/methods/time/Format.md             |   4 +-
 content/en/methods/time/Round.md              |  26 +
 content/en/methods/time/Truncate.md           |  24 +
 content/en/methods/time/YearDay.md            |   2 +-
 content/en/news/_index.md                     |   5 +-
 content/en/quick-reference/_index.md          |   4 +-
 content/en/quick-reference/emojis.md          |  10 +-
 .../en/quick-reference/page-collections.md    |   2 +-
 .../_common/_index.md                         |   2 +-
 content/en/render-hooks/_common/pageinner.md  |  42 +
 content/en/render-hooks/_index.md             |  17 +
 content/en/render-hooks/code-blocks.md        | 152 ++++
 content/en/render-hooks/headings.md           |  79 ++
 content/en/render-hooks/images.md             | 163 ++++
 content/en/render-hooks/introduction.md       |  85 ++
 content/en/render-hooks/links.md              | 133 +++
 content/en/showcase/forestry/index.md         |   2 +-
 content/en/showcase/keycdn/index.md           |   2 +-
 .../index.md                                  |   2 +-
 content/en/templates/404.md                   |  70 +-
 content/en/templates/_index.md                |   4 +-
 content/en/templates/base.md                  |   2 +-
 content/en/templates/data-templates.md        | 177 ----
 content/en/templates/embedded.md              | 223 +++++
 content/en/templates/homepage.md              |  11 +-
 content/en/templates/internal.md              | 221 -----
 content/en/templates/introduction.md          | 821 ++++++++----------
 content/en/templates/lists/index.md           |  50 +-
 content/en/templates/menu-templates.md        |   8 +-
 content/en/templates/output-formats.md        |  74 +-
 content/en/templates/pagination.md            |  13 +-
 content/en/templates/partials.md              |   4 +-
 content/en/templates/render-hooks.md          | 183 ----
 content/en/templates/robots.md                |   5 +-
 content/en/templates/rss.md                   |  13 +-
 content/en/templates/section-templates.md     |  34 +-
 content/en/templates/shortcode-templates.md   | 108 ++-
 content/en/templates/single-page-templates.md |   8 -
 content/en/templates/sitemap-template.md      |  27 +-
 content/en/templates/taxonomy-templates.md    | 107 +--
 content/en/templates/views.md                 |  12 +-
 content/en/tools/_index.md                    |   4 +-
 content/en/tools/editors.md                   |   2 -
 content/en/tools/front-ends.md                |   8 +-
 content/en/tools/migrations.md                |   5 +-
 content/en/tools/other.md                     |  19 +-
 content/en/tools/search.md                    |   4 +-
 content/en/troubleshooting/_index.md          |   4 +-
 content/en/troubleshooting/audit/index.md     |   2 +-
 content/en/troubleshooting/faq.md             |  49 +-
 content/en/troubleshooting/inspection.md      |  38 +-
 content/en/troubleshooting/logging.md         |  16 +
 content/en/troubleshooting/performance.md     |  26 +-
 .../_common/consistent-terminology.md         |  20 -
 content/en/variables/_index.md                |  16 -
 content/en/variables/file.md                  |  18 -
 content/en/variables/git.md                   |  18 -
 content/en/variables/menu-entry.md            |  16 -
 content/en/variables/page.md                  |  63 --
 content/en/variables/pages.md                 |  39 -
 content/en/variables/shortcode.md             |  16 -
 content/en/variables/site.md                  |  55 --
 content/en/variables/taxonomy.md              |  21 -
 data/docs.yaml                                | 199 ++++-
 data/embedded_template_urls.toml              |  36 +
 data/homepagetweets.toml                      | 102 +--
 data/page_filters.yaml                        |   2 +
 go.mod                                        |   2 +-
 go.sum                                        |   8 +-
 hugo.toml                                     |   2 +-
 layouts/_default/baseof.html                  | 124 ---
 layouts/partials/math.html                    |  16 -
 netlify.toml                                  |   2 +-
 .../netlify-add-new-site.jpg                  | Bin 25643 -> 0 bytes
 .../netlify-authorize-added-permissions.jpg   | Bin 46713 -> 0 bytes
 .../netlify-create-new-site-step-1.jpg        | Bin 37855 -> 0 bytes
 .../netlify-create-new-site-step-2.jpg        | Bin 42233 -> 0 bytes
 .../netlify-create-new-site-step-3.jpg        | Bin 36939 -> 0 bytes
 .../netlify-deploy-published.jpg              | Bin 18930 -> 0 bytes
 .../netlify-deploying-site.gif                | Bin 783315 -> 0 bytes
 .../netlify-first-authorize.jpg               | Bin 44374 -> 0 bytes
 .../hosting-on-netlify/netlify-live-site.jpg  | Bin 37306 -> 0 bytes
 .../netlify-push-to-deploy.jpg                | Bin 21536 -> 0 bytes
 .../hosting-on-netlify/netlify-signup.jpg     | Bin 37118 -> 0 bytes
 .../{share => shared/branding}/hugo-tall.png  | Bin
 .../branding}/made-with-hugo-dark.png         | Bin
 .../branding}/made-with-hugo-long-dark.png    | Bin
 .../branding}/made-with-hugo-long.png         | Bin
 .../branding}/made-with-hugo.png              | Bin
 .../branding}/powered-by-hugo-dark.png        | Bin
 .../branding}/powered-by-hugo-long-dark.png   | Bin
 .../branding}/powered-by-hugo-long.png        | Bin
 .../branding}/powered-by-hugo.png             | Bin
 static/shared/examples/data/books.json        |  55 ++
 .../interpreting-the-french-revolution.webp   | Bin 0 -> 12852 bytes
 .../images/les-mis\303\251rables.webp"        | Bin 0 -> 13520 bytes
 ...ien-r\303\251gime-and-the-revolution.webp" | Bin 0 -> 6946 bytes
 .../images/the-hunchback-of-notre-dame.webp   | Bin 0 -> 23780 bytes
 475 files changed, 7683 insertions(+), 4608 deletions(-)
 create mode 100644 _vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.xml
 create mode 100644 _vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/utilities/get-remote-data.html
 create mode 100644 _vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/eturl.html
 delete mode 100644 _vendor/github.com/gohugoio/gohugoioTheme/static/images/GitHub-Mark-64px.png
 create mode 100644 _vendor/github.com/gohugoio/gohugoioTheme/static/images/Github.svg
 delete mode 100644 assets/images/examples/zion-national-park-grayscale.jpg
 delete mode 100644 content/en/about/benefits.md
 create mode 100644 content/en/about/introduction.md
 rename content/en/about/{hugo-and-gdpr.md => privacy.md} (84%)
 rename content/en/about/{security-model.md => security.md} (79%)
 delete mode 100644 content/en/about/what-is-hugo.md
 create mode 100644 content/en/commands/hugo_list_published.md
 create mode 100644 content/en/content-management/content-adapters.md
 create mode 100644 content/en/content-management/data-sources.md
 create mode 100644 content/en/content-management/markdown-attributes.md
 delete mode 100644 content/en/content-management/static-files.md
 delete mode 100644 content/en/content-management/toc.md
 create mode 100644 content/en/functions/_common/go-html-template-package.md
 create mode 100644 content/en/functions/fmt/Warnidf.md
 create mode 100644 content/en/functions/hugo/IsMultihost.md
 create mode 100644 content/en/functions/hugo/IsMultilingual.md
 create mode 100644 content/en/functions/images/Dither.md
 create mode 100644 content/en/functions/strings/Diff/diff-screen-capture.png
 create mode 100644 content/en/functions/strings/Diff/index.md
 create mode 100644 content/en/getting-started/external-learning-resources/build-websites-with-hugo.png
 delete mode 100644 content/en/getting-started/external-learning-resources/hia.jpg
 create mode 100644 content/en/getting-started/external-learning-resources/hugo-in-action.png
 delete mode 100644 content/en/hosting-and-deployment/hosting-on-netlify.md
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/index.md
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-02.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-03.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-04.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-05.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-06.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-07.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-08.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-09.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-10.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-11.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-12.png
 create mode 100644 content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-13.png
 create mode 100644 content/en/methods/page/Path.md
 create mode 100644 content/en/methods/pager/First.md
 create mode 100644 content/en/methods/pager/HasNext.md
 create mode 100644 content/en/methods/pager/HasPrev.md
 create mode 100644 content/en/methods/pager/Last.md
 create mode 100644 content/en/methods/pager/Next.md
 create mode 100644 content/en/methods/pager/NumberOfElements.md
 create mode 100644 content/en/methods/pager/PageGroups.md
 create mode 100644 content/en/methods/pager/PageNumber.md
 create mode 100644 content/en/methods/pager/PageSize.md
 create mode 100644 content/en/methods/pager/Pagers.md
 create mode 100644 content/en/methods/pager/Pages.md
 create mode 100644 content/en/methods/pager/Prev.md
 create mode 100644 content/en/methods/pager/TotalNumberOfElements.md
 create mode 100644 content/en/methods/pager/TotalPages.md
 create mode 100644 content/en/methods/pager/URL.md
 create mode 100644 content/en/methods/pager/_index.md
 create mode 100644 content/en/methods/site/Lastmod.md
 create mode 100644 content/en/methods/taxonomy/Page.md
 create mode 100644 content/en/methods/time/Round.md
 create mode 100644 content/en/methods/time/Truncate.md
 rename content/en/{variables => render-hooks}/_common/_index.md (79%)
 create mode 100644 content/en/render-hooks/_common/pageinner.md
 create mode 100644 content/en/render-hooks/_index.md
 create mode 100755 content/en/render-hooks/code-blocks.md
 create mode 100755 content/en/render-hooks/headings.md
 create mode 100755 content/en/render-hooks/images.md
 create mode 100755 content/en/render-hooks/introduction.md
 create mode 100755 content/en/render-hooks/links.md
 delete mode 100644 content/en/templates/data-templates.md
 create mode 100644 content/en/templates/embedded.md
 delete mode 100644 content/en/templates/internal.md
 delete mode 100644 content/en/templates/render-hooks.md
 delete mode 100644 content/en/variables/_common/consistent-terminology.md
 delete mode 100644 content/en/variables/_index.md
 delete mode 100644 content/en/variables/file.md
 delete mode 100644 content/en/variables/git.md
 delete mode 100644 content/en/variables/menu-entry.md
 delete mode 100644 content/en/variables/page.md
 delete mode 100644 content/en/variables/pages.md
 delete mode 100644 content/en/variables/shortcode.md
 delete mode 100644 content/en/variables/site.md
 delete mode 100644 content/en/variables/taxonomy.md
 create mode 100644 data/embedded_template_urls.toml
 delete mode 100644 layouts/_default/baseof.html
 delete mode 100644 layouts/partials/math.html
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-add-new-site.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-authorize-added-permissions.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-1.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-2.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-3.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploy-published.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploying-site.gif
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-first-authorize.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-live-site.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-push-to-deploy.jpg
 delete mode 100644 static/images/hosting-and-deployment/hosting-on-netlify/netlify-signup.jpg
 rename static/{share => shared/branding}/hugo-tall.png (100%)
 rename static/{share => shared/branding}/made-with-hugo-dark.png (100%)
 rename static/{share => shared/branding}/made-with-hugo-long-dark.png (100%)
 rename static/{share => shared/branding}/made-with-hugo-long.png (100%)
 rename static/{share => shared/branding}/made-with-hugo.png (100%)
 rename static/{share => shared/branding}/powered-by-hugo-dark.png (100%)
 rename static/{share => shared/branding}/powered-by-hugo-long-dark.png (100%)
 rename static/{share => shared/branding}/powered-by-hugo-long.png (100%)
 rename static/{share => shared/branding}/powered-by-hugo.png (100%)
 create mode 100644 static/shared/examples/data/books.json
 create mode 100644 static/shared/examples/images/interpreting-the-french-revolution.webp
 create mode 100644 "static/shared/examples/images/les-mis\303\251rables.webp"
 create mode 100644 "static/shared/examples/images/the-ancien-r\303\251gime-and-the-revolution.webp"
 create mode 100644 static/shared/examples/images/the-hunchback-of-notre-dame.webp

diff --git a/.cspell.json b/.cspell.json
index de66ff601c2..95e3ed5cee6 100644
--- a/.cspell.json
+++ b/.cspell.json
@@ -20,13 +20,11 @@
   ],
   "ignoreRegExpList": [
     "# cspell: ignore fenced code blocks",
-    "^(\\s*`{3,}).*[\\s\\S]*?^\\1",
+    "^(\\s*`{3,}).*[\\s\\S]*?^\\1$",
     "# cspell: ignore words joined with dot",
     "\\w+\\.\\w+",
     "# cspell: ignore strings within backticks",
     "`.+`",
-    "# cspell: ignore strings within single quotes",
-    "'.+'",
     "# cspell: ignore strings within double quotes",
     "\".+\"",
     "# cspell: ignore strings within brackets",
@@ -42,14 +40,11 @@
   ],
   "language": "en",
   "words": [
-    "antialiasing",
-    "codeowners",
     "composability",
     "configurators",
     "defang",
     "deindent",
     "downscale",
-    "downscaled",
     "downscaling",
     "exif",
     "geolocalized",
@@ -57,60 +52,99 @@
     "marshal",
     "marshaling",
     "multihost",
+    "multiplatfom",
     "performantly",
     "preconfigured",
     "prerendering",
     "redirection",
     "redirections",
-    "shortcode",
-    "shortcodes",
     "subexpression",
-    "subexpressions",
-    "suppressable",
+    "suppressible",
     "templating",
     "transpile",
-    "transpiles",
     "unmarshal",
-    "unmarshals",
     "unmarshaling",
+    "unmarshals",
+    "# ----------------------------------------------------------------------",
+    "# cspell: ignore hugo terminology",
+    "# ----------------------------------------------------------------------",
+    "attrlink",
+    "canonify",
+    "codeowners",
+    "eturl",
+    "getenv",
+    "gohugo",
+    "gohugoio",
+    "keyvals",
+    "leftdelim",
+    "linkify",
+    "numworkermultiplier",
+    "rightdelim",
+    "shortcode",
+    "stringifier",
+    "struct",
+    "toclevels",
+    "zgotmplz",
     "# ----------------------------------------------------------------------",
     "# cspell: ignore foreign language words",
     "# ----------------------------------------------------------------------",
     "bezpieczeństwo",
+    "buch",
+    "descripción",
     "dokumentation",
+    "erklärungen",
     "libros",
+    "mercredi",
     "miesiąc",
     "miesiąc",
-    "miesięcy",
+    "miesiąca",
+    "miesiące",
     "miesięcy",
     "misérables",
+    "mittwoch",
+    "muchos",
+    "novembre",
+    "otro",
+    "pocos",
+    "produkte",
     "projekt",
+    "prywatność",
+    "referenz",
     "régime",
     "# ----------------------------------------------------------------------",
-    "# cspell: ignore proper nouns",
+    "# cspell: ignore names",
     "# ----------------------------------------------------------------------",
+    "Atishay",
+    "Cosette",
     "Eliott",
+    "Furet",
     "Gregor",
     "Jaco",
+    "Lanczos",
+    "Ninke",
     "Noll",
     "Pastorius",
     "Samsa",
+    "Stucki",
+    "Thénardier",
     "# ----------------------------------------------------------------------",
     "# cspell: ignore operating systems and software packages",
     "# ----------------------------------------------------------------------",
     "asciidoctor",
     "brotli",
+    "cifs",
     "corejs",
     "disqus",
+    "docutils",
+    "dpkg",
     "doas",
     "eopkg",
     "gitee",
-    "gohugoio",
     "goldmark",
-    "KaTeX",
+    "katex",
     "kubuntu",
     "lubuntu",
-    "MathJax",
+    "mathjax",
     "nosql",
     "pandoc",
     "pkgin",
@@ -119,21 +153,19 @@
     "# ----------------------------------------------------------------------",
     "# cspell: ignore miscellaneous",
     "# ----------------------------------------------------------------------",
+    "achristie",
+    "ddmaurier",
     "dring",
-    "getenv",
-    "gohugo",
     "inor",
+    "jausten",
     "jdoe",
+    "jsmith",
     "milli",
     "rgba",
     "rsmith",
-    "stringifier",
-    "struct",
     "tdewolff",
     "tjones",
-    "toclevels",
-    "vals",
-    "xfeff",
-    "zgotmplz"
+    "wcag",
+    "xfeff"
   ]
 }
diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml b/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml
index c8986a8c6a1..8e485b2a4bb 100644
--- a/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml
+++ b/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml
@@ -6,13 +6,12 @@
     bgcolor      = "#ffffff"
 
 [[banners]]
-    name         = "CloudCannon"
-    link         = "https://cloudcannon.com/hugo-cms/"
-    logo         = "/images/sponsors/cloudcannon-white.svg"
-    utm_campaign = "HugoSponsorship"
-    utm_source   = "sponsor"
-    utm_content  = "gohugo"
-    bgcolor      = "#034AD8"
+    name         = "Route4Me"
+    link         = "https://route4me.com"
+    title        = "Route Planning & Route Optimization Software"
+    utm_campaign = "hugosponsor"
+    bgcolor      = "#334799"
+    link_attr    = "style='color: #ffffff; font-weight: bold; text-decoration: none; text-align: center'"
 
 [[banners]]
     name          = "Your Company?"
@@ -20,3 +19,4 @@
     utm_campaign  = "hugosponsor"
     show_on_hover = true
     bgcolor       = "#4e4f4f"
+    link_attr     = "style='color: #ffffff; font-weight: bold; text-decoration: none; text-align: center'"
diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-link.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-link.html
index 5583d53d7bc..9b6cad11471 100644
--- a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-link.html
+++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-link.html
@@ -1,4 +1,4 @@
-{{- /* Last modified: 2023-09-04T09:23:04-07:00 */}}
+{{- /* Last modified: 2024-04-26T13:54:00-07:00 */}}
 
 {{- /*
 Copyright 2023 Veriphor LLC
@@ -118,7 +118,7 @@
   {{- $attrs = merge $attrs (dict "rel" "external") }}
 {{- else }}
   {{- with $u.Path }}
-    {{- with $p := or ($.Page.GetPage .) ($.Page.GetPage (strings.TrimRight "/" .)) }}
+    {{- with $p := or ($.PageInner.GetPage .) ($.PageInner.GetPage (strings.TrimRight "/" .)) }}
       {{- /* Destination is a page. */}}
       {{- $href := .RelPermalink }}
       {{- with $u.RawQuery }}
@@ -137,7 +137,7 @@
       {{- end }}
       {{- $attrs = dict "href" $href }}
     {{- else }}
-      {{- with $.Page.Resources.Get $u.Path }}
+      {{- with $.PageInner.Resources.Get $u.Path }}
         {{- /* Destination is a page resource; drop query and fragment. */}}
         {{- $attrs = dict "href" .RelPermalink }}
       {{- else }}
@@ -185,14 +185,14 @@
     {{- end }}
   {{- end }}
 {{- end }}
-{{- with .Title }}
-  {{- $attrs = merge $attrs (dict "title" .) }}
-{{- end -}}
+{{- $attrs = merge $attrs (dict "title" (.Title | transform.HTMLEscape)) }}
 
 {{- /* Render anchor element. */ -}}
 {{ .Text | safeHTML }}
 
diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.rss.xml b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.rss.xml
index 1d3498a1efb..26afc181643 100644
--- a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.rss.xml
+++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.rss.xml
@@ -1,38 +1,68 @@
+{{- printf "" | safeHTML }}
 
   
-    {{ .Site.Title }} – {{ .Title }}
+    Hugo News
+    Recent news about Hugo, a static site generator written in Go, optimized for speed and designed for flexibility.
     {{ .Permalink }}
-    Recent Hugo news from gohugo.io
-    Hugo -- gohugo.io{{ with .Site.LanguageCode }}
-    {{.}}{{end}}{{ with .Site.Author.email }}
-    {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }}
-    {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }}
-    {{.}}{{end}}{{ if not .Date.IsZero }}
-    {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }}
-    
-      {{ "img/hugo.png" | absURL }}
-      GoHugo.io
-      {{ .Permalink }}
-    
-    {{ with .OutputFormats.Get "RSS" }}
-	{{ printf "" .Permalink .MediaType | safeHTML }}
-    {{ end }}
-    {{ range first 50 (where .Site.RegularPages "Type" "in" (slice "news" "showcase")) }}
-    
-      {{ .Section | title }}: {{ .Title }}
-      {{ .Permalink }}
-      {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
-      {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}
-      {{ .Permalink }}
-      
-        {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }}
-        {{ with $img }}
-        {{ $img := .Resize "640x" }}
-        {{ printf "]]>" $img.Permalink $img.Width $img.Height | safeHTML }}
-        {{ end }}
-        {{ .Content | html }}
-      
-    
-    {{ end }}
+    Hugo {{ hugo.Version }}
+    {{ or site.Language.LanguageCode site.Language.Lang }}
+    {{- with site.Copyright }}
+      {{ . }}
+    {{- end }}
+    {{- with .OutputFormats.Get "RSS" }}
+      {{ printf "" .Permalink .MediaType | safeHTML }}
+    {{- end }}
+
+    {{- $news_items := slice }}
+
+    {{- /* Get releases from GitHub. */}}
+    {{- $u := "https://api.github.com/repos/gohugoio/hugo/releases" }}
+    {{- $releases := partial "utilities/get-remote-data.html" $u }}
+    {{- $releases = where $releases "draft" false }}
+    {{- $releases = where $releases "prerelease" false }}
+    {{- range $releases | first 20 }}
+      {{- $summary := printf
+        "Hugo %s was released on %s. See [release notes](%s) for details."
+        .tag_name
+        (.published_at | time.AsTime | time.Format "2 Jan 2006")
+        .html_url
+      }}
+      {{- $ctx := dict
+        "PublishDate" (.published_at | time.AsTime)
+        "Title" (printf "Release %s" .name)
+        "Permalink" .html_url
+        "Section" "news"
+        "Summary" ($summary | $.Page.RenderString)
+      }}
+      {{- $news_items = $news_items | append $ctx }}
+    {{- end }}
+
+    {{- /* Get content pages from news section. */}}
+    {{- range where site.RegularPages "Section" "news" }}
+      {{- $ctx := dict
+        "PublishDate" .PublishDate
+        "Title" .Title
+        "RelPermalink" .RelPermalink
+        "Section" "news"
+        "Summary" .Summary
+        "Params" (dict "description" .Description)
+      }}
+      {{- $news_items = $news_items | append $ctx }}
+    {{- end }}
+    {{- /* Sort, limit, and render lastBuildDate. */}}
+    {{- $limit := cond (gt site.Config.Services.RSS.Limit 1) site.Config.Services.RSS.Limit 999 }}
+    {{- $news_items = sort $news_items "PublishDate" "desc" | first $limit }}
+    {{ (index $news_items 0).PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+
+    {{- /* Render items. */}}
+    {{- range $news_items }}
+      
+        {{ .Title }}
+        {{ .Permalink }}
+        {{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+        {{ .Permalink }}
+        {{ .Summary | transform.XMLEscape | safeHTML }}
+      
+    {{- end }}
   
-
\ No newline at end of file
+
diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html
index 5165c8a13e2..a41e45a2cf8 100644
--- a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html
+++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html
@@ -18,7 +18,7 @@ 

{{/* Get releases from GitHub. */}} {{ $u := "https://api.github.com/repos/gohugoio/hugo/releases" }} - {{ $releases := partial "inline/get-remote-data.html" $u }} + {{ $releases := partial "utilities/get-remote-data.html" $u }} {{ $releases = where $releases "draft" false }} {{ $releases = where $releases "prerelease" false }} {{ range $releases | first 20 }} @@ -55,16 +55,3 @@

{{ end }} - -{{ define "partials/inline/get-remote-data.html" }} - {{ $u := . }} - {{ $r := "" }} - {{ with $r = resources.GetRemote $u }} - {{ with .Err }} - {{ errorf "%s" . }} - {{ end }} - {{ else }} - {{ errorf "Unable to get remote resource %q" $u }} - {{ end }} - {{ return ($r | transform.Unmarshal) }} -{{ end }} diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.xml b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.xml new file mode 100644 index 00000000000..40bca59ebcf --- /dev/null +++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.xml @@ -0,0 +1,68 @@ +{{- printf "" | safeHTML }} + + + Hugo News + Recent news about Hugo, a static site generator written in Go, optimized for speed and designed for flexibility. + {{ .Permalink }} + Hugo {{ hugo.Version }} + {{ or site.Language.LanguageCode site.Language.Lang }} + {{- with site.Copyright }} + {{ . }} + {{- end }} + {{- with .OutputFormats.Get "RSS" }} + {{ printf "" .Permalink .MediaType | safeHTML }} + {{- end }} + + {{- $news_items := slice }} + + {{- /* Get releases from GitHub. */}} + {{- $u := "https://api.github.com/repos/gohugoio/hugo/releases" }} + {{- $releases := partial "utilities/get-remote-data.html" $u }} + {{- $releases = where $releases "draft" false }} + {{- $releases = where $releases "prerelease" false }} + {{- range $releases | first 20 }} + {{- $summary := printf + "Hugo %s was released on %s. See [release notes](%s) for details." + .tag_name + (.published_at | time.AsTime | time.Format "2 Jan 2006") + .html_url + }} + {{- $ctx := dict + "PublishDate" (.published_at | time.AsTime) + "Title" (printf "Release %s" .name) + "Permalink" .html_url + "Section" "news" + "Summary" ($summary | $.Page.RenderString) + }} + {{- $news_items = $news_items | append $ctx }} + {{- end }} + + {{- /* Get content pages from news section. */}} + {{- range .Pages }} + {{- $ctx := dict + "PublishDate" .PublishDate + "Title" .Title + "RelPermalink" .RelPermalink + "Section" "news" + "Summary" .Summary + "Params" (dict "description" .Description) + }} + {{- $news_items = $news_items | append $ctx }} + {{- end }} + {{- /* Sort, limit, and render lastBuildDate. */}} + {{- $limit := cond (gt site.Config.Services.RSS.Limit 1) site.Config.Services.RSS.Limit 999 }} + {{- $news_items = sort $news_items "PublishDate" "desc" | first $limit }} + {{ (index $news_items 0).PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + + {{- /* Render items. */}} + {{- range $news_items }} + + {{ .Title }} + {{ .Permalink }} + {{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + {{ .Permalink }} + {{ .Summary | transform.XMLEscape | safeHTML }} + + {{- end }} + + diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/open-source-involvement.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/open-source-involvement.html index 5300fb7a8fe..865a5161e62 100644 --- a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/open-source-involvement.html +++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/open-source-involvement.html @@ -1,6 +1,6 @@
- Github Logo + Github Logo
diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html index 6838ce36af3..3b7f6bfef17 100644 --- a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html +++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html @@ -25,26 +25,30 @@

Hugo Sponsors

{{ $query_params := .query_params | default "" }} {{ $url := printf "%s?%s%s" .link $query_params (querify "utm_source" (.utm_source | default $utmSource ) "utm_medium" "banner" "utm_campaign" (.utm_campaign | default "hugosponsor") "utm_content" (.utm_content | default "gohugoio")) | safeURL }} {{ $logo := resources.Get .logo }} - {{ if hugo.IsProduction }} - {{ $gtagID := printf "Sponsor %s %s" .name $gtag | title }} - - {{ with $logo }}{{ .Content | safeHTML }}{{ end }} - + {{ $gtagID := printf "Sponsor %s %s" .name $gtag | title }} + {{ $classes := "" }} + {{ if .show_on_hover }} + {{ $classes = printf "%s show-on-hover" $classes }} + {{ end }} + {{ if $isFooter }} + {{ $classes = printf "%s f3" $classes }} {{ else }} - - {{ with $logo }}{{ .Content | safeHTML }}{{ end }} - + {{ $classes = printf "%s f1" $classes }} {{ end }} + + {{ with $logo }} + {{ .Content | safeHTML }} + {{ else }} + {{ .name }} + {{ end }} + {{ end }} diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/utilities/get-remote-data.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/utilities/get-remote-data.html new file mode 100644 index 00000000000..69ac41da40a --- /dev/null +++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/utilities/get-remote-data.html @@ -0,0 +1,23 @@ +{{/* +Parses the serialized data from the given URL and returns a map or an array. + +Supports CSV, JSON, TOML, YAML, and XML. + +@param {string} . The URL from which to retrieve the serialized data. +@returns {any} + +@example {{ partial "get-remote-data.html" "https://example.org/foo.json" }} +*/}} + +{{ $url := . }} +{{ $data := dict }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $data = .Content | transform.Unmarshal }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +{{ return $data }} diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/eturl.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/eturl.html new file mode 100644 index 00000000000..c0cf30aec7b --- /dev/null +++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/eturl.html @@ -0,0 +1,36 @@ +{{- /* +Renders an absolute URL to the source code for an embedded template. + +Accepts either positional or named parameters, and depends on the +embedded_templates.toml file in the data directory. + +@param {string} filename The embedded template's file name, excluding extension. + +@returns template.HTML + +@example {{% et robots.txt %}} +@example {{% et filename=robots.txt %}} +*/}} + +{{- /* Get parameters. */}} +{{- $filename := "" -}} +{{- if .IsNamedParams -}} + {{- $filename = .Get "filename" -}} +{{- else -}} + {{- $filename = .Get 0 -}} +{{- end -}} + +{{- /* Render. */}} +{{- with $filename -}} + {{- with site.Data.embedded_template_urls -}} + {{- with index . $filename -}} + {{- urls.JoinPath site.Data.embedded_template_urls.base_url . -}} + {{- else -}} + {{- errorf "The %q shortcode was unable to find a URL for the embedded template named %q. Check the name. See %s" $.Name $filename $.Position -}} + {{- end -}} + {{- else -}} + {{- errorf "The %q shortcode was unable to find the embedded_template_urls data file in the site's data directory. See %s" $.Name $.Position -}} + {{- end -}} +{{- else -}} + {{- errorf "The %q shortcodes requires a named or positional parameter, the file name of the embedded template, excluding its extension. See %s" .Name .Position -}} +{{- end -}} diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/img.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/img.html index 50d4da9edba..dd8c60e18bd 100644 --- a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/img.html +++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/img.html @@ -119,8 +119,8 @@ {{- end }} {{- $validFilters := slice - "autoorient" "brightness" "colorbalance" "colorize" "contrast" "gamma" - "gaussianblur" "grayscale" "hue" "invert" "none" "opacity" "overlay" + "autoorient" "brightness" "colorbalance" "colorize" "contrast" "dither" + "gamma" "gaussianblur" "grayscale" "hue" "invert" "none" "opacity" "overlay" "padding" "pixelate" "process" "saturation" "sepia" "sigmoid" "text" "unsharpmask" }} @@ -198,6 +198,8 @@ {{- $ctx = merge $ctx (dict "argName" "percentage" "argValue" (index $filterArgs 0) "min" -100 "max" 100) }} {{- template "validate-arg-value" $ctx }} {{- $f = images.Contrast (index $filterArgs 0) }} +{{- else if eq $filter "dither" }} + {{- $f = images.Dither }} {{- else if eq $filter "gamma" }} {{- $ctx = merge $ctx (dict "argsRequired" 1) }} {{- template "validate-arg-count" $ctx }} @@ -354,7 +356,7 @@ {{- if $u.IsAbs }} {{- with resources.GetRemote $u.String }} {{- with .Err }} - {{- errorf "%s" }} + {{- errorf "%s" . }} {{- else }} {{- /* This is a remote resource. */}} {{- $r = . }} diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html index e22a91f3d96..606d2219ca5 100644 --- a/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html +++ b/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html @@ -27,9 +27,7 @@ {{- warnf "This call to the %q shortcode should be removed: %s. The button is now hidden because the specified version (%s) is older than the display threshold." $.Name $.Position $version }} {{- end }} {{- else }} - + New in v{{ $version }} {{- end }} {{- else }} {{- errorf "The %q shortcode requires a positional parameter (version). See %s" .Name .Position }} diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/static/images/GitHub-Mark-64px.png b/_vendor/github.com/gohugoio/gohugoioTheme/static/images/GitHub-Mark-64px.png deleted file mode 100644 index 9965f8d33aabf1a028058e49559b8bcb41cc20be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 924 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!rUm$fxB_W$QL({>=IxAF0(6;S zNswPKgF;-#`YSI#Gds+>FWU4(YQlHc5~J&Rzc^R(A3tlpjQvjK+uGiJ3p{*Nr!3M^ z*%lG>WjdQ60|Qfwr;B4qMcmnIvH6P}Bv>CPzfxGCu%KawR@TC8N3VVU|NoBKvOS3+ zDQE7zDNc9tOS#w27|V98z$DBpbM?oJ4Bii2osa!0(_dK$&zO1EcH5_C#$P^*Gg`B9 z%b#zZcy{?4jU&RRMXT3Ndm*B3GT}(Z^mUmTa~HX8Te#7;js2$lz6a->opwF+Hq$Io z-j~7Rdt|z6#tpB(bCz!9zM*&{(%XI2&ej{xi!2x>$oAzF+N3Zjw9kDXXua`U+w2_2 zAkn7=U5_&&#JZj+9X>0atuFbu!PI+J)O`kKZ>bwex+~-hHSb+~J@?RGUw@5rFG`nr zuzmIJDB?QlkjJb5jockF5`|kn#s(K~C_8hlGhF_lgo$~wChPNG zc0U^%ZD$4R%Kd>Q(Lhu3d0$+2o6MLd6WCrg>fJLDOe(F_>L>l3udw z*_9lr>9G&z+-)#_T+tvlJ;U|l9xvy9mAza$P6%H%vU;z$>2>DwkB#DH`r5ad(kxwX zZe)zoJ5->vfBPC)W0MqjJE`{a%Yq@jTDl7=A1gm!Xt_^%a#7x2truClOr~#2`aM-OxFVvo6PZ_~6o@c_Hrkv)<5zD!A5HVEBYkz{g9 zX0tkDXKPsBq6d>1o-SyPpTQzxx9ezGe1q&`&HZxH^1hp_yya_G87ZEO^mYgeGk7Q; kcIV-_zSYhB|1ZX~wE8%1l$`q+n3x$nUHx3vIVCg!0QJ*i1^@s6 diff --git a/_vendor/github.com/gohugoio/gohugoioTheme/static/images/Github.svg b/_vendor/github.com/gohugoio/gohugoioTheme/static/images/Github.svg new file mode 100644 index 00000000000..f202ff8783f --- /dev/null +++ b/_vendor/github.com/gohugoio/gohugoioTheme/static/images/Github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_vendor/modules.txt b/_vendor/modules.txt index a63ac09b9d6..100c6fc6f21 100644 --- a/_vendor/modules.txt +++ b/_vendor/modules.txt @@ -1 +1 @@ -# github.com/gohugoio/gohugoioTheme v0.0.0-20240201183016-8e648a3b5342 +# github.com/gohugoio/gohugoioTheme v0.0.0-20240619093131-b595d5fb8c52 diff --git a/assets/images/examples/zion-national-park-grayscale.jpg b/assets/images/examples/zion-national-park-grayscale.jpg deleted file mode 100644 index 908bd88c6b95706cb4d77cf14628821e034536d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42537 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 F{U6E1vTpzY diff --git a/config/_default/menus/menus.en.toml b/config/_default/menus/menus.en.toml index cd337cbeeea..b0da4881787 100644 --- a/config/_default/menus/menus.en.toml +++ b/config/_default/menus/menus.en.toml @@ -1,6 +1,6 @@ [[docs]] identifier = 'about' -name = 'About Hugo' +name = 'About' pageRef = '/about/' weight = 10 @@ -15,60 +15,60 @@ name = 'Getting started' weight = 30 identifier = 'getting-started' pageRef = '/getting-started/' + +[[docs]] +name = 'Quick reference' +weight = 40 +identifier = 'quick-reference' +pageRef = '/quick-reference/' post = 'break' [[docs]] name = 'Content management' -weight = 40 +weight = 50 identifier = 'content-management' post = 'expanded' pageRef = '/content-management/' [[docs]] name = 'Templates' -weight = 50 +weight = 60 identifier = 'templates' pageRef = '/templates/' [[docs]] name = 'Functions' -weight = 60 +weight = 70 identifier = 'functions' pageRef = '/functions/' [[docs]] name = 'Methods' -weight = 70 +weight = 80 identifier = 'methods' pageRef = '/methods/' [[docs]] -name = 'Quick reference' -weight = 80 -identifier = 'quick-reference' -pageRef = '/quick-reference/' - -[[docs]] -name = 'Variables' -weight = 85 -identifier = 'variables' -pageRef = '/variables/' +name = 'Render hooks' +weight = 90 +identifier = 'render-hooks' +pageRef = '/render-hooks/' [[docs]] name = 'Hugo Modules' -weight = 90 +weight = 100 identifier = 'modules' pageRef = '/hugo-modules/' [[docs]] name = 'Hugo Pipes' -weight = 100 +weight = 110 identifier = 'hugo-pipes' pageRef = '/hugo-pipes/' [[docs]] name = 'CLI' -weight = 110 +weight = 120 post = 'break' identifier = 'commands' pageRef = '/commands/' @@ -77,25 +77,25 @@ pageRef = '/commands/' [[docs]] name = 'Troubleshooting' -weight = 120 +weight = 130 identifier = 'troubleshooting' pageRef = '/troubleshooting/' [[docs]] name = 'Developer tools' -weight = 130 +weight = 140 identifier = 'developer-tools' pageRef = '/tools/' [[docs]] name = 'Hosting and deployment' -weight = 140 +weight = 150 identifier = 'hosting-and-deployment' pageRef = '/hosting-and-deployment/' [[docs]] name = 'Contribute' -weight = 150 +weight = 160 post = 'break' identifier = 'contribute' pageRef = '/contribute/' diff --git a/content/en/_index.md b/content/en/_index.md index 69d40ebcf62..96ba0c4132a 100644 --- a/content/en/_index.md +++ b/content/en/_index.md @@ -15,7 +15,7 @@ features: - heading: Shortcodes image_path: /images/icon-shortcodes.svg tagline: Hugo's shortcodes are Markdown's hidden superpower. - copy: We love the beautiful simplicity of markdown’s syntax, but there are times when we want more flexibility. Hugo shortcodes allow for both beauty and flexibility. + copy: We love the beautiful simplicity of Markdown’s syntax, but there are times when we want more flexibility. Hugo shortcodes allow for both beauty and flexibility. - heading: Built-in Templates image_path: /images/icon-built-in-templates.svg diff --git a/content/en/about/_index.md b/content/en/about/_index.md index 3a831902917..333a9ba36f8 100644 --- a/content/en/about/_index.md +++ b/content/en/about/_index.md @@ -1,16 +1,16 @@ --- title: About Hugo -linkTitle: Overview -description: Hugo's features, roadmap, license, and motivation. +linkTitle: In this section +description: Learn about Hugo and its features, security model, and privacy protections. categories: [] keywords: [] menu: docs: - identifier: about-hugo-overview + identifier: about-hugo-in-this-section parent: about weight: 10 weight: 10 aliases: [/about-hugo/,/docs/] --- -Hugo is not your average static site generator. +Learn about Hugo and its features, privacy protections, and security model. diff --git a/content/en/about/benefits.md b/content/en/about/benefits.md deleted file mode 100644 index 82952c4e6e4..00000000000 --- a/content/en/about/benefits.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Benefits of static site generators -linkTitle: Static site generators -description: Improved performance, security and ease of use are just a few of the reasons static site generators are so appealing. -categories: [about] -keywords: [ssg,static,performance,security] -menu: - docs: - parent: about - weight: 40 -weight: 40 ---- - -The purpose of website generators is to render content into HTML files. Most are "dynamic site generators." That means the HTTP server---i.e., the program that sends files to the browser to be viewed---runs the generator to create a new HTML file every time an end user requests a page. - -Over time, dynamic site generators were programmed to cache their HTML files to prevent unnecessary delays in delivering pages to end users. A cached page is a static version of a web page. - -Hugo takes caching a step further and all HTML files are rendered on your computer. You can review the files locally before copying them to the computer hosting the HTTP server. Since the HTML files aren't generated dynamically, we say that Hugo is a *static site generator*. - -This has many benefits. The most noticeable is performance. HTTP servers are *very* good at sending files---so good, in fact, that you can effectively serve the same number of pages with a fraction of the memory and CPU needed for a dynamic site. - -## More on static site generators - -* ["An Introduction to Static Site Generators", David Walsh] -* ["Hugo vs. WordPress page load speed comparison: Hugo leaves WordPress in its dust", GettingThingsTech][hugovwordpress] -* ["Static Site Generators", O'Reilly] -* [StaticGen: Top Open-Source Static Site Generators (GitHub Stars)] -* ["Top 10 Static Website Generators", Netlify blog] -* ["The Resurgence of Static", dotCMS][dotcms] - -["An Introduction to Static Site Generators", David Walsh]: https://davidwalsh.name/introduction-static-site-generators -["Static Site Generators", O'Reilly]: https://github.com/gohugoio/hugoDocs/files/1242701/static-site-generators.pdf -["Top 10 Static Website Generators", Netlify blog]: https://www.netlify.com/blog/2016/05/02/top-ten-static-website-generators/ -[hugovwordpress]: https://gettingthingstech.com/hugo-vs.-wordpress-page-load-speed-comparison-hugo-leaves-wordpress-in-its-dust/ -[StaticGen: Top Open-Source Static Site Generators (GitHub Stars)]: https://www.staticgen.com/ -[dotcms]: https://dotcms.com/blog/post/the-resurgence-of-static diff --git a/content/en/about/features.md b/content/en/about/features.md index a94ce5526e9..ff7e9ce138e 100644 --- a/content/en/about/features.md +++ b/content/en/about/features.md @@ -1,6 +1,6 @@ --- -title: Hugo features -description: Hugo boasts blistering speed, robust content management, and a powerful templating language making it a great fit for all kinds of static websites. +title: Features +description: Hugo's rich and powerful feature set provides the framework and tools to create static sites that build in seconds, often less. categories: [about] keywords: [] menu: @@ -11,70 +11,126 @@ weight: 30 toc: true --- -## General - -* [Extremely fast] build times (< 1 ms per page) -* Completely cross platform, with [easy installation][install] on macOS, Linux, Windows, and more -* Renders changes on the fly with [LiveReload] as you develop -* [Powerful theming] -* [Host your site anywhere][hostanywhere] - -## Organization - -* Straightforward [organization for your projects], including website sections -* Customizable [URLs] -* Support for configurable [taxonomies], including categories and tags -* [Sort content] as you desire through powerful template [functions] -* Automatic [table of contents] generation -* [Dynamic menu] creation -* [Pretty URLs] support -* [Permalink] pattern support -* Redirects via [aliases] - -## Content - -* Native Markdown and Emacs Org-Mode support, as well as other languages via *external helpers* (see [supported formats]) -* TOML, YAML, and JSON metadata support in [front matter] -* Customizable [homepage] -* Multiple [content types] -* Automatic and user defined [content summaries] -* [Shortcodes] to enable rich content inside of Markdown -* ["Minutes to Read"][pagevars] functionality -* ["WordCount"][pagevars] functionality - -## Additional features - -* Integrated [Disqus] comment support -* Integrated [Google Analytics] support -* Automatic [RSS] creation -* Support for [Go] HTML templates -* [Syntax highlighting] powered by [Chroma] - -[aliases]: /content-management/urls/#aliases -[Chroma]: https://github.com/alecthomas/chroma -[content summaries]: /content-management/summaries/ -[content types]: /content-management/types/ -[Disqus]: https://disqus.com/ -[Dynamic menu]: /templates/menu-templates/ -[Extremely fast]: https://github.com/bep/hugo-benchmark -[front matter]: /content-management/front-matter/ -[functions]: /functions/ -[Go]: https://pkg.go.dev/html/template -[Google Analytics]: https://google-analytics.com/ -[homepage]: /templates/homepage/ -[hostanywhere]: /hosting-and-deployment/ -[install]: /installation/ -[LiveReload]: /getting-started/usage/ -[organization for your projects]: /getting-started/directory-structure/ -[pagevars]: /variables/page/ -[Permalink]: /content-management/urls/#permalinks -[Powerful theming]: /hugo-modules/theme-components/ -[Pretty URLs]: /content-management/urls/ -[RSS]: /templates/rss/ +## Framework + +[Multiplatform] +: Install Hugo's single executable on Linux, macOS, Windows, and more. + +[Multilingual] +: Localize your project for each language and region, including translations, images, dates, currencies, numbers, percentages, and collation sequence. Hugo's multilingual framework supports single-host and multihost configurations. + +[Output formats] +: Render each page of your site to one or more output formats, with granular control by page kind, section, and path. While HTML is the default output format, you can add JSON, RSS, CSV, and more. For example, create a REST API to access content. + +[Templates] +: Create templates usings variables, functions, and methods to transform your content, resources, and data into a published page. While HTML templates are the most common, you can create templates for any output format. + +[Themes] +: Reduce development time and cost by using one of the hundreds of themes contributed by the Hugo community. Themes are available for corporate sites, documentation projects, image portfolios, landing pages, personal and professional blogs, resumes, CVs, and more. + +[Modules] +: Reduce development time and cost by creating or importing packaged combinations of archetypes, assets, content, data, templates, translation tables, static files, or configuration settings. A module may serve as the basis for a new site, or to augment an existing site. + +[Privacy] +: Configure the behavior of Hugo's embedded templates and shortcodes to facilitate compliance with regional privacy regulations, including the [GDPR] and [CCPA]. + +[Security] +: Hugo's security model is based on the premise that template and configuration authors are trusted, but content authors are not. This model enables generation of HTML output safe against code injection. Other protections prevent "shelling out" to arbitrary applications, limit access to specific environment variables, prevent connections to arbitrary remote data sources, and more. + +## Content authoring + +[Content formats] +: Create your content using Markdown, HTML, AsciiDoc, Emacs Org Mode, Pandoc, or reStructuredText. Markdown is the default content format, conforming to the [CommonMark] and [GitHub Flavored Markdown] specifications. + +[Markdown attributes] +: Apply HTML attributes such as `class` and `id` to Markdown images and block elements including blockquotes, fenced code blocks, headings, horizontal rules, lists, paragraphs, and tables. + +[Markdown extensions] +: Leverage the embedded Markdown extensions to create tables, definition lists, footnotes, task lists, inserted text, mark text, subscripts, superscripts, and more. + +[Markdown render hooks] +: Override the conversion of Markdown to HTML when rendering fenced code blocks, headings, images, and links. For example, render every standalone image as an HTML `figure` element. + +[Diagrams] +: Use fenced code blocks and Markdown render hooks to include diagrams in your content. + +[Mathematics] +: Include mathematical equations and expressions in Markdown using LaTeX or TeX typesetting syntax. + +[Syntax highlighting] +: Syntactically highlight code examples using Hugo's embedded syntax highlighter, enabled by default for fenced code blocks in Markdown. The syntax highlighter supports hundreds of code languages and dozens of styles. + +[Shortcodes] +: Use Hugo's embedded shortcodes, or create your own, to insert complex content. For example, use shortcodes to include `audio` and `video` elements, render tables from local or remote data sources, insert snippets from other pages, and more. + +## Content management + +[Content adapters] +: Create content adapters to dynamically add content when building your site. For example, use a content adapter to create pages from a remote data source such as JSON, TOML, YAML, or XML. + +[Taxonomies] +: Classify content to establish simple or complex logical relationships between pages. For example, create an authors taxonomy, and assign one or more authors to each page. Among other uses, the taxonomy system provides an inverted, weighted index to render a list of related pages, ordered by relevance. + +[Data] +: Augment your content using local or remote data sources including CSV, JSON, TOML, YAML, and XML. For example, create a shortcode to render an HTML table from a remote CSV file. + +[Menus] +: Provide rapid access to content via Hugo's menu system, configured automatically, globally, or on a page-by-page basis. The menu system is a key component of Hugo's multilingual architecture. + +[URL management] +: Serve any page from any path via global configuration or on a page-by-page basis. + + +## Asset pipelines + +[CSS bundling] +: Transpile Sass to CSS, bundle, tree shake, minify, create source maps, perform SRI hashing, and integrate with PostCSS. + +[JavaScript bundling] +: Transpile TypeScript and JSX to JavaScript, bundle, tree shake, minify, create source maps, and perform SRI hashing. + +[Image processing] +: Convert, resize, crop, rotate, adjust colors, apply filters, overlay text and images, and extract EXIF data. + +## Performance + +[Caching] +: Reduce build time and cost by rendering a partial template once then cache the result, either globally or within a given context. For example, cache the result of an asset pipeline to prevent reprocessing on every rendered page. + +[Segmentation] +: Reduce build time and cost by partitioning your sites into segments. For example, render the home page and the "news section" every hour, and render the entire site once a week. + +[Minification] +: Minify HTML, CSS, and JavaScript to reduce file size, bandwidth consumption, and loading times. + +[CCPA]: https://en.wikipedia.org/wiki/California_Consumer_Privacy_Act +[CSS bundling]: /functions/resources/tocss/ +[Caching]: /functions/partials/includecached/ +[CommonMark]: https://spec.commonmark.org/current/ +[Content adapters]: /content-management/content-adapters/ +[Content formats]: /content-management/formats/ +[Data]: /content-management/data-sources/ +[Diagrams]: /content-management/diagrams/ +[GDPR]: https://en.wikipedia.org/wiki/General_Data_Protection_Regulation +[GitHub Flavored Markdown]: https://github.github.com/gfm/ +[Image processing]: /content-management/image-processing/ +[JavaScript bundling]: /functions/js/build/ +[Markdown attributes]: /content-management/markdown-attributes/ +[Markdown extensions]: /getting-started/configuration-markup/#goldmark-extensions +[Markdown render hooks]: /render-hooks/introduction/ +[Mathematics]: /content-management/mathematics/ +[Menus]: /content-management/menus/ +[Minification]: /getting-started/configuration/#configure-minify +[Modules]: https://gohugo.io/hugo-modules/ +[Multilingual]: /content-management/multilingual/ +[Multiplatform]: /installation/ +[Output formats]: /templates/output-formats/ +[Privacy]: /about/privacy/ +[Security]: /about/security/ +[Segmentation]: /getting-started/configuration/#configure-segments [Shortcodes]: /content-management/shortcodes/ -[sort content]: /templates/ -[supported formats]: /content-management/formats/ [Syntax highlighting]: /content-management/syntax-highlighting/ -[table of contents]: /content-management/toc/ -[taxonomies]: /content-management/taxonomies/ -[URLs]: /content-management/urls/ +[Taxonomies]: /content-management/taxonomies/ +[Templates]: templates/introduction/ +[Themes]: https://themes.gohugo.io/ +[URL management]: /content-management/urls/ diff --git a/content/en/about/introduction.md b/content/en/about/introduction.md new file mode 100644 index 00000000000..d89938eed6d --- /dev/null +++ b/content/en/about/introduction.md @@ -0,0 +1,39 @@ +--- +title: Introduction +description: Hugo is a static site generator written in Go, optimized for speed and designed for flexibility. +categories: [about] +keywords: [] +menu: + docs: + identifier: about-introduction + parent: about + weight: 20 +weight: 20 +aliases: [/about/what-is-hugo/,/about/benefits/] +--- + +Hugo is a [static site generator] written in [Go], optimized for speed and designed for flexibility. With its advanced templating system and fast asset pipelines, Hugo renders a complete site in seconds, often less. + +Due to its flexible framework, multilingual support, and powerful taxonomy system, Hugo is widely used to create: + +- Corporate, government, nonprofit, education, news, event, and project sites +- Documentation sites +- Image portfolios +- Landing pages +- Business, professional, and personal blogs +- Resumes and CVs + +Use Hugo's embedded web server during development to instantly see changes to content, structure, behavior, and presentation. Then deploy the site to your host, or push changes to your Git provider for automated builds and deployment. + +And with [Hugo Modules], you can share content, assets, data, translations, themes, templates, and configuration with other projects via public or private Git repositories. + +Learn more about Hugo's [features], [privacy protections], and [security model]. + +[Go]: https://go.dev +[Hugo Modules]: /hugo-modules/ +[static site generator]: https://en.wikipedia.org/wiki/Static_site_generator +[features]: /about/features +[security model]: /about/security +[privacy protections]: /about/privacy + +{{< youtube 0RKpf3rK57I >}} diff --git a/content/en/about/license.md b/content/en/about/license.md index e488bb87a43..f434b233e7e 100644 --- a/content/en/about/license.md +++ b/content/en/about/license.md @@ -2,12 +2,12 @@ title: License description: Hugo is released under the Apache 2.0 license. categories: [about] -keywords: [license,apache] +keywords: [apache] menu: docs: parent: about - weight: 70 -weight: 70 + weight: 60 +weight: 60 --- ## Apache License diff --git a/content/en/about/hugo-and-gdpr.md b/content/en/about/privacy.md similarity index 84% rename from content/en/about/hugo-and-gdpr.md rename to content/en/about/privacy.md index daf4e80f07d..dcc3b3439f1 100644 --- a/content/en/about/hugo-and-gdpr.md +++ b/content/en/about/privacy.md @@ -1,16 +1,16 @@ --- -title: Hugo and the General Data Protection Regulation -linkTitle: Hugo and the GDPR -description: About how to configure your Hugo site to meet the new regulations. +title: Privacy +linkTitle: Privacy +description: Configure your site to facilitate compliance with regional privacy regulations. categories: [about] keywords: ["GDPR", "Privacy", "Data Protection"] menu: docs: parent: about - weight: 60 -weight: 60 + weight: 40 +weight: 40 toc: true -aliases: [/privacy/,/gdpr/] +aliases: [/gdpr/,/about/hugo-and-gdpr/] --- General Data Protection Regulation ([GDPR](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation)) is a regulation in EU law on data protection and privacy for all individuals within the European Union and the European Economic Area. It became enforceable on 25 May 2018. @@ -22,7 +22,7 @@ aliases: [/privacy/,/gdpr/] Note that: * These settings have their defaults setting set to _off_, i.e. how it worked before Hugo `0.41`. You must do your own evaluation of your site and apply the appropriate settings. - * These settings work with the [internal templates](/templates/internal/). Some theme may contain custom templates for embedding services like Google Analytics. In that case these options have no effect. + * These settings work with the [embedded templates](/templates/embedded/). Some theme may contain custom templates for embedding services like Google Analytics. In that case these options have no effect. * We will continue this work and improve this further in future Hugo versions. ## All privacy settings @@ -36,8 +36,6 @@ disable = false [privacy.googleAnalytics] disable = false respectDoNotTrack = false -anonymizeIP = false -useSessionStorage = false [privacy.instagram] disable = false simple = false @@ -78,19 +76,9 @@ disable = true ### GoogleAnalytics -anonymizeIP -: Enabling this will make it so the users' IP addresses are anonymized within Google Analytics. - respectDoNotTrack : Enabling this will make the GA templates respect the "Do Not Track" HTTP header. -useSessionStorage -: Enabling this will disable the use of Cookies and use Session Storage to Store the GA Client ID. - -{{% note %}} -`useSessionStorage` is not supported when using Google Analytics v4 (gtag.js). -{{% /note %}} - ### Instagram simple diff --git a/content/en/about/security-model.md b/content/en/about/security.md similarity index 79% rename from content/en/about/security-model.md rename to content/en/about/security.md index af1dd7d75b5..29f2c7ed184 100644 --- a/content/en/about/security-model.md +++ b/content/en/about/security.md @@ -1,5 +1,6 @@ --- -title: Hugo's security model +title: Security model +linkTitle: Security description: A summary of Hugo's security model. categories: [about] keywords: [security,privacy] @@ -9,7 +10,7 @@ menu: weight: 50 weight: 50 toc: true -aliases: [/security/] +aliases: [/about/security-model/] --- ## Runtime security @@ -21,9 +22,8 @@ But when developing and building your site, the runtime is the `hugo` executable **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. +* We shell out to some external binaries to support [Asciidoctor](/content-management/formats/#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 @@ -33,7 +33,16 @@ The default configuration is listed below. Any build using features not in the a {{< 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: +By default, Hugo permits the [`resources.GetRemote`] function to download files with media types corresponding to an internal allow list. To add media types to the allow list: + +[`resources.GetRemote`]: /functions/resources/getremote + +{{< code-toggle file=hugo >}} +[security.http] +mediaTypes = ['^image/avif$'] +{{< /code-toggle >}} + +Note that these and other configuration settings in Hugo can be overridden by the OS environment. For example, if you want to block all remote HTTP fetching of data: ```txt HUGO_SECURITY_HTTP_URLS=none hugo diff --git a/content/en/about/what-is-hugo.md b/content/en/about/what-is-hugo.md deleted file mode 100644 index e4326d1735d..00000000000 --- a/content/en/about/what-is-hugo.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: What is Hugo -description: Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again. -categories: [about] -keywords: [] -menu: - docs: - parent: about - weight: 20 -weight: 20 -toc: true -aliases: [/overview/introduction/,/about/why-i-built-hugo/] ---- - -Hugo is a general-purpose website framework. Technically speaking, Hugo is a [static site generator]. Unlike systems that dynamically build a page with each visitor request, Hugo builds pages when you create or update your content. Since websites are viewed far more often than they are edited, Hugo is designed to provide an optimal viewing experience for your website's end users and an ideal writing experience for website authors. - -Websites built with Hugo are extremely fast and secure. Hugo sites can be hosted anywhere, including [Netlify], [Heroku], [GoDaddy], [DreamHost], [GitHub Pages], [GitLab Pages], [Surge], [Firebase], [Google Cloud Storage], [Amazon S3], [Rackspace], [Azure], and [CloudFront] and work well with CDNs. Hugo sites run without the need for a database or dependencies on expensive runtimes like Ruby, Python, or PHP. - -We think of Hugo as the ideal website creation tool with nearly instant build times, able to rebuild whenever a change is made. - -## How fast is Hugo? - -{{< youtube "CdiDYZ51a2o" >}} - -## What does Hugo do? - -In technical terms, Hugo takes a source directory of files and templates and uses these as input to create a complete website. - -## Who should use Hugo? - -Hugo is for people that prefer writing in a text editor over a browser. - -Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases. - -Hugo is for people building a blog, a company site, a portfolio site, documentation, a single landing page, or a website with thousands of pages. - -[@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/ -[DreamHost]: https://www.dreamhost.com/ -[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/ -[Google Cloud Storage]: https://cloud.google.com/storage/ -[Heroku]: https://www.heroku.com/ -[Jekyll]: https://jekyllrb.com/ -[Middleman]: https://middlemanapp.com/ -[Nanoc]: https://nanoc.ws/ -[Netlify]: https://netlify.com -[Rackspace]: https://www.rackspace.com/cloud/files -[Surge]: https://surge.sh -[contributing to it]: https://github.com/gohugoio/hugo -[rackspace]: https://www.rackspace.com/openstack/public/files -[static site generator]: /about/benefits/ diff --git a/content/en/commands/hugo.md b/content/en/commands/hugo.md index fa8f6d1ed54..cfbe66053fd 100644 --- a/content/en/commands/hugo.md +++ b/content/en/commands/hugo.md @@ -56,7 +56,8 @@ hugo [flags] --printPathWarnings print warnings on duplicate target paths etc. --printUnusedTemplates print warnings on unused templates. --quiet build in quiet mode - --renderToMemory render to memory (only useful for benchmark testing) + --renderSegments strings named segments to render (configured in the segments config) + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --templateMetrics display metrics about template executions --templateMetricsHints calculate some improvement hints when combined with --templateMetrics diff --git a/content/en/commands/hugo_completion.md b/content/en/commands/hugo_completion.md index c9b370da6e7..21635e81e63 100644 --- a/content/en/commands/hugo_completion.md +++ b/content/en/commands/hugo_completion.md @@ -31,6 +31,7 @@ See each sub-command's help for details on how to use the generated script. --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_completion_bash.md b/content/en/commands/hugo_completion_bash.md index 875ecfc19f9..bface97c6c3 100644 --- a/content/en/commands/hugo_completion_bash.md +++ b/content/en/commands/hugo_completion_bash.md @@ -54,6 +54,7 @@ hugo completion bash --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_completion_fish.md b/content/en/commands/hugo_completion_fish.md index 87b84a70204..3a9cf0df2c3 100644 --- a/content/en/commands/hugo_completion_fish.md +++ b/content/en/commands/hugo_completion_fish.md @@ -45,6 +45,7 @@ hugo completion fish [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_completion_powershell.md b/content/en/commands/hugo_completion_powershell.md index 77cfeda5f51..593573cee8a 100644 --- a/content/en/commands/hugo_completion_powershell.md +++ b/content/en/commands/hugo_completion_powershell.md @@ -42,6 +42,7 @@ hugo completion powershell [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_completion_zsh.md b/content/en/commands/hugo_completion_zsh.md index 84856b6b32f..c227c61258b 100644 --- a/content/en/commands/hugo_completion_zsh.md +++ b/content/en/commands/hugo_completion_zsh.md @@ -56,6 +56,7 @@ hugo completion zsh [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_config.md b/content/en/commands/hugo_config.md index 3ec3748a309..fac513dceea 100644 --- a/content/en/commands/hugo_config.md +++ b/content/en/commands/hugo_config.md @@ -18,13 +18,14 @@ hugo config [command] [flags] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - --format string preferred file format (toml, yaml or json) (default "toml") - -h, --help help for config - --lang string the language to display config for. Defaults to the first language defined. - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + --format string preferred file format (toml, yaml or json) (default "toml") + -h, --help help for config + --lang string the language to display config for. Defaults to the first language defined. + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -39,6 +40,7 @@ hugo config [command] [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_config_mounts.md b/content/en/commands/hugo_config_mounts.md index 90b171912ee..42c8b29aa57 100644 --- a/content/en/commands/hugo_config_mounts.md +++ b/content/en/commands/hugo_config_mounts.md @@ -14,11 +14,12 @@ hugo config mounts [flags] [args] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - -h, --help help for mounts - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for mounts + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -33,6 +34,7 @@ hugo config mounts [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_convert.md b/content/en/commands/hugo_convert.md index 07f7f9c13b2..7b18ee6f8aa 100644 --- a/content/en/commands/hugo_convert.md +++ b/content/en/commands/hugo_convert.md @@ -33,6 +33,7 @@ See convert's subcommands toJSON, toTOML and toYAML for more information. --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_convert_toJSON.md b/content/en/commands/hugo_convert_toJSON.md index 23d6a1032e0..1dfb33aa066 100644 --- a/content/en/commands/hugo_convert_toJSON.md +++ b/content/en/commands/hugo_convert_toJSON.md @@ -35,6 +35,7 @@ hugo convert toJSON [flags] [args] --logLevel string log level (debug|info|warn|error) -o, --output string filesystem path to write files to --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory --unsafe enable less safe operations, please backup first diff --git a/content/en/commands/hugo_convert_toTOML.md b/content/en/commands/hugo_convert_toTOML.md index 431547a79cb..ddd6b8270b3 100644 --- a/content/en/commands/hugo_convert_toTOML.md +++ b/content/en/commands/hugo_convert_toTOML.md @@ -35,6 +35,7 @@ hugo convert toTOML [flags] [args] --logLevel string log level (debug|info|warn|error) -o, --output string filesystem path to write files to --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory --unsafe enable less safe operations, please backup first diff --git a/content/en/commands/hugo_convert_toYAML.md b/content/en/commands/hugo_convert_toYAML.md index 03f7fbb2566..bddbb88a584 100644 --- a/content/en/commands/hugo_convert_toYAML.md +++ b/content/en/commands/hugo_convert_toYAML.md @@ -35,6 +35,7 @@ hugo convert toYAML [flags] [args] --logLevel string log level (debug|info|warn|error) -o, --output string filesystem path to write files to --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory --unsafe enable less safe operations, please backup first diff --git a/content/en/commands/hugo_deploy.md b/content/en/commands/hugo_deploy.md index b4ab3e61866..a606083fc55 100644 --- a/content/en/commands/hugo_deploy.md +++ b/content/en/commands/hugo_deploy.md @@ -44,6 +44,7 @@ hugo deploy [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_env.md b/content/en/commands/hugo_env.md index 076ddef26df..9b73cea5feb 100644 --- a/content/en/commands/hugo_env.md +++ b/content/en/commands/hugo_env.md @@ -33,6 +33,7 @@ hugo env [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_gen.md b/content/en/commands/hugo_gen.md index 5c8bd6f2c82..ea1696db91c 100644 --- a/content/en/commands/hugo_gen.md +++ b/content/en/commands/hugo_gen.md @@ -25,6 +25,7 @@ A collection of several useful generators. --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_gen_chromastyles.md b/content/en/commands/hugo_gen_chromastyles.md index 3ec890412c6..cc244878c05 100644 --- a/content/en/commands/hugo_gen_chromastyles.md +++ b/content/en/commands/hugo_gen_chromastyles.md @@ -20,10 +20,11 @@ hugo gen chromastyles [flags] [args] ### Options ``` - -h, --help help for chromastyles - --highlightStyle string style used for highlighting lines (see https://github.com/alecthomas/chroma) - --linesStyle string style used for line numbers (see https://github.com/alecthomas/chroma) - --style string highlighter style (see https://xyproto.github.io/splash/docs/) (default "friendly") + -h, --help help for chromastyles + --highlightStyle string foreground and background colors for highlighted lines, e.g. --highlightStyle "#fff000 bg:#000fff" + --lineNumbersInlineStyle string foreground and background colors for inline line numbers, e.g. --lineNumbersInlineStyle "#fff000 bg:#000fff" + --lineNumbersTableStyle string foreground and background colors for table line numbers, e.g. --lineNumbersTableStyle "#fff000 bg:#000fff" + --style string highlighter style (see https://xyproto.github.io/splash/docs/) (default "friendly") ``` ### Options inherited from parent commands @@ -38,6 +39,7 @@ hugo gen chromastyles [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_gen_doc.md b/content/en/commands/hugo_gen_doc.md index 13fb231061c..84493ab982a 100644 --- a/content/en/commands/hugo_gen_doc.md +++ b/content/en/commands/hugo_gen_doc.md @@ -39,6 +39,7 @@ hugo gen doc [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_gen_man.md b/content/en/commands/hugo_gen_man.md index 6a63a583eb1..40267def2d4 100644 --- a/content/en/commands/hugo_gen_man.md +++ b/content/en/commands/hugo_gen_man.md @@ -36,6 +36,7 @@ hugo gen man [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_import.md b/content/en/commands/hugo_import.md index a6bd40f34e6..71af58f8be2 100644 --- a/content/en/commands/hugo_import.md +++ b/content/en/commands/hugo_import.md @@ -31,6 +31,7 @@ Import requires a subcommand, e.g. `hugo import jekyll jekyll_root_path target_p --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_import_jekyll.md b/content/en/commands/hugo_import_jekyll.md index af751348c11..72941367159 100644 --- a/content/en/commands/hugo_import_jekyll.md +++ b/content/en/commands/hugo_import_jekyll.md @@ -36,6 +36,7 @@ hugo import jekyll [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_list.md b/content/en/commands/hugo_list.md index 294a8eaa447..9fab42ca928 100644 --- a/content/en/commands/hugo_list.md +++ b/content/en/commands/hugo_list.md @@ -31,6 +31,7 @@ List requires a subcommand, e.g. hugo list drafts --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output @@ -39,8 +40,9 @@ List requires a subcommand, e.g. hugo list drafts ### SEE ALSO * [hugo](/commands/hugo/) - hugo builds your site -* [hugo list all](/commands/hugo_list_all/) - List all posts -* [hugo list drafts](/commands/hugo_list_drafts/) - List all drafts -* [hugo list expired](/commands/hugo_list_expired/) - List all posts already expired -* [hugo list future](/commands/hugo_list_future/) - List all posts dated in the future +* [hugo list all](/commands/hugo_list_all/) - List all content +* [hugo list drafts](/commands/hugo_list_drafts/) - List draft content +* [hugo list expired](/commands/hugo_list_expired/) - List expired content +* [hugo list future](/commands/hugo_list_future/) - List future content +* [hugo list published](/commands/hugo_list_published/) - List published content diff --git a/content/en/commands/hugo_list_all.md b/content/en/commands/hugo_list_all.md index 49f692de000..d8dc10c9e29 100644 --- a/content/en/commands/hugo_list_all.md +++ b/content/en/commands/hugo_list_all.md @@ -5,11 +5,11 @@ url: /commands/hugo_list_all/ --- ## hugo list all -List all posts +List all content ### Synopsis -List all of the posts in your content directory, include drafts, future and expired pages. +List all content including draft, future, and expired. ``` hugo list all [flags] [args] @@ -33,6 +33,7 @@ hugo list all [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_list_drafts.md b/content/en/commands/hugo_list_drafts.md index e84e582e66d..f1015bbb511 100644 --- a/content/en/commands/hugo_list_drafts.md +++ b/content/en/commands/hugo_list_drafts.md @@ -5,11 +5,11 @@ url: /commands/hugo_list_drafts/ --- ## hugo list drafts -List all drafts +List draft content ### Synopsis -List all of the drafts in your content directory. +List draft content. ``` hugo list drafts [flags] [args] @@ -33,6 +33,7 @@ hugo list drafts [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_list_expired.md b/content/en/commands/hugo_list_expired.md index 43feb5d8e13..35f6636e18c 100644 --- a/content/en/commands/hugo_list_expired.md +++ b/content/en/commands/hugo_list_expired.md @@ -5,11 +5,11 @@ url: /commands/hugo_list_expired/ --- ## hugo list expired -List all posts already expired +List expired content ### Synopsis -List all of the posts in your content directory which has already expired. +List content with a past expiration date. ``` hugo list expired [flags] [args] @@ -33,6 +33,7 @@ hugo list expired [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_list_future.md b/content/en/commands/hugo_list_future.md index 419accd6c44..bef16244178 100644 --- a/content/en/commands/hugo_list_future.md +++ b/content/en/commands/hugo_list_future.md @@ -5,11 +5,11 @@ url: /commands/hugo_list_future/ --- ## hugo list future -List all posts dated in the future +List future content ### Synopsis -List all of the posts in your content directory which will be posted in the future. +List content with a future publication date. ``` hugo list future [flags] [args] @@ -33,6 +33,7 @@ hugo list future [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_list_published.md b/content/en/commands/hugo_list_published.md new file mode 100644 index 00000000000..d53f6d94174 --- /dev/null +++ b/content/en/commands/hugo_list_published.md @@ -0,0 +1,45 @@ +--- +title: "hugo list published" +slug: hugo_list_published +url: /commands/hugo_list_published/ +--- +## hugo list published + +List published content + +### Synopsis + +List content that is not draft, future, or expired. + +``` +hugo list published [flags] [args] +``` + +### Options + +``` + -h, --help help for published +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo list](/commands/hugo_list/) - Listing out various types of content + diff --git a/content/en/commands/hugo_mod.md b/content/en/commands/hugo_mod.md index dc712b1dee2..7fe9dc18d7b 100644 --- a/content/en/commands/hugo_mod.md +++ b/content/en/commands/hugo_mod.md @@ -40,6 +40,7 @@ See https://gohugo.io/hugo-modules/ for more information. --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_clean.md b/content/en/commands/hugo_mod_clean.md index c1c2b0c0d0a..e7d933da711 100644 --- a/content/en/commands/hugo_mod_clean.md +++ b/content/en/commands/hugo_mod_clean.md @@ -18,13 +18,14 @@ hugo mod clean [flags] [args] ### Options ``` - --all clean entire module cache - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - -h, --help help for clean - --pattern string pattern matching module paths to clean (all if not set), e.g. "**hugo*" - -t, --theme strings themes to use (located in /themes/THEMENAME/) + --all clean entire module cache + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for clean + --pattern string pattern matching module paths to clean (all if not set), e.g. "**hugo*" + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -39,6 +40,7 @@ hugo mod clean [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_get.md b/content/en/commands/hugo_mod_get.md index f4803d723aa..0b8a622f629 100644 --- a/content/en/commands/hugo_mod_get.md +++ b/content/en/commands/hugo_mod_get.md @@ -64,6 +64,7 @@ hugo mod get [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_graph.md b/content/en/commands/hugo_mod_graph.md index a2e2b51a311..506bff27808 100644 --- a/content/en/commands/hugo_mod_graph.md +++ b/content/en/commands/hugo_mod_graph.md @@ -20,12 +20,13 @@ hugo mod graph [flags] [args] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - --clean delete module cache for dependencies that fail verification - -c, --contentDir string filesystem path to content directory - -h, --help help for graph - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + --clean delete module cache for dependencies that fail verification + -c, --contentDir string filesystem path to content directory + -h, --help help for graph + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -40,6 +41,7 @@ hugo mod graph [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_init.md b/content/en/commands/hugo_mod_init.md index 49b2609e132..dcea44b4bde 100644 --- a/content/en/commands/hugo_mod_init.md +++ b/content/en/commands/hugo_mod_init.md @@ -25,11 +25,12 @@ hugo mod init [flags] [args] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - -h, --help help for init - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for init + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -44,6 +45,7 @@ hugo mod init [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_npm.md b/content/en/commands/hugo_mod_npm.md index fcd834798a8..763b3c24766 100644 --- a/content/en/commands/hugo_mod_npm.md +++ b/content/en/commands/hugo_mod_npm.md @@ -33,6 +33,7 @@ hugo mod npm [command] [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_npm_pack.md b/content/en/commands/hugo_mod_npm_pack.md index 30214d55658..47d3e28b9bb 100644 --- a/content/en/commands/hugo_mod_npm_pack.md +++ b/content/en/commands/hugo_mod_npm_pack.md @@ -28,11 +28,12 @@ hugo mod npm pack [flags] [args] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - -h, --help help for pack - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for pack + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -47,6 +48,7 @@ hugo mod npm pack [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_tidy.md b/content/en/commands/hugo_mod_tidy.md index 803ef1c5b44..6d024564f1f 100644 --- a/content/en/commands/hugo_mod_tidy.md +++ b/content/en/commands/hugo_mod_tidy.md @@ -14,11 +14,12 @@ hugo mod tidy [flags] [args] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - -h, --help help for tidy - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for tidy + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -33,6 +34,7 @@ hugo mod tidy [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_vendor.md b/content/en/commands/hugo_mod_vendor.md index 3a829d5fd05..6f96caec29a 100644 --- a/content/en/commands/hugo_mod_vendor.md +++ b/content/en/commands/hugo_mod_vendor.md @@ -20,11 +20,12 @@ hugo mod vendor [flags] [args] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - -h, --help help for vendor - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for vendor + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -39,6 +40,7 @@ hugo mod vendor [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_mod_verify.md b/content/en/commands/hugo_mod_verify.md index b647a2cbbd0..d3f639feab0 100644 --- a/content/en/commands/hugo_mod_verify.md +++ b/content/en/commands/hugo_mod_verify.md @@ -18,12 +18,13 @@ hugo mod verify [flags] [args] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - --clean delete module cache for dependencies that fail verification - -c, --contentDir string filesystem path to content directory - -h, --help help for verify - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + --clean delete module cache for dependencies that fail verification + -c, --contentDir string filesystem path to content directory + -h, --help help for verify + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -38,6 +39,7 @@ hugo mod verify [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_new.md b/content/en/commands/hugo_new.md index ef0ff4cd409..2146f85fcc4 100644 --- a/content/en/commands/hugo_new.md +++ b/content/en/commands/hugo_new.md @@ -36,6 +36,7 @@ Ensure you run this within the root directory of your site. --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_new_content.md b/content/en/commands/hugo_new_content.md index cc53346ad0d..f0ea64ab7f9 100644 --- a/content/en/commands/hugo_new_content.md +++ b/content/en/commands/hugo_new_content.md @@ -25,14 +25,15 @@ hugo new content [path] [flags] ### Options ``` - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --cacheDir string filesystem path to cache directory - -c, --contentDir string filesystem path to content directory - --editor string edit new content with this editor, if provided - -f, --force overwrite file if it already exists - -h, --help help for content - -k, --kind string content type to create - -t, --theme strings themes to use (located in /themes/THEMENAME/) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + --editor string edit new content with this editor, if provided + -f, --force overwrite file if it already exists + -h, --help help for content + -k, --kind string content type to create + --renderSegments strings named segments to render (configured in the segments config) + -t, --theme strings themes to use (located in /themes/THEMENAME/) ``` ### Options inherited from parent commands @@ -47,6 +48,7 @@ hugo new content [path] [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_new_site.md b/content/en/commands/hugo_new_site.md index f8a939df570..a79e6f85adc 100644 --- a/content/en/commands/hugo_new_site.md +++ b/content/en/commands/hugo_new_site.md @@ -37,6 +37,7 @@ hugo new site [path] [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_new_theme.md b/content/en/commands/hugo_new_theme.md index 301c79e0c63..c3003200dff 100644 --- a/content/en/commands/hugo_new_theme.md +++ b/content/en/commands/hugo_new_theme.md @@ -36,6 +36,7 @@ hugo new theme [name] [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_server.md b/content/en/commands/hugo_server.md index 49cd1867b5b..dada8c43e49 100644 --- a/content/en/commands/hugo_server.md +++ b/content/en/commands/hugo_server.md @@ -12,8 +12,9 @@ A high performance webserver Hugo provides its own webserver which builds and serves the site. While hugo server is high performance, it is a webserver with limited options. -'hugo server' will avoid writing the rendered and served content to disk, -preferring to store it in memory. +The `hugo server` command will by default write and serve files from disk, but +you can render to memory by using the `--renderToMemory` flag. This can be +faster in some cases, but it will consume more memory. By default hugo will also watch your files for any changes you make and automatically rebuild the site. It will then live reload any open browser pages @@ -27,51 +28,50 @@ hugo server [command] [flags] ### Options ``` - --appendPort append port to baseURL (default true) - -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ - --bind string interface to which the server will bind (default "127.0.0.1") - -D, --buildDrafts include content marked as draft - -E, --buildExpired include expired content - -F, --buildFuture include content with publishdate in the future - --cacheDir string filesystem path to cache directory - --cleanDestinationDir remove files from destination not found in static directories - -c, --contentDir string filesystem path to content directory - --disableBrowserError do not show build errors in the browser - --disableFastRender enables full re-renders on changes - --disableKinds strings disable different kind of pages (home, RSS etc.) - --disableLiveReload watch without enabling live browser reload on rebuild - --enableGitInfo add Git revision, date, author, and CODEOWNERS info to the pages - --forceSyncStatic copy all files when static is changed. - --gc enable to run some cleanup tasks (remove unused cache files) after the build - -h, --help help for server - --ignoreCache ignores the cache directory - -l, --layoutDir string filesystem path to layout directory - --liveReloadPort int port for live reloading (i.e. 443 in HTTPS proxy situations) (default -1) - --meminterval string interval to poll memory usage (requires --memstats), valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default "100ms") - --memstats string log memory usage to this file - --minify minify any supported output format (HTML, XML etc.) - --navigateToChanged navigate to changed content file on live browser reload - --noBuildLock don't create .hugo_build.lock file - --noChmod don't sync permission mode of files - --noHTTPCache prevent HTTP caching - --noTimes don't sync modification time of files - --panicOnWarning panic on first WARNING log - --poll string set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes - -p, --port int port on which the server will listen (default 1313) - --printI18nWarnings print missing translations - --printMemoryUsage print memory usage to screen at intervals - --printPathWarnings print warnings on duplicate target paths etc. - --printUnusedTemplates print warnings on unused templates. - --renderStaticToDisk serve static files from disk and dynamic files from memory - --renderToDisk serve all files from disk (default is from memory) - --templateMetrics display metrics about template executions - --templateMetricsHints calculate some improvement hints when combined with --templateMetrics - -t, --theme strings themes to use (located in /themes/THEMENAME/) - --tlsAuto generate and use locally-trusted certificates. - --tlsCertFile string path to TLS certificate file - --tlsKeyFile string path to TLS key file - --trace file write trace to file (not useful in general) - -w, --watch watch filesystem for changes and recreate as needed (default true) + --appendPort append port to baseURL (default true) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --bind string interface to which the server will bind (default "127.0.0.1") + -D, --buildDrafts include content marked as draft + -E, --buildExpired include expired content + -F, --buildFuture include content with publishdate in the future + --cacheDir string filesystem path to cache directory + --cleanDestinationDir remove files from destination not found in static directories + -c, --contentDir string filesystem path to content directory + --disableBrowserError do not show build errors in the browser + --disableFastRender enables full re-renders on changes + --disableKinds strings disable different kind of pages (home, RSS etc.) + --disableLiveReload watch without enabling live browser reload on rebuild + --enableGitInfo add Git revision, date, author, and CODEOWNERS info to the pages + --forceSyncStatic copy all files when static is changed. + --gc enable to run some cleanup tasks (remove unused cache files) after the build + -h, --help help for server + --ignoreCache ignores the cache directory + -l, --layoutDir string filesystem path to layout directory + --liveReloadPort int port for live reloading (i.e. 443 in HTTPS proxy situations) (default -1) + --minify minify any supported output format (HTML, XML etc.) + -N, --navigateToChanged navigate to changed content file on live browser reload + --noBuildLock don't create .hugo_build.lock file + --noChmod don't sync permission mode of files + --noHTTPCache prevent HTTP caching + --noTimes don't sync modification time of files + --panicOnWarning panic on first WARNING log + --poll string set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes + -p, --port int port on which the server will listen (default 1313) + --pprof enable the pprof server (port 8080) + --printI18nWarnings print missing translations + --printMemoryUsage print memory usage to screen at intervals + --printPathWarnings print warnings on duplicate target paths etc. + --printUnusedTemplates print warnings on unused templates. + --renderSegments strings named segments to render (configured in the segments config) + --renderStaticToDisk serve static files from disk and dynamic files from memory + --templateMetrics display metrics about template executions + --templateMetricsHints calculate some improvement hints when combined with --templateMetrics + -t, --theme strings themes to use (located in /themes/THEMENAME/) + --tlsAuto generate and use locally-trusted certificates. + --tlsCertFile string path to TLS certificate file + --tlsKeyFile string path to TLS key file + --trace file write trace to file (not useful in general) + -w, --watch watch filesystem for changes and recreate as needed (default true) ``` ### Options inherited from parent commands @@ -86,6 +86,7 @@ hugo server [command] [flags] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_server_trust.md b/content/en/commands/hugo_server_trust.md index b789eb69a60..c4cf750fa38 100644 --- a/content/en/commands/hugo_server_trust.md +++ b/content/en/commands/hugo_server_trust.md @@ -30,6 +30,7 @@ hugo server trust [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/commands/hugo_version.md b/content/en/commands/hugo_version.md index cf23e7fefda..471edd2bb08 100644 --- a/content/en/commands/hugo_version.md +++ b/content/en/commands/hugo_version.md @@ -33,6 +33,7 @@ hugo version [flags] [args] --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern --logLevel string log level (debug|info|warn|error) --quiet build in quiet mode + -M, --renderToMemory render to memory (mostly useful when running the server) -s, --source string filesystem path to read files relative from --themesDir string filesystem path to themes directory -v, --verbose verbose output diff --git a/content/en/content-management/_common/_index.md b/content/en/content-management/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/content-management/_common/_index.md +++ b/content/en/content-management/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/content-management/_index.md b/content/en/content-management/_index.md index 66af2468139..8fb0cf25e1b 100644 --- a/content/en/content-management/_index.md +++ b/content/en/content-management/_index.md @@ -1,12 +1,12 @@ --- title: Content management -linkTitle: Overview +linkTitle: In this section description: Hugo makes managing large static sites easy with support for archetypes, content types, menus, cross references, summaries, and more. categories: [] keywords: [] menu: docs: - identifier: content-management-overview + identifier: content-management-in-this-section parent: content-management weight: 10 weight: 10 diff --git a/content/en/content-management/archetypes.md b/content/en/content-management/archetypes.md index 94f03884800..f89c3f6b385 100644 --- a/content/en/content-management/archetypes.md +++ b/content/en/content-management/archetypes.md @@ -15,7 +15,7 @@ aliases: [/content/archetypes/] ## Overview -A content file consists of [front matter] and markup. The markup is typically markdown, but Hugo also supports other [content formats]. Front matter can be TOML, YAML, or JSON. +A content file consists of [front matter] and markup. The markup is typically Markdown, but Hugo also supports other [content formats]. Front matter can be TOML, YAML, or JSON. The `hugo new content` command creates a new file in the `content` directory, using an archetype as a template. This is the default archetype: @@ -70,14 +70,33 @@ If none of these exists, Hugo uses a built-in default archetype. 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]: +Archetypes receive the following [context]: -- `.Date` -- `.Type` -- `.Site` (see [details](/variables/site/)) -- `.File` (see [details](/variables/file/)) +Date +: (`string`) The current date and time, formatted in compliance with RFC3339. -As shown above, the default archetype passes `.File.ContentBaseName` as the argument to the `replace` function when populating the title in front matter. +File +: (`hugolib.fileInfo`) Returns file information for the current page. See [details](/methods/page/file). + +Type +: (`string`) The [content type] inferred from the top-level directory name, or as specified by the `--kind` flag passed to the `hugo new content` command. + +[content type]: /getting-started/glossary#content-type + +Site +: (`page.Site`) The current site object. See [details](/methods/site/). + +## Alternate date format + +To insert date and time with an alternate format, use the [`time.Now`] function: + +[`time.Now`]: /functions/time/now/ + +{{< code-toggle file=archetypes/default.md fm=true >}} +title = '{{ replace .File.ContentBaseName `-` ` ` | title }}' +date = '{{ time.Now.Format "2006-01-02" }}' +draft = true +{{< /code-toggle >}} ## Include content diff --git a/content/en/content-management/build-options.md b/content/en/content-management/build-options.md index e8b3354bf24..a279fb651f8 100644 --- a/content/en/content-management/build-options.md +++ b/content/en/content-management/build-options.md @@ -12,10 +12,10 @@ toc: true aliases: [/content/build-options/] --- -Build options are stored in a reserved front matter object named `_build` with these defaults: +Build options are stored in a reserved front matter object named `build` with these defaults: {{< code-toggle file=content/example/index.md fm=true >}} -[_build] +[build] list = 'always' publishResources = true render = 'always' @@ -55,17 +55,17 @@ render - `never` : Never render the page to disk, and exclude it from all page collections. -[page bundles]: content-management/page-bundles -[page resources]: /content-management/page-resources -[`Permalink`]: /methods/resource/permalink -[`RelPermalink`]: /methods/resource/relpermalink -[`Publish`]: /methods/resource/publish +[page bundles]: /content-management/page-bundles/ +[page resources]: /content-management/page-resources/ +[`Permalink`]: /methods/resource/permalink/ +[`RelPermalink`]: /methods/resource/relpermalink/ +[`Publish`]: /methods/resource/publish/ {{% note %}} Any page, regardless of its build options, will always be available by using the [`.Page.GetPage`] or [`.Site.GetPage`] method. -[`.Page.GetPage`]: /methods/page/getpage -[`.Site.GetPage`]: /methods/site/getpage +[`.Page.GetPage`]: /methods/page/getpage/ +[`.Site.GetPage`]: /methods/site/getpage/ {{% /note %}} ## Example -- headless page @@ -85,7 +85,7 @@ Set the build options in front matter: {{< code-toggle file=content/headless/index.md fm=true >}} title = 'Headless page' -[_build] +[build] list = 'never' publishResources = false render = 'never' @@ -121,7 +121,7 @@ In the example above, note that: Create a unpublished section whose content and resources can be included in other pages. -[branch bundle]: /content-management/page-bundles +[branch bundle]: /content-management/page-bundles/ ```text content/ @@ -143,7 +143,7 @@ Set the build options in front matter, using the `cascade` keyword to "cascade" {{< code-toggle file=content/headless/_index.md fm=true >}} title = 'Headless section' [[cascade]] -[cascade._build] +[cascade.build] list = 'local' publishResources = false render = 'never' @@ -201,10 +201,10 @@ Set the build options in front matter, using the `cascade` keyword to "cascade" {{< code-toggle file=content/glossary/_index.md fm=true >}} title = 'Glossary' -[_build] +[build] render = 'always' [[cascade]] -[cascade._build] +[cascade.build] list = 'local' publishResources = false render = 'never' @@ -247,7 +247,7 @@ Set the build options in front matter: {{< code-toggle file=content/books/_index.md fm=true >}} title = 'Books' -[_build] +[build] render = 'never' list = 'never' {{< /code-toggle >}} @@ -294,7 +294,7 @@ Set the build options in front matter, using the `cascade` keyword to "cascade" {{< code-toggle file=content/internal/_index.md >}} title = 'Internal' [[cascade]] -[cascade._build] +[cascade.build] render = 'never' list = 'never' [cascade._target] diff --git a/content/en/content-management/comments.md b/content/en/content-management/comments.md index 6e58b36e490..8f55c413c96 100644 --- a/content/en/content-management/comments.md +++ b/content/en/content-management/comments.md @@ -37,7 +37,7 @@ For many websites, this is enough configuration. However, you also have the opti ### Render Hugo's built-in Disqus partial template -Disqus has its own [internal template](/templates/internal/#disqus) available, to render it add the following code where you want comments to appear: +Disqus has its own [internal template](/templates/embedded/#disqus) available, to render it add the following code where you want comments to appear: ```go-html-template {{ template "_internal/disqus.html" . }} @@ -45,25 +45,30 @@ Disqus has its own [internal template](/templates/internal/#disqus) available, t ## Alternatives -These are some alternatives to Disqus: - -* [Cactus Comments](https://cactus.chat/docs/integrations/hugo/) (Open Source, Matrix appservice, Docker install) -* [Comentario](https://gitlab.com/comentario/comentario) (Open Source, self-hosted, Go/Angular, run locally, in Docker or Kubernetes) -* [Commento](https://commento.io/) (Open Source, available as a service, local install, or docker image) -* [Giscus](https://giscus.app/) (Open source, comments system powered by GitHub Discussions) -* [Graph Comment](https://graphcomment.com/) -* [Hyvor Talk](https://talk.hyvor.com/) (Available as a service) -* [IntenseDebate](https://intensedebate.com/) -* [Isso](https://isso-comments.de/) (Self-hosted, Python) ([tutorial][issotutorial]) -* [Muut](https://muut.com/) -* [Remark42](https://remark42.com/) (Open source, Golang, Easy to run docker) -* [ReplyBox](https://getreplybox.com/) -* [Staticman](https://staticman.net/) -* [Talkyard](https://blog-comments.talkyard.io/) (Open source, & serverless hosting) -* [Utterances](https://utteranc.es/) (Open source, GitHub comments widget built on GitHub issues) +Commercial commenting systems: + +- [Emote](https://emote.com/) +- [Graph Comment](https://graphcomment.com/) +- [Hyvor Talk](https://talk.hyvor.com/) +- [IntenseDebate](https://intensedebate.com/) +- [ReplyBox](https://getreplybox.com/) + +Open-source commenting systems: + +- [Cactus Comments](https://cactus.chat/docs/integrations/hugo/) +- [Comentario](https://gitlab.com/comentario/comentario/) +- [Comma](https://github.com/Dieterbe/comma/) +- [Commento](https://commento.io/) +- [Discourse](https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963) +- [Giscus](https://giscus.app/) +- [Isso](https://isso-comments.de/) +- [Remark42](https://remark42.com/) +- [Staticman](https://staticman.net/) +- [Talkyard](https://blog-comments.talkyard.io/) +- [Utterances](https://utteranc.es/) [configuration]: /getting-started/configuration/ -[disquspartial]: /templates/internal/#disqus +[disquspartial]: /templates/embedded/#disqus [disqussetup]: https://disqus.com/profile/signup/ [forum]: https://discourse.gohugo.io [front matter]: /content-management/front-matter/ @@ -71,4 +76,3 @@ These are some alternatives to Disqus: [issotutorial]: https://stiobhart.net/2017-02-24-isso-comments/ [partials]: /templates/partials/ [MongoDB]: https://www.mongodb.com/ -[tweet]: https://twitter.com/spf13 diff --git a/content/en/content-management/content-adapters.md b/content/en/content-management/content-adapters.md new file mode 100644 index 00000000000..11257b89560 --- /dev/null +++ b/content/en/content-management/content-adapters.md @@ -0,0 +1,355 @@ +--- +title: Content adapters +description: Create content adapters to dynamically add content when building your site. +categories: [content management] +keywords: [] +menu: + docs: + parent: content-management + weight: 290 +weight: 290 +toc: true +--- + +{{< new-in 0.126.0 >}} + +## Overview + +A content adapter is a template that dynamically creates pages when building a site. For example, use a content adapter to create pages from a remote data source such as JSON, TOML, YAML, or XML. + +Unlike templates that reside in the layouts directory, content adapters reside in the content directory, no more than one per directory per language. When a content adapter creates a page, the page's [logical path] will be relative to the content adapter. + +```text +content/ +├── articles/ +│ ├── _index.md +│ ├── article-1.md +│ └── article-2.md +├── books/ +│ ├── _content.gotmpl <-- content adapter +│ └── _index.md +└── films/ + ├── _content.gotmpl <-- content adapter + └── _index.md +``` + +Each content adapter is named _content.gotmpl and uses the same [syntax] as templates in the layouts directory. You can use any of the [template functions] within a content adapter, as well as the methods described below. + +## Methods + +Use these methods within a content adapter. + +###### AddPage + +Adds a page to the site. + +{{< code file=content/books/_content.gotmpl >}} +{{ $content := dict + "mediaType" "text/markdown" + "value" "The _Hunchback of Notre Dame_ was written by Victor Hugo." +}} +{{ $page := dict + "content" $content + "kind" "page" + "path" "the-hunchback-of-notre-dame" + "title" "The Hunchback of Notre Dame" +}} +{{ .AddPage $page }} +{{< /code >}} + +###### AddResource + +Adds a page resource to the site. + +{{< code file=content/books/_content.gotmpl >}} +{{ with resources.Get "images/a.jpg" }} + {{ $content := dict + "mediaType" .MediaType.Type + "value" . + }} + {{ $resource := dict + "content" $content + "path" "the-hunchback-of-notre-dame/cover.jpg" + }} + {{ $.AddResource $resource }} +{{ end }} +{{< /code >}} + +Then retrieve the new page resource with something like: + +{{< code file=layouts/_default/single.html >}} +{{ with .Resources.Get "cover.jpg" }} + +{{ end }} +{{< /code >}} + +###### Site + +Returns the `Site` to which the pages will be added. + +{{< code file=content/books/_content.gotmpl >}} +{{ .Site.Title }} +{{< /code >}} + +###### Store + +Returns a persistent “scratch pad” to store and manipulate data. The main use case for this is to transfer values between executions when [EnableAllLanguages](#enablealllanguages) is set. See [examples](/methods/page/store/). + +{{< code file=content/books/_content.gotmpl >}} +{{ .Store.Set "key" "value" }} +{{ .Store.Get "key" }} +{{< /code >}} + +###### EnableAllLanguages + +By default, Hugo executes the content adapter for the language defined by the _content.gotmpl file . Use this method to activate the content adapter for all languages. + +{{< code file=content/books/_content.gotmpl >}} +{{ .EnableAllLanguages }} +{{ $content := dict + "mediaType" "text/markdown" + "value" "The _Hunchback of Notre Dame_ was written by Victor Hugo." +}} +{{ $page := dict + "content" $content + "kind" "page" + "path" "the-hunchback-of-notre-dame" + "title" "The Hunchback of Notre Dame" +}} +{{ .AddPage $page }} +{{< /code >}} + +## Page map + +Set any [front matter field] in the map passed to the [`AddPage`](#addpage) method, excluding `markup`. Instead of setting the `markup` field, specify the `content.mediaType` as described below. + +This table describes the fields most commonly passed to the `AddPage` method. + +Key|Descripion|Required +:--|:--|:-: +`content.mediaType`|The content [media type]. Default is `text/markdown`. See [content formats] for examples.|  +`content.value`|The content value as a string.|  +`dates.date`|The page creation date as a `time.Time` value.|  +`dates.expiryDate`|The page expiry date as a `time.Time` value.|  +`dates.lastmod`|The page last modification date as a `time.Time` value.|  +`dates.publishDate`|The page publication date as a `time.Time` value.|  +`kind`|The [page kind]. Default is `page`.|  +`params`|A map of page parameters.|  +`path`|The page's [logical path] relative to the content adapter. Do not include a leading slash or file extension.|:heavy_check_mark: +`title`|The page title.|  + +{{% note %}} +While `path` is the only required field, we recommend setting `title` as well. + +When setting the `path`, Hugo transforms the given string to a logical path. For example, setting `path` to `A B C` produces a logical path of `/section/a-b-c`. +{{% /note %}} + +## Resource map + +Construct the map passed to the [`AddResource`](#addresource) method using the fields below. + +Key|Descripion|Required +:--|:--|:-: +`content.mediaType`|The content [media type].|:heavy_check_mark: +`content.value`|The content value as a string or resource.|:heavy_check_mark: +`name`|The resource name.|  +`params`|A map of resource parameters.|  +`path`|The resources's [logical path] relative to the content adapter. Do not include a leading slash.|:heavy_check_mark: +`title`|The resource title.|  + +{{% note %}} +If the `content.value` is a string Hugo creates a new resource. If the `content.value` is a resource, Hugo obtains the value from the existing resource. + +When setting the `path`, Hugo transforms the given string to a logical path. For example, setting `path` to `A B C/cover.jpg` produces a logical path of `/section/a-b-c/cover.jpg`. +{{% /note %}} + +## Example + +Create pages from remote data, where each page represents a book review. + +Step 1 +: Create the content structure. + +```text +content/ +└── books/ + ├── _content.gotmpl <-- content adapter + └── _index.md +``` + +Step 2 +: Inspect the remote data to determine how to map key-value pairs to front matter fields. + +: + +Step 3 +: Create the content adapter. + +{{< code file=content/books/_content.gotmpl copy=true >}} +{{/* Get remote data. */}} +{{ $data := dict }} +{{ $url := "https://gohugo.io/shared/examples/data/books.json" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "Unable to get remote resource %s: %s" $url . }} + {{ else }} + {{ $data = . | transform.Unmarshal }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %s" $url }} +{{ end }} + +{{/* Add pages and page resources. */}} +{{ range $data }} + + {{/* Add page. */}} + {{ $content := dict "mediaType" "text/markdown" "value" .summary }} + {{ $dates := dict "date" (time.AsTime .date) }} + {{ $params := dict "author" .author "isbn" .isbn "rating" .rating "tags" .tags }} + {{ $page := dict + "content" $content + "dates" $dates + "kind" "page" + "params" $params + "path" .title + "title" .title + }} + {{ $.AddPage $page }} + + {{/* Add page resource. */}} + {{ $item := . }} + {{ with $url := $item.cover }} + {{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "Unable to get remote resource %s: %s" $url . }} + {{ else }} + {{ $content := dict "mediaType" .MediaType.Type "value" .Content }} + {{ $params := dict "alt" $item.title }} + {{ $resource := dict + "content" $content + "params" $params + "path" (printf "%s/cover.%s" $item.title .MediaType.SubType) + }} + {{ $.AddResource $resource }} + {{ end }} + {{ else }} + {{ errorf "Unable to get remote resource %s" $url }} + {{ end }} + {{ end }} + +{{ end }} +{{< /code >}} + +Step 4 +: Create a single page template to render each book review. + +{{< code file=layouts/books/single.html copy=true >}} +{{ define "main" }} +

{{ .Title }}

+ + {{ with .Resources.GetMatch "cover.*" }} + {{ .Params.alt }} + {{ end }} + +

Author: {{ .Params.author }}

+ +

+ ISBN: {{ .Params.isbn }}
+ Rating: {{ .Params.rating }}
+ Review date: {{ .Date | time.Format ":date_long" }} +

+ + {{ with .GetTerms "tags" }} +

Tags:

+ + {{ end }} + + {{ .Content }} +{{ end }} +{{< /code >}} + +## Multilingual sites + +With multilingual sites you can: + +1. Create one content adapter for all languages using the [`EnableAllLanguages`](#enablealllanguages) method as described above. +2. Create content adapters unique to each language. See the examples below. + +### Translations by file name + +With this site configuration: + +{{< code-toggle file=hugo >}} +[languages.en] +weight = 1 + +[languages.de] +weight = 2 +{{< /code-toggle >}} + +Include a language designator in the content adapter's file name. + +```text +content/ +└── books/ + ├── _content.de.gotmpl + ├── _content.en.gotmpl + ├── _index.de.md + └── _index.en.md +``` + +### Translations by content directory + +With this site configuration: + +{{< code-toggle file=hugo >}} +[languages.en] +contentDir = 'content/en' +weight = 1 + +[languages.de] +contentDir = 'content/de' +weight = 2 +{{< /code-toggle >}} + +Create a single content adapter in each directory: + +```text +content/ +├── de/ +│ └── books/ +│ ├── _content.gotmpl +│ └── _index.md +└── en/ + └── books/ + ├── _content.gotmpl + └── _index.md +``` + +## Page collisions + +Two or more pages collide when they have the same publication path. Due to concurrency, the content of the published page is indeterminate. Consider this example: + +```text +content/ +└── books/ + ├── _content.gotmpl <-- content adapter + ├── _index.md + └── the-hunchback-of-notre-dame.md +``` + +If the content adapter also creates books/the-hunchback-of-notre-dame, the content of the published page is indeterminate. You can not define the processing order. + +To detect page collisions, use the `--printPathWarnings` flag when building your site. + +[content formats]: /content-management/formats/#classification +[front matter field]: /content-management/front-matter/#fields +[logical path]: /getting-started/glossary/#logical-path +[media type]: https://en.wikipedia.org/wiki/Media_type +[page kind]: /getting-started/glossary/#page-kind +[syntax]: /templates/introduction/ +[template functions]: /functions/ diff --git a/content/en/content-management/cross-references.md b/content/en/content-management/cross-references.md index 500e388a41d..24da0bfda87 100644 --- a/content/en/content-management/cross-references.md +++ b/content/en/content-management/cross-references.md @@ -16,7 +16,7 @@ The `ref` and `relref` shortcodes display the absolute and relative permalinks t ## Use of `ref` and `relref` -The `ref` and `relref` shortcodes require a single parameter: the path to a content document, with or without a file extension, with or without an anchor. Paths without a leading `/` are first resolved relative to the current page, then to the remainder of the site. +The `ref` and `relref` shortcodes require a single argument: the path to a content document, with or without a file extension, with or without an anchor. Paths without a leading `/` are first resolved relative to the current page, then to the remainder of the site. ```text . @@ -60,7 +60,7 @@ index.md can be reference either by its path or by its containing folder without {{}} // <- References /products/index.md ``` -To generate a hyperlink using `ref` or `relref` in markdown: +To generate a hyperlink using `ref` or `relref` in Markdown: ```text [About]({{}} "About Us") @@ -70,9 +70,11 @@ Hugo emits an error or warning if a document cannot be uniquely resolved. The er ### Link to another language version +Using `ref` or `relref` without specifying a language, will make the reference resolve to the language of the current content page. + To link to another language version of a document, use this syntax: -```go-html-template +```text {{}} ``` @@ -80,7 +82,7 @@ To link to another language version of a document, use this syntax: To link to another Output Format of a document, use this syntax: -```go-html-template +```text {{}} ``` @@ -88,7 +90,7 @@ To link to another Output Format of a document, use this syntax: When using Markdown document types, Hugo generates element IDs for every heading on a page. For example: -```md +```text ## Reference ``` @@ -100,14 +102,14 @@ produces this HTML: Get the permalink to a heading by appending the ID to the path when using the `ref` or `relref` shortcodes: -```go-html-template +```text {{}} {{}} ``` Generate a custom heading ID by including an attribute. For example: -```md +```text ## Reference A {#foo} ## Reference B {id="bar"} ``` @@ -121,7 +123,7 @@ produces this HTML: Hugo will generate unique element IDs if the same heading appears more than once on a page. For example: -```md +```text ## Reference ## Reference ## Reference diff --git a/content/en/content-management/data-sources.md b/content/en/content-management/data-sources.md new file mode 100644 index 00000000000..40634acef7a --- /dev/null +++ b/content/en/content-management/data-sources.md @@ -0,0 +1,126 @@ +--- +title: Data sources +description: Use local and remote data sources to augment or create content. +categories: [content management] +keywords: [data,json,toml,yaml,xml] +menu: + docs: + parent: content-management + weight: 280 +weight: 280 +toc: true +aliases: [/extras/datafiles/,/extras/datadrivencontent/,/doc/datafiles/,/templates/data-templates/] +--- + +Hugo can access and [unmarshal] local and remote data sources including CSV, JSON, TOML, YAML, and XML. Use this data to augment existing content or to create new content. + +[unmarshal]: /getting-started/glossary/#unmarshal + +A data source might be a file in the data directory, a [global resource], a [page resource], or a [remote resource]. + +[global resource]: /getting-started/glossary/#global-resource +[page resource]: /getting-started/glossary/#page-resource +[remote resource]: /getting-started/glossary/#remote-resource + +## Data directory + +The data directory in the root of your project may contain one or more data files, in either a flat or nested tree. Hugo merges the data files to create a single data structure, accessible with the `Data` method on a `Site` object. + +Hugo also merges data directories from themes and modules into this single data structure, where the data directory in the root of your project takes precedence. + +{{% note %}} +Hugo reads the combined data structure into memory and keeps it there for the entire build. For data that is infrequently accessed, use global or page resources instead. +{{% /note %}} + +Theme and module authors may wish to namespace their data files to prevent collisions. For example: + +```text +project/ +└── data/ + └── mytheme/ + └── foo.json +``` + +{{% note %}} +Do not place CSV files in the data directory. Access CSV files as page, global, or remote resources. +{{% /note %}} + +See the documentation for the [`Data`] method on `Page` object for details and examples. + +[`Data`]: /methods/site/data/ + +## Global resources + +Use the `resources.Get` and `transform.Unmarshal` functions to access data files that exist as global resources. + +See the [`transform.Unmarshal`](/functions/transform/unmarshal/#global-resource) documentation for details and examples. + +## Page resources + +Use the `Resources.Get` method on a `Page` object combined with the `transform.Unmarshal` function to access data files that exist as page resources. + +See the [`transform.Unmarshal`](/functions/transform/unmarshal/#page-resource) documentation for details and examples. + +## Remote resources + +Use the `resources.GetRemote` and `transform.Unmarshal` functions to access remote data. + +See the [`transform.Unmarshal`](/functions/transform/unmarshal/#remote-resource) documentation for details and examples. + +## Augment existing content + +Use data sources to augment existing content. For example, create a shortcode to render an HTML table from a global CSV resource. + +{{< code file=assets/pets.csv >}} +"name","type","breed","age" +"Spot","dog","Collie","3" +"Felix","cat","Malicious","7" +{{< /code >}} + +{{< code file=content/example.md lang=text >}} +{{}} +{{< /code >}} + +{{< code file=layouts/shortcodes/csv-to-table.html >}} +{{ with $file := .Get 0 }} + {{ with resources.Get $file }} + {{ with . | transform.Unmarshal }} + + + + {{ range index . 0 }} + + {{ end }} + + + + {{ range after 1 . }} + + {{ range . }} + + {{ end }} + + {{ end }} + +
{{ . }}
{{ . }}
+ {{ end }} + {{ else }} + {{ errorf "The %q shortcode was unable to find %s. See %s" $.Name $file $.Position }} + {{ end }} +{{ else }} + {{ errorf "The %q shortcode requires one positional argument, the path to the CSV file relative to the assets directory. See %s" .Name .Position }} +{{ end }} +{{< /code >}} + +Hugo renders this to: + +name|type|breed|age +:--|:--|:--|:-- +Spot|dog|Collie|3 +Felix|cat|Malicious|7 + +## Create new content + +Use [content adapters] to create new content. + +[content adapters]: /content-management/content-adapters/ diff --git a/content/en/content-management/diagrams.md b/content/en/content-management/diagrams.md index 17407098fa5..8851034c6c2 100644 --- a/content/en/content-management/diagrams.md +++ b/content/en/content-management/diagrams.md @@ -1,20 +1,22 @@ --- title: Diagrams -description: Use fenced code blocks and markdown render hooks to display diagrams. +description: Use fenced code blocks and Markdown render hooks to include diagrams in your content. categories: [content management] keywords: [diagrams,drawing] menu: docs: parent: content-management - weight: 50 -weight: 50 + weight: 260 +weight: 260 toc: true --- -{{< new-in 0.93.0 >}} ## GoAT diagrams (ASCII) -Hugo supports [GoAT](https://github.com/bep/goat) natively. This means that this code block: +Hugo natively supports [GoAT] diagrams with an [embedded code block render hook]. This means that this code block: + +[GoAT]: https://github.com/bep/goat +[embedded code block render hook]: {{% eturl render-codeblock-goat %}} ````txt ```goat @@ -44,19 +46,21 @@ Will be rendered as: ## Mermaid diagrams -Hugo currently does not provide default templates for Mermaid diagrams. But you can easily add your own. One way to do it would be to create `layouts/_default/_markup/render-codeblock-mermaid.html`: +Hugo does not provide a built-in template for Mermaid diagrams. Create your own using a [code block render hook]: -```go-html-template +[code block render hook]: /render-hooks/code-blocks/ + +{{< code file=layouts/_default/_markup/render-codeblock-mermaid.html >}}
   {{- .Inner | safeHTML }}
 
{{ .Page.Store.Set "hasMermaid" true }} -``` +{{< /code >}} -And then include this snippet at the bottom of the content template (**Note**: below `.Content` as the render hook is not processed until `.Content` is executed): +And then include this snippet at the bottom of the content template: ```go-html-template -{{ if .Page.Store.Get "hasMermaid" }} +{{ if .Store.Get "hasMermaid" }} ` → `` -* `` → `` +Use the `safe.JS` function to encapsulate a known safe EcmaScript5 Expression. + +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. + +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. + +Using the `safe.JS` function to include valid but untrusted JSON is not safe. A safe alternative is to parse the JSON with the [`transform.Unmarshal`] function and then pass the resultant object into the template, where it will be converted to sanitized JSON when presented in a JavaScript context. + +[`transform.Unmarshal`]: /functions/transform/unmarshal/ + +See the [Go documentation] for details. + +[Go documentation]: https://pkg.go.dev/html/template#JS + +## Example + +Without a safe declaration: + +```go-html-template +{{ $js := "x + y" }} + +``` + +Hugo renders the above to: + +```html + +``` + +To declare the string as safe: + +```go-html-template +{{ $js := "x + y" }} + +``` + +Hugo renders the above to: + +```html + +``` diff --git a/content/en/functions/safe/JSStr.md b/content/en/functions/safe/JSStr.md index 36d2b36fa8d..e7e232d1be3 100644 --- a/content/en/functions/safe/JSStr.md +++ b/content/en/functions/safe/JSStr.md @@ -13,12 +13,27 @@ action: - functions/safe/URL returnType: template.JSStr signatures: [safe.JSStr INPUT] +toc: true 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: +## Introduction + +{{% include "functions/_common/go-html-template-package.md" %}} + +## Usage + +Use the `safe.JSStr` function to encapsulate 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. + +See the [Go documentation] for details. + +[Go documentation]: https://pkg.go.dev/html/template#JSStr + +## Example + +Without a safe declaration: ```go-html-template {{ $title := "Lilo & Stitch" }} @@ -27,7 +42,7 @@ Without declaring a variable to be a safe JavaScript string: ``` -Rendered: +Hugo renders the above to: ```html ``` -To avoid escaping by Go's [html/template] package: +To declare the string as safe: ```go-html-template {{ $title := "Lilo & Stitch" }} @@ -44,12 +59,10 @@ To avoid escaping by Go's [html/template] package: ``` -Rendered: +Hugo renders the above to: ```html ``` - -[html/template]: https://pkg.go.dev/html/template diff --git a/content/en/functions/safe/URL.md b/content/en/functions/safe/URL.md index 2da6895e536..e4b3224dacb 100644 --- a/content/en/functions/safe/URL.md +++ b/content/en/functions/safe/URL.md @@ -13,58 +13,56 @@ action: - functions/safe/JSStr returnType: template.URL signatures: [safe.URL INPUT] +toc: true 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. +## Introduction -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. +{{% include "functions/_common/go-html-template-package.md" %}} -The following examples use a [site `hugo.toml`][configuration] with the following [menu entry][menus]: +## Usage -{{< code-toggle file=hugo >}} -[[menus.main]] -name = "IRC: #golang at freenode" -url = "irc://irc.freenode.net/#golang" -{{< /code-toggle >}} +Use the `safe.URL` function to encapsulate a known safe URL or URL substring. Schemes other than the following are considered unsafe: -The following is an example of a sidebar partial that may be used in conjunction with the preceding front matter example: +- `http:` +- `https:` +- `mailto:` -{{< code file=layouts/partials/bad-url-sidebar-menu.html >}} - -
    - {{ range .Site.Menus.main }} -
  • {{ .Name }}
  • - {{ end }} -
-{{< /code >}} +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. -This partial would produce the following HTML output: +See the [Go documentation] for details. + +[Go documentation]: https://pkg.go.dev/html/template#URL + +## Example + +Without a safe declaration: + +```go-html-template +{{ $href := "irc://irc.freenode.net/#golang" }} +IRC +``` + +Hugo renders the above to: ```html - - +IRC ``` -The odd output can be remedied by adding ` | safeURL` to our `.URL` page variable: +{{% note %}} +`ZgotmplZ` is a special value that indicates that unsafe content reached a CSS or URL context at runtime. +{{% /note %}} + +To declare the string as safe: -{{< code file=layouts/partials/correct-url-sidebar-menu.html >}} - - -{{< /code >}} +```go-html-template +{{ $href := "irc://irc.freenode.net/#golang" }} +IRC +``` -With the `.URL` page variable piped through `safeURL`, we get the desired output: +Hugo renders the above to: ```html - +IRC ``` - -[configuration]: /getting-started/configuration/ -[menus]: /content-management/menus/ -[RFC 3986]: https://tools.ietf.org/html/rfc3986 diff --git a/content/en/functions/strings/ContainsNonSpace.md b/content/en/functions/strings/ContainsNonSpace.md index 188aa14ba63..d4c72eea09a 100644 --- a/content/en/functions/strings/ContainsNonSpace.md +++ b/content/en/functions/strings/ContainsNonSpace.md @@ -1,6 +1,6 @@ --- title: strings.ContainsNonSpace -description: Reports whether the given string contains any non-space characters as defined by Unicode’s White Space property. +description: Reports whether the given string contains any non-space characters as defined by Unicode's White Space property. categories: [] keywords: [] action: @@ -24,7 +24,7 @@ aliases: [/functions/strings.containsnonspace] {{ strings.ContainsNonSpace "\n abc" }} → true ``` -Common white space characters include: +Common whitespace characters include: ```text '\t', '\n', '\v', '\f', '\r', ' ' diff --git a/content/en/functions/strings/CountRunes.md b/content/en/functions/strings/CountRunes.md index 10788e1746f..87d9da680a6 100644 --- a/content/en/functions/strings/CountRunes.md +++ b/content/en/functions/strings/CountRunes.md @@ -21,4 +21,4 @@ In contrast with the [`strings.RuneCount`] function, which counts every rune in {{ "Hello, 世界" | strings.CountRunes }} → 8 ``` -[`strings.RuneCount`]: /functions/strings/runecount +[`strings.RuneCount`]: /functions/strings/runecount/ diff --git a/content/en/functions/strings/Diff/diff-screen-capture.png b/content/en/functions/strings/Diff/diff-screen-capture.png new file mode 100644 index 0000000000000000000000000000000000000000..62baa45630a97cc15d31bb811243679905da9695 GIT binary patch literal 7290 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 + +Use `strings.Diff` to compare two strings and render a highlighted diff: + +```go-html-template +{{ $want := ` +

The product of 6 and 7 is 42.

+

The product of 7 and 6 is 42.

+`}} + +{{ $got := ` +

The product of 6 and 7 is 42.

+

The product of 7 and 6 is 13.

+`}} + +{{ $diff := strings.Diff "want" $want "got" $got }} +{{ transform.Highlight $diff "diff" }} +``` + +Rendered: + +![sreen capture](diff-screen-capture.png) diff --git a/content/en/functions/strings/FindRESubmatch.md b/content/en/functions/strings/FindRESubmatch.md index 302d1d9b4f0..3feb15bbdf4 100644 --- a/content/en/functions/strings/FindRESubmatch.md +++ b/content/en/functions/strings/FindRESubmatch.md @@ -30,7 +30,7 @@ By default, `findRESubmatch` finds all matches. You can limit the number of matc ## Practical example -This markdown: +This Markdown: ```text - [Example](https://example.org) diff --git a/content/en/functions/strings/RuneCount.md b/content/en/functions/strings/RuneCount.md index 46fedf01f41..86aab0c640c 100644 --- a/content/en/functions/strings/RuneCount.md +++ b/content/en/functions/strings/RuneCount.md @@ -21,4 +21,4 @@ In contrast with the [`strings.CountRunes`] function, which excludes whitespace, {{ "Hello, 世界" | strings.RuneCount }} → 9 ``` -[`strings.CountRunes`]: /functions/strings/countrunes +[`strings.CountRunes`]: /functions/strings/countrunes/ diff --git a/content/en/functions/strings/SliceString.md b/content/en/functions/strings/SliceString.md index 2f33f8f6561..ee4ed908145 100644 --- a/content/en/functions/strings/SliceString.md +++ b/content/en/functions/strings/SliceString.md @@ -1,20 +1,26 @@ --- title: strings.SliceString -description: Creates a slice of a half-open range, including start and end indices. +description: Returns a substring of the given string, beginning with the start position and ending before the end position. categories: [] keywords: [] action: aliases: [slicestr] - related: [] + related: + - functions/strings/Substr returnType: string - signatures: ['strings.SliceString STRING START [END]'] + signatures: ['strings.SliceString STRING [START] [END]'] 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. +The START and END positions are zero-based, where `0` represents the first character of the string. If START is not specified, the substring will begin at position `0`. If END is not specified, the substring will end after the last character. ```go-html-template -{{ slicestr "BatMan" 3 }}` → Man -{{ slicestr "BatMan" 0 3 }}` → Bat +{{ slicestr "BatMan" }} → BatMan +{{ slicestr "BatMan" 3 }} → Man +{{ slicestr "BatMan" 0 3 }} → Bat ``` + +The START and END arguments represent the endpoints of a [half-open interval], a concept that may be difficult to grasp when first encountered. You may find that the [`strings.Substr`] function is easier to understand. + +[half-open interval]: /getting-started/glossary/#interval +[`strings.Substr`]: /functions/strings/substr/ diff --git a/content/en/functions/strings/Split.md b/content/en/functions/strings/Split.md index a9973ea63b2..e3e0ee13eba 100644 --- a/content/en/functions/strings/Split.md +++ b/content/en/functions/strings/Split.md @@ -22,5 +22,5 @@ Examples: {{% note %}} The `strings.Split` function essentially does the opposite of the [`collections.Delimit`] function. While `split` creates a slice from a string, `delimit` creates a string from a slice. -[`collections.Delimit`]: /functions/collections/delimit +[`collections.Delimit`]: /functions/collections/delimit/ {{% /note %}} diff --git a/content/en/functions/strings/Substr.md b/content/en/functions/strings/Substr.md index 6c1852f5800..19a029e28c6 100644 --- a/content/en/functions/strings/Substr.md +++ b/content/en/functions/strings/Substr.md @@ -1,21 +1,20 @@ --- title: strings.Substr -description: Extracts parts of a string from a specified character's position and returns the specified number of characters. +description: Returns a substring of the given string, beginning with the start position and ending after the given length. categories: [] keywords: [] action: aliases: [substr] - related: [] + related: + - functions/strings/SliceString returnType: string - signatures: ['strings.Substr STRING START [LENGTH]'] + signatures: ['strings.Substr STRING [START] [LENGTH]'] 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. +The start position is zero-based, where `0` represents the first character of the string. If START is not specified, the substring will begin at position `0`. Specify a negative START position to extract characters from the end of the string. -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. +If LENGTH is not specified, the substring will include all characters from the START position to the end of the string. If negative, that number of characters will be omitted from the end of string. ```go-html-template {{ substr "abcdef" 0 }} → abcdef diff --git a/content/en/functions/strings/Trim.md b/content/en/functions/strings/Trim.md index 6dfac024b1e..9a87ff20680 100644 --- a/content/en/functions/strings/Trim.md +++ b/content/en/functions/strings/Trim.md @@ -32,7 +32,7 @@ To remove leading and trailing newline characters and carriage returns: The `strings.Trim` function is commonly used in shortcodes to remove leading and trailing newlines characters and carriage returns from the content within the opening and closing shortcode tags. -For example, with this markdown: +For example, with this Markdown: ```text {{}} diff --git a/content/en/functions/strings/Truncate.md b/content/en/functions/strings/Truncate.md index 17ae0afc612..2e7693eb595 100644 --- a/content/en/functions/strings/Truncate.md +++ b/content/en/functions/strings/Truncate.md @@ -20,5 +20,5 @@ Since Go templates are HTML-aware, `truncate` will intelligently handle normal s {{% 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`]function before sending the value to `truncate`. Otherwise, the HTML tags will be escaped when passed through the `truncate` function. -[`safeHTML`]: /functions/safe/html +[`safeHTML`]: /functions/safe/html/ {{% /note %}} diff --git a/content/en/functions/time/Duration.md b/content/en/functions/time/Duration.md index f9c26d294e3..051be7ade70 100644 --- a/content/en/functions/time/Duration.md +++ b/content/en/functions/time/Duration.md @@ -43,4 +43,4 @@ microseconds|`microsecond`, `us`, `µs` nanoseconds|`nanosecond`, `ns` [`time.Duration`]: https://pkg.go.dev/time#Duration -[methods]: /methods/duration +[methods]: /methods/duration/ diff --git a/content/en/functions/time/Now.md b/content/en/functions/time/Now.md index 60e45a91c14..28ac7acfc51 100644 --- a/content/en/functions/time/Now.md +++ b/content/en/functions/time/Now.md @@ -43,6 +43,6 @@ The `time.Now` function returns a `time.Time` value, so you can chain any of the {{ time.Now.Unix }} → 1697400955 (int64) ``` -[`time.Format`]: /functions/time/format +[`time.Format`]: /functions/time/format/ [localize]: /getting-started/glossary/#localization [time methods]: /methods/time/ diff --git a/content/en/functions/time/ParseDuration.md b/content/en/functions/time/ParseDuration.md index 0919141322d..d3369b8994b 100644 --- a/content/en/functions/time/ParseDuration.md +++ b/content/en/functions/time/ParseDuration.md @@ -34,4 +34,4 @@ There are 86400 seconds in one day. ``` [`time.Duration`]: https://pkg.go.dev/time#Duration -[methods]: /methods/duration +[methods]: /methods/duration/ diff --git a/content/en/functions/time/_common/_index.md b/content/en/functions/time/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/functions/time/_common/_index.md +++ b/content/en/functions/time/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/functions/transform/HTMLUnescape.md b/content/en/functions/transform/HTMLUnescape.md index 18031807710..1c88de6727a 100644 --- a/content/en/functions/transform/HTMLUnescape.md +++ b/content/en/functions/transform/HTMLUnescape.md @@ -25,6 +25,6 @@ In most contexts Go's [html/template] package will escape special characters. To {{ htmlUnescape "Lilo & Stitch" | safeHTML }} ``` -[`safehtml`]: /functions/safe/html +[`safehtml`]: /functions/safe/html/ [html entities]: https://developer.mozilla.org/en-us/docs/glossary/entity [html/template]: https://pkg.go.dev/html/template diff --git a/content/en/functions/transform/Markdownify.md b/content/en/functions/transform/Markdownify.md index 8fb1e48ce38..7a84f43b744 100644 --- a/content/en/functions/transform/Markdownify.md +++ b/content/en/functions/transform/Markdownify.md @@ -1,6 +1,6 @@ --- title: transform.Markdownify -description: Renders markdown to HTML. +description: Renders Markdown to HTML. categories: [] keywords: [] action: @@ -24,8 +24,8 @@ To keep the wrapping `p` tags for a single paragraph, use the [`RenderString`] m [`RenderString`]: /methods/page/renderstring/ {{% note %}} -Although the `markdownify` function honors [markdown render hooks] when rendering markdown to HTML, use the `RenderString` method instead of `markdownify` if a render hook accesses `.Page` context. See issue [#9692] for details. +Although the `markdownify` function honors [Markdown render hooks] when rendering Markdown to HTML, use the `RenderString` method instead of `markdownify` if a render hook accesses `.Page` context. See issue [#9692] for details. -[markdown render hooks]: /templates/render-hooks/ +[Markdown render hooks]: /render-hooks/ [#9692]: https://github.com/gohugoio/hugo/issues/9692 {{% /note %}} diff --git a/content/en/functions/transform/Unmarshal.md b/content/en/functions/transform/Unmarshal.md index bc2b663e387..998152eb24a 100644 --- a/content/en/functions/transform/Unmarshal.md +++ b/content/en/functions/transform/Unmarshal.md @@ -46,10 +46,10 @@ assets/ ``` ```go-html-template -{{ $data := "" }} +{{ $data := dict }} {{ $path := "data/books.json" }} {{ with resources.Get $path }} - {{ with unmarshal . }} + {{ with . | transform.Unmarshal }} {{ $data = . }} {{ end }} {{ else }} @@ -75,10 +75,10 @@ content/ ``` ```go-html-template -{{ $data := "" }} +{{ $data := dict }} {{ $path := "books.json" }} {{ with .Resources.Get $path }} - {{ with unmarshal . }} + {{ with . | transform.Unmarshal }} {{ $data = . }} {{ end }} {{ else }} @@ -95,7 +95,7 @@ content/ A remote resource is a file on a remote server, accessible via HTTP or HTTPS. ```go-html-template -{{ $data := "" }} +{{ $data := dict }} {{ $url := "https://example.org/books.json" }} {{ with resources.GetRemote $url }} {{ with .Err }} @@ -112,8 +112,15 @@ A remote resource is a file on a remote server, accessible via HTTP or HTTPS. {{ end }} ``` -[resource]: /getting-started/glossary/#resource -[page bundle]: /content-management/page-bundles +{{% note %}} +When retrieving remote data, a misconfigured server may send a response header with an incorrect [Content-Type]. For example, the server may set the Content-Type header to `application/octet-stream` instead of `application/json`. + +In these cases, pass the resource `Content` through the `transform.Unmarshal` function instead of passing the resource itself. For example, in the above, do this instead: + +`{{ $data = .Content | transform.Unmarshal }}` + +[Content-Type]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type +{{% /note %}} ## Options @@ -166,7 +173,7 @@ When unmarshaling an XML file, do not include the root node when accessing data. Get the remote data: ```go-html-template -{{ $data := "" }} +{{ $data := dict }} {{ $url := "https://example.org/books/index.xml" }} {{ with resources.GetRemote $url }} {{ with .Err }} @@ -182,7 +189,7 @@ Get the remote data: Inspect the data structure: ```go-html-template -
{{ jsonify (dict "indent" "  ") $data }}
+
{{ debug.Dump $data }}
``` List the book titles: @@ -245,7 +252,7 @@ Let's add a `lang` attribute to the `title` nodes of our RSS feed, and a namespa After retrieving the remote data, inspect the data structure: ```go-html-template -
{{ jsonify (dict "indent" "  ") $data }}
+
{{ debug.Dump $data }}
``` Each item node looks like this: @@ -288,5 +295,7 @@ Hugo renders this to: ``` -[`index`]: /functions/collections/indexfunction +[`index`]: /functions/collections/indexfunction/ [identifiers]: https://go.dev/ref/spec#Identifiers +[resource]: /getting-started/glossary/#resource +[page bundle]: /content-management/page-bundles/ diff --git a/content/en/functions/urls/AbsLangURL.md b/content/en/functions/urls/AbsLangURL.md index 876552bb7b1..67e1781e7e2 100644 --- a/content/en/functions/urls/AbsLangURL.md +++ b/content/en/functions/urls/AbsLangURL.md @@ -20,48 +20,44 @@ Use this function with both monolingual and multilingual configurations. The URL - 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. +In examples that follow, the project is multilingual with content in both English (`en`) and Spanish (`es`). 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`. +If the input does not begin with a slash, the path in the resulting URL will be relative to the `baseURL` in your site configuration. 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 +{{ 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 +{{ 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`. +If the input begins with a slash, the path in the resulting URL will be relative to the protocol+host of the `baseURL` in your site configuration. 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 +{{ 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 +{{ 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 index 5b027ae84ec..1120eac422b 100644 --- a/content/en/functions/urls/AbsURL.md +++ b/content/en/functions/urls/AbsURL.md @@ -14,53 +14,49 @@ action: aliases: [/functions/absurl] --- -With multilingual configurations, use the [`absLangURL`] function instead. The URL returned by this function depends on: +With multilingual configurations, use the [`urls.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`. +If the input does not begin with a slash, the path in the resulting URL will be relative to the `baseURL` in your site configuration. 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 +{{ 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 +{{ 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`. +If the input begins with a slash, the path in the resulting URL will be relative to the protocol+host of the `baseURL` in your site configuration. 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 +{{ 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 +{{ 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/ +[`urls.AbsLangURL`]: /functions/urls/abslangurl/ diff --git a/content/en/functions/urls/Anchorize.md b/content/en/functions/urls/Anchorize.md index 72b3d54a9eb..f3939675a7c 100644 --- a/content/en/functions/urls/Anchorize.md +++ b/content/en/functions/urls/Anchorize.md @@ -16,14 +16,14 @@ aliases: [/functions/anchorize] ## Sanitizing logic -With the default markdown renderer, Goldmark, the sanitizing logic is controlled by your site configuration: +With the default Markdown renderer, Goldmark, the sanitizing logic is controlled by your site configuration: {{< code-toggle file=hugo >}} [markup.goldmark.parser] autoHeadingIDType = 'github' {{< /code-toggle >}} -This controls the behavior of the `anchorize` function and the generation of heading IDs when rendering markdown to HTML. +This controls the behavior of the `anchorize` function and the generation of heading IDs when rendering Markdown to HTML. Set `autoHeadingIDType` to one of: diff --git a/content/en/functions/urls/JoinPath.md b/content/en/functions/urls/JoinPath.md index 7acecb5068f..d9822cfda83 100644 --- a/content/en/functions/urls/JoinPath.md +++ b/content/en/functions/urls/JoinPath.md @@ -27,4 +27,4 @@ aliases: [/functions/urls.joinpath] Unlike the [`path.Join`] function, `urls.JoinPath` retains consecutive leading slashes. -[`path.Join`]: /functions/path/join +[`path.Join`]: /functions/path/join/ diff --git a/content/en/functions/urls/Parse.md b/content/en/functions/urls/Parse.md index 2eb4eeadf19..a64116254f4 100644 --- a/content/en/functions/urls/Parse.md +++ b/content/en/functions/urls/Parse.md @@ -19,6 +19,7 @@ The `urls.Parse` function parses a URL into a [URL structure](https://godoc.org/ {{ $url := "https://example.org:123/foo?a=6&b=7#bar" }} {{ $u := urls.Parse $url }} +{{ $u.String }} → https://example.org:123/foo?a=6&b=7#bar {{ $u.IsAbs }} → true {{ $u.Scheme }} → https {{ $u.Host }} → example.org:123 diff --git a/content/en/functions/urls/RelLangURL.md b/content/en/functions/urls/RelLangURL.md index 2c10370384b..883e7dda2e8 100644 --- a/content/en/functions/urls/RelLangURL.md +++ b/content/en/functions/urls/RelLangURL.md @@ -17,51 +17,49 @@ 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 `baseURL` in your 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. +In examples that follow, the project is multilingual with content in both English (`en`) and Spanish (`es`). 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`. +If the input does not begin with a slash, the resulting URL will be relative to the `baseURL` in your site configuration. With `baseURL = https://example.org/` ```go-html-template -{{ relLangURL "" }} → /en/ -{{ relLangURL "articles" }} → /en/articles -{{ relLangURL "style.css" }} → /en/style.css +{{ relLangURL "" }} → /en/ +{{ relLangURL "articles" }} → /en/articles +{{ relLangURL "style.css" }} → /en/style.css +{{ relLangURL "https://example.org/foo" }} → /en/foo ``` With `baseURL = https://example.org/docs/` ```go-html-template -{{ relLangURL "" }} → /docs/en/ -{{ relLangURL "articles" }} → /docs/en/articles -{{ relLangURL "style.css" }} → /docs/en/style.css +{{ relLangURL "" }} → /docs/en/ +{{ relLangURL "articles" }} → /docs/en/articles +{{ relLangURL "style.css" }} → /docs/en/style.css +{{ relLangURL "https://example.org/docs/foo" }} → /docs/en/foo ``` #### 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`. +If the input begins with a slash, the resulting URL will be relative to the protocol+host of the `baseURL` in your site configuration. With `baseURL = https://example.org/` ```go-html-template -{{ relLangURL "/" }} → /en/ -{{ relLangURL "/articles" }} → /en/articles -{{ relLangURL "/style.css" }} → /en/style.css +{{ 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 +{{ 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/RelURL.md b/content/en/functions/urls/RelURL.md index 9320c2827fc..18ac24d109f 100644 --- a/content/en/functions/urls/RelURL.md +++ b/content/en/functions/urls/RelURL.md @@ -14,53 +14,51 @@ action: aliases: [/functions/relurl] --- -With multilingual configurations, use the [`relLangURL`] function instead. The URL returned by this function depends on: +With multilingual configurations, use the [`urls.RelLangURL`] function instead. The URL returned by this function depends on: - Whether the input begins with a slash -- The `baseURL` in site configuration +- The `baseURL` in your 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`. +If the input does not begin with a slash, the resulting URL will be relative to the `baseURL` in your site configuration. With `baseURL = https://example.org/` ```go-html-template -{{ relURL "" }} → / -{{ relURL "articles" }} → /articles -{{ relURL "style.css" }} → /style.css +{{ relURL "" }} → / +{{ relURL "articles" }} → /articles +{{ relURL "style.css" }} → /style.css +{{ relURL "https://example.org/foo" }} → /foo ``` With `baseURL = https://example.org/docs/` ```go-html-template -{{ relURL "" }} → /docs/ -{{ relURL "articles" }} → /docs/articles -{{ relURL "style.css" }} → /docs/style.css +{{ relURL "" }} → /docs/ +{{ relURL "articles" }} → /docs/articles +{{ relURL "style.css" }} → /docs/style.css +{{ relURL "https://example.org/docs/foo" }} → /docs/foo ``` #### 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`. +If the input begins with a slash, the resulting URL will be relative to the protocol+host of the `baseURL` in your site configuration. With `baseURL = https://example.org/` ```go-html-template -{{ relURL "/" }} → / -{{ relURL "/articles" }} → /articles -{{ relURL "style.css" }} → /style.css +{{ 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 +{{ 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/ +[`urls.RelLangURL`]: /functions/urls/rellangurl/ diff --git a/content/en/functions/urls/_common/_index.md b/content/en/functions/urls/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/functions/urls/_common/_index.md +++ b/content/en/functions/urls/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/functions/urls/_common/anchorize-vs-urlize.md b/content/en/functions/urls/_common/anchorize-vs-urlize.md index 0f01bcf78ee..718c1409883 100644 --- a/content/en/functions/urls/_common/anchorize-vs-urlize.md +++ b/content/en/functions/urls/_common/anchorize-vs-urlize.md @@ -4,8 +4,8 @@ The [`anchorize`] and [`urlize`] functions are similar: -[`anchorize`]: /functions/urls/anchorize -[`urlize`]: /functions/urls/urlize +[`anchorize`]: /functions/urls/anchorize/ +[`urlize`]: /functions/urls/urlize/ - Use the `anchorize` function to generate an HTML `id` attribute value - Use the `urlize` function to sanitize a string for usage in a URL diff --git a/content/en/getting-started/_index.md b/content/en/getting-started/_index.md index 780b96a623c..1648f0224a1 100644 --- a/content/en/getting-started/_index.md +++ b/content/en/getting-started/_index.md @@ -1,12 +1,12 @@ --- title: Getting started -linkTitle: Overview +linkTitle: In this section description: Quick start and guides for installing Hugo on your preferred operating system. categories: [] keywords: [] menu: docs: - identifier: getting-started-overview + identifier: getting-started-in-this-section parent: getting-started weight: 10 weight: 10 diff --git a/content/en/getting-started/configuration-markup.md b/content/en/getting-started/configuration-markup.md index 607301d3afd..ab3dfa22107 100644 --- a/content/en/getting-started/configuration-markup.md +++ b/content/en/getting-started/configuration-markup.md @@ -2,7 +2,7 @@ title: Configure markup description: Configure rendering of markup to HTML. categories: [getting started,fundamentals] -keywords: [configuration,highlighting] +keywords: [markup,markdown,goldmark,asciidoc,asciidoctor,highlighting] menu: docs: parent: getting-started @@ -14,16 +14,16 @@ toc: true ## Default handler -By default, Hugo uses [Goldmark] to render markdown to HTML. +Hugo uses [Goldmark] to render Markdown to HTML. {{< code-toggle file=hugo >}} [markup] defaultMarkdownHandler = 'goldmark' {{< /code-toggle >}} -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. +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. -To use a different renderer for markdown files, specify one of `asciidocext`, `org`, `pandoc`, or `rst` in your site configuration. +To use a different renderer for Markdown files, specify one of `asciidocext`, `org`, `pandoc`, or `rst` in your site configuration. defaultMarkdownHandler|Description :--|:-- @@ -33,41 +33,86 @@ defaultMarkdownHandler|Description `pandoc`|[Pandoc] `rst`|[reStructuredText] -To use Asciidoc, Pandoc, or reStructuredText you must install the relevant renderer and update your [security policy]. +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). +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 %}} [asciidoc]: https://asciidoc.org/ -[content format]: /content-management/formats/#list-of-content-formats +[content format]: /content-management/formats/#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 +[security policy]: /about/security/#security-policy ## Goldmark -This is the default configuration for the Goldmark markdown renderer: +This is the default configuration for the Goldmark Markdown renderer: {{< code-toggle config=markup.goldmark />}} -For details on the extensions, refer to the [Goldmark documentation](https://github.com/yuin/goldmark/#built-in-extensions). +### Goldmark extensions + +The extensions below, excluding Extras and Passthrough, are enabled by default. + +Extension|Documentation|Enabled +:--|:--|:-: +cjk|[Goldmark Extensions: CJK]|:heavy_check_mark: +definitionList|[PHP Markdown Extra: Definition lists]|:heavy_check_mark: +extras|[Hugo Goldmark Extensions: Extras]| +footnote|[PHP Markdown Extra: Footnotes]|:heavy_check_mark: +linkify|[GitHub Flavored Markdown: Autolinks]|:heavy_check_mark: +passthrough|[Hugo Goldmark Extensions: Passthrough]| +strikethrough|[GitHub Flavored Markdown: Strikethrough]|:heavy_check_mark: +table|[GitHub Flavored Markdown: Tables]|:heavy_check_mark: +taskList|[GitHub Flavored Markdown: Task list items]|:heavy_check_mark: +typographer|[Goldmark Extensions: Typographer]|:heavy_check_mark: + +[GitHub Flavored Markdown: Autolinks]: https://github.github.com/gfm/#autolinks-extension- +[GitHub Flavored Markdown: Strikethrough]: https://github.github.com/gfm/#strikethrough-extension- +[GitHub Flavored Markdown: Tables]: https://github.github.com/gfm/#tables-extension- +[GitHub Flavored Markdown: Task list items]: https://github.github.com/gfm/#task-list-items-extension- +[Goldmark Extensions: CJK]: https://github.com/yuin/goldmark?tab=readme-ov-file#cjk-extension +[Goldmark Extensions: Typographer]: https://github.com/yuin/goldmark?tab=readme-ov-file#typographer-extension +[Hugo Goldmark Extensions: Extras]: https://github.com/gohugoio/hugo-goldmark-extensions?tab=readme-ov-file#extras-extension +[Hugo Goldmark Extensions: Passthrough]: https://github.com/gohugoio/hugo-goldmark-extensions?tab=readme-ov-file#passthrough-extension +[PHP Markdown Extra: Definition lists]: https://michelf.ca/projects/php-markdown/extra/#def-list +[PHP Markdown Extra: Footnotes]: https://michelf.ca/projects/php-markdown/extra/#footnotes + +#### Extras extension + +{{< new-in 0.126.0 >}} + +Configure the extras extension to enable [inserted text], [mark text], [subscript], and [superscript] elements in Markdown. + +Element|Markdown|Rendered +:--|:--|:-- +Inserted text|`++foo++`|`foo` +Mark text|`==bar==`|`bar` +Subscript|`H~2~O`|`H2O` +Superscript|`1^st^`|`1st` + +[inserted text]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins +[mark text]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark +[subscript]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub +[superscript]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup + +#### Passthrough extension + +{{< new-in 0.122.0 >}} -Some settings explained: +Enable the passthrough extension to include mathematical equations and expressions in Markdown using LaTeX or TeX typesetting syntax. See [mathematics in Markdown] for details. -hardWraps -: By default, Goldmark ignores newlines within a paragraph. Set to `true` to render newlines as `
` elements. +[mathematics in Markdown]: content-management/mathematics/ -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 extension -typographer -: The typographer extension replaces certain character combinations with HTML entities as specified below: +The Typographer extension replaces certain character combinations with HTML entities as specified below: Markdown|Replaced by|Description :--|:--|:-- @@ -82,104 +127,164 @@ Markdown|Replaced by|Description `”`|`”`|right double quote `’`|`’`|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. +### Goldmark settings explained -Hugo supports adding attributes (e.g. CSS classes) to Markdown blocks, e.g. tables, lists, paragraphs etc. +Most of the Goldmark settings above are self-explanatory, but some require explanation. -A blockquote with a CSS class: +###### duplicateResourceFiles -```md -> foo -> bar -{.myclass} -``` +{{< new-in 0.123.0 >}} -There are some current limitations: For tables you can currently only apply it to the full table, and for lists the `ul`/`ol`-nodes only, e.g.: - -```md -* Fruit - * Apple - * Orange - * Banana - {.fruits} -* Dairy - * Milk - * Cheese - {.dairies} -{.list} -``` +(`bool`) If `true`, shared page resources on multilingual single-host sites will be duplicated for each language. See [multilingual page resources] for details. Default is `false`. -Note that attributes in [code fences](/content-management/syntax-highlighting/#highlighting-in-code-fences) must come after the opening tag, with any other highlighting processing instruction, e.g.: +[multilingual page resources]: /content-management/page-resources/#multilingual -````txt -```go {.myclass linenos=table,hl_lines=[8,"15-17"],linenostart=199} -// ... code -``` -```` +{{% note %}} +With multilingual single-host sites, setting this parameter to `false` will enable Hugo's [embedded link render hook] and [embedded image render hook]. This is the default configuration for multilingual single-host sites. + +[embedded image render hook]: /render-hooks/images/#default +[embedded link render hook]: /render-hooks/links/#default +{{% /note %}} + +###### parser.wrapStandAloneImageWithinParagraph + +(`bool`) If `true`, image elements without adjacent content will be wrapped within a `p` element when rendered. This is the default Markdown behavior. Set to `false` when using an [image render hook] to render standalone images as `figure` elements. Default is `true`. + +[image render hook]: /render-hooks/images/ + +###### parser.autoHeadingIDType + +(`string`) The strategy used to automatically generate heading `id` attributes, one of `github`, `github-ascii` or `blackfriday`. + +- `github` produces GitHub-compatible `id` attributes +- `github-ascii` drops any non-ASCII characters after accent normalization +- `blackfriday` produces `id` attributes compatible with the Blackfriday Markdown renderer -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/urls/anchorize) template func. +This is also the strategy used by the [anchorize](/functions/urls/anchorize) template function. Default is `github`. -## Asciidoc +###### parser.attribute.block -This is the default configuration for the AsciiDoc markdown renderer: +(`bool`) If `true`, enables [Markdown attributes] for block elements. Default is `false`. + +[Markdown attributes]: /content-management/markdown-attributes/ + +###### parser.attribute.title + +(`bool`) If `true`, enables [Markdown attributes] for headings. Default is `true`. + +###### renderHooks.image.enableDefault + +{{< new-in 0.123.0 >}} + +(`bool`) If `true`, enables Hugo's [embedded image render hook]. Default is `false`. + +[embedded image render hook]: /render-hooks/images/#default + +{{% note %}} +The embedded image render hook is automatically enabled for multilingual single-host sites if [duplication of shared page resources] is disabled. This is the default configuration for multilingual single-host sites. + +[duplication of shared page resources]: /getting-started/configuration-markup/#duplicateresourcefiles +{{% /note %}} + +###### renderHooks.link.enableDefault + +{{< new-in 0.123.0 >}} + +(`bool`) If `true`, enables Hugo's [embedded link render hook]. Default is `false`. + +[embedded link render hook]: /render-hooks/links/#default + +{{% note %}} +The embedded link render hook is automatically enabled for multilingual single-host sites if [duplication of shared page resources] is disabled. This is the default configuration for multilingual single-host sites. + +[duplication of shared page resources]: /getting-started/configuration-markup/#duplicateresourcefiles +{{% /note %}} + +###### renderer.hardWraps + +(`bool`) If `true`, Goldmark replaces newline characters within a paragraph with `br` elements. Default is `false`. + +###### renderer.unsafe + +(`bool`) If `true`, Goldmark renders raw HTML mixed within the Markdown. This is unsafe unless the content is under your control. Default is `false`. + +## AsciiDoc + +This is the default configuration for the AsciiDoc 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]. +### AsciiDoc settings explained + +###### attributes + +(`map`) A map of key-value pairs, each a document attributes,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. +###### backend + +(`string`) The backend output file format. Default is `html5`. -extensions -: (`[]string`) Possible extensions are `asciidoctor-html5s`, `asciidoctor-bibtex`, `asciidoctor-diagram`, `asciidoctor-interdoc-reftext`, `asciidoctor-katex`, `asciidoctor-latex`, `asciidoctor-mathematical`, and `asciidoctor-question`. +###### extensions -failureLevel -: (`string`) The minimum logging level that triggers a non-zero exit code (failure). +(`string array`) An array of enabled extensions, one or more of `asciidoctor-html5s`, `asciidoctor-bibtex`, `asciidoctor-diagram`, `asciidoctor-interdoc-reftext`, `asciidoctor-katex`, `asciidoctor-latex`, `asciidoctor-mathematical`, or `asciidoctor-question`. -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. +{{% note %}} +To mitigate security risks, entries in the extension array may not contain forward slashes (`/`), backslashes (`\`), or periods. Due to this restriction, extensions must be in Ruby's `$LOAD_PATH`. +{{% /note %}} -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. +###### failureLevel -safeMode -: (`string`) Safe mode level `unsafe`, `safe`, `server`, or `secure`. Don’t change this unless you know what you are doing. +(`string`) The minimum logging level that triggers a non-zero exit code (failure). Default is `fatal`. -sectionNumbers -: (`bool`) Auto-number section titles. +###### noHeaderOrFooter -trace -: (`bool`) Include backtrace information on errors. +(`bool`) If `true`, outputs an embeddable document, which excludes the header, the footer, and everything outside the body of the document. Default is `true`. -verbose -: (`bool`) Verbosely print processing information and configuration file checks to stderr. +###### preserveTOC -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`. +(`bool`) If `true`, preserves the table of contents (TOC) rendered by Asciidoctor. By default, to make the TOC compatible with existing themes, Hugo removes the TOC rendered by Asciidoctor. To render the TOC, use the [`TableOfContents`] method on a `Page` object in your templates. Default is `false`. -[asciidoctor-diagram]: https://asciidoctor.org/docs/asciidoctor-diagram/ -[include]: https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files +[`TableOfContents`]: /methods/page/tableofcontents/ + +###### safeMode -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. +(`string`) The safe mode level, one of `unsafe`, `safe`, `server`, or `secure`. Default is `unsafe`. -Example of how to set extensions and attributes: +###### sectionNumbers -```yml +(`bool`) If `true`, numbers each section title. Default is `false`. + +###### trace + +(`bool`) If `true`, include backtrace information on errors. Default is `false`. + +###### verbose + +(`bool`)If `true`, verbosely prints processing information and configuration file checks to stderr. Default is `false`. + +###### workingFolderCurrent + +(`bool`) If `true`, sets the working directory to be the same as that of the AsciiDoc file being processed, allowing [includes] to work with relative paths. Set to `true` to render diagrams with the [asciidoctor-diagram] extension. Default is `false`. + +[asciidoctor-diagram]: https://asciidoctor.org/docs/asciidoctor-diagram/ +[includes]: https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#includes + +### AsciiDoc configuration example + +{{< code-toggle file=hugo >}} [markup.asciidocExt] extensions = ["asciidoctor-html5s", "asciidoctor-diagram"] workingFolderCurrent = true [markup.asciidocExt.attributes] my-base-url = "https://example.com/" my-attribute-name = "my value" -``` +{{< /code-toggle >}} + +### AsciiDoc troubleshooting -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 +Run `hugo --logLevel debug` to examine Hugo's call to the Asciidoctor executable: ```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 -] ... @@ -200,19 +305,18 @@ For CSS, see [Generate Syntax Highlighter CSS](/content-management/syntax-highli ## Table of contents +This is the default configuration for the table of contents, applicable to Goldmark and Asciidoctor: + {{< code-toggle config=markup.tableOfContents />}} -These settings only works for the Goldmark renderer: +###### startLevel -startLevel -: The heading level, values starting at 1 (`h1`), to start render the table of contents. +(`int`) Heading levels less than this value will be excluded from the table of contents. For example, to exclude `h1` elements from the table of contents, set this value to `2`. Default is `2`. -endLevel -: The heading level, inclusive, to stop render the table of contents. +###### endLevel -ordered -: If `true`, generates an ordered list instead of an unordered list. +(`int`) Heading levels greater than this value will be excluded from the table of contents. For example, to exclude `h4`, `h5`, and `h6` elements from the table of contents, set this value to `3`. Default is `3`. -## Render hooks +###### ordered -See [Markdown Render Hooks](/templates/render-hooks/). +(`bool`) If `true`, generates an ordered list instead of an unordered list. Default is `false`. diff --git a/content/en/getting-started/configuration.md b/content/en/getting-started/configuration.md index 3ce0077ba59..35c7d780eaa 100644 --- a/content/en/getting-started/configuration.md +++ b/content/en/getting-started/configuration.md @@ -73,15 +73,11 @@ my-project/ │ ├── menus.en.toml │ ├── menus.de.toml │ └── params.toml - ├── production/ - │ ├── hugo.toml - │ └── params.toml - └── staging/ - ├── hugo.toml + └── production/ └── params.toml ``` -The root configuration keys are `build`, `caches`, `cascade`, `deployment`, `frontmatter`, `imaging`, `languages`, `markup`, `mediatypes`, `menus`, `minify`, `module`, `outputformats`, `outputs`, `params`, `permalinks`, `privacy`, `related`, `security`, `server`, `services`, `sitemap`, and `taxonomies`. +The root configuration keys are `build`, `caches`, `cascade`, `deployment`, `frontmatter`, `imaging`, `languages`, `markup`, `mediatypes`, `menus`, `minify`, `module`, `outputformats`, `outputs`, `params`, `permalinks`, `privacy`, `related`, `security`, `segments`, `server`, `services`, `sitemap`, and `taxonomies`. ### Omit the root key @@ -226,25 +222,33 @@ See [Configure Build](#configure-build). ###### buildFuture -(`bool`) Include content with publishdate in the future. Default is `false`. +(`bool`) Include content with a future publication date. Default is `false`. ###### caches See [Configure File Caches](#configure-file-caches). +###### capitalizeListTitles + +{{< new-in 0.123.3 >}} + +(`bool`) Whether to capitalize automatic list titles. Applicable to section, taxonomy, and term pages. Default is `true`. You can change the capitalization style in your site configuration to one of `ap`, `chicago`, `go`, `firstupper`, or `none`. See [details]. + +[details]: /getting-started/configuration/#configure-title-case + ###### cascade -Pass down down default configuration values (front matter) to pages in the content tree. The options in site config is the same as in page front matter, see [Front Matter Cascade](/content-management/front-matter#front-matter-cascade). +Pass down default configuration values (front matter) to pages in the content tree. The options in site config is the same as in page front matter, see [Front Matter Cascade](/content-management/front-matter#cascade). {{% note %}} -For a website in a single language, define the `[[cascade]]` in [Front Matter](/content-management/front-matter#front-matter-cascade). For a multilingual website, define the `[[cascade]]` in [Site Config](../../getting-started/configuration/#cascade). +For a website in a single language, define the `[[cascade]]` in [Front Matter](/content-management/front-matter#cascade). For a multilingual website, define the `[[cascade]]` in [Site Config](/getting-started/configuration/#cascade). To remain consistent and prevent unexpected behavior, do not mix these strategies. {{% /note %}} ###### canonifyURLs -(`bool`) Enable to turn relative URLs into absolute. Default is `false`. See [details](/content-management/urls/#canonical-urls). +(`bool`) See [details](/content-management/urls/#canonical-urls) before enabling this feature. Default is `false`. ###### cleanDestinationDir @@ -324,8 +328,11 @@ See [image processing configuration](/content-management/image-processing/#imagi (`string`) A language tag as defined by [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646). This value is used to populate: -- The `` element in the internal [RSS template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml) -- The `lang` attribute of the `` element in the internal [alias template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/alias.html) +- The `` element in the embedded [RSS template]({{% eturl rss %}}) +- The `lang` attribute of the `` element in the embedded [alias template]({{% eturl alias %}}) +- The `og:locale` `meta` element in the embedded [Open Graph template]({{% eturl opengraph %}}) + +When present in the root of the configuration, this value is ignored if one or more language keys exists. Please specify this value independently for each language key. ###### languages @@ -369,7 +376,7 @@ Module configuration see [module configuration](/hugo-modules/configuration/). ###### outputFormats -See [Configure Output Formats](#configure-additional-output-formats). +See [custom output formats]. ###### paginate @@ -385,27 +392,33 @@ See [Content Management](/content-management/urls/#permalinks). ###### pluralizeListTitles -(`bool`) Pluralize titles in lists. Default is `true`. +(`bool`) Whether to pluralize automatic list titles. Applicable to section pages. Default is `true`. ###### publishDir (`string`) The directory to where Hugo will write the final static site (the HTML files etc.). Default is `public`. +###### refLinksErrorLevel + +(`string`) When using `ref` or `relref` to resolve page links and a link cannot be resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING`. Any `ERROR` will fail the build (`exit -1`). Default is `ERROR`. + +###### refLinksNotFoundURL + +(`string`) URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is. + ###### related See [Related Content](/content-management/related/#configure-related-content). ###### relativeURLs -(`bool`) Enable this to make all relative URLs relative to content root. Note that this does not affect absolute URLs. Default is `false`. See [details](/content-management/urls/#relative-urls). +(`bool`) See [details](/content-management/urls/#relative-urls) before enabling this feature. Default is `false`. -###### refLinksErrorLevel +###### renderSegments -(`string`) When using `ref` or `relref` to resolve page links and a link cannot be resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING`. Any `ERROR` will fail the build (`exit -1`). Default is `ERROR`. +{{< new-in 0.124.0 >}} -###### refLinksNotFoundURL - -(`string`) URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is. +(`string slice`) A list of segments to render. If not set, everything will be rendered. This is more commonly set in a CLI flag, e.g. `hugo --renderSegments segment1,segment2`. The segment names must match the names in the [segments](#configure-segments) configuration. ###### removePathAccents @@ -421,7 +434,11 @@ See [Menus](/content-management/menus/#define-automatically). ###### security -See [Security Policy](/about/security-model/#security-policy). +See [Security Policy](/about/security/#security-policy). + +###### segments + +See [Segments](#configure-segments). ###### sitemap @@ -429,7 +446,9 @@ Default [sitemap configuration](/templates/sitemap-template/#configuration). ###### summaryLength -(`int`) The length of text in words to show in a [`.Summary`](/content-management/summaries/#automatic-summary-splitting). Default is `70`. +(`int`) Applicable to automatic summaries, the approximate number of words to render when calling the [`Summary`] method on a `Page` object. Default is `70`. + +[`Summary`]: /methods/page/summary/ ###### taxonomies @@ -605,6 +624,39 @@ to = "/404.html" status = 404 {{< /code-toggle >}} +With a multilingual site, define the redirect for the default content language last: + +{{< code-toggle file=config/development/server >}} +defaultContentLanguage = 'en' +defaultContentLanguageInSubdir = false +[[redirects]] +from = '/fr/**' +to = '/fr/404.html' +status = 404 + +[[redirects]] # Default language must be last. +from = '/**' +to = '/404.html' +status = 404 +{{< /code-toggle >}} + +If you are serving the default content language from a subdirectory: + +{{< code-toggle file=config/development/server >}} +defaultContentLanguage = 'en' +defaultContentLanguageInSubdir = true +[[redirects]] +from = '/fr/**' +to = '/fr/404.html' +status = 404 + +[[redirects]] # Default language must be last. +from = '/**' +to = '/en/404.html' +status = 404 +{{< /code-toggle >}} + + ## Configure title case By default, Hugo follows the capitalization rules published in the [Associated Press Stylebook] when creating automatic section titles, and when transforming strings with the [`strings.Title`] function. @@ -626,15 +678,31 @@ firstupper none : Disable transformation of automatic section titles, and disable the transformation performed by the `strings.Title` function. This is useful if you would prefer to manually capitalize section titles as needed, and to bypass opinionated theme usage of the `strings.Title` function. -[`strings.Title`]: /functions/strings/title +[`strings.Title`]: /functions/strings/title/ [Associated Press Stylebook]: https://www.apstylebook.com/ [Chicago Manual of Style]: https://www.chicagomanualofstyle.org/home.html [site configuration]: /getting-started/configuration/#configure-title-case ## Configuration environment variables +DART_SASS_BINARY +: (`string`) The absolute path to the Dart Sass executable. By default, Hugo searches for the executable in each of the paths in the `PATH` environment variable. + +HUGO_ENVIRONMENT +: (`string`) Overrides the default [environment], typically one of `development`, `staging`, or `production`. + +[environment]: /getting-started/glossary/#environment + +HUGO_FILE_LOG_FORMAT +: (`string`) A format string for the file path, line number, and column number displayed when reporting errors, or when calling the `Position` method from a shortcode or Markdown render hook. Valid tokens are `:file`, `:line`, and `:col`. Default is `:file::line::col`. + +{{< new-in 0.123.0 >}} + +HUGO_MEMORYLIMIT +: (`int`) The maximum amount of system memory, in gigabytes, that Hugo can use while rendering your site. Default is 25% of total system memory. + HUGO_NUMWORKERMULTIPLIER -: Can be set to increase or reduce the number of workers used in parallel processing in Hugo. If not set, the number of logical CPUs will be used. +: (`int`) The number of workers used in parallel processing. Default is the number of logical CPUs. ## Configure with environment variables @@ -726,10 +794,6 @@ The above will try first to extract the value for `.Date` from the file name, th `:git` : This is the Git author date for the last revision of this content file. This will only be set if `--enableGitInfo` is set or `enableGitInfo = true` is set in site configuration. -## Configure additional output formats - -Hugo v0.20 introduced the ability to render your content to multiple output formats (e.g., to JSON, AMP html, or CSV). See [Output Formats] for information on how to add these values to your Hugo project's configuration file. - ## Configure minify See the [tdewolff/minify] project page for details. @@ -769,7 +833,7 @@ dir This is the directory where Hugo by default will store its file caches. See [Configure File Caches](#configure-file-caches). -This can be set using the `cacheDir` config option or via the OS env variable `HUGO_CACHEDIR`. +This can be set using the `cacheDir` config option or via the OS environment variable `HUGO_CACHEDIR`. If this is not set, Hugo will use, in order of preference: @@ -779,10 +843,123 @@ If this is not set, Hugo will use, in order of preference: 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 -[`.Site.Params`]: /variables/site/ -[directory structure]: /getting-started/directory-structure +[`time`]: /functions/time/astime/ +[`.Site.Params`]: /method/site/params/ +[directory structure]: /getting-started/directory-structure/ [lookup order]: /templates/lookup-order/ -[Output Formats]: /templates/output-formats/ +[custom output formats]: /templates/output-formats/ [templates]: /templates/ [static-files]: /content-management/static-files/ + + +## Configure HTTP cache + +{{< new-in 0.127.0 >}} + +Note that this configuration is currently only relevant when using the [resources.GetRemote] function. + +The caching in Hugo is layered: + +```goat {.w-40} + .-----------. +| dynacache | + '-----+-----' + | + v + .----------. +| HTTP cache | + '-----+----' + | + v + .----------. +| file cache | + '-----+----' +``` + +Dynacache +: A in memory LRU cache that gets evicted on changes, [Cache Buster](#configure-cache-busters) matches and in low memory situations. + +HTTP Cache +: Enables HTTP cache behavior (RFC 9111) for remote resources. This works best for resources with properly set up HTTP cache headers. The HTTP cache uses the [file cache] to store and serve cached resources. + +File Cache +: See [file cache]. + +The default HTTP cache disables everything: + +{{< code-toggle config=HTTPCache />}} + +caching +: Enabled RFC 9111 cache behavior _for_ a configured set of resources. Stale resources will be refreshed from the [file cache] even if their configured TTL isn't reached. + +polling +: Enables polling _for_ a set of resources. Note that you can enable polling for resources even if HTTP caching is disabled. This setting is only used when in watch mode (e.g. `hugo server`). When a changed resource is detected, that change triggers a rebuild of pages using that resource. + +[resources.GetRemote]: /functions/resources/getremote/ +[file cache]: #configure-file-caches + +## Configure segments + +{{< new-in 0.124.0 >}} + +{{% note %}} +The `segments` configuration is currently only used to configure partitioned rendering. +This feature is only about what gets rendered when, Hugo's entire object graph (sites and pages) is +always available. +{{% /note %}} + +* Each segment consists of zero or more `exclude` filters and zero or more `include` filters. +* Each filter consists of one or more field Glob matchers. +* Each filter in a section (`exclude` or `include`) is ORed together, each matcher in a filter is ANDed together. + +The fields that can be used in the filters are: + +path +: The logical page [path]. + +lang +: The [page language]. + +kind +: The [kind] of the page. + +output +: The [output format] of the page. + +It is recommended to put coarse grained filters (e.g. for language and output format) in the excludes section, e.g.: + + +{{< code-toggle file=hugo >}} +[segments.segment1] + [[segments.segment1.excludes]] + lang = "n*" + [[segments.segment1.excludes]] + lang = "en" + output = "rss" + [[segments.segment1.includes]] + kind = "{home,term,taxonomy}" + [[segments.segment1.includes]] + path = "{/docs,/docs/**}" +{{< /code-toggle >}} + +With the above you can render only the pages in `segment1` by configuring the [renderSegments](#rendersegments) or setting the `--renderSegments` flag: + +```bash +hugo --renderSegments segment1 +``` + +Multiple segments can be configured, and the `--renderSegments` flag can take a comma separated list of segments. + +Some use cases for this feature: + +* Splitting builds of big sites. +* Enable faster builds during development by only rendering a subset of the site. +* Partial rebuilds, e.g. render the home page and the "news section" every hour, render the entire site once a week. +* Render only e.g. the JSON output format to push to e.g. a search index. + +[path]: /methods/page/path/ +[page language]: /methods/page/language/ +[kind]: /getting-started/glossary/#page-kind +[output format]: /getting-started/glossary/#output-format +[type]: /getting-started/glossary/#content-type + diff --git a/content/en/getting-started/directory-structure.md b/content/en/getting-started/directory-structure.md index f91849375df..2331d883823 100644 --- a/content/en/getting-started/directory-structure.md +++ b/content/en/getting-started/directory-structure.md @@ -78,38 +78,49 @@ my-site/ Each of the subdirectories contributes to the content, structure, behavior, or presentation of your site. -archetypes -: The `archetypes` directory contains templates for new content. See [details](/content-management/archetypes/). +###### archetypes -assets -: The `assets` directory contains global resources typically passed through an asset pipeline. This includes resources such as images, CSS, Sass, JavaScript, and TypeScript. See [details](/hugo-pipes/introduction/). +The `archetypes` directory contains templates for new content. See [details](/content-management/archetypes/). -config -: The `config` directory contains your site configuration, possibly split into multiple subdirectories and files. For projects with minimal configuration or projects that do not need to behave differently in different environments, a single configuration file named `hugo.toml` in the root of the project is sufficient. See [details](/getting-started/configuration/#configuration-directory). +###### assets -content -: The `content` directory contains the markup files (typically markdown) and page resources that comprise the content of your site. See [details](/content-management/organization/). +The `assets` directory contains global resources typically passed through an asset pipeline. This includes resources such as images, CSS, Sass, JavaScript, and TypeScript. See [details](/hugo-pipes/introduction/). -data -: The `data` directory contains data files (JSON, TOML, YAML, or XML) that augment content, configuration, localization, and navigation. See [details](/templates/data-templates/). +###### config -i18n -: The `i18n` directory contains translation tables for multilingual sites. See [details](/content-management/multilingual/). +The `config` directory contains your site configuration, possibly split into multiple subdirectories and files. For projects with minimal configuration or projects that do not need to behave differently in different environments, a single configuration file named `hugo.toml` in the root of the project is sufficient. See [details](/getting-started/configuration/#configuration-directory). -layouts -: The layouts directory contains templates to transform content, data, and resources into a complete website. See [details](/templates/). +###### content -public -: The `public` directory contains the published website, generated when you run the `hugo` command. Hugo recreates this directory and its content as needed. See [details](/getting-started/usage/#build-your-site). +The `content` directory contains the markup files (typically Markdown) and page resources that comprise the content of your site. See [details](/content-management/organization/). -resources -: The `resources` directory contains cached output from Hugo's asset pipelines, generated when you run the `hugo` or `hugo server` commands. By default this cache directory includes CSS and images. Hugo recreates this directory and its content as needed. +###### data -static -: The `static` directory contains files that will be copied to the public directory when you build your site. For example: `favicon.ico`, `robots.txt`, and files that verify site ownership. Before the introduction of [page bundles](/getting-started/glossary/#page-bundle) and [asset pipelines](/hugo-pipes/introduction/), the `static` directory was also used for images, CSS, and JavaScript. See [details](/content-management/static-files/). +The `data` directory contains data files (JSON, TOML, YAML, or XML) that augment content, configuration, localization, and navigation. See [details](/content-management/data-sources/). -themes -: The `themes` directory contains one or more [themes](/getting-started/glossary/#theme), each in its own subdirectory. +###### i18n + +The `i18n` directory contains translation tables for multilingual sites. See [details](/content-management/multilingual/). + +###### layouts + +The layouts directory contains templates to transform content, data, and resources into a complete website. See [details](/templates/). + +###### public + +The `public` directory contains the published website, generated when you run the `hugo` or `hugo server` commands. Hugo recreates this directory and its content as needed. See [details](/getting-started/usage/#build-your-site). + +###### resources + +The `resources` directory contains cached output from Hugo's asset pipelines, generated when you run the `hugo` or `hugo server` commands. By default this cache directory includes CSS and images. Hugo recreates this directory and its content as needed. + +###### static + +The `static` directory contains files that will be copied to the public directory when you build your site. For example: `favicon.ico`, `robots.txt`, and files that verify site ownership. Before the introduction of [page bundles](/getting-started/glossary/#page-bundle) and [asset pipelines](/hugo-pipes/introduction/), the `static` directory was also used for images, CSS, and JavaScript. + +###### themes + +The `themes` directory contains one or more [themes](/getting-started/glossary/#theme), each in its own subdirectory. ## Union file system @@ -150,7 +161,7 @@ target = 'content' {{% note %}} When you overlay one directory on top of another, you must mount both directories. -If you think you need a symbolic link in your project directory, use Hugo's union file system instead. +Hugo does not follow symbolic links. If you need the functionality provided by symbolic links, use Hugo's union file system instead. {{% /note %}} After mounting, the union file system has this structure: diff --git a/content/en/getting-started/external-learning-resources/build-websites-with-hugo.png b/content/en/getting-started/external-learning-resources/build-websites-with-hugo.png new file mode 100644 index 0000000000000000000000000000000000000000..ebed7e89f75f81ca3a075498ace0b5d7c45a0362 GIT binary patch literal 18058 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 literal 0 HcmV?d00001 diff --git a/content/en/getting-started/external-learning-resources/hia.jpg b/content/en/getting-started/external-learning-resources/hia.jpg deleted file mode 100644 index 601947a70e97fd6b93323234dae35ba5c296ffd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66768 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%0AGOXB(YnWb8anF_;E=<)5`tU}$j9zR$r` z8ItD`?y38Rsra*|Y-hZI3%>zwx_`C;1ElF`pr=2-Asi}XU+X0B(C`I?!Qg_@7t~0M z?q-cHoDn=ovIiS%cT+vVk?-3@J<5P3yqw%t?V^XlUT)rh(a0JqO7`VBF{{S7V=6%a zTG83eN}3tI)G%HnQw@4Ew#ep{NB_d32k-06YxctAQv`d|tg%(y?0wuhJKILbpK*#@u`xeC`j2rR8~jljDx8u%Mrg~rwi(S4h{%e9-adM2 z)E{q^cuhjieDH5+XNU#Cy%$y>6C^8=ZC}&yFpCOY5ZT^?bTX zJq)H-T?JaH5xy)U4%CXRlm3s8a*#7|#nC&Z-g!gEcZqmkVUomzZ2UP4qZqn1 z9(KJwskA@O)22|WUJ{CY%Tm)9JU8G8tn za8TZ+`1UU@)=?rJop^&0ISq;qs$A`%9}dl8{!sAKh9z|~xx-he^fl4+bQ%+_o71ti z6ZatGZ7zkXN}8Gm6C8KIkf}U9(hKf}8{|{kWjAv7(Wme=x5!SIP2x{|fj%2-sTSU$ zMCh^tZ)(hz0%KCdIKEAnOu6N+QopcgPw#XXKDvoC8t2Uk?*MKSdPadqqMu--VTFPf z4Dr1AlMay%$(JeEREb_h7LtzwsD;^n46HWAwBWBwQpS3pNLE2?%%9^A**N2GFR3zf z4rncZ|2$aK&jL0&6=q#?!O$1oUkVQ|zGuF2e?Knx8cdINj`mbZ7VL&Bx(Xs}?s4H@ zYD%2``A2?og$XnlHTnY{&S&ZT0%7cZU!gN;Fq`;@GPBXHb#U9h>-o7f1bVa|V5_Kq z6gqCSL0UtHBG!)d$kTadpR3A-W8b3mbwi^BNxTVUUAt3BMO97$rsV%bCp)ePafdGb z(axH16n~iHQJHGR6dCm!z*rj5PI|&Y8pkvYLDTsqtHm}!UaO}&>Ua%gB*{hMVb z^=*G!6}($3F**TLhF!zuXVQ2p9Y^q>AaN#)L#dhrul7GJu>Z%I7=1v!(_U%II7)}U zl#JbD7+X=NP~Ws4?NE1F{h2RP(90_{1DJ69bE>i-h}hZ))!?~6XXRjQSn{QTICjk+o*{&_IPpRs1`uDWk+YkOLOrk=2hX&GMwAZgYaiaZTosvt#5acI&@rAMRJZt_gv;)8M6; zvq21kf4TDiyQO#8zt*fJ{$;t$h$owWme%}_z(O(nc?E~46rT3wq+cW+FyV1o(Cor< zohve7L4|Pcb>$~O;ow(7r&sWBrlB*l`_&g%-Ts_m?~o0}C2bsp<;Rka!V}2aa>nuf z8ld*CQ@!&U+rVjTWB*WWZMBOE)+}w=*&xZ-&1=gqR&&$4+A5RM?N%NVM3M*4GnkQI zqXF!?^b3#tpS&Zc4_qJ%j39kJ{?W6TCU2~R9l#$Q{0})|Jv%-K>~6I(2n6pFs|LEz zR{qZFVQ>4;>jA@dJTItGW8yScpWo$&R_Wf_dJ-b8kicGe;+m?(`HtBsi~KVArsa@` zypX6aGh-)}`apH^aPqo&@Iv|T``jY1B<9ia&!2W;Dz!!Ghv}{Gu~xiM54taamlHxs zh^W5mACdA7uB}wt4ccA`fVor{p9Qcj*{C4NrfxQAKJBnA%Q*1~@6NHjkA+X~FN1-K zWD*_}DGwB-t)xIEs%mTL0LDsR#pa(78_bsqSA}#_{Z2KOc8pC?Hm~>cPN*MKqGH0z z7av9MLjIvxZv2h~rTluL1kE)&L8*t!?+h>Rz!MVrAN+KU4I}A6*Oi_*7~);Ub@aL| zc5gDot9ewPF@CXy6e@PuC6Z`v7S&XG082p19vs$>e*^Qo3PnER~INc}%S~de(+3 zWOrSb4y8Le6&zlEyc0s5a8@N%@Gg~QuPbGCB`xJ=85Z{AexFxps(OyUk8DC#`dPs6 zs#Lb0Wecy1rdYjvGr-35?#OtEI`cNqvMMa-pBIV$epz>JB#AH*=$lZLHL$0?CX}fX zL9CL0Q4!`0{fkE2qSGS3Mw)t?xnSu@jetAxCH4CtjNZyvh4L1ay>8ag|L)TC9Ql?X zvBQlJx(@1a&r-21vC0|vqQqkA5Ig~`3Wl0@D zNJ>AUF<2fCGvs05efteQ;00y-h~ z3wuZWf1*`T$g;E4INNJ7 zskB;9^eqlR;^Oa8_gk|hY{Y@oy&C+@<9p(!mk+NyRvbP&zGl7QhKdzac#q~muJ+eo zG`(MC@3gaETHLzG#wRmcUS7Ma4kM#D;D{;sDjDTr*UP}6DXqg4tD^;W7pqrh@!FEq z3xZG{#FKYj!j&R3MHk=LA31oHsX98BcQqm+HAig(qTX3p?d8s{a1}%AJrbtdcn$IF z3>?XBi`c~GT&xpnB3~%#5%{9!$@&-V>Mxr2%$v0PODrpd8S2#Jz#-X7IFh4AGb0td zbGGjf0SdYEYH>%r*MzlE?V-u&vEJe~qrj%ZSo4mUyyk!J$Aeb?_@M8rHPZ#xdHqO@ zTmIsAjJfj{ty$Kbc5tQPFWRx;#go=7?LS)v;fh=%&>JJ)E@VS>`H2xwd!^WHkxI_i zNVyYYkf!bRM_2!G>vh84XmH_2gW##!N3HG`EY>Co31SsK?#d5tu+g&P$6!t_No>-$aP5;@oNcmeOK+{?8|rdfQu2fpDxAB z)FufAZi%}wuz%ngwm#~{h}Q&pP7wP>gk{G!)lFJgDGJk$S=)}7@@5hlNPnF=@bc(K z-@(1HtJ4#M#Toc z#Vs~WUyO2PV^s@yeiGRsO2S%gH6XsEzdkh>+W%)ZrMzPA2@;*S&MVu*7PlEXW6V7C z)|&pxrH-b)iODt8J+Qu}0L5Qacl+W_creH4!8Sn$wPE>GM)7EU2NP>i3E6}@T2ouu z?d3w~g7w1y*=oISz{`-(w5S-NBOov$n3FX}zWc~+=?;lmw&S>MSs{O(YEfZQxjtAX z9Mp*=7`e8nwg~q)X3{0=%IHB5GFWaHeFEu!kfB*fbW?33!u*~n^TWO|PB~BxXDg5& z(!S*d19h5__=Ra;!4z>W+`Pa1_=2($k?iw!(bxLMeU+@Mtb+HpIAO)X>6+s&TKf#0 zB_ep`{YvNdW>SfD1@)F*Up+c%;8;UTW2XM4?Z`!e@*oIshL?f14(W2&nWD_|VPc4% zSeM6G*YUIeXzBDuJtfpo579yn%X~)91n6{eefcEnxwP?2PopWlIj~MZ)>xYxn`)Wb z%=>&QJDS?daN+rI0)fX+?fHI(_zs?`;fs>eKKwYL8v^Vw@j6&j|; zD)wjAFB|J6Y{2{5NJeqwadmo0RfMPG!~=_h+Dg39FxIM$A+3+}uj%Vu6v zL|LbW(T>CqCev>+AZzFhTKsI z>#Xcc!3L6Dr2P8(SWBBQF@|WRf@aA3ZJTkQn+n<4V?LJX0v`z)jh~T`8b z*>(kAdJ2XhJerFB6RY(gHeBBL`fyCM+<E>=!=4LxMRFn8@A5c z-;^LBzF*fI*563>y&rypB}plIxs|`vmbZ z%_3_-({y@aUeTlN?W|TfIcyUgmQek*s~0Up5GEruA)85-yvIfj?MCM#InC`o$_&7vT)u~4hZ7d*0=i>yMFDb z<)`S?9GXuT(woZIC5d5pNue2$f;((;rt>}5_##O zdVYx88a3jYhMt^wS5t4c08Y+m5#V~|{iKU-Eme07;{KX3`~V5bX(<+n1EFXcFk{(g6Ge}wr6pjb_fWjD3{%SQ z91-8sN#iUIfcFgJ_3QQK^RsC9Gd4dw;D%I*z~jJD6BS zXHOR>58+=_mhK07v`C--MUzv(dFcN=E2Zo(QE7`X(@tK}gv8(0@rO3&nGgBE6;&^d zz8*<@^i$!V3}5irnd2;T5YMZkju*!>)pae2A-Ub4<-n~-Ecf9t<@=mHN74dVha@Vf zdu7Wn&=TEG-M%nfen@3e4DaPNX10iylt`(@Zr6G8ei>c(dZ*V435*Dp6Fc-s0>~G5y;}Zv{qs3N(h6KNa}OXIK^@vpWe%didd)DWX%R=+U(qsvn7ExVKB3kJ6*a7rtDRk z799Fo*AP*8TOhR_raykXNBCHa z+7zLX1o=g5>qv2jmT<7Lg@_movw<7Mug9{LnULg4I1H|M)To@-r3Ba_(4Rk%u~r$6 zE^69lrJUuCykp;503xI5n$Z?gA6=YW+lO5zbOpS^bTryRmamRZH&8nKC0OxofRKCs zQPJ7^BFAbN$VgnTERM%@;_zFOP1AXS#FJ`P^NI4r`7+_wKWJG1yg=OjMj&;ie%n-+ zRE!)2)wy(j%r5yr8+m!eF8L&HKHQB^{+|iq|Hi`pM-B5y2WOG1tK>5yuhiLP$Efm5 z`D-{JUh?OdRer)F^po~X3n*WOcLDdXuhr1&rkCk|wprxRG}-i-UHp}o0M57FzKPW* z(Uon{+^d%_wGv1icz#U8?#%0g9WR~M@WPuF`wqO#FuSIDx^@)1P`G0CC$d{V?GV+L z9*t2=fl6|b#>2IP0U&CzEk}lC4Y@w+I|`{|_o`K+4djdLf(0VW+HkFhPhHbP01KK) z_zha?f=w~y=y{teIq&f)ku1|oCvwrW>zw!GaW9g4Wo>f8yRCANOFT>R$dBYnzsmb9 ziFsxFCJxopR`#>HMr@Dp@~(xOT(ees4hyfX#U~oWrN!mH`sCW8;YII6W+%te&O8gy z8oMa+d6+P^+CnObBP+{k9b({!tIl-s4aHI3`jr+_pF-y?&;Lb z*AHaTe6M##4jDX6S$8;IAu!07xcw1pSh$FN(ELI!a&WG0LFV)?84 zTy53cEuW!6zcwRXleWRowm_UETKpe;(eE8g8tWyFUm-4Kb?{rQB&Wh6P5ikkdaolt zctNahPBK{i>%am_d>GSHBz{I)UpN+YTE&di`TP{4Q%>I@wF2MVoZNXoX!>zX8*Q%f z8m=PQ-hL-L_w~@QfNyLYTo^1Xh&?jEE(&0}hn^iiIf=I>hgXR$1EYm0rvX1Bn;9C# zIoou5uR}V;^KaKX=)_MKWj=UMTsn~Zd+=aY9@#M6Z7JbKjd844Clr(M1<)(qWAN9M@-n-uZMMr zFRSVN4?13}i3wGDUUA&G3$yXQ`LNmnKu_woqUmx;hQ)}e$H_r;(0hh)o^tnCNI_Za zva^eGG1OG}(zj_6PISV4x_hY@I~6q}cc6MjG$X;)oz8K-4ZDu{QCaa5l=?4ZX>Mvu z;Or;4i$fq?fCg#N5N4{6Cm6Wb+>CgwTs=Ft`2I^hj&2bt6;8EgF9PwBu28K`-5ZbLPtNpducP_ zFy`;_(4C+4gc-hmdIv8vM8D&VNbC%vLfG6Q+$r<|NRq@4Zu zMQEM-9INOhAD86d?juprFm_ca6l$+gP^_*K_rm{A3VleDMVPL!Em4S0Qg0z=tPnlD z`@P*;5$MyMSGIEI`!zCEW-U9)KMAST>T#zVdaf4UZYK0DoejiXVH3xNkvW4uN7r_H z+c4D&vwFlk9k#y+Lh}uz>B*^b&e#sM$!Sbu^yZAa5uaz|THbq^O(H0cd)b)7$MPhh zH-%W_n-Nj3sZLtB3{Cix@qjhOf!&F05bXtnVySAdjd||Rko-tKlP_47g zcQpZnZHXv;F-F+tA%vn_ZPWIbZ-o~&e+Rn7fNRC4B9ZoRyyxu8WG&eS-kYAM43_&% z{FFC^;yMG4H$YgO;)v` z@Im5_6_+_I#uRhFMnm5z#m!06aKF%J>IqMiY3O~){?nf`97Jp}cge{NSJI3InZAV) z<(4k}I!9yfAik1{TTr;$?Ji8B-}6vWG^z>RlP-+A*9a^xQRg2uF}Xgvup5+K&CSvBh>R(YoRAfbbxA zQ;sO)qFXe!V1#@1p;0%%h(PpogqS^9h&*#2XS!Je}*I0X4aKmihW&4q7pgT~kvKoU=L1=AIBf zEOdLnaPr}5wBIh+iLS1 zsu`5NRuC`3Rp`+4WsuRtVtLkdO^vyF6U8%1q%#T5m{X?M;BHk3@jSi?t%Hg!Ee38y zy~eG~ej@uakQbl|;tP!n)@76qu&U05AeolSn=waJO~Sub--(odXL^t~bbn=H$jhnk zQ25Egac-WBddAg(;odPSd55vU3#k*$^vkxrZzDrJEr}_a(PhKaL(Ka5Hz-M?KDUJ0C7Ds+@JMG)~pBUxgHJ18UR~e!+YYq zHQJH8-hepYM*xuJg%RfuXJ+3&6BsOV)}EJm*yidBVTaYg@B_p498bG!5kQmn9;l7~ zY_1C?Eu(kwir8y>Vp@0l5oSd(!VBjwxc!NBS|LpAsnyNScP1r*$7oS=l`ZXNY%BPm zh3Wp>f>O9P;!(g@lpz)NXrt#9g`g6~Ps$P*Y-4~YbJk$kD`Dqtuz2L5XF{b?LN%8pApwOi=CF_={iaHh%LxX5*j^4dEZn}|{SaC^u z)8UZAPTKYm`Ss+;(VFtjTZ^a&QL_%wG$Q;H?af4SeIP?MWYd+Q8NrY=oN`hEvu#i< zESVm1FV)PiRWXAobACSUGL-iWMDaIYo{p>9ew{pj>x5>zE%H7}Hglfp z!x>@uJN5T1f&#XYsZF-m(O6HU+nKw&OgB|}LRtW7oRx29qQF_y-T^-ERTl%FzAMD&X088( zJt2WP6aE~>WvvUzOyy#VgHyP&Wi~8Lcfi zT?^%@W)wV-P^7HRf!9jc@cM)*)IXhiuMs)VS_-D_`oRpLT`QJHyZ?l#IwKM2hUI10 zVrGJq?X*N(zhQ_4Kyu1hDwSPs&zFieEzm<(n?u9fFo*k$P_qrA zp6+NitgiM8tjhyEQ{zhTjXj0!;NuV7e&pq42}`L>;eqR%uQpaOa*viT1G#*im~ z^El<5i94-~k%?tsN6w%?Mzz>1(1LK;DLj}-bG3zYDFBG?n7cq}5t1#zH`Iy%hN28f zNj=gvba^UUMLcriLYP_|VWc7;yM);E+8Gb48tGw6TC`OclYq+dvg-61GKjdH8ii=0 z+KDN6e+RBD?ptQec4mJKzp8HZ70#w+Q+1NPQ<8b-)9A?uEzROH#w>w|o~JAjQ-MS& z457JRRaPan&GYjuBl#sDaZ6{P8^J${%O!DvStyi~_+x?9I>{3f#~dB7RkE+sfOh`= zhjSJ0;HfxjDDaE-)lvUdHeGz>QS6%)7$|)v@nwYe$f$Vv+K2AJ_oPb&&-@4bBUe|o zSxrzzKq%8M*!G20g`_w8CHJ|O=NBaTL(FaqBAIu>A3!nvAFTxck6s>hBVZSVH9G#K z9k5v!ul40+S(0}g*)zLkKQ;5g^gh(?{Mzsnn2sTEg@6P8`}tCm7i)?0K~9#9!$I4g z;i|68{kJp)KVZ1uPd(#SJvp$>TqQ1F$I|9Qr^b6Fo>bw=2ac%Ca_-OD{O-UEzeyrm- zIdhW1Rk@xGR9i=kNCM5Cwo)-}j{ch^t;su8I&l`(&b@8gM zcmbU>c+4u{)*dBtu5YgIokf^|9QP33SSt|$ne3E0!qwcLagj?9lOHRXp22{M_Xg}E$UJ& zy(3B5X2c}8**(2pD>+dK)6m|^cF4j))yR+Z_4(A(?X|dq~LLsj0^<8C7AMiUxmaD%$;K_r`_9hfRu#anfd$0%NjcD(Rk` z>o3|VW})?x;|td9N~=+Gz5)*cC(AN%N!+m}I;{&NLqU5?u@wT;`s7_n!uNr@wO-*R_QsibZcV)=!P-fj-Xc;?(RZ|IvTdGJwka@7W3l}$~G zr~8t@k~KozVBLi>!BPeJYkSXlFig8yRKbpf}G z!dJ?l9#c86iVyzD-_Ah|x{h9yH*z{saUW-pPzG#KEH&@Z3hS+kYNtOpqG+_2#z3JX zd0(ML8;8qwW|<6U=@Un@Jv-shSJO$`+lWTQzc-Lz8>)=lnw%p>D`>*3a)M zN{F5#y934~%5F(oLzITX_Qj2mhO~{;?%T!{DXFU^tR7B? z+p8cePGv(o_{Csi(mRUX&gqV<4wl!LiqNDRjd41!zmrR&wdaNGsruwY*!ezYjWMJ% z(5(Va0A$X5)!vpPfF#j;0B3?-ut zs6lWS*a$V1OE3Cvv)*8mAG9uqxZxnVowvhydVVxGTa-0a+oMAqPVwSbxzIszx~Xst z)AAJcizB0;ZiUWqn-#4(D`kBCZbEE&?bF4BUqSFr!4>qiFN;^H1hSI!*iBlDEew9- zsHOBVQKHO>kIS7bp;pVy+IXX%`^CRE7+xKr8#e^Z#_{&iM-7_ThN1WZjE{2N7+!iC zj>Z-vTUCg~GkvbvJs0JgJqiC@5rw_KtC_s?lT({tHQb0Vt44jAK2SP#koa?tSN8=; z8WOWx;LfpH$R`&bazHD;C>Zh^ULW4zrvLvPk)Eu3b11DzdVrLwj(+8T={dEJXjV9M zT4|D7PB=BFaL;lgX43(WP*;`MlDUeUe-)?FBTsWe(u?xQ->^4MH;t5hLJ4lOD#)V- z;aT&mMFeK{t#_?`4{sBDq_xK+{Y80%PEDW-`lbS-OPdK@V_dLAip;1M;WrMbn(!fm zHz9Jg)wHf=t9Rsgj|ZQT_4pBnKk35SOiG?n3mgt`8Kri``5^b0N90p<#|+C7L5+x* zM}86C-KkP#;)_lo-|=>lMR`RL_K3emeUH#1d_v)E$%`~u&4y(A4OyR9@@q%7uHSB5LGczmn9u$6s1vcXV`5XjuM0T$7ObqFSz2 zp>h3epXM?u8@EY%XCz&31+zp&*I5R3s(JXCM35?F)GyBY{EIfKYU((9YG%4`1C9ve zHBs3)#+~wym!svniY^nZ`-|2+)5>wPWC0h}MSnivD$3o`HuS;3zL@(r%@O-`#c{#> zr^RY0Ls-57-B~dfXju3JLjqF~rJZw3@KC)pOJ#@`1n%#0p$DnA48@oR*MD9o$)uUP z;b-0V{vMUE$hHy;eoVn?%By`7rRnqv%}F-^vVQIRi5#xI%(m_9b8+L>`Xtjt4K`U+ zpVsN0&t-SFIvRf>$GhH6;~g=l&$3=Z+`nh;VtrM`5KE!>t6iaB%$00mSvHWGRtC*t zzL`UtSp3;mn9fl@f*kJo+?xXv68GNU^u3!YIr=q@?#wx}A2fM9|%Uzp0LP zewb3qWMUMZ(mo>?+tWM8ZBTz)AaRIYHT+dky~E|49jiXCZ;c)yAz-39G`q!0Ti2l8 z6jD(^2W`<+fOdNPyy*RlW>d~E-)&Vp1mta^p@f8eD~N-YPe$iOhn|2rxOybi3-_yM z3Pfdz4FO=oLD8uy4L#>wtx<#WCUm}VdSybfF4NNsZrMrYYyHd>AuyUj#j#8)=>63Q z+Zkn_;7~CJ(~lajJM!<=88fMKq)lqFzjoC>J7tC#8Rr4qbVe5}TW0#Z<=$yrKf!Ua z!KW3j5Vl{AURa&abs+MS7q{^3&UrBc@lp_wU%^7j1EA}ku7>@Jzbo691%D^SrVGBZ z3=vt49&(Wi#b&cGd6-dkuc(t9a`EuML(5NJ_+RaPbx>Q;x-XO>#Y#)@1lnRnf?LoU z?k+)#y9Nss3Pp;9;ts{#U5f`P?iPYO6sJJx%f06vx%ZxP=gj;2{jq1VXR>!DYu5VK zx4!QuPITu;=#@LDZ_F*JQ;eWAXfyk@jc{K&8h(2M9v!hjcbl3G! zVy7kB;YH^mGg2;(1(<6b_^p%L>~?TJE)s{|pnz&J7)P8fUp39NQ-=4M;P1m9gT*p7=iAEDyjb|`!@C5v zq#f#c9zWte!C$WjZgE}i6{Tu@-A-`3W((-~eIo;0==g{~oHL#Csn2whUbi87^*n~y zxM5$FAb)OE!i~vZW{FbhoZ2l*xm{upL%TaTdSm}WUioKOm%jo#IfHzS z@UhDF-qe&2(<4lydaY<1Xas&+Sk}GGK1#f{YjU7J5vh-F`eyoF;LVAuztdK9|0a4L zSgHFV!gcHt()1xpwjo?Pq1|VK=}G#|987wui6e}{QMK!6CJ0&EHnJ=@{IIL88IYHk z0MGtbo6?vI!u4EtgOA`BX&Jq(d7|kY!i-(!dG)nkbzc&4e*4JyV7Dyr0ww}ze&y62)74fS5pJ2UHQ{@Z>*N2+;{N4xXGbo%B8seoX+9BY(}F^7X+HBt&{wSH zBjc-Lbz3{AyL@R`aZpt+Z`yS@zqNyx?-xCZWXjbGHKm9KsmLc}uK5(^qMU_=VR(pi z`aoQ`Q}a|#jyD}>VNaofJ%lI2=Rus7A)aO?1E4kB#wu(6FfxYQf6)8G3dNJCbg%Q6 zHCeP^7sP-QxuPsjR7{8^v=Vn;C@Qv>2eGY7<9v`v6sQ7aY>iU^4RC)uqk08v3%r!anxiSLAW0VU2gKv*(0QrDcl1)~A`nvZl!vVL5%?IVhd* zxU;%p;^CxrDZfehWKcV)Ew{XbriJ_2{lOqCp37jpoeN!?rwz|<8tGz6 zhNmy*Mh8bF>(s+76RTgH;KTWvOj~P(4jtv6U8Y8AVz)<34P!3xfae^pB*=)0cD?^# zFesThtG`#q#o0zD*28QCDY9k^?a~xL&lneNJ-IFWon8*$+egfR8kfW3_N2{-Wt(uu z^S)oR5KgLc z?_DOv#)oMFKS$oh@b`-qJrWvXY6)Yl6T~s_Wjdfg<|kbSO;TvSqev$WepfY*ER3c? zdU}F!M@N#KL@5gD9~>O!%@=zoCe%=w4dZgShFBl45=_$euCa!1Ruw!aZpLXyBtnTp zE%L<8M@i$&-FHVT%T}{l!ah8VkvlLZjkw|%@-^K(c7t+11q|p(J$~tYW^Rhp$p39) zhwo-kRnU7|iCBrz>bmU73bUbiZ_d<|+d*;AaCDRDItF~3aDA!uwvIfrbx~6HEsrkE z$m(zPJN$FsqL6_sXG$bycgLy59}I;l1F0EF6>2QY&vedRH7+%PG!8QLgp!cJ=Kv;# zbS&q)+eDMq?49UtPP$Uu9^aCB)6jId=!0*gZ;hkT%8iKb>+ zrZ!k|aKMyFmoabm5_skYL|x-YMMjYHr-`io`eW3O7%t82Akk86o*5TcLQ@=llJsAe zO`{yb!;?@4}2kHy;5n*s*+c-w>Un<0Jl0c@`XG)8G1Xs`>EIndJTlJH(^`Bm}4 zzRvd!kiiKU-#WEew9VnHY`r&4*)$9cz+1zw<&1{T$mO3cF~G>wTU1ri7ziJ z9Db9%gPBSYX*@65Pi;l;omtaiKlFUjL#wN|BStl`&VBsWFc<#gaNo!KXTNTVZq3m! z+hV5Vitv1yt4=KEf_zGZQ3ng+eSFo#A^mE64|V7jWR1Tou7-{2qbsquT2x1Ev#!Hsf4>r6bS`ZAIoYoXkWk?~J_-`k7Xm*ZDdb+L*WP1w zYDiJ^kd$=8kwkp6w-HC27*OllZjF_|=FJ1>A~x zWAG|}k9tm^bz0L_QKjR#(+0+r=eDLH+kU|UZHpxf>jJU$R;Sn}^nv%tbVxPz8mcsb zlpuPX2j(nU8#55+%&8LMEPNck#w>~z>+n7R?LeJjhb=P!l~%S+Iyd3-)5B}>R=zR;FIhuWuI2XP7fW5EFdi8MnNDT$0&^eJZJ5hYI+!?H ziP98}yI4)TtlpjIyWq$&8->j%Y^?iZoQG}F5VWogY$IXlGOp}^uw%<>p;dFKs@bR0q|UvG7h!lw>-_vTKs2w zbuQbZi;4t~!QfZMPdM|FayV1U%{R7^U5$x@hGl-;+wL&o<4+aXd1 zV#9P_&w3tjOOoV9Zn;y2tP=!p!@f}7B$y9o9Y2+&56|^t91-4#z0(o_=*$f%0RVWN zC}{~#z0{$BiO&GzY^0uaVOB-(uvu=*iRv>Zp%j38<5wZ#-(=hkEqcpE6`|d@>dF`| zMbnz*g=6PCr8qqF_DiFiH#HeHzu_DMF@T?-T*l^dWtRLwRcbR`d`6-fW>Dj1ZDL5r ztv_43ZVv~7grZ+ce+?!ByxBj)XrJ1r0ye|&$Jg8l4KaJprcE_Opar5@stgYvKky6a zC>i*QnL!PTUJ9S%vmmz~-PhIVJ~_O+8v=g2up6}*%A-mn?SA<49;OjNHB3;+=T86N z022dK@kadPhayYUPgjL1YVA?Ey*?+F6BfRR>$3V|vM2JPh!mvcCtl$}T|H@Xl44m* z+oj3=l24ICT%J#Y)b&mG_V=jf=|g(T8iw-Xg#gX#JGx>tLv3cuBk~ON-NGfrpZCag z$3J%$7l()f0Aj_XS)ybm9w}B^&XlK1!#=V^EN8yq+{P2Y2g85|NLBId|0{v;FEM)$ zUj<=y4po0yjQ`ql(S_RVEPx(5ZK%7b_*5&T)b8Pbo~Tp;T2mn-3tCuNJ~|vu z81T6Rk1?&XFRYGFpu=*!*T4OK9?x%kO$shF$VnKxvm%#n6xALUP05GI^HFqwF1z|) zE-c!nNeK@lfhBKiO3i*nzV}+u|#Yfrag-&+npG9LkJSqhAbKq=|8cw3(0<3Xy8QhgBI=#jT9Ju^oA!nDhd`xhHY=yiDythjsR1gJA+k2ta|G`vccAvcir0Hf~BdQtLum+*Yuv ze?1_`y%^NTNKO zfx{3JCO;Z0@*f1by_3jQn}uT4Cb9d>B5Dt*)&b$99u8IT6GSEh-d5Z zJ8G2&920}{fJKFMCsc?rtVL_Sjm%!;n^^!J4+_|5Mg>H&!srz0Lxg>Ag!6+V`rJhR zV0@U;benu({Vd_@tP789X0rCix9{9zhsU|+0Y+C-Xjo zVNv|p)dO{JFKu-h^xW@*%c_3NvmWtkyq}Ee7#lmbiCYw)F)ynlgo-^QPA&lPNO*29 zwC*i#&R1S2Hfe@lA6*oD(YZI$VR-6gAgzP;rT||Rv7WEj$|&`%6=0t27W5M5(v+n|Li`$T}{*!DyV$y!ztr7V~|~8ocI-T?$LPO6-?M9>i=rGdiE> z70*JcM|#5{uNHex+l;>K?%$6u2xwb;f_tXXM@T+YC6R~otqyo4cmeq)ew=OhpRTV# z_2tu?TeoR{#5CsFjFdmp(_=Hc7&5`<{EPw#fztG=Sn00&8hSEQ4-L*_D7*CC2#na9 z6I*CT&LJ5Fp_e>xH6he)Oe23T%K0NNs+|``jcSc@8T^87IK8ryxg~_X3sSQOplY*SZ0@{#m4+qHtq~vK6v@&pDJA8K5brVk=t|W zXFTUv$q8C6qvIJnzvdP*|7S@&gBV{YPt(R`Rc#n7y+*EC_FHoV{+7?Klo?6RdYo+>)11MB z8r#()XyK76(OcRbvWy*X5T-5iREDj5+LsId&3*W{rK zCdK9pY@2mUMf=b1V<ryjjurF1&34cAsUGT@;s_C1f#aohzJH6oZ11g=nU3QfT9e9aWpgRZlUqfaoa&BBy@7u?eRUO zpW+6u*Kl$ph%Z8K=7QhJ`W-~vc|PX}Pkg!=$Y}bDi_ZlKzGip&Whunrk^U8Ijq*Pz z`Z~&ZHC zoMdNeHoF>Wksecq{kg`;2S-)cLd?pT1q*cz;LZIc%B5lOa!?wkFv|2y8gTX#GSsV~ z1rb$|dY4B;XzfP<#F529uvv11uURKPi~6iUm6;g2xJ&zjH9rhaV(AKL`$jcYrdaGT zS$8Tk$!`}jOnEMQgI2J8U6WUT54!NM2AGS|6OVvVm=)r*(}~Y&`P!KUCrJe+l^J`N zjhRbuhu0&;q4gOHde<&L_0fI)Pif{IHd^KI$O|4GxtY4!g9#zN4$1?R9CBP!eOU9M zV>ipX)7M%-e=C}@)n5xI;$few(z}|QGv$5(r|ZGGm{9fzx5hEqj$5hkql|zQSlO$W z5PDXcZf{}#r6^)nFA(x8X>c3z2gtzQM;W=7jc!%dc6lzFWilSz-G3HN`3)2yuqopw ziSgOal<**0hYvpzb*h7?Dz_<>o*_VJ*{)@7jf;L)1W-HW^Vx!(0LC}JN1rwUH7BCWM!j|DjC8~&9`LuG~Fh7bRORaDD zOfq+vW3d0__wg2C3jYc{oHT61g?ikg;$UkwfB{YS&lz{xiP8ljnXV>VC5^SIXvA8> zvyu^>{Ijgu9BNRk7+Ij)5@z;@<%6=coPR4KccCLPK57F8-4`-Qk&Zx@Jt|TahW98} zBK7WIe=x?Oc8lNhEj`(IZkBKLzZbvJM8-dsR6Z7h8R4G31PQ^EKcYE*-K~8YGD@Gpm?E`$nMuHKNv;@{UleOmN2uV^L8X6kZ zSUsEI+VIo$CwEn>b33dXeVd{ooh7UyWL*j$k~=(5Y(j4_Q0=1KltUY)(y)L`w0r6> zXZW-)H``pjVbguWx>(b%M3}oO%0d=VX|7<=1X&xo&@lXiQDwWwS--XYl!9*B#$AIR z%_p>JE1IN>*0E>cR$DfbocR@9OJTOo@tn>b@A8(ss%EmmO$x{kACH#e7uwFifW?K_ z7g|^FN0v2=T(btgGo<}d{aVPiUwB>k5(H|dvOgYvufQQ{X6g&_y1I>*D`sie&Z>WQ zT+se8gzE5u^tF*_M1j>N1&PSO@hEm>%{bnReF9(6=yWGA9j&>$!Wo}~36|4|kwtN= zhnthwC+%$*%}2C%Wx*M*PM=x3wnGD8gbx8I=bpNVTF$n19wCe&wP2UL_caquo1HYaCsG< z&iwUD^Ip-i%4J$ru6gO~DWsdeL49SwI!REEyMtY?IH8hcf*|DV@crW4Qllc{G?V?2 zph@JQddQixW40)HhV~byH?B*5xzPy54j0_7hh5#Lja0jXBj|_VvigiI+#?jFGy(}XjRM*7qdKv+qE6;H#>bERlB9Ek42ZYfTCPHA#(!p@i{G47kif=;Kf zde*W5+EdDHoJhP*VN<{?l&!UHB1|jsEyCdT4w<+HK`Xbprq~(-P02c z!9|;2m(G3QjHBXrrkdKWIW(w%hXpXT*IVKOqG`}zbzq=6{33`<-nQF@Wsi#JmAfG2 zDno?zT>Mv#II=Gb_GZP-5N$Zw& zf~ML)1#EWeYO6)rr54lNBS`%OymxNF@HhZVmq-9_+_IAx%$_j$X~08(i(E=MS`e$r zOfUd7lktP2=ih*jynK!gZE`2;>?eYcw2-+7o~33wLrTIu4ljrfO|ETnX0(s=>3^F9 zy@GknZDkN!)BY@(p70W*AUa-@qb<35?w|&dZzwc9diZKR7=ZG6+Tbor&4TCZkBRsK zu_+^VBuWI?Nzhw`125tZ&hsq7^RDEywnv#ep4Ph5G_i%LBIU1mqit5a{Vkyt9-VID z*T?;zVRDI<^a>R_(q}Zas3x#o1&5_dnUD9oUE*%b5MS7osb`{5a#y~DKA zq`nHr;%=kj(^LBEJ&o7#jPmGYh}Sj2v_fZY4+X2OrH@gPh1f?>ON*8N@zwn1tFKPkwZX8W3XUP0s9j; z@-lzmzBhAR@}bAAx!J{wVea8ZEF}r%l*-ll5*T-q;CHLyKN#7~E0^x$5W=d9iUj+U zW;a?Z%4-&%76WwIBZYfSE~V(L$dR4a)dl(SRcCwHs4T6ZbvA8BwXQS`cMA=!zsjya zHtG+?`@T_}QeDReDn5QCtP3a7h264f#x4iTS7W6;iV>9l^asQ3UNV|-WSK5clj8eJ=osXaak!>v*ahX`mOR{ z@m-am;8(*P9q_Mt2&KS-cfa{{a4#U21&lqd2;1&m`=~_*VY!A_8hs72!*W$FII-1Zm;D$YugWTkS%fiDeH&!dcp7GreBU8mgHwz z9FCzWO+3g2enx<;XK!;c+bEMZ~bak4!3Piuq2`P;b6-z6Oq z=|S!(BvO%>(Ds!KBkU?&>E8IwzCH1z>^Kp6!!ZS4bzETg;*#`ZXT8DU^tQgswa;=( zdmqx9umCj?*XD-D^_Jo`J2A62#UBw0;~bnWm)0MHXs{`BQ+T1d#rgZ9Gs4m}R0os{ zmcW8;;Wc?#yLurCO9sO9wNm^R0FF7LH7PaT#e1mHm1f@0%@4^DOq=GmOnoF_^QNPcfG^yVXz7^8Y}n z)VT}qLt_EK0BT$dFl;)g^7e&OUAO*zV-C;MAOm3m6(MG0pA6NQ6XIhNWL`jOUS(}B z-27R&=n9s>1xw$+s%_x=a&wM?nAo!UMJOQkEP)TRD7wSv2BauPRG)3XX#OmI0<}v@ znD&^6k5-f-Yi+JY2;@|&;)wOtCq0GskPi~d{v$H0s&A&2(3lWbSuZtSUPOIs^y#gx zut?KV9?$ZbV?L zby~?yps#jj??qi-7rCRMbOQzg_Lml=deobc!bPmYeY1jcpu1iTJYl8=4! zMwVd)Mfszm=^mm`;ChIv6WS>WkG-#e9#?2`sR^nn_jDuKo0yD(Pf@eFxpGI$SdVL$IewBtA0Wi3#K`y zL}DdjBMjWeX!Arur*~OK;@sKF;u?=}64M;i#x8M?U|K_M@Ny5;{TY54RCc zf9>G@XVK?hQcTeuV6x673ZBLcJYqMc<+7k2ty=_^A95<&vnL86zs(E!0#Q4v_xp736h;d&8XEUSl=bT z4iTxhz3jVn$zu!5HT7lYgT0Ni=frYZ<)fdP|7I~Nak^#olb|hC0`EM}`3k$n*Pd65 zCFg3>P5e-1<>qq+O3ro4!Z)QaW0ZcdCwJ-`UjMXR?c=MH-a!MbcCmH-U4|2ZmjKWYFRCawF z20`RW%*FrQYD}zZ)yEABY0l5OkE@VaFnHgD&?a5eh<_|#ok(SrK*uvb&ng@qB-$6o z{Db=EBjbK*BD9c#ie27<%H!DJkCXlenXU?A79$35Ax-qY)4}#t?Fv*?6Fyy|(KxOD zfm^01YtA8>RO>#?q-WcWUW7D@EwJ%HLRV$eL-n+4t>SoMAsHnx!NFOrgp;J^!OQDI1uB&z`@_0z4irWX-ukQkk~7+SaswTgo(Y*V%Z zCes3ht_u~1Og@0(AZ*Ovp4v`V;`U8=1-Gc8@URldiufgf_{kZnm3Wi;)AIQC&;B^MtKtW7O7wNIJL4Ax%$k#z~M+K@=eI6{?RnaqEnkN+o7Aun0Q@JmIm4ZZ_(?$6q zqaC%G1vGy!>Lj)#l@!bh#^rBb&vjQ5XAzf^ebj81dbzZ`jPM$z-6T=5E(m^b-Chx7 z48WU~dD)^aK#oh{h#6QQ3VKAPFRx)v1{xB$Qg5*D?m@Qy!W%ho{EsB|?(n_SV{1K^ zsbw9FHHXBfjfqNW1Ovc0_k`KZvW4f_XlG- zXv*b?A$G0ls3NOGm|8z|IUQ1Rw0E#<_v1{8{53-{BgYko{vo?J&{Wd0vc+hb4560Gi$n=FGTL>_GY z#~EVI0sG30C5bDD>p;I(1omLC!$^g44RfwNv?bB|x$x(AO)h%~m#t9Z7lCcQ%LIGR z#f>=&L;r;;G1{zX6{DiiA7whY?*`sz8OMy=Sg*nsI?#RPzf1C|pW_2pQ#KX~!^udM zfiy!k3@#ucO24i(_T-WB^t?S;ki3(zj;R@W}O9>9YMQ# zy9S0HP#Y8Di&juQ)cD+01!`e&EZiwBKVf*kjOi9F;S<3fg|XWaVX3}|%7GBr=eOFM zw+Gbaou7#fdp@k)nFWF)U$YFJUkASV+?BafFGa)Ax5Qi=`ui-u*^A8r=|mh_S5E8T zT>fT6B;mWUyNy`B`Bo z)KOsRO&PXmIFMZ+_$_+jSe!OF(fKTxi#t;^Ln7w5rkc2N2IIY?|6d}&zp4EDPn$r0 z#p?b|lj1MvumAbo|0!IT>u#rR7j&Py^J^KKM%jvkM}+RO3(lm(T>&U9@b`AjVaBX< z_i6Nd`!QP0ckABCQ2encC9%`dAT;Xk3O2I|A)w?AxSUI=(w-=vkVLs{MK}D;0O)+Qmu_?L2VvwjATIp1nv}_RWbIa~qe4v*#zwt?RwKPV<1tdZ|3r zbsg;Jgy}+F3#cty#AJ2VXCru%iA5)8z8=K>ny19-)$*kPmn|-eq`iJ1ZI)qZ8mCFF ze>!a`T$Dt2UifvppD;Ulja$V70zoW}px5 zATxF{i{CB@_jTdYX#*KP|E_wl*_G<{$a;g*7`)`^>N1Ivo@q|oy2nPlt+!o`2K#Ah z@1)J!N02j1@*mePToza3*2Q*9&C`#FF&zU;Gl>bJUoWbUC-xTMQo2wYIjgp4YT1gB8Dw^Ebk}x(daO%JoH3mDFboyUElYcdr{_AA>r#sl+^{oC1Rs659 zR801Y!MgzV%jx%=c30N@-|d>Uiq3NgU%pKK2NB`_rV0O7fq}n*(f=2Jg?|l?{GSWt zZ-46Fap3yzQT=ZZ|9eA*UbVDO?*R5jI~B)I{E{VbX|!+HZhMTj-fK3gvPX6HP2Y#z zpHTdY{pnoim;Jp}^4{$I<~#bo-~IjBCt#KSzu*1Co0K$o{(h(Yw^v4!#uNVkANb2) z|33^7bGG;vjA*d4#>2{C>Ry?>&g2Ks)F`@9f-l}B8+4-c9~N!&|8`LR-=+=SpZWg- DP^sh) diff --git a/content/en/getting-started/external-learning-resources/hugo-in-action.png b/content/en/getting-started/external-learning-resources/hugo-in-action.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc5c99302c2a33d812fbf7defea06f91163424d GIT binary patch literal 22891 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](https://www.manning.com/books/hugo-in-action/) + +Author: Atishay Jain\ +Publisher: [Manning Publications](https://www.manning.com/books/hugo-in-action/)\ +Publication date: March 2022\ +Length: 488 pages\ +ISBN: 9781617297007 -[Hugo In Action Home Page](https://www.manning.com/books/hugo-in-action) ### Build Websites with Hugo -[Build Websites with Hugo - Fast Web Development with Markdown (2020)](https://pragprog.com/titles/bhhugo/) by Brian P. Hogan. +In this book, you'll use Hugo to build a personal portfolio site that you can use to showcase your skills and thoughts to the world. You'll build the basic skeleton, develop a custom theme, and use content templates to generate new pages quickly. You'll use internal and external data sources to embed content into your site, and render some of your content in JSON and RSS. You'll add a blog section with posts and integrate Disqus with your site, and then make your site searchable. + +[{{< img src="build-websites-with-hugo.png" alt="Book cover: Build Websites with Hugo" filter="process" filterArgs="resize x350 webp">}}](https://pragprog.com/titles/bhhugo/build-websites-with-hugo/) + + +Author: Brian P. Hogan\ +Publisher: [Pragmatic Bookshelf](https://pragprog.com/titles/bhhugo/build-websites-with-hugo/)\ +Publication date: May 2020\ +Length: 154 pages\ +ISBN: 9781680507263 + +## Videos + +### Hugo Beginner Tutorial Series + +Welcome to this introduction to Hugo tutorial. The goal of this series is to take you from a lion cub with basic web design knowledge to creating your first Hugo website. In this series you’ll learn how to set up a Hugo site, the basics of usingHugo layouts, partials, and templating, set up a blog, and finally use data files. By the end of this series you’ll have the foundational knowledge to build your own Hugo sites. + +1. [Getting set up in Hugo](https://cloudcannon.com/tutorials/hugo-beginner-tutorial/) +1. [Layouts in Hugo](https://cloudcannon.com/tutorials/hugo-beginner-tutorial/layouts-in-hugo/) +1. [Hugo Partials](https://cloudcannon.com/tutorials/hugo-beginner-tutorial/hugo-partials/) +1. [Hugo templating basics](https://cloudcannon.com/tutorials/hugo-beginner-tutorial/hugo-templating-basics/) +1. [Blogging in Hugo](https://cloudcannon.com/tutorials/hugo-beginner-tutorial/blogging-in-hugo/) +1. [Using Data in Hugo](https://cloudcannon.com/tutorials/hugo-beginner-tutorial/using-data-in-hugo/) -## Beginner tutorials +Creator: Mike Neumegen\ +Affiliation: [CloudCannon](https://cloudcannon.com/)\ +Creation date: April 2022 -### Hugo tutorial by CloudCannon +#### Hugo Static Site Generator -[Step-by-step written tutorial](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) to teach you the basics of creating a Hugo site. +This course covers the basics of using the Hugo static site generator. Work your way through the articles and we'll teach you everything you need to know to create a professional and scalable website or blog! -## Video tutorials -* Mike Dane explains the various features of Hugo via dedicated tutorials on [YouTube](https://www.youtube.com/watch?list=PLLAZ4kZ9dFpOnyRlyS-liKL5ReHDcj4G3&v=qtIqKaDlqXo). +1. [Introduction](https://www.giraffeacademy.com/static-site-generators/hugo/) +1. [Windows Installation](https://www.giraffeacademy.com/static-site-generators/hugo/installing-hugo-on-windows/) +1. [Mac Installation](https://www.giraffeacademy.com/static-site-generators/hugo/installing-hugo-on-mac/) +1. [Creating A New Site](https://www.giraffeacademy.com/static-site-generators/hugo/hugo-directory-structure/) +1. [Installing & Using Themes](https://www.giraffeacademy.com/static-site-generators/hugo/installing-using-themes/) +1. [Content Organization](https://www.giraffeacademy.com/static-site-generators/hugo/content-organization/) +1. [Front Matter](https://www.giraffeacademy.com/static-site-generators/hugo/front-matter/) +1. [Archetypes](https://www.giraffeacademy.com/static-site-generators/hugo/archetypes/) +1. [Shortcodes](https://www.giraffeacademy.com/static-site-generators/hugo/archetypes/) +1. [Taxonomies](https://www.giraffeacademy.com/static-site-generators/hugo/taxonomies/) +1. [Template Basics](https://www.giraffeacademy.com/static-site-generators/hugo/introduction-to-templates/) +1. [List Page Templates](https://www.giraffeacademy.com/static-site-generators/hugo/list-page-templates/) +1. [Single Page Templates](https://www.giraffeacademy.com/static-site-generators/hugo/single-page-templates/) +1. [Home Page Templates](https://www.giraffeacademy.com/static-site-generators/hugo/home-page-templates/) +1. [Section Templates](https://www.giraffeacademy.com/static-site-generators/hugo/section-templates/) +1. [Block Templates](https://www.giraffeacademy.com/static-site-generators/hugo/block-templates/) +1. [Variables](https://www.giraffeacademy.com/static-site-generators/hugo/variables/) +1. [Functions](https://www.giraffeacademy.com/static-site-generators/hugo/functions/) +1. [Conditionals](https://www.giraffeacademy.com/static-site-generators/hugo/conditionals/) +1. [Data Templates](https://www.giraffeacademy.com/static-site-generators/hugo/data-templates/) +1. [Partial Templates](https://www.giraffeacademy.com/static-site-generators/hugo/partial-templates/) +1. [Shortcode Templates](https://www.giraffeacademy.com/static-site-generators/hugo/shortcode-templates/) +1. [Building & Hosting](https://www.giraffeacademy.com/static-site-generators/hugo/building-&-hosting/) -* [Introduction to building your first Hugo site](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) by Mike Neumegen. +Creator: Mike Dane\ +Affiliation: [Giraffe Academy](https://www.giraffeacademy.com/)\ +Creation date: September 2017 diff --git a/content/en/getting-started/glossary.md b/content/en/getting-started/glossary.md index d4c1d0e26ca..c86c3fc970f 100644 --- a/content/en/getting-started/glossary.md +++ b/content/en/getting-started/glossary.md @@ -11,25 +11,28 @@ weight: 60 # Use level 6 headings for each term in the glossary. --- -[A](#action) -[B](#bool) -[C](#cache) -[D](#default-sort-order) -[E](#environment) -[F](#field) -[G](#global-resource) -[I](#identifier) -[K](#kind) -[L](#layout) -[M](#map) -[O](#object) -[P](#page-bundle) -[R](#regular-page) -[S](#scalar) -[T](#taxonomic-weight) -[U](#unmarshal) -[V](#variable) -[W](#walk) +[A](#action)  +[B](#bool)  +[C](#cache)  +[D](#default-sort-order)  +[E](#environment)  +[F](#field)  +[G](#global-resource)  +[H](#headless-bundle)  +[I](#identifier)  +[K](#kind)  +[L](#layout)  +[M](#map)  +[N](#node)  +[O](#object)  +[P](#page-bundle)  +[R](#regular-page)  +[S](#scalar)  +[T](#taxonomic-weight)  +[U](#unmarshal)  +[V](#variable)  +[W](#walk)  +[Z](#zero-time)  ###### action @@ -57,7 +60,7 @@ A data type with two possible values, either `true` or `false`. ###### branch bundle -A [page bundle](#page-bundle) with an _index.md file and zero or more [resources](#resource). Analogous to a physical branch, a branch bundle may have descendants including regular pages, [leaf bundles](/getting-started/glossary/#leaf-bundle), and other branch bundles. See [details](/content-management/page-bundles/). +A directory that contains an _index.md file and zero or more [resources](#resource). Analogous to a physical branch, a branch bundle may have descendants including leaf bundles and other branch bundles. Top level directories with or without _index.md files are also branch bundles. This includes the home page. See [details](/content-management/page-bundles/). ###### build @@ -75,13 +78,25 @@ A software component that stores data so that future requests for the same data Within a template, to connect one or more [identifiers](#identifier) with a dot. An identifier can represent a method, object, or field. For example, `.Site.Params.author.name` or `.Date.UTC.Hour`. +###### CJK + +A collective term for the Chinese, Japanese, and Korean languages. See [details](https://en.wikipedia.org/wiki/CJK_characters). + +###### CLI + +Command line interface. + ###### collection An [array](#array), [slice](#slice), or [map](#map). +###### content adapter + +A template that dynamically creates pages when building a site. For example, use a content adapter to create pages from a remote data source such as JSON, TOML, YAML, or XML. See [details](/content-management/content-adapters/). + ###### content format -A markup language for creating content. Typically markdown, but may also be HTML, AsciiDoc, Org, Pandoc, or reStructuredText. See [details](/content-management/formats/). +A markup language for creating content. Typically Markdown, but may also be HTML, AsciiDoc, Org, Pandoc, or reStructuredText. See [details](/content-management/formats/). ###### content type @@ -93,7 +108,7 @@ A template called with the `.Page.Render` method. See [details](/templates/ ###### context -Represented by a dot "." 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). +Represented by a dot "." 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/#context). ###### default sort order @@ -107,15 +122,15 @@ A member of a slice or array. Typically one of `development`, `staging`, or `production`, each environment may exhibit different behavior depending on configuration and template logic. For example, in a production environment you might minify and fingerprint CSS, but that probably doesn't make sense in a development environment. -When running the built-in development server with the `hugo server` command, the environment is set to `development`. When building your site with the `hugo` command, the environment is set to `production`. To override the environment value, use the `--environment` command line flag. +When running the built-in development server with the `hugo server` command, the environment is set to `development`. When building your site with the `hugo` command, the environment is set to `production`. To override the environment value, use the `--environment` command line flag or the `HUGO_ENVIRONMENT` environment variable. To determine the current environment within a template, use the [`hugo.Environment`] function. -[`hugo.Environment`]: /functions/hugo/environment +[`hugo.Environment`]: /functions/hugo/environment/ ###### field -A predefined key/value pair in front matter such as `date` or `title`. See also [parameter](#parameter). +A predefined key-value pair in front matter such as `date` or `title`. See also [parameter](#parameter). ###### flag @@ -146,10 +161,14 @@ Used within a [template action](#template-action), a function takes one or more A file within the assets directory, or within any directory [mounted](/hugo-modules/configuration/#module-configuration-mounts) to the assets directory. Capture one or more global resources using the [`resources.Get`], [`resources.GetMatch`], [`resources.Match`], or [`resources.ByType`] functions. -[`resources.Get`]: /functions/resources/get -[`resources.GetMatch`]: /functions/resources/getmatch -[`resources.Match`]: /functions/resources/match -[`resources.ByType`]: /functions/resources/byType +[`resources.Get`]: /functions/resources/get/ +[`resources.GetMatch`]: /functions/resources/getmatch/ +[`resources.Match`]: /functions/resources/match/ +[`resources.ByType`]: /functions/resources/byType/ + +###### headless bundle + +An unpublished leaf or branch bundle whose content and resources you can include in other pages. See [build options](/content-management/build-options/). ###### identifier @@ -187,7 +206,7 @@ See [template](#template). ###### leaf bundle -A [page bundle](#page-bundle) with an index.md file and zero or more [resources](#resource). Analogous to a physical leaf, a leaf bundle is at the end of a branch. Hugo ignores content (but not resources) beneath the leaf bundle. See [details](/content-management/page-bundles/). +A directory that contains an index.md file and zero or more [resources](#resource). Analogous to a physical leaf, a leaf bundle is at the end of a branch. It has no descendants. See [details](/content-management/page-bundles/). ###### list page @@ -197,13 +216,19 @@ Any [page kind](#page-kind) that receives a page [collection](#collection) in [c Adaptation of a site to meet language and regional requirements. This includes translations, language-specific media, date and currency formats, etc. See [details](/content-management/multilingual/) and the [W3C definition](https://www.w3.org/International/questions/qa-i18n). Abbreviated l10n. +###### logical path + +{{< new-in 0.123.0 >}} + +A page or page resource identifier derived from the file path, excluding its extension and language identifier. This value is neither a file path nor a URL. Starting with a file path relative to the content directory, Hugo determines the logical path by stripping the file extension and language identifier, converting to lower case, then replacing spaces with hyphens. See [examples](/methods/page/path/#examples). + ###### map An unordered group of elements, each indexed by a unique key. See the [Go documentation](https://go.dev/ref/spec#Map_types) for details. -###### markdown attribute +###### Markdown attribute -A list of attributes, containing one or more key/value pairs, separated by spaces or commas, and wrapped by braces. Apply markdown attributes to images and block-level elements including blockquotes, fenced code blocks, headings, horizontal rules, lists, paragraphs, and tables. See [details](/getting-started/configuration-markup/#goldmark). +A list of attributes, containing one or more key-value pairs, separated by spaces or commas, and wrapped by braces. Apply Markdown attributes to images and block-level elements including blockquotes, fenced code blocks, headings, horizontal rules, lists, paragraphs, and tables. See [details](/getting-started/configuration-markup/#goldmark). ###### marshal @@ -217,6 +242,14 @@ Used within a [template action](#template-action) and associated with an [object Like a [theme](#theme), a module is a packaged combination of [archetypes](#archetype), assets, content, data, [templates](#template), translation tables, static files, or configuration settings. A module may serve as the basis for a new site, or to augment an existing site. See [details](/hugo-modules/). +###### node + +A class of [page kinds](#page-kind) including `home`, `section`, `taxonomy`, and `term`. + +###### noop + +An abbreviated form of "no operation", a _noop_ is a statement that does nothing. + ###### object A data structure with or without associated [methods](#method). @@ -225,8 +258,8 @@ A data structure with or without associated [methods](#method). Created by invoking the [`Alphabetical`] or [`ByCount`] method on a [taxonomy object](#taxonomy-object), which is a [map](#map), an ordered taxonomy is a [slice](#slice), where each element is an object that contains the [term](#term) and a slice of its [weighted pages](#weighted-page). -[`Alphabetical`]: /methods/taxonomy/alphabetical -[`ByCount`]: /methods/taxonomy/bycount +[`Alphabetical`]: /methods/taxonomy/alphabetical/ +[`ByCount`]: /methods/taxonomy/bycount/ ###### output format @@ -242,7 +275,7 @@ A slice of page objects. ###### page kind -A classification of pages, one of `home`, `page`, `section`, `taxonomy`, or `term`. See [details](/templates/section-templates/#page-kinds). +A classification of pages, one of `home`, `page`, `section`, `taxonomy`, or `term`. See [details](/methods/page/kind/). Note that there are also `RSS`, `sitemap`, `robotsTXT`, and `404` page kinds, but these are only available during the rendering of each of these respective page's kind and therefore *not* available in any of the `Pages` collections. @@ -266,7 +299,7 @@ The process of [paginating](#paginate) a [section](#section) list. ###### parameter -Typically, a user-defined key/value pair at the site or page level, but may also refer to a configuration setting or an [argument](#argument). See also [field](#field). +Typically, a user-defined key-value pair at the site or page level, but may also refer to a configuration setting or an [argument](#argument). See also [field](#field). ###### partial @@ -300,7 +333,7 @@ The host-relative URL of a published resource or a rendered page. ###### render hook -A [template](#template) that overrides standard markdown rendering. See [details](/templates/render-hooks/). +A [template](#template) that overrides standard Markdown rendering. See [details](/render-hooks). ###### remote resource @@ -312,17 +345,24 @@ Any file consumed by the build process to augment or generate content, structure Hugo supports three types of resources: [global](#global-resource), [page](#page-resource), and [remote](#remote-resource) +###### resource type + +The main type of a resource's [media type]. Content files such as Markdown, HTML, AsciiDoc, Pandoc, reStructuredText, and Emacs Org Mode have resource type `page`. Other resource types include `image`, `video`, etc. Retrieve the resource type using the [`ResourceType`] method on a `Resource` object. + +[media type]: /methods/resource/mediatype/ +[`ResourceType`]: /methods/resource/resourcetype/ + ###### scalar A single value, one of [string](#string), [integer](#integer), [floating point](#floating-point), or [boolean](#boolean). ###### scratch pad -Conceptually, a [map](#map) with [methods](#method) to set, get, update, and delete values. Attach the data structure to a `Page` object using the [`Scratch`] or [`Store`] methods, or created a locally scoped scratch pad using the [`newScratch`] function. +Conceptually, a [map](#map) with [methods](#method) to set, get, update, and delete values. Attach the data structure to a `Page` object using the [`Scratch`] or [`Store`] methods, or create a locally scoped scratch pad using the [`newScratch`] function. -[`Scratch`]: /methods/page/scratch -[`Store`]: /methods/page/store -[`newScratch`]: /functions/collections/newscratch +[`Scratch`]: /methods/page/scratch/ +[`Store`]: /methods/page/store/ +[`newScratch`]: /functions/collections/newscratch/ ###### section @@ -334,7 +374,7 @@ Content with the "section" [page kind](#page-kind). Typically a listing of [regu ###### shortcode -A [template](#template) called from within markdown, taking zero or more [arguments](#argument). See [details](/content-management/shortcodes/). +A [template](#template) called from within Markdown, taking zero or more [arguments](#argument). See [details](/content-management/shortcodes/). ###### slice @@ -344,6 +384,14 @@ A numbered sequence of elements. Unlike Go's [array](#array) data type, slices a A sequence of bytes. For example, `"What is 6 times 7?"` . +###### string literal (interpreted) + +Interpreted string literals are character sequences between double quotes, as in "foo". Within the quotes, any character may appear except a newline and an unescaped double quote. The text between the quotes forms the value of the literal, with backslash escapes interpreted. See [details](https://go.dev/ref/spec#String_literals). + +###### string literal (raw) + +Raw string literals are character sequences between backticks, as in \`bar\`. Within the backticks, any character may appear except a backtick. Backslashes have no special meaning and the string may contain newlines. Carriage return characters ('\r') inside raw string literals are discarded from the raw string value. See [details](https://go.dev/ref/spec#String_literals). + ###### taxonomic weight Defined in front matter and unique to each taxonomy, this [weight](#weight) determines the sort order of page collections contained within a [taxonomy object](#taxonomy-object). See [details](/templates/taxonomy-templates/#assign-weight). @@ -394,7 +442,7 @@ To transform a serialized object into a data structure. For example, transformin ###### variable -A user-defined [identifier](#identifier) prefaced with a `$` symbol, representing a value of any data type, initialized or assigned within a [template action](#template-action). For example, `$foo` and `$bar` are variables. +A user-defined [identifier](#identifier) prepended with a `$` symbol, representing a value of any data type, initialized or assigned within a [template action](#template-action). For example, `$foo` and `$bar` are variables. ###### walk @@ -407,3 +455,7 @@ Used to position an element within a collection sorted by weight. Assign weights ###### weighted page Contained within a [taxonomy object](#taxonomy-object), a weighted page is a [map](#map) with two elements: a `Page` object, and its [taxonomic weight](#taxonomic-weight) as defined in front matter. Access the elements using the `Page` and `Weight` keys. + +###### zero time + +The _zero time_ is January 1, 0001, 00:00:00 UTC. Formatted per [RFC3339](https://www.rfc-editor.org/rfc/rfc3339) the _zero time_ is 0001-01-01T00:00:00-00:00. diff --git a/content/en/getting-started/quick-start.md b/content/en/getting-started/quick-start.md index a6c54b54c41..6e67cb73bce 100644 --- a/content/en/getting-started/quick-start.md +++ b/content/en/getting-started/quick-start.md @@ -110,7 +110,7 @@ Press `Ctrl + C` to stop Hugo's development server. Add a new page to your site. ```text -hugo new content posts/my-first-post.md +hugo new content content/posts/my-first-post.md ``` Hugo created the file in the `content/posts` directory. Open the file with your editor. @@ -125,7 +125,7 @@ draft = true Notice the `draft` value in the [front matter] is `true`. By default, Hugo does not publish draft content when you build the site. Learn more about [draft, future, and expired content]. -Add some [markdown] to the body of the post, but do not change the `draft` value. +Add some [Markdown] to the body of the post, but do not change the `draft` value. [markdown]: https://commonmark.org/help/ @@ -151,8 +151,10 @@ hugo server -D View your site at the URL displayed in your terminal. Keep the development server running as you continue to add and change content. +When satisfied with your new content, set the front matter `draft` parameter to `false`. + {{% note %}} -Hugo's rendering engine conforms to the CommonMark [specification] for markdown. The CommonMark organization provides a useful [live testing tool] powered by the reference implementation. +Hugo's rendering engine conforms to the CommonMark [specification] for Markdown. The CommonMark organization provides a useful [live testing tool] powered by the reference implementation. [live testing tool]: https://spec.commonmark.org/dingus/ [specification]: https://spec.commonmark.org/ @@ -216,13 +218,13 @@ Hugo's [forum] is an active community of users and developers who answer questio For other resources to help you learn Hugo, including books and video tutorials, see the [external learning resources](/getting-started/external-learning-resources/) page. [Ananke]: https://github.com/theNewDynamic/gohugo-theme-ananke -[directory structure]: /getting-started/directory-structure +[directory structure]: /getting-started/directory-structure/ [draft, future, and expired content]: /getting-started/usage/#draft-future-and-expired-content [draft, future, or expired content]: /getting-started/usage/#draft-future-and-expired-content [external learning resources]:/getting-started/external-learning-resources/ [forum]: https://discourse.gohugo.io/ [forum]: https://discourse.gohugo.io/ -[front matter]: /content-management/front-matter +[front matter]: /content-management/front-matter/ [Git submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules [hosting and deployment]: /hosting-and-deployment/ [Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git diff --git a/content/en/getting-started/usage.md b/content/en/getting-started/usage.md index 268aed2e4f4..b19920907a1 100644 --- a/content/en/getting-started/usage.md +++ b/content/en/getting-started/usage.md @@ -23,7 +23,7 @@ hugo version You should see something like: ```text -hugo v0.122.0-b9a03bd59d5f71a529acb3e33f995e0ef332b3aa+extended linux/amd64 BuildDate=2024-01-26T15:54:24Z VendorInfo=gohugoio +hugo v0.123.0-3c8a4713908e48e6523f058ca126710397aa4ed5+extended linux/amd64 BuildDate=2024-02-19T16:32:38Z VendorInfo=gohugoio ``` ## Display available commands @@ -65,6 +65,16 @@ Hugo allows you to set `draft`, `date`, `publishDate`, and `expiryDate` in the [ - The `publishDate` is in the future - The `expiryDate` is in the past +{{< new-in 0.123.0 >}} + +{{% note %}} +Hugo publishes descendants of draft, future, and expired [node] pages. To prevent publication of these descendants, use the [`cascade`] front matter field to cascade [build options] to the descendant pages. + +[build options]: /content-management/build-options/ +[`cascade`]: /content-management/front-matter/#cascade-field +[node]: /getting-started/glossary/#node +{{% /note %}} + You can override the default behavior when running `hugo` or `hugo server` with command line flags: ```sh @@ -130,7 +140,7 @@ public/ ├── categories/ │ ├── index.html │ └── index.xml <-- RSS feed for this section -├── post/ +├── posts/ │ ├── my-first-post/ │ │ └── index.html │ ├── index.html diff --git a/content/en/hosting-and-deployment/_index.md b/content/en/hosting-and-deployment/_index.md index 35fd3cf057a..b6f54d3fafc 100644 --- a/content/en/hosting-and-deployment/_index.md +++ b/content/en/hosting-and-deployment/_index.md @@ -1,12 +1,12 @@ --- title: Hosting and deployment -linkTitle: Overview +linkTitle: In this section description: Site builds, automated deployments, and popular hosting solutions. categories: [] keywords: [] menu: docs: - identifier: hosting-and-deployment-overview + identifier: hosting-and-deployment-in-this-section parent: hosting-and-deployment weight: 1 weight: 1 diff --git a/content/en/hosting-and-deployment/hosting-on-github/index.md b/content/en/hosting-and-deployment/hosting-on-github/index.md index c3da5ba3e41..5460193a709 100644 --- a/content/en/hosting-and-deployment/hosting-on-github/index.md +++ b/content/en/hosting-and-deployment/hosting-on-github/index.md @@ -1,8 +1,8 @@ --- title: Host on GitHub Pages -description: Deploy Hugo as a GitHub Pages project or personal/organizational site and automate the whole process with GitHub Actions +description: Host your site on GitHub Pages with continuous deployment using project, user, or organization pages. categories: [hosting and deployment] -keywords: [hosting,github] +keywords: [hosting] menu: docs: parent: hosting-and-deployment @@ -10,8 +10,6 @@ toc: true aliases: [/tutorials/github-pages-blog/] --- -GitHub provides free and fast static hosting over SSL for personal, organization, or project pages directly from a GitHub repository via its GitHub Pages service and automating development workflows and build with GitHub Actions. - ## Prerequisites 1. [Create a GitHub account] @@ -99,7 +97,7 @@ jobs: build: runs-on: ubuntu-latest env: - HUGO_VERSION: 0.122.0 + HUGO_VERSION: 0.127.0 steps: - name: Install Hugo CLI run: | @@ -122,13 +120,14 @@ jobs: # For maximum backward compatibility with Hugo modules HUGO_ENVIRONMENT: production HUGO_ENV: production + TZ: America/Los_Angeles run: | hugo \ --gc \ --minify \ --baseURL "${{ steps.pages.outputs.base_url }}/" - name: Upload artifact - uses: actions/upload-pages-artifact@v2 + uses: actions/upload-pages-artifact@v3 with: path: ./public @@ -142,7 +141,7 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v3 + uses: actions/deploy-pages@v4 {{< /code >}} Step 7 diff --git a/content/en/hosting-and-deployment/hosting-on-gitlab.md b/content/en/hosting-and-deployment/hosting-on-gitlab.md index 87c764f0087..c628922cdce 100644 --- a/content/en/hosting-and-deployment/hosting-on-gitlab.md +++ b/content/en/hosting-and-deployment/hosting-on-gitlab.md @@ -27,8 +27,8 @@ Define your [CI/CD](https://docs.gitlab.com/ee/ci/quick_start/) jobs by creating {{< code file=.gitlab-ci.yml copy=true >}} variables: - DART_SASS_VERSION: 1.70.0 - HUGO_VERSION: 0.122.0 + DART_SASS_VERSION: 1.77.1 + HUGO_VERSION: 0.126.0 NODE_VERSION: 20.x GIT_DEPTH: 0 GIT_STRATEGY: clone @@ -36,7 +36,7 @@ variables: TZ: America/Los_Angeles image: - name: golang:1.20.6-bookworm + name: golang:1.22.1-bookworm pages: script: diff --git a/content/en/hosting-and-deployment/hosting-on-netlify.md b/content/en/hosting-and-deployment/hosting-on-netlify.md deleted file mode 100644 index 2dcdd95f5c1..00000000000 --- a/content/en/hosting-and-deployment/hosting-on-netlify.md +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Host on Netlify -description: Netlify can host your Hugo site with CDN, continuous deployment, 1-click HTTPS, an admin GUI, and its own CLI. -categories: [hosting and deployment] -keywords: [hosting,netlify] -menu: - docs: - parent: hosting-and-deployment -toc: true ---- - -[Netlify][netlify] provides continuous deployment services, global CDN, ultra-fast DNS, atomic deploys, instant cache invalidation, one-click SSL, a browser-based interface, a CLI, and many other features for managing your Hugo website. - -## Assumptions - -* You have an account with GitHub, GitLab, or Bitbucket. -* You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world. -* You do not already have a Netlify account. - -## Create a Netlify account - -Go to [app.netlify.com] and select your preferred sign up method. This will likely be a hosted Git provider, although you also have the option to sign up with an email address. - -The following examples use GitHub, but other git providers will follow a similar process. - -![Screenshot of the homepage for app.netlify.com, containing links to the most popular hosted git solutions.](/images/hosting-and-deployment/hosting-on-netlify/netlify-signup.jpg) - -Selecting GitHub will bring up an authorization modal for authentication. Select "Authorize application." - -![Screenshot of the authorization popup for Netlify and GitHub.](/images/hosting-and-deployment/hosting-on-netlify/netlify-first-authorize.jpg) - -## Create a new site with continuous deployment - -You're now already a Netlify member and should be brought to your new dashboard. Select "New site from git." - -![Screenshot of the blank Netlify admin panel with no sites and highlighted 'add new site' button'](/images/hosting-and-deployment/hosting-on-netlify/netlify-add-new-site.jpg) - -Netlify will then start walking you through the steps necessary for continuous deployment. First, you'll need to select your git provider again, but this time you are giving Netlify added permissions to your repositories. - -![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-1.jpg) - -And then again with the GitHub authorization modal: - -![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-authorize-added-permissions.jpg) - -Select the repo you want to use for continuous deployment. If you have a large number of repositories, you can filter through them in real time using repo search: - -![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-2.jpg) - -Once selected, you'll be brought to a screen for basic setup. Here you can select the branch you want to publish, your [build command], and your publish (i.e. deploy) directory. The publish directory should mirror that of what you've set in your [site configuration], the default of which is `public`. The following steps assume you are publishing from the `master` branch. - -## Configure Hugo version in Netlify - -You can [set Hugo version](https://www.netlify.com/blog/2017/04/11/netlify-plus-hugo-0.20-and-beyond/) for your environments in `netlify.toml` file or set `HUGO_VERSION` as a build environment variable in the Netlify console. - -For production: - -{{< code file=netlify.toml >}} -[context.production.environment] - HUGO_VERSION = "0.122.0" -{{< /code >}} - -For testing: - -{{< code file=netlify.toml >}} -[context.deploy-preview.environment] - HUGO_VERSION = "0.122.0" -{{< /code >}} - -The Netlify configuration file can be a little hard to understand and get right for the different environment, and you may get some inspiration and tips from this site's `netlify.toml`: - -{{< readfile file=netlify.toml highlight=toml >}} - -## Build and deploy site - -In the Netlify console, selecting "Deploy site" will immediately take you to a terminal for your build:. - -![Animated gif of deploying a site to Netlify, including the terminal read out for the build.](/images/hosting-and-deployment/hosting-on-netlify/netlify-deploying-site.gif) - -Once the build is finished---this should only take a few seconds--you should now see a "Hero Card" at the top of your screen letting you know the deployment is successful. The Hero Card is the first element that you see in most pages. It allows you to see a quick summary of the page and gives access to the most common/pertinent actions and information. You'll see that the URL is automatically generated by Netlify. You can update the URL in "Settings." - -![Screenshot of successful deploy badge at the top of a deployments screen from within the Netlify admin.](/images/hosting-and-deployment/hosting-on-netlify/netlify-deploy-published.jpg) - -![Screenshot of homepage to https://hugo-netlify-example.netlify.com, which is mostly dummy text](/images/hosting-and-deployment/hosting-on-netlify/netlify-live-site.jpg) - -[Visit the live site][visit]. - -Now every time you push changes to your hosted git repository, Netlify will rebuild and redeploy your site. - -See [this blog post](https://www.netlify.com/blog/2017/04/11/netlify-plus-hugo-0.20-and-beyond/) for more details about how Netlify handles Hugo versions. - -## Use Hugo themes with Netlify - -The `git clone` method for installing themes is not supported by Netlify. If you were to use `git clone`, it would require you to recursively remove the `.git` subdirectory from the theme folder and would therefore prevent compatibility with future versions of the theme. - -A *better* approach is to install a theme as a proper git submodule. You can [read the GitHub documentation for submodules][ghsm] or those found on [Git's website][gitsm] for more information, but the command is similar to that of `git clone`: - -```txt -cd themes -git submodule add https://github.com// -``` - -It is recommended to only use stable versions of a theme (if it’s versioned) and always check the changelog. This can be done by checking out a specific release within the theme's directory. - -Switch to the theme's directory and list all available versions: - -```txt -cd themes/ -git tag -# exit with q -``` - -You can checkout a specific version as follows: - -```txt -git checkout tags/ -``` - -You can update a theme to the latest version by executing the following command in the *root* directory of your project: - -```txt -git submodule update --rebase --remote -``` - -## Next steps - -You now have a live website served over HTTPS, distributed through CDN, and configured for continuous deployment. Dig deeper into the Netlify documentation: - -1. [Using a Custom Domain] -2. [Setting up HTTPS on Custom Domains][httpscustom] -3. [Redirects and Rewrite Rules] - -[app.netlify.com]: https://app.netlify.com -[build command]: /getting-started/usage/#build-your-site -[site configuration]: /getting-started/configuration/ -[ghsm]: https://github.com/blog/2104-working-with-submodules -[gitsm]: https://git-scm.com/book/en/v2/Git-Tools-Submodules -[httpscustom]: https://www.netlify.com/docs/ssl/ -[hugoversions]: https://github.com/netlify/build-image/blob/master/Dockerfile#L216 -[netlify]: https://www.netlify.com/ -[netlifysignup]: https://app.netlify.com/signup -[Quick Start]: /getting-started/quick-start/ -[Redirects and Rewrite Rules]: https://www.netlify.com/docs/redirects/ -[Using a Custom Domain]: https://www.netlify.com/docs/custom-domains/ -[visit]: https://hugo-netlify-example.netlify.com diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/index.md b/content/en/hosting-and-deployment/hosting-on-netlify/index.md new file mode 100644 index 00000000000..b297bca028b --- /dev/null +++ b/content/en/hosting-and-deployment/hosting-on-netlify/index.md @@ -0,0 +1,129 @@ +--- +title: Host on Netlify +description: Host your site on Netlify with continuous deployment. +categories: [hosting and deployment] +keywords: [hosting] +menu: + docs: + parent: hosting-and-deployment +toc: true +--- + +## Prerequisites + +1. [Create a Netlify account] +2. [Install Git] +3. [Create a Hugo site] and test it locally with `hugo server` +4. Commit the changes to your local repository +4. Push the local repository to your [GitHub], [GitLab], or [Bitbucket] account + +[Bitbucket]: https://bitbucket.org/product +[Create a Hugo site]: /getting-started/quick-start/ +[Create a Netlify account]: https://app.netlify.com/signup +[GitHub]: https://github.com +[GitLab]: https://about.gitlab.com/ +[Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git + +## Procedure + +This procedure will enable continuous deployment from a GitHub repository. The procedure is essentially the same if you are using GitLab or Bitbucket. + +Step 1 +: Log in to your Netlify account, navigate to the Sites page, press the **Add new site** button, and choose "Import an existing project" from the dropdown menu. + +Step 2 +: Select your deployment method. + +![screen capture](netlify-step-02.png) + +Step 3 +: Authorize Netlify to connect with your GitHub account by pressing the **Authorize Netlify** button. + +![screen capture](netlify-step-03.png) + +Step 4 +: Press the **Configure Netlify on GitHub** button. + +![screen capture](netlify-step-04.png) + +Step 5 +: Install the Netlify app by selecting your GitHub account. + +![screen capture](netlify-step-05.png) + +Step 6 +: Press the **Install** button. + +![screen capture](netlify-step-06.png) + +Step 7 +: Click on the site's repository from the list. + +![screen capture](netlify-step-07.png) + +Step 8 +: Set the site name and branch from which to deploy. + +![screen capture](netlify-step-08.png) + +Step 9 +: Define the build settings, press the **Add environment variables** button, then press the **New variable** button. + +![screen capture](netlify-step-09.png) + +Step 10 +: Create a new environment variable named `HUGO_VERSION` and set the value to the [latest version]. + +[latest version]: https://github.com/gohugoio/hugo/releases/latest + +![screen capture](netlify-step-10.png) + +Step 11 +: Press the "Deploy my new site" button at the bottom of the page. + +![screen capture](netlify-step-11.png) + +Step 12 +: At the bottom of the screen, wait for the deploy to complete, then click on the deploy log entry. + +![screen capture](netlify-step-12.png) + +Step 13 +: Press the **Open production deploy** button to view the live site. + +![screen capture](netlify-step-13.png) + +## Configuration file + +In the procedure above we configured our site using the Netlify user interface. Most site owners find it easier to use a configuration file checked into source control. + +Create a new file named netlify.toml in the root of your project directory. In its simplest form, the configuration file might look like this: + +{{< code file=netlify.toml >}} +[build.environment] +HUGO_VERSION = "0.126.0" +TZ = "America/Los_Angeles" + +[build] +publish = "public" +command = "hugo --gc --minify" +{{< /code >}} + +If your site requires Dart Sass to transpile Sass to CSS, the configuration file should look something like this: + +{{< code file=netlify.toml >}} +[build.environment] +HUGO_VERSION = "0.126.0" +DART_SASS_VERSION = "1.77.1" +TZ = "America/Los_Angeles" + +[build] +publish = "public" +command = """\ + curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + rm dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + export PATH=/opt/build/repo/dart-sass:$PATH && \ + hugo --gc --minify \ + """ +{{< /code >}} diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-02.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-02.png new file mode 100644 index 0000000000000000000000000000000000000000..31fceff27aabfc4e824d79de8098452fb6e131e5 GIT binary patch literal 8618 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 literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-03.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-03.png new file mode 100644 index 0000000000000000000000000000000000000000..7b98e0b8f1611a6c66061f38657a160006ccb103 GIT binary patch literal 15960 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 P*9US^N}o$5zWMzZhU%U9 literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-04.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-04.png new file mode 100644 index 0000000000000000000000000000000000000000..31304894b4539797660b0116c82224b8e517586b GIT binary patch literal 10563 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 T(d~=x3ksN~wnnL%W$^z2-~XLc literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-06.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-06.png new file mode 100644 index 0000000000000000000000000000000000000000..1b766a78521ec7a3d2c4fd7cbed036db4669ae6f GIT binary patch literal 24253 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 ZViySPMh$I}K)&{Gnh$l literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-07.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-07.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb3b6ecad95f6130751cec74dbedde73415a374 GIT binary patch literal 2952 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 WcOR6K_CG&2$im#ltoGmT_x}S}i|bwh literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-08.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-08.png new file mode 100644 index 0000000000000000000000000000000000000000..df8e9e59f04d97d273ab5f6acec763217facb131 GIT binary patch literal 8539 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 JtdO_(_+Q@vu|NO- literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-09.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-09.png new file mode 100644 index 0000000000000000000000000000000000000000..3f925accc753420760ffff30a4ef3a37d2e6b3fe GIT binary patch literal 11745 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 MQqxndQML>JZ`o7coB#j- literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-10.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-10.png new file mode 100644 index 0000000000000000000000000000000000000000..e9196d0ce32dca140f550aa6d2c3436ee1607bb6 GIT binary patch literal 7194 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 awXxOFM28Cy?6Hc*qN8P?S^3cM`M&{E*go6< literal 0 HcmV?d00001 diff --git a/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-13.png b/content/en/hosting-and-deployment/hosting-on-netlify/netlify-step-13.png new file mode 100644 index 0000000000000000000000000000000000000000..f955f6369620c7cc2327945f752644a74ff285e0 GIT binary patch literal 10431 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 literal 0 HcmV?d00001 diff --git a/content/en/hugo-modules/_index.md b/content/en/hugo-modules/_index.md index cbff13ad099..01fc21e50ac 100644 --- a/content/en/hugo-modules/_index.md +++ b/content/en/hugo-modules/_index.md @@ -1,12 +1,12 @@ --- title: Hugo Modules -linkTitle: Overview +linkTitle: In this section description: How to use Hugo Modules. categories: [] keywords: [] menu: docs: - identifier: hugo-modules-overview + identifier: hugo-modules-in-this-section parent: modules weight: 10 weight: 10 @@ -20,7 +20,7 @@ You can combine modules in any combination you like, and even mount directories Hugo Modules are powered by Go Modules. For more information about Go Modules, see: -- [https://github.com/golang/go/wiki/Modules](https://github.com/golang/go/wiki/Modules) +- [https://go.dev/wiki/Modules](https://go.dev/wiki/Modules) - [https://go.dev/blog/using-go-modules](https://go.dev/blog/using-go-modules) Some example projects: diff --git a/content/en/hugo-modules/configuration.md b/content/en/hugo-modules/configuration.md index ce9e97d81fd..3aec4699bf3 100644 --- a/content/en/hugo-modules/configuration.md +++ b/content/en/hugo-modules/configuration.md @@ -147,7 +147,7 @@ When you add a mount, the default mount for the concerned target root is ignored {{< /code-toggle >}} source -: The source directory of the mount. For the main project, this can be either project-relative or absolute and even a symbolic link. For other modules it must be project-relative. +: The source directory of the mount. For the main project, this can be either project-relative or absolute. For other modules it must be project-relative. target : Where it should be mounted into Hugo's virtual filesystem. It must start with one of Hugo's component folders: `static`, `content`, `layouts`, `data`, `assets`, `i18n`, or `archetypes`. E.g. `content/blog`. diff --git a/content/en/hugo-modules/use-modules.md b/content/en/hugo-modules/use-modules.md index 295ff2061e7..913e4f77566 100644 --- a/content/en/hugo-modules/use-modules.md +++ b/content/en/hugo-modules/use-modules.md @@ -21,7 +21,7 @@ toc: true Use `hugo mod init` to initialize a new Hugo Module. If it fails to guess the module path, you must provide it as an argument, e.g.: ```sh -hugo mod init github.com/gohugoio/myShortcodes +hugo mod init github.com// ``` Also see the [CLI Doc](/commands/hugo_mod_init/). diff --git a/content/en/hugo-pipes/_index.md b/content/en/hugo-pipes/_index.md index edc41b7a2d5..6e4190b8769 100755 --- a/content/en/hugo-pipes/_index.md +++ b/content/en/hugo-pipes/_index.md @@ -1,11 +1,11 @@ --- title: Hugo Pipes -linkTitle: Overview +linkTitle: In this section categories: [] keywords: [] menu: docs: - identifier: hugo-pipes-overview + identifier: hugo-pipes-in-this-section parent: hugo-pipes weight: 10 weight: 10 diff --git a/content/en/hugo-pipes/js.md b/content/en/hugo-pipes/js.md index 9d2bbbd82af..ddde8313ae7 100644 --- a/content/en/hugo-pipes/js.md +++ b/content/en/hugo-pipes/js.md @@ -17,7 +17,7 @@ action: ## Usage -Any JavaScript resource file can be transpiled and "tree shaken" using `js.Build` which takes for argument either a string for the filepath or a dict of options listed below. +Any JavaScript resource file can be transpiled and "tree shaken" using `js.Build` which takes for argument either a string for the file path or a dict of options listed below. ### Options @@ -25,7 +25,7 @@ targetPath : (`string`) If not set, the source path will be used as the base target path. Note that the target path's extension may change if the target MIME type is different, e.g. when the source is TypeScript. -params {{< new-in "0.96.0" >}} +params : (`map` or `slice`) Params that can be imported as JSON in your JS files, e.g.: ```go-html-template @@ -95,6 +95,29 @@ format sourceMap : (`string`) Whether to generate `inline` or `external` source maps from esbuild. External source maps will be written to the target with the output file name + ".map". Input source maps can be read from js.Build and node modules and combined into the output source maps. By default, source maps are not created. +JSX {{< new-in 0.124.0 >}} +: (`string`) How to handle/transform JSX syntax. One of: `transform`, `preserve`, `automatic`. Default is `transform`. Notably, the `automatic` transform was introduced in React 17+ and will cause the necessary JSX helper functions to be imported automatically. See https://esbuild.github.io/api/#jsx + +JSXImportSource {{< new-in 0.124.0 >}} +: (`string`) Which library to use to automatically import its JSX helper functions from. This only works if `JSX` is set to `automatic`. The specified library needs to be installed through NPM and expose certain exports. See https://esbuild.github.io/api/#jsx-import-source + +The combination of `JSX` and `JSXImportSource` is helpful if you want to use a non-React JSX library like Preact, e.g.: + +```go-html-template +{{ $js := resources.Get "js/main.jsx" | js.Build (dict "JSX" "automatic" "JSXImportSource" "preact") }} +``` + +With the above, you can use Preact components and JSX without having to manually import `h` and `Fragment` every time: + +```jsx +import { render } from 'preact'; + +const App = () => <>Hello world!; + +const container = document.getElementById('app'); +if (container) render(, container); +``` + ### Import JS code from /assets `js.Build` has full support for the virtual union file system in [Hugo Modules](/hugo-modules/). You can see some simple examples in this [test project](https://github.com/gohugoio/hugoTestProjectJSModImports), but in short this means that you can do this: diff --git a/content/en/hugo-pipes/transpile-sass-to-css.md b/content/en/hugo-pipes/transpile-sass-to-css.md index 998adad82c1..ba5c3996602 100644 --- a/content/en/hugo-pipes/transpile-sass-to-css.md +++ b/content/en/hugo-pipes/transpile-sass-to-css.md @@ -43,7 +43,7 @@ targetPath : (`string`) If not set, the transformed resource's target path will be the original path of the asset file with its extension replaced by `.css`. vars {{< new-in 0.109.0 >}} -: (`map`) A map of key/value pairs that will be available in the `hugo:vars` namespace. Useful for [initializing Sass variables from Hugo templates](https://discourse.gohugo.io/t/42053/). +: (`map`) A map of key-value pairs that will be available in the `hugo:vars` namespace. Useful for [initializing Sass variables from Hugo templates](https://discourse.gohugo.io/t/42053/). ```scss // LibSass @@ -136,8 +136,8 @@ To install Dart Sass for your builds on GitLab Pages, the `.gitlab-ci.yml` file ```yaml variables: - HUGO_VERSION: 0.122.0 - DART_SASS_VERSION: 1.70.0 + HUGO_VERSION: 0.126.0 + DART_SASS_VERSION: 1.77.1 GIT_DEPTH: 0 GIT_STRATEGY: clone GIT_SUBMODULE_STRATEGY: recursive @@ -171,7 +171,7 @@ To install Dart Sass for your builds on Netlify, the `netlify.toml` file should ```toml [build.environment] HUGO_VERSION = "0.122.2" -DART_SASS_VERSION = "1.70.0" +DART_SASS_VERSION = "1.77.1" TZ = "America/Los_Angeles" [build] diff --git a/content/en/installation/_common/03-prebuilt-binaries.md b/content/en/installation/_common/03-prebuilt-binaries.md index d3465fa5d07..55f7cb85bd0 100644 --- a/content/en/installation/_common/03-prebuilt-binaries.md +++ b/content/en/installation/_common/03-prebuilt-binaries.md @@ -16,7 +16,7 @@ Please consult your operating system documentation if you need help setting file 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 +[commit information]: /methods/page/gitinfo/ [Git]: https://git-scm.com/ [Go]: https://go.dev/ [Hugo Modules]: /hugo-modules/ diff --git a/content/en/installation/_common/_index.md b/content/en/installation/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/installation/_common/_index.md +++ b/content/en/installation/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/installation/_index.md b/content/en/installation/_index.md index ca405b755ea..7e445a07d98 100644 --- a/content/en/installation/_index.md +++ b/content/en/installation/_index.md @@ -1,13 +1,13 @@ --- title: Installation -linkTitle: Overview +linkTitle: In this section description: Install Hugo on macOS, Linux, Windows, BSD, and on any machine that can run the Go compiler tool chain. aliases: [/getting-started/installing/] categories: [] keywords: [] menu: docs: - identifier: installation-overview + identifier: installation-in-this-section parent: installation weight: 10 weight: 10 diff --git a/content/en/installation/linux.md b/content/en/installation/linux.md index 7b75f149b3e..769011212f5 100644 --- a/content/en/installation/linux.md +++ b/content/en/installation/linux.md @@ -96,6 +96,7 @@ sudo apt install hugo You can also download Debian packages from the [latest release] page. [Debian]: https://www.debian.org/ +[Exherbo]: https://www.exherbolinux.org/ [elementary OS]: https://elementary.io/ [KDE neon]: https://neon.kde.org/ [Linux Lite]: https://www.linuxliteos.com/ @@ -105,6 +106,24 @@ You can also download Debian packages from the [latest release] page. [Ubuntu]: https://ubuntu.com/ [Zorin OS]: https://zorin.com/os/ +### Exherbo + +To install the extended edition of Hugo on [Exherbo]: + +1. Add this line to /etc/paludis/options.conf: + + ```text + www-apps/hugo extended + ``` + +2. Install using the Paludis package manager: + + + ```sh + cave resolve -x repository/heirecka + cave resolve -x hugo + ``` + ### Fedora Derivatives of the [Fedora] distribution of Linux include [CentOS], [Red Hat Enterprise Linux], and others. To install the extended edition of Hugo: @@ -119,7 +138,7 @@ sudo dnf install hugo ### Gentoo -Derivatives of the [Gentoo] distribution of Linux include [Calculate Linux], [Funtoo], and others. Follow the instructions below to install the extended edition of Hugo: +Derivatives of the [Gentoo] distribution of Linux include [Calculate Linux], [Funtoo], and others. To install the extended edition of Hugo: 1. Specify the `extended` [USE] flag in /etc/portage/package.use/hugo: diff --git a/content/en/methods/_common/_index.md b/content/en/methods/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/methods/_common/_index.md +++ b/content/en/methods/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/methods/_common/next-prev-on-page-vs-next-prev-on-pages.md b/content/en/methods/_common/next-prev-on-page-vs-next-prev-on-pages.md index 4ae3a0f399a..f6503787844 100644 --- a/content/en/methods/_common/next-prev-on-page-vs-next-prev-on-pages.md +++ b/content/en/methods/_common/next-prev-on-page-vs-next-prev-on-pages.md @@ -9,10 +9,10 @@ The `Next` and `Prev` methods on a `Pages` object are more flexible than the `Ne [`PAGES.Next`] and [`PAGES.Prev`]|locally defined|✔️ [`PAGE.Next`] and [`PAGE.Prev`]|globally defined|❌ -[`PAGES.Next`]: /methods/pages/next -[`PAGES.Prev`]: /methods/pages/prev -[`PAGE.Next`]: /methods/page/next -[`PAGE.Prev`]: /methods/page/prev +[`PAGES.Next`]: /methods/pages/next/ +[`PAGES.Prev`]: /methods/pages/prev/ +[`PAGE.Next`]: /methods/page/next/ +[`PAGE.Prev`]: /methods/page/prev/ locally defined : Build the page collection every time you call `PAGES.Next` and `PAGES.Prev`. Navigation between pages is relative to the current page's position within the local collection, independent of the global collection. @@ -31,7 +31,7 @@ With a global collection, the navigation sort order is fixed, using Hugo's defau For example, with a global collection sorted by title, the navigation sort order will use Hugo's default sort order. This is probably not what you want or expect. For this reason, the `Next` and `Prev` methods on a `Pages` object are generally a better choice. -[date]: /methods/page/date -[weight]: /methods/page/weight -[linkTitle]: /methods/page/linktitle -[title]: /methods/page/title +[date]: /methods/page/date/ +[weight]: /methods/page/weight/ +[linkTitle]: /methods/page/linktitle/ +[title]: /methods/page/title/ diff --git a/content/en/methods/_index.md b/content/en/methods/_index.md index c12bd9d4d4a..bab637ddba6 100644 --- a/content/en/methods/_index.md +++ b/content/en/methods/_index.md @@ -1,16 +1,17 @@ --- title: Methods -linkTitle: Overview +linkTitle: In this section description: A list of Hugo template methods including examples. categories: [] keywords: [] menu: docs: - identifier: methods-overview + identifier: methods-in-this-section parent: methods weight: 10 weight: 10 showSectionMenu: true +aliases: ['/variables/'] --- Use these methods within your templates. diff --git a/content/en/methods/menu-entry/KeyName.md b/content/en/methods/menu-entry/KeyName.md index 4b43596b055..409cb31d646 100644 --- a/content/en/methods/menu-entry/KeyName.md +++ b/content/en/methods/menu-entry/KeyName.md @@ -36,4 +36,4 @@ This example uses the `KeyName` method when querying the translation table on a In the example above, we need to pass the value returned by `.KeyName` through the [`lower`] function because the keys in the translation table are lowercase. -[`lower`]: functions/strings/tolower +[`lower`]: /functions/strings/tolower/ diff --git a/content/en/methods/menu-entry/Menu.md b/content/en/methods/menu-entry/Menu.md index 6827519bd96..63f148c1a3f 100644 --- a/content/en/methods/menu-entry/Menu.md +++ b/content/en/methods/menu-entry/Menu.md @@ -19,6 +19,6 @@ action: Use this method with the [`IsMenuCurrent`] and [`HasMenuCurrent`] methods on a `Page` object to set "active" and "ancestor" classes on a rendered entry. See [this example]. -[`HasMenuCurrent`]: /methods/page/hasmenucurrent -[`IsMenuCurrent`]: /methods/page/ismenucurrent +[`HasMenuCurrent`]: /methods/page/hasmenucurrent/ +[`IsMenuCurrent`]: /methods/page/ismenucurrent/ [this example]: /templates/menu-templates/#example diff --git a/content/en/methods/menu-entry/Name.md b/content/en/methods/menu-entry/Name.md index d722da07cd6..d77c65cb55d 100644 --- a/content/en/methods/menu-entry/Name.md +++ b/content/en/methods/menu-entry/Name.md @@ -13,8 +13,8 @@ If you define the menu entry [automatically], the `Name` method returns the page If you define the menu entry [in front matter] or [in site configuration], the `Name` method returns the `name` property, falling back to the page’s `LinkTitle`, then to its `Title`. -[`LinkTitle`]: /methods/page/linktitle -[`Title`]: /methods/page/title +[`LinkTitle`]: /methods/page/linktitle/ +[`Title`]: /methods/page/title/ [automatically]: /content-management/menus/#define-automatically [in front matter]: /content-management/menus/#define-in-front-matter [in site configuration]: /content-management/menus/#define-in-site-configuration diff --git a/content/en/methods/menu-entry/Page.md b/content/en/methods/menu-entry/Page.md index b75e4af5522..bd8c1625ec5 100644 --- a/content/en/methods/menu-entry/Page.md +++ b/content/en/methods/menu-entry/Page.md @@ -46,8 +46,8 @@ If the entry is not associated with a page, we use its `url` and `name` properti See the [menu templates] section for more information. -[`LinkTitle`]: /methods/page/linktitle -[`RelPermalink`]: /methods/page/relpermalink +[`LinkTitle`]: /methods/page/linktitle/ +[`RelPermalink`]: /methods/page/relpermalink/ [define menu entries]: /content-management/menus/ [menu templates]: /templates/menu-templates/#page-references -[methods]: /methods/page +[methods]: /methods/page/ diff --git a/content/en/methods/menu-entry/Title.md b/content/en/methods/menu-entry/Title.md index c1eec2cc05f..4082e4e9353 100644 --- a/content/en/methods/menu-entry/Title.md +++ b/content/en/methods/menu-entry/Title.md @@ -11,10 +11,10 @@ action: If you define the menu entry [automatically], the `Title` method returns the page’s [`LinkTitle`], falling back to its [`Title`]. -If you define the menu entry [in front matter] or [in site configuration], the `Name` method returns the `title` property, falling back to the page’s `LinkTitle`, then to its `Title`. +If you define the menu entry [in front matter] or [in site configuration], the `Title` method returns the `title` property, falling back to the page’s `LinkTitle`, then to its `Title`. -[`LinkTitle`]: /methods/page/linktitle -[`Title`]: /methods/page/title +[`LinkTitle`]: /methods/page/linktitle/ +[`Title`]: /methods/page/title/ [automatically]: /content-management/menus/#define-automatically [in front matter]: /content-management/menus/#define-in-front-matter [in site configuration]: /content-management/menus/#define-in-site-configuration diff --git a/content/en/methods/menu-entry/URL.md b/content/en/methods/menu-entry/URL.md index c2b314b580c..bf3ec044aaf 100644 --- a/content/en/methods/menu-entry/URL.md +++ b/content/en/methods/menu-entry/URL.md @@ -20,4 +20,4 @@ For menu entries associated with a page, the `URL` method returns the page's [`R ``` -[`RelPermalink`]: /methods/page/relpermalink +[`RelPermalink`]: /methods/page/relpermalink/ diff --git a/content/en/methods/menu-entry/Weight.md b/content/en/methods/menu-entry/Weight.md index 7b0c24ae880..eab9357368c 100644 --- a/content/en/methods/menu-entry/Weight.md +++ b/content/en/methods/menu-entry/Weight.md @@ -13,7 +13,7 @@ If you define the menu entry [automatically], the `Weight` method returns the pa If you define the menu entry [in front matter] or [in site configuration], the `Weight` method returns the `weight` property, falling back to the page’s `Weight`. -[`Weight`]: /methods/page/weight +[`Weight`]: /methods/page/weight/ [automatically]: /content-management/menus/#define-automatically [in front matter]: /content-management/menus/#define-in-front-matter [in site configuration]: /content-management/menus/#define-in-site-configuration diff --git a/content/en/methods/menu-entry/_common/_index.md b/content/en/methods/menu-entry/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/methods/menu-entry/_common/_index.md +++ b/content/en/methods/menu-entry/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/methods/menu/ByName.md b/content/en/methods/menu/ByName.md index 04f25c22d4b..2e28016b6a1 100644 --- a/content/en/methods/menu/ByName.md +++ b/content/en/methods/menu/ByName.md @@ -62,4 +62,4 @@ You can also sort menu entries using the [`sort`] function. For example, to sort When using the sort function with menu entries, specify any of the following keys: `Identifier`, `Name`, `Parent`, `Post`, `Pre`, `Title`, `URL`, or `Weight`. -[`sort`]: /functions/collections/sort +[`sort`]: /functions/collections/sort/ diff --git a/content/en/methods/menu/ByWeight.md b/content/en/methods/menu/ByWeight.md index d5cb0444b60..3774619bee0 100644 --- a/content/en/methods/menu/ByWeight.md +++ b/content/en/methods/menu/ByWeight.md @@ -73,4 +73,4 @@ You can also sort menu entries using the [`sort`] function. For example, to sort When using the sort function with menu entries, specify any of the following keys: `Identifier`, `Name`, `Parent`, `Post`, `Pre`, `Title`, `URL`, or `Weight`. -[`sort`]: /functions/collections/sort +[`sort`]: /functions/collections/sort/ diff --git a/content/en/methods/page/AllTranslations.md b/content/en/methods/page/AllTranslations.md index b8cc651792a..51d82d4f945 100644 --- a/content/en/methods/page/AllTranslations.md +++ b/content/en/methods/page/AllTranslations.md @@ -1,6 +1,6 @@ --- title: AllTranslations -description: Returns all translation of the given page, including the given page. +description: Returns all translations of the given page, including the current language. categories: [] keywords: [] action: @@ -63,9 +63,9 @@ And this template: {{ with .AllTranslations }} {{ end }} diff --git a/content/en/methods/page/BundleType.md b/content/en/methods/page/BundleType.md index 77d1d72eb33..5254757eeff 100644 --- a/content/en/methods/page/BundleType.md +++ b/content/en/methods/page/BundleType.md @@ -5,7 +5,7 @@ categories: [] keywords: [] action: related: [] - returnType: files.ContentClass + returnType: string signatures: [PAGE.BundleType] --- diff --git a/content/en/methods/page/CodeOwners.md b/content/en/methods/page/CodeOwners.md index 068c4591fea..c0baf26ad9d 100644 --- a/content/en/methods/page/CodeOwners.md +++ b/content/en/methods/page/CodeOwners.md @@ -63,4 +63,4 @@ Render the code owners for each content page: Combine this method with [`resources.GetRemote`] to retrieve names and avatars from your Git provider by querying their API. -[`resources.GetRemote`]: functions/resources/getremote +[`resources.GetRemote`]: /functions/resources/getremote/ diff --git a/content/en/methods/page/Content.md b/content/en/methods/page/Content.md index 40a057f0263..a9d38367c15 100644 --- a/content/en/methods/page/Content.md +++ b/content/en/methods/page/Content.md @@ -13,7 +13,7 @@ action: signatures: [PAGE.Content] --- -The `Content` method on a `Page` object renders markdown and shortcodes to HTML. The content does not include front matter. +The `Content` method on a `Page` object renders Markdown and shortcodes to HTML. The content does not include front matter. [shortcodes]: /getting-started/glossary/#shortcode diff --git a/content/en/methods/page/Data.md b/content/en/methods/page/Data.md index 4eccde6ff44..aea1042d450 100644 --- a/content/en/methods/page/Data.md +++ b/content/en/methods/page/Data.md @@ -74,7 +74,7 @@ Terms {{% note %}} Once you have captured the taxonomy object, use any of the [taxonomy methods] to sort, count, or capture a subset of its weighted pages. -[taxonomy methods]: /methods/taxonomy +[taxonomy methods]: /methods/taxonomy/ {{% /note %}} Learn more about [taxonomy templates]. diff --git a/content/en/methods/page/Date.md b/content/en/methods/page/Date.md index 83192f94cbb..113d6ca090a 100644 --- a/content/en/methods/page/Date.md +++ b/content/en/methods/page/Date.md @@ -33,7 +33,7 @@ The date is a [time.Time] value. Format and localize the value with the [`time.F In the example above we explicitly set the date in front matter. With Hugo's default configuration, the `Date` method returns the front matter value. This behavior is configurable, allowing you to set fallback values if the date is not defined in front matter. See [details]. -[`time.Format`]: /functions/time/format +[`time.Format`]: /functions/time/format/ [details]: /getting-started/configuration/#configure-dates -[time methods]: /methods/time +[time methods]: /methods/time/ [time.Time]: https://pkg.go.dev/time#Time diff --git a/content/en/methods/page/Description.md b/content/en/methods/page/Description.md index fbb43b8b53f..67171fe013a 100644 --- a/content/en/methods/page/Description.md +++ b/content/en/methods/page/Description.md @@ -10,7 +10,7 @@ action: signatures: [PAGE.Description] --- -Conceptually different that a [content summary], a page description is typically used in metadata about the page. +Conceptually different from a [content summary], a page description is typically used in metadata about the page. {{< code-toggle file=content/recipes/sushi.md fm=true >}} title = 'How to make spicy tuna hand rolls' @@ -25,4 +25,4 @@ description = 'Instructions for making spicy tuna hand rolls.' {{< /code >}} -[content summary]: /content-management/summaries +[content summary]: /content-management/summaries/ diff --git a/content/en/methods/page/ExpiryDate.md b/content/en/methods/page/ExpiryDate.md index 353546449a3..9b95ebc654d 100644 --- a/content/en/methods/page/ExpiryDate.md +++ b/content/en/methods/page/ExpiryDate.md @@ -29,7 +29,7 @@ The expiry date is a [time.Time] value. Format and localize the value with the [ In the example above we explicitly set the expiry date in front matter. With Hugo's default configuration, the `ExpiryDate` method returns the front matter value. This behavior is configurable, allowing you to set fallback values if the expiry date is not defined in front matter. See [details]. -[`time.Format`]: /functions/time/format +[`time.Format`]: /functions/time/format/ [details]: /getting-started/configuration/#configure-dates -[time methods]: /methods/time +[time methods]: /methods/time/ [time.Time]: https://pkg.go.dev/time#Time diff --git a/content/en/methods/page/File.md b/content/en/methods/page/File.md index 44b752215ef..d5917157715 100644 --- a/content/en/methods/page/File.md +++ b/content/en/methods/page/File.md @@ -22,7 +22,9 @@ content/ └── book-2.md ``` -Code defensively by verifying file existence as shown in each of the examples below. +{{% note %}} +Code defensively by verifying file existence as shown in the examples below. +{{% /note %}} ## Methods @@ -80,13 +82,17 @@ The path separators (slash or backslash) in `Path`, `Dir`, and `Filename` depend {{ end }} ``` -###### Lang +###### IsContentAdapter + +{{< new-in 0.126.0 >}} + +(`bool`) Reports whether the file is a [content adapter]. -(`string`) The language associated with the given file. +[content adapter]: /content-management/content-adapters/ ```go-html-template {{ with .File }} - {{ .Lang }} + {{ .IsContentAdapter }} {{ end }} ``` @@ -110,6 +116,16 @@ The path separators (slash or backslash) in `Path`, `Dir`, and `Filename` depend {{ end }} ``` +###### Section + +(`string`) The name of the top level section in which the file resides. + +```go-html-template +{{ with .File }} + {{ .Section }} +{{ end }} +``` + ###### TranslationBaseName (`string`) The file name, excluding the extension and language identifier. @@ -157,9 +173,10 @@ ContentBaseName|a|b|news Dir|news/|news/b/|news/ Ext|md|md|md Filename|/home/user/...|/home/user/...|/home/user/... -Lang|en|en|en +IsContentAdapter|false|false|false LogicalName|a.en.md|index.en.md|_index.en.md Path|news/a.en.md|news/b/index.en.md|news/_index.en.md +Section|news|news|news TranslationBaseName|a|index|_index UniqueID|15be14b...|186868f...|7d9159d... @@ -171,13 +188,7 @@ Some of the pages on a site may not be backed by a file. For example: - Taxonomy pages - Term pages -Without a backing file, Hugo will throw a warning if you attempt to access a `.File` property. For example: - -```text -WARN .File.ContentBaseName on zero object. Wrap it in if or with... -``` - -To code defensively, first check for file existence: +Without a backing file, Hugo will throw an error if you attempt to access a `.File` property. To code defensively, first check for file existence: ```go-html-template {{ with .File }} diff --git a/content/en/methods/page/Fragments.md b/content/en/methods/page/Fragments.md index 89f82d2ce12..7bcad1ef922 100644 --- a/content/en/methods/page/Fragments.md +++ b/content/en/methods/page/Fragments.md @@ -21,7 +21,7 @@ In a URL, whether absolute or relative, the [fragment] links to an `id` attribut path fragment ``` -Hugo assigns an `id` attribute to each markdown [ATX] and [setext] heading within the page content. You can override the `id` with a [markdown attribute] as needed. This creates the relationship between an entry in the [table of contents] (TOC) and a heading on the page. +Hugo assigns an `id` attribute to each Markdown [ATX] and [setext] heading within the page content. You can override the `id` with a [Markdown attribute] as needed. This creates the relationship between an entry in the [table of contents] (TOC) and a heading on the page. Use the `Fragments` method on a `Page` object to create a table of contents with the `Fragments.ToHTML` method, or by [walking] the `Fragments.Map` data structure. @@ -31,21 +31,21 @@ Headings : (`map`) A nested map of all headings on the page. Each map contains the following keys: `ID`, `Level`, `Title` and `Headings`. To inspect the data structure: ```go-html-template -
{{ .Fragments.Headings | jsonify (dict "indent" "  ") }}
+
{{ debug.Dump .Fragments.Headings }}
``` HeadingsMap : (`slice`) A slice of maps of all headings on the page, with first-level keys for each heading. Each map contains the following keys: `ID`, `Level`, `Title` and `Headings`. To inspect the data structure: ```go-html-template -
{{ .Fragments.HeadingsMap | jsonify (dict "indent" "  ") }}
+
{{ debug.Dump .Fragments.HeadingsMap }}
``` Identifiers : (`slice`) A slice containing the `id` of each heading on the page. To inspect the data structure: ```go-html-template -
{{ .Fragments.Identifiers | jsonify (dict "indent" "  ") }}
+
{{ debug.Dump .Fragments.Identifiers }}
``` Identifiers.Contains ID @@ -100,7 +100,7 @@ When using the `Fragments` methods within a shortcode, call the shortcode using [fragment]: /getting-started/glossary/#fragment [markdown attribute]: /getting-started/glossary/#markdown-attribute [setext]: https://spec.commonmark.org/0.30/#setext-headings -[table of contents]: /methods/page/tableofcontents +[table of contents]: /methods/page/tableofcontents/ [walking]: /getting-started/glossary/#walk -[`tableofcontents`]: /methods/page/tableofcontents +[`tableofcontents`]: /methods/page/tableofcontents/ [render hook]: /getting-started/glossary/#render-hook diff --git a/content/en/methods/page/FuzzyWordCount.md b/content/en/methods/page/FuzzyWordCount.md index 600ad48d50e..8523edf8cf4 100644 --- a/content/en/methods/page/FuzzyWordCount.md +++ b/content/en/methods/page/FuzzyWordCount.md @@ -17,4 +17,4 @@ action: To get the exact word count, use the [`WordCount`] method. -[`WordCount`]: /methods/page/wordcount +[`WordCount`]: /methods/page/wordcount/ diff --git a/content/en/methods/page/GetPage.md b/content/en/methods/page/GetPage.md index b1f192d583c..9b4ced345bc 100644 --- a/content/en/methods/page/GetPage.md +++ b/content/en/methods/page/GetPage.md @@ -13,7 +13,7 @@ aliases: [/functions/getpage] The `GetPage` method is also available on a `Site` object. See [details]. -[details]: /methods/site/getpage +[details]: /methods/site/getpage/ When using the `GetPage` method on the `Page` object, specify a path relative to the current directory or relative to the content directory. @@ -36,7 +36,7 @@ content/ └── _index.md ``` -The examples below depict the result of rendering works/paintings/the-mona-list.md with a single page template: +The examples below depict the result of rendering works/paintings/the-mona-lisa.md with a single page template: ```go-html-template {{ with .GetPage "starry-night" }} diff --git a/content/en/methods/page/HeadingsFiltered.md b/content/en/methods/page/HeadingsFiltered.md index a39c48da1ff..d741b57cefb 100644 --- a/content/en/methods/page/HeadingsFiltered.md +++ b/content/en/methods/page/HeadingsFiltered.md @@ -14,5 +14,5 @@ action: Use in conjunction with the [`Related`] method on a [`Pages`] object. See [details]. [`Pages`]: /methods/pages/ -[`Related`]: /methods/pages/related +[`Related`]: /methods/pages/related/ [details]: /content-management/related/#index-content-headings-in-related-content diff --git a/content/en/methods/page/InSection.md b/content/en/methods/page/InSection.md index b98fbc808c5..41ce918f388 100644 --- a/content/en/methods/page/InSection.md +++ b/content/en/methods/page/InSection.md @@ -98,5 +98,5 @@ Gaining a thorough understanding of context is critical for anyone writing templ {{% /note %}} [context]: /getting-started/glossary/#context -[`with`]: /functions/go-template/with -[`else`]: /functions/go-template/else +[`with`]: /functions/go-template/with/ +[`else`]: /functions/go-template/else/ diff --git a/content/en/methods/page/IsAncestor.md b/content/en/methods/page/IsAncestor.md index ca23c0868cc..8ace8463c46 100644 --- a/content/en/methods/page/IsAncestor.md +++ b/content/en/methods/page/IsAncestor.md @@ -1,6 +1,6 @@ --- title: IsAncestor -description: Reports whether PAGE1 in an ancestor of PAGE2. +description: Reports whether PAGE1 is an ancestor of PAGE2. categories: [] keywords: [] action: @@ -96,5 +96,5 @@ Gaining a thorough understanding of context is critical for anyone writing templ {{% /note %}} [context]: /getting-started/glossary/#context -[`with`]: /functions/go-template/with -[`else`]: /functions/go-template/else +[`with`]: /functions/go-template/with/ +[`else`]: /functions/go-template/else/ diff --git a/content/en/methods/page/IsDescendant.md b/content/en/methods/page/IsDescendant.md index f1042564e40..2c0599d915e 100644 --- a/content/en/methods/page/IsDescendant.md +++ b/content/en/methods/page/IsDescendant.md @@ -1,6 +1,6 @@ --- title: IsDescendant -description: Reports whether PAGE1 in a descendant of PAGE2. +description: Reports whether PAGE1 is a descendant of PAGE2. categories: [] keywords: [] action: @@ -95,5 +95,5 @@ Gaining a thorough understanding of context is critical for anyone writing templ {{% /note %}} [context]: /getting-started/glossary/#context -[`with`]: /functions/go-template/with -[`else`]: /functions/go-template/else +[`with`]: /functions/go-template/with/ +[`else`]: /functions/go-template/else/ diff --git a/content/en/methods/page/Keywords.md b/content/en/methods/page/Keywords.md index 5ad37ce51e6..ef68c27f598 100644 --- a/content/en/methods/page/Keywords.md +++ b/content/en/methods/page/Keywords.md @@ -11,7 +11,7 @@ action: By default, Hugo evaluates the keywords when creating collections of [related content]. -[related content]: /content-management/related +[related content]: /content-management/related/ {{< code-toggle file=content/recipes/sushi.md fm=true >}} title = 'How to make spicy tuna hand rolls' @@ -32,7 +32,7 @@ Or use the [delimit] function: {{ delimit .Keywords ", " ", and " }} → tuna, sriracha, nori, and rice ``` -[delimit]: /functions/collections/delimit +[delimit]: /functions/collections/delimit/ Keywords are also a useful [taxonomy]: @@ -43,4 +43,4 @@ keyword = 'keywords' category = 'categories' {{< /code-toggle >}} -[taxonomy]: /content-management/taxonomies +[taxonomy]: /content-management/taxonomies/ diff --git a/content/en/methods/page/Language.md b/content/en/methods/page/Language.md index 4e65107da0c..321b44e561f 100644 --- a/content/en/methods/page/Language.md +++ b/content/en/methods/page/Language.md @@ -34,7 +34,7 @@ Lang ``` LanguageCode -: (`string`) The language code from the site configuration. +: (`string`) The language code from the site configuration. Falls back to `Lang` if not defined. ```go-html-template {{ .Language.LanguageCode }} → de-DE @@ -61,5 +61,5 @@ Weight {{ .Language.Weight }} → 2 ``` -[details]: /methods/site/language +[details]: /methods/site/language/ [RFC 5646]: https://datatracker.ietf.org/doc/html/rfc5646 diff --git a/content/en/methods/page/Lastmod.md b/content/en/methods/page/Lastmod.md index c1692233d4b..78760d55680 100644 --- a/content/en/methods/page/Lastmod.md +++ b/content/en/methods/page/Lastmod.md @@ -33,8 +33,8 @@ In the example above we explicitly set the last modification date in front matte Learn more about [date configuration]. -[`gitinfo`]: /methods/page/gitinfo -[`time.format`]: /functions/time/format +[`gitinfo`]: /methods/page/gitinfo/ +[`time.format`]: /functions/time/format/ [date configuration]: /getting-started/configuration/#configure-dates -[time methods]: /methods/time +[time methods]: /methods/time/ [time.time]: https://pkg.go.dev/time#time diff --git a/content/en/methods/page/LinkTitle.md b/content/en/methods/page/LinkTitle.md index 746e433bb80..0ce32e64160 100644 --- a/content/en/methods/page/LinkTitle.md +++ b/content/en/methods/page/LinkTitle.md @@ -12,7 +12,7 @@ action: The `LinkTitle` method returns the `linkTitle` field as defined in front matter, falling back to the value returned by the [`Title`] method. -[`Title`]: /methods/page/title +[`Title`]: /methods/page/title/ {{< code-toggle file=content/articles/healthy-desserts.md fm=true >}} title = 'Seventeen delightful recipes for healthy desserts' diff --git a/content/en/methods/page/NextInSection.md b/content/en/methods/page/NextInSection.md index 73f82d754a1..59a35d03dcb 100644 --- a/content/en/methods/page/NextInSection.md +++ b/content/en/methods/page/NextInSection.md @@ -65,7 +65,7 @@ With the `PrevInSection` and `NextInSection` methods, the navigation sort order For example, with a page collection sorted by title, the navigation sort order will use Hugo’s default sort order. This is probably not what you want or expect. For this reason, the Next and Prev methods on a Pages object are generally a better choice. -[date]: /methods/page/date -[weight]: /methods/page/weight -[linkTitle]: /methods/page/linktitle -[title]: /methods/page/title +[date]: /methods/page/date/ +[weight]: /methods/page/weight/ +[linkTitle]: /methods/page/linktitle/ +[title]: /methods/page/title/ diff --git a/content/en/methods/page/Pages.md b/content/en/methods/page/Pages.md index 2f329eeec6b..d446292e2fc 100644 --- a/content/en/methods/page/Pages.md +++ b/content/en/methods/page/Pages.md @@ -75,7 +75,7 @@ In the last example, the collection includes pages in the resources subdirectory {{% note %}} When used with a `Site` object, the `Pages` method recursively returns all pages within the site. See [details]. -[details]: /methods/site/pages +[details]: /methods/site/pages/ {{% /note %}} ```go-html-template diff --git a/content/en/methods/page/Paginator.md b/content/en/methods/page/Paginator.md index b1540286ad5..b411e6ec077 100644 --- a/content/en/methods/page/Paginator.md +++ b/content/en/methods/page/Paginator.md @@ -28,7 +28,7 @@ Although simple to invoke, with the `Paginator` method you can neither filter no The [`Paginate`] method is more flexible, and strongly recommended. -[`paginate`]: /methods/page/paginate +[`paginate`]: /methods/page/paginate/ {{% /note %}} {{% note %}} diff --git a/content/en/methods/page/Param.md b/content/en/methods/page/Param.md index b2932d98102..daf09a5b4f0 100644 --- a/content/en/methods/page/Param.md +++ b/content/en/methods/page/Param.md @@ -29,6 +29,7 @@ Content: title = 'Example' date = 2023-01-01 draft = false +[params] display_toc = false {{< /code-toggle >}} diff --git a/content/en/methods/page/Params.md b/content/en/methods/page/Params.md index 13416ada74f..219b5de9d7b 100644 --- a/content/en/methods/page/Params.md +++ b/content/en/methods/page/Params.md @@ -17,8 +17,9 @@ With this front matter: {{< code-toggle file=content/news/annual-conference.md >}} title = 'Annual conference' date = 2023-10-17T15:11:37-07:00 +[params] display_related = true -[author] +[params.author] email = 'jsmith@example.org' name = 'John Smith' {{< /code-toggle >}} @@ -38,6 +39,6 @@ In the template example above, each of the keys is a valid identifier. For examp {{ index .Params "key-with-hyphens" }} → 2023 ``` -[`index`]: /functions/collections/indexfunction +[`index`]: /functions/collections/indexfunction/ [chaining]: /getting-started/glossary/#chain [identifiers]: /getting-started/glossary/#identifier diff --git a/content/en/methods/page/Parent.md b/content/en/methods/page/Parent.md index 9d9ed7ea3b4..db01eb5897f 100644 --- a/content/en/methods/page/Parent.md +++ b/content/en/methods/page/Parent.md @@ -21,7 +21,7 @@ action: {{% note %}} The parent section of a regular page is the [current section]. -[current section]: /methods/page/currentsection +[current section]: /methods/page/currentsection/ {{% /note %}} Consider this content structure: diff --git a/content/en/methods/page/Path.md b/content/en/methods/page/Path.md new file mode 100644 index 00000000000..b65120d4d8e --- /dev/null +++ b/content/en/methods/page/Path.md @@ -0,0 +1,157 @@ +--- +title: Path +description: Returns the logical path of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/File + - methods/page/RelPermalink + returnType: string + signatures: [PAGE.Path] +toc: true +--- + +{{< new-in 0.123.0 >}} + +The `Path` method on a `Page` object returns the logical path of the given page, regardless of whether the page is backed by a file. + +[logical path]: /getting-started/glossary#logical-path + +```go-html-template +{{ .Path }} → /posts/post-1 +``` + +This value is neither a file path nor a relative URL. It is a logical identifier for each page, independent of content format, language, and URL modifiers. + +{{% note %}} +Beginning with the release of [v0.92.0] in January 2022, Hugo emitted a warning whenever calling the `Path` method. The warning indicated that this method would change in a future release. + +The meaning of, and value returned by, the `Path` method on a `Page` object changed with the release of [v0.123.0] in February 2024. + +[v0.92.0]: https://github.com/gohugoio/hugo/releases/tag/v0.92.0 +[v0.123.0]: https://github.com/gohugoio/hugo/releases/tag/v0.123.0 +{{% /note %}} + +To determine the logical path for pages backed by a file, Hugo starts with the file path, relative to the content directory, and then: + +1. Strips the file extension +2. Strips the language identifier +3. Converts the result to lower case +4. Replaces spaces with hyphens + +The value returned by the `Path` method on a `Page` object is independent of content format, language, and URL modifiers such as the `slug` and `url` front matter fields. + +## Examples + +### Monolingual site + +Note that the logical path is independent of content format and URL modifiers. + +File path|Front matter slug|Logical path +:--|:--|:-- +`content/_index.md`||`/` +`content/posts/_index.md`||`/posts` +`content/posts/post-1.md`|`foo`|`/posts/post-1` +`content/posts/post-2.html`|`bar`|`/posts/post-2` + +### Multilingual site + +Note that the logical path is independent of content format, language identifiers, and URL modifiers. + +File path|Front matter slug|Logical path +:--|:--|:-- +`content/_index.en.md`||`/` +`content/_index.de.md`||`/` +`content/posts/_index.en.md`||`/posts` +`content/posts/_index.de.md`||`/posts` +`content/posts/posts-1.en.md`|`foo`|`/posts/post-1` +`content/posts/posts-1.de.md`|`foo`|`/posts/post-1` +`content/posts/posts-2.en.html`|`bar`|`/posts/post-2` +`content/posts/posts-2.de.html`|`bar`|`/posts/post-2` + +### Pages not backed by a file + +The `Path` method on a `Page` object returns a value regardless of whether the page is backed by a file. + +```text +content/ +└── posts/ + └── post-1.md <-- front matter: tags = ['hugo'] +``` + +When you build the site: + +```text +public/ +├── posts/ +│ ├── post-1/ +│ │ └── index.html .Page.Path = /posts/post-1 +│ └── index.html .Page.Path = /posts +├── tags/ +│ ├── hugo/ +│ │ └── index.html .Page.Path = /tags/hugo +│ └── index.html .Page.Path = /tags +└── index.html .Page.Path = / +``` + +## Finding pages + +These methods, functions, and shortcodes use the logical path to find the given page: + +Methods|Functions|Shortcodes +:--|:--|:-- +[`Site.GetPage`]|[`urls.Ref`]|[`ref`] +[`Page.GetPage`]|[`urls.RelRef`]|[`relref`] +[`Page.Ref`]|| +[`Page.RelRef`]|| +[`Shortcode.Ref`]|| +[`Shortcode.RelRef`]|| + +[`urls.Ref`]: /functions/urls/ref/ +[`urls.RelRef`]: /functions/urls/relref/ +[`Page.GetPage`]: /methods/page/getpage/ +[`Site.GetPage`]: /methods/site/getpage/ +[`ref`]: /content-management/shortcodes/#ref +[`relref`]: /content-management/shortcodes/#relref +[`Page.Ref`]: /methods/page/ref/ +[`Page.RelRef`]: /methods/page/relref/ +[`Shortcode.Ref`]: /methods/shortcode/ref +[`Shortcode.RelRef`]: /methods/shortcode/relref + +{{% note %}} +Specify the logical path when using any of these methods, functions, or shortcodes. If you include a file extension or language identifier, Hugo will strip these values before finding the page in the logical tree. +{{% /note %}} + + +## Logical tree + +Just as file paths form a file tree, logical paths form a logical tree. + +A file tree: + +```text +content/ +└── s1/ + ├── p1/ + │ └── index.md + └── p2.md +``` + +The same content represented as a logical tree: + +```text +content/ +└── s1/ + ├── p1 + └── p2 +``` + +A key difference between these trees is the relative path from p1 to p2: + +- In the file tree, the relative path from p1 to p2 is `../p2.md` +- In the logical tree, the relative path is `p2` + +{{% note %}} +Remember to use the logical path when using any of the methods, functions, or shortcodes listed in the previous section. If you include a file extension or language identifier, Hugo will strip these values before finding the page in the logical tree. +{{% /note %}} diff --git a/content/en/methods/page/Plain.md b/content/en/methods/page/Plain.md index 6fdf60b62cf..3aae1ed6174 100644 --- a/content/en/methods/page/Plain.md +++ b/content/en/methods/page/Plain.md @@ -13,7 +13,7 @@ action: signatures: [PAGE.Plain] --- -The `Plain` method on a `Page` object renders markdown and [shortcodes] to HTML, then strips the HTML [tags]. It does not strip HTML [entities]. The plain content does not include front matter. +The `Plain` method on a `Page` object renders Markdown and [shortcodes] to HTML, then strips the HTML [tags]. It does not strip HTML [entities]. The plain content does not include front matter. To prevent Go's [html/template] package from escaping HTML entities, pass the result through the [`htmlUnescape`] function. @@ -25,4 +25,4 @@ To prevent Go's [html/template] package from escaping HTML entities, pass the re [html/template]: https://pkg.go.dev/html/template [entities]: https://developer.mozilla.org/en-US/docs/Glossary/Entity [tags]: https://developer.mozilla.org/en-US/docs/Glossary/Tag -[`htmlUnescape`]: /functions/ +[`htmlUnescape`]: /functions/transform/htmlunescape/ diff --git a/content/en/methods/page/PlainWords.md b/content/en/methods/page/PlainWords.md index 4bc79d2412d..4f70193fefa 100644 --- a/content/en/methods/page/PlainWords.md +++ b/content/en/methods/page/PlainWords.md @@ -15,7 +15,7 @@ action: The `PlainWords` method on a `Page` object calls the [`Plain`] method, then uses Go's [`strings.Fields`] function to split the result into words. {{% note %}} -_Fields splits the string s around each instance of one or more consecutive white space characters, as defined by [`unicode.IsSpace`], returning a slice of substrings of s or an empty slice if s contains only white space._ +_Fields splits the string s around each instance of one or more consecutive whitespace characters, as defined by [`unicode.IsSpace`], returning a slice of substrings of s or an empty slice if s contains only whitespace._ [`unicode.IsSpace`]: https://pkg.go.dev/unicode#IsSpace {{% /note %}} @@ -32,5 +32,5 @@ To determine the approximate number of unique words on a page: {{ .PlainWords | uniq }} → 42 ``` -[`Plain`]: /methods/page/plain +[`Plain`]: /methods/page/plain/ [`strings.Fields`]: https://pkg.go.dev/strings#Fields diff --git a/content/en/methods/page/PrevInSection.md b/content/en/methods/page/PrevInSection.md index c09e4580f7a..e6daf66c443 100644 --- a/content/en/methods/page/PrevInSection.md +++ b/content/en/methods/page/PrevInSection.md @@ -66,7 +66,7 @@ With the `PrevInSection` and `NextInSection` methods, the navigation sort order For example, with a page collection sorted by title, the navigation sort order will use Hugo’s default sort order. This is probably not what you want or expect. For this reason, the Next and Prev methods on a Pages object are generally a better choice. -[date]: /methods/page/date -[weight]: /methods/page/weight -[linkTitle]: /methods/page/linktitle -[title]: /methods/page/title +[date]: /methods/page/date/ +[weight]: /methods/page/weight/ +[linkTitle]: /methods/page/linktitle/ +[title]: /methods/page/title/ diff --git a/content/en/methods/page/PublishDate.md b/content/en/methods/page/PublishDate.md index b1c0717a9b8..d1f2eb2a12d 100644 --- a/content/en/methods/page/PublishDate.md +++ b/content/en/methods/page/PublishDate.md @@ -29,7 +29,7 @@ The publish date is a [time.Time] value. Format and localize the value with the In the example above we explicitly set the publish date in front matter. With Hugo's default configuration, the `PublishDate` method returns the front matter value. This behavior is configurable, allowing you to set fallback values if the publish date is not defined in front matter. See [details]. -[`time.Format`]: /functions/time/format +[`time.Format`]: /functions/time/format/ [details]: /getting-started/configuration/#configure-dates -[time methods]: /methods/time +[time methods]: /methods/time/ [time.Time]: https://pkg.go.dev/time#Time diff --git a/content/en/methods/page/RawContent.md b/content/en/methods/page/RawContent.md index 258a294d094..12686c69525 100644 --- a/content/en/methods/page/RawContent.md +++ b/content/en/methods/page/RawContent.md @@ -25,7 +25,7 @@ This is useful when rendering a page in a plain text [output format]. [Shortcodes] within the content are not rendered. To get the raw content with shortcodes rendered, use the [`RenderShortcodes`] method on a `Page` object. [shortcodes]: /getting-started/glossary/#shortcode -[`RenderShortcodes`]: /methods/page/rendershortcodes +[`RenderShortcodes`]: /methods/page/rendershortcodes/ {{% /note %}} -[output format]: /templates/output-formats +[output format]: /templates/output-formats/ diff --git a/content/en/methods/page/RegularPages.md b/content/en/methods/page/RegularPages.md index b0ca7b1e193..d3327702ea0 100644 --- a/content/en/methods/page/RegularPages.md +++ b/content/en/methods/page/RegularPages.md @@ -72,7 +72,7 @@ In the last example, the collection includes pages in the resources subdirectory {{% note %}} When used with the `Site` object, the `RegularPages` method recursively returns all regular pages within the site. See [details]. -[details]: /methods/site/regularpages +[details]: /methods/site/regularpages/ {{% /note %}} ```go-html-template diff --git a/content/en/methods/page/Render.md b/content/en/methods/page/Render.md index bc3f58352c0..9a70d2bedc5 100644 --- a/content/en/methods/page/Render.md +++ b/content/en/methods/page/Render.md @@ -70,6 +70,6 @@ layouts/_default/li.html See [content views] for more examples. -[content views]: /templates/views -[`partial`]: /functions/partials/include +[content views]: /templates/views/ +[`partial`]: /functions/partials/include/ [content type]: /getting-started/glossary/#content-type diff --git a/content/en/methods/page/RenderShortcodes.md b/content/en/methods/page/RenderShortcodes.md index 4636bf8f5ba..a4120f69a45 100644 --- a/content/en/methods/page/RenderShortcodes.md +++ b/content/en/methods/page/RenderShortcodes.md @@ -22,11 +22,12 @@ Use this method in shortcode templates to compose a page from multiple content f For example: {{< code file=layouts/shortcodes/include.html >}} -{{ $p := site.GetPage (.Get 0) }} -{{ $p.RenderShortcodes }} +{{ with site.GetPage (.Get 0) }} + {{ .RenderShortcodes }} +{{ end }} {{< /code >}} -Then in your markdown: +Then call the shortcode in your Markdown: {{< code file=content/about.md lang=md >}} {{%/* include "/snippets/services.md" */%}} @@ -34,14 +35,14 @@ Then in your markdown: {{%/* include "/snippets/leadership.md" */%}} {{< /code >}} -Each of the included markdown files can contain calls to other shortcodes. +Each of the included Markdown files can contain calls to other shortcodes. ## Shortcode notation In the example above it's important to understand the difference between the two delimiters used when calling a shortcode: - `{{}}` tells Hugo that the rendered shortcode does not need further processing. For example, the shortcode content is HTML. -- `{{%/* myshortcode */%}}` tells Hugo that the rendered shortcode needs further processing. For example, the shortcode content is markdown. +- `{{%/* myshortcode */%}}` tells Hugo that the rendered shortcode needs further processing. For example, the shortcode content is Markdown. Use the latter for the "include" shortcode described above. @@ -75,4 +76,4 @@ https://example.org/privacy/ An *emphasized* word. ``` -Note that the shortcode within the content file was rendered, but the surrounding markdown was preserved. +Note that the shortcode within the content file was rendered, but the surrounding Markdown was preserved. diff --git a/content/en/methods/page/RenderString.md b/content/en/methods/page/RenderString.md index 5782cd2b1ac..1a92c78c60a 100644 --- a/content/en/methods/page/RenderString.md +++ b/content/en/methods/page/RenderString.md @@ -47,5 +47,5 @@ Render with [Pandoc]: {{ .RenderString $opts $s }} →

H2O

``` -[markup identifier]: /content-management/formats/#list-of-content-formats +[markup identifier]: /content-management/formats/#classification [pandoc]: https://www.pandoc.org/ diff --git a/content/en/methods/page/Resources.md b/content/en/methods/page/Resources.md index 140b50020ed..54a61a2e45c 100644 --- a/content/en/methods/page/Resources.md +++ b/content/en/methods/page/Resources.md @@ -75,11 +75,11 @@ With the `GetMatch` and `Match` methods, Hugo determines a match using a case-in {{% include "functions/_common/glob-patterns.md" %}} -[`resources.ByType`]: /functions/resources/ByType -[`resources.GetMatch`]: /functions/resources/ByType -[`resources.Get`]: /functions/resources/ByType -[`resources.Match`]: /functions/resources/ByType -[`resources`]: /functions/resources +[`resources.ByType`]: /functions/resources/ByType/ +[`resources.GetMatch`]: /functions/resources/ByType/ +[`resources.Get`]: /functions/resources/ByType/ +[`resources.Match`]: /functions/resources/ByType/ +[`resources`]: /functions/resources/ [glob pattern]: https://github.com/gobwas/glob#example [media type]: https://en.wikipedia.org/wiki/Media_type [page bundle]: /getting-started/glossary/#page-bundle diff --git a/content/en/methods/page/Scratch.md b/content/en/methods/page/Scratch.md index f9ce7f7fb68..8fef31893fb 100644 --- a/content/en/methods/page/Scratch.md +++ b/content/en/methods/page/Scratch.md @@ -1,6 +1,6 @@ --- title: Scratch -description: Creates a "scratch pad" on the given page to store and manipulate data. +description: Returns a "scratch pad" on the given page to store and manipulate data. categories: [] keywords: [] action: @@ -9,6 +9,7 @@ action: - functions/collections/NewScratch returnType: maps.Scratch signatures: [PAGE.Scratch] +toc: true aliases: [/extras/scratch/,/doc/scratch/,/functions/scratch] --- @@ -16,8 +17,28 @@ The `Scratch` method on a `Page` object creates a [scratch pad] to store and man To create a locally scoped scratch pad that is not attached to a `Page` object, use the [`newScratch`] function. -[`Store`]: /methods/page/store -[`newScratch`]: functions/collections/newscratch +[`Store`]: /methods/page/store/ +[`newScratch`]: /functions/collections/newscratch/ [scratch pad]: /getting-started/glossary/#scratch-pad {{% include "methods/page/_common/scratch-methods.md" %}} + +## Determinate values + +The `Scratch` method is often used to set scratch pad values within a shortcode, a partial template called by a shortcode, or by a Markdown render hook. In all three cases, the scratch pad values are not determinate until Hugo renders the page content. + +If you need to access a scratch pad value from a parent template, and the parent template has not yet rendered the page content, you can trigger content rendering by assigning the returned value to a [noop] variable: + +[noop]: /getting-started/glossary/#noop + +```go-html-template +{{ $noop := .Content }} +{{ .Store.Get "mykey" }} +``` + +You can also trigger content rendering with the `FuzzyWordCount`, `Len`, `Plain`, `PlainWords`, `ReadingTime`, `Summary`, `Truncated`, and `WordCount` methods. For example: + +```go-html-template +{{ $noop := .WordCount }} +{{ .Store.Get "mykey" }} +``` diff --git a/content/en/methods/page/Section.md b/content/en/methods/page/Section.md index 30c8a983788..8e027a5a11f 100644 --- a/content/en/methods/page/Section.md +++ b/content/en/methods/page/Section.md @@ -50,5 +50,5 @@ This is similar to using the [`Type`] method with the `where` function However, if the `type` field in front matter has been defined on one or more pages, the page collection based on `Type` will be different than the page collection based on `Section`. -[`where`]: /functions/collections/where -[`Type`]: /methods/page/type +[`where`]: /functions/collections/where/ +[`Type`]: /methods/page/type/ diff --git a/content/en/methods/page/Sections.md b/content/en/methods/page/Sections.md index d64440038bd..4cce1a4fbbd 100644 --- a/content/en/methods/page/Sections.md +++ b/content/en/methods/page/Sections.md @@ -35,11 +35,11 @@ content/ │ ├── bidding.md │ └── payment.md ├── books/ -│ ├── _index.md <-- front matter: weight = 10 +│ ├── _index.md <-- front matter: weight = 20 │ ├── book-1.md │ └── book-2.md ├── films/ -│ ├── _index.md <-- front matter: weight = 20 +│ ├── _index.md <-- front matter: weight = 10 │ ├── film-1.md │ └── film-2.md └── _index.md diff --git a/content/en/methods/page/Site.md b/content/en/methods/page/Site.md index 34748facd52..d83c45e0a60 100644 --- a/content/en/methods/page/Site.md +++ b/content/en/methods/page/Site.md @@ -12,7 +12,7 @@ action: See [Site methods]. -[Site methods]: /methods/site +[Site methods]: /methods/site/ ```go-html-template {{ .Site.Title }} diff --git a/content/en/methods/page/Sitemap.md b/content/en/methods/page/Sitemap.md index 08ff3f5d067..d6159267dce 100644 --- a/content/en/methods/page/Sitemap.md +++ b/content/en/methods/page/Sitemap.md @@ -14,15 +14,22 @@ Access to the `Sitemap` method on a `Page` object is restricted to [sitemap temp ## Methods -ChangeFreq -: (`string`) How frequently a page is likely to change. Valid values are `always`, `hourly`, `daily`, `weekly`, `monthly`, `yearly`, and `never`. Default is "" (change frequency omitted from rendered sitemap). +changefreq +: (`string`) How frequently a page is likely to change. Valid values are `always`, `hourly`, `daily`, `weekly`, `monthly`, `yearly`, and `never`. With the default value of `""` Hugo will omit this field from the sitemap. See [details](https://www.sitemaps.org/protocol.html#changefreqdef). ```go-html-template {{ .Sitemap.ChangeFreq }} ``` -Priority -: (`float`) The priority of a page relative to any other page on the site. Valid values range from 0.0 to 1.0. Default is -1 (priority omitted from rendered sitemap). +disable {{< new-in 0.125.0 >}} +: (`bool`) Whether to disable page inclusion. Default is `false`. Set to `true` in front matter to exclude the page. + +```go-html-template +{{ .Sitemap.Disable }} +``` + +priority +: (`float`) The priority of a page relative to any other page on the site. Valid values range from 0.0 to 1.0. With the default value of `-1` Hugo will omit this field from the sitemap. See [details](https://www.sitemaps.org/protocol.html#priority). ```go-html-template {{ .Sitemap.Priority }} diff --git a/content/en/methods/page/Sites.md b/content/en/methods/page/Sites.md index 1fbdfcdcde8..cd240655e3e 100644 --- a/content/en/methods/page/Sites.md +++ b/content/en/methods/page/Sites.md @@ -52,10 +52,10 @@ Produces a list of links to each home page: ``` -To render a link to home page of the primary (first) language: +To render a link to the home page of the site corresponding to the default content language: ```go-html-template -{{ with .Sites.First }} +{{ with .Sites.Default }} {{ .Title }} {{ end }} ``` diff --git a/content/en/methods/page/Store.md b/content/en/methods/page/Store.md index 8bc16034b72..e7090fe7951 100644 --- a/content/en/methods/page/Store.md +++ b/content/en/methods/page/Store.md @@ -1,6 +1,6 @@ --- title: Store -description: Creates a persistent "scratch pad" on the given page to store and manipulate data. +description: Returns a persistent "scratch pad" on the given page to store and manipulate data. categories: [] keywords: [] action: @@ -9,6 +9,7 @@ action: - functions/collections/NewScratch returnType: maps.Scratch signatures: [PAGE.Store] +toc: true aliases: [/functions/store] --- @@ -16,8 +17,8 @@ The `Store` method on a `Page` object creates a persistent [scratch pad] to stor To create a locally scoped scratch pad that is not attached to a `Page` object, use the [`newScratch`] function. -[`Scratch`]: /methods/page/scratch -[`newScratch`]: functions/collections/newscratch +[`Scratch`]: /methods/page/scratch/ +[`newScratch`]: /functions/collections/newscratch/ [scratch pad]: /getting-started/glossary/#scratch-pad ## Methods @@ -102,3 +103,23 @@ Removes the given key. {{ .Store.Set "greeting" "Hello" }} {{ .Store.Delete "greeting" }} ``` + +## Determinate values + +The `Store` method is often used to set scratch pad values within a shortcode, a partial template called by a shortcode, or by a Markdown render hook. In all three cases, the scratch pad values are not determinate until Hugo renders the page content. + +If you need to access a scratch pad value from a parent template, and the parent template has not yet rendered the page content, you can trigger content rendering by assigning the returned value to a [noop] variable: + +[noop]: /getting-started/glossary/#noop + +```go-html-template +{{ $noop := .Content }} +{{ .Store.Get "mykey" }} +``` + +You can also trigger content rendering with the `FuzzyWordCount`, `Len`, `Plain`, `PlainWords`, `ReadingTime`, `Summary`, `Truncated`, and `WordCount` methods. For example: + +```go-html-template +{{ $noop := .WordCount }} +{{ .Store.Get "mykey" }} +``` diff --git a/content/en/methods/page/Summary.md b/content/en/methods/page/Summary.md index 37ce865893b..e4542d25814 100644 --- a/content/en/methods/page/Summary.md +++ b/content/en/methods/page/Summary.md @@ -11,10 +11,14 @@ action: signatures: [PAGE.Summary] --- + + + + There are three ways to define the [content summary]: 1. Let Hugo create the summary based on the first 70 words. You can change the number of words by setting the `summaryLength` in your site configuration. -2. Manually split the content with a `<--more-->` tag in markdown. Everything before the tag is included in the summary. +2. Manually split the content with a `` tag in Markdown. Everything before the tag is included in the summary. 3. Create a `summary` field in front matter. To list the pages in a section with a summary beneath each link: @@ -26,4 +30,4 @@ To list the pages in a section with a summary beneath each link: {{ end }} ``` -[content summary]: /content-management/summaries +[content summary]: /content-management/summaries/ diff --git a/content/en/methods/page/TableOfContents.md b/content/en/methods/page/TableOfContents.md index 2ab182e8ca7..38c3ff17bd1 100644 --- a/content/en/methods/page/TableOfContents.md +++ b/content/en/methods/page/TableOfContents.md @@ -8,9 +8,10 @@ action: - methods/page/Fragments returnType: template.HTML signatures: [PAGE.TableOfContents] +aliases: [/content-management/toc/] --- -The `TableOfContents` method on a `Page` object returns an ordered or unordered list of the markdown [ATX] and [setext] headings within the page content. +The `TableOfContents` method on a `Page` object returns an ordered or unordered list of the Markdown [ATX] and [setext] headings within the page content. [atx]: https://spec.commonmark.org/0.30/#atx-headings [setext]: https://spec.commonmark.org/0.30/#setext-headings diff --git a/content/en/methods/page/Title.md b/content/en/methods/page/Title.md index 52e46ff44be..5c2c98d6b23 100644 --- a/content/en/methods/page/Title.md +++ b/content/en/methods/page/Title.md @@ -20,19 +20,21 @@ title = 'About us' {{ .Title }} → About us ``` -With section pages not backed by a file, the `Title` method returns the section name, pluralized and converted to title case. - -To disable [pluralization]: +With section, taxonomy, and term pages not backed by a file, the `Title` method returns the section name, capitalized and pluralized. You can disable these transformations by setting [`capitalizeListTitles`] and [`pluralizeListTitles`] in your site configuration. For example: {{< code-toggle file=hugo >}} +capitalizeListTitles = false pluralizeListTitles = false {{< /code-toggle >}} -To change the [title case style], specify one of `ap`, `chicago`, `go`, `firstupper`, or `none`: +You can change the capitalization style in your site configuration to one of `ap`, `chicago`, `go`, `firstupper`, or `none`. For example: {{< code-toggle file=hugo >}} -titleCaseStyle = "ap" +titleCaseStyle = "firstupper" {{< /code-toggle >}} -[pluralization]: /functions/inflect/pluralize -[title case style]: /getting-started/configuration/#configure-title-case + See [details]. + +[`capitalizeListTitles`]: /getting-started/configuration/#capitalizelisttitles +[`pluralizeListTitles`]: /getting-started/configuration/#pluralizelisttitles +[details]: /getting-started/configuration/#configure-title-case diff --git a/content/en/methods/page/Translations.md b/content/en/methods/page/Translations.md index 1ed25663072..597a9aeb604 100644 --- a/content/en/methods/page/Translations.md +++ b/content/en/methods/page/Translations.md @@ -1,6 +1,6 @@ --- title: Translations -description: Returns all translation of the given page, excluding the current language. +description: Returns all translations of the given page, excluding the current language. categories: [] keywords: [] action: @@ -63,9 +63,9 @@ And this template: {{ with .Translations }} {{ end }} diff --git a/content/en/methods/page/Truncated.md b/content/en/methods/page/Truncated.md index e6051f0cd4a..0785f40cb08 100644 --- a/content/en/methods/page/Truncated.md +++ b/content/en/methods/page/Truncated.md @@ -13,7 +13,7 @@ action: There are three ways to define the [content summary]: 1. Let Hugo create the summary based on the first 70 words. You can change the number of words by setting the `summaryLength` in your site configuration. -2. Manually split the content with a `<--more-->` tag in markdown. Everything before the tag is included in the summary. +2. Manually split the content with a `<--more-->` tag in Markdown. Everything before the tag is included in the summary. 3. Create a `summary` field in front matter. {{% note %}} @@ -32,4 +32,4 @@ The `Truncated` method returns `true` if the content length exceeds the summary {{ end }} ``` -[content summary]: /content-management/summaries +[content summary]: /content-management/summaries/ diff --git a/content/en/methods/page/WordCount.md b/content/en/methods/page/WordCount.md index bb1fdcf9414..70fe407ab85 100644 --- a/content/en/methods/page/WordCount.md +++ b/content/en/methods/page/WordCount.md @@ -17,4 +17,4 @@ action: To round up to nearest multiple of 100, use the [`FuzzyWordCount`] method. -[`FuzzyWordCount`]: /methods/page/fuzzywordcount +[`FuzzyWordCount`]: /methods/page/fuzzywordcount/ diff --git a/content/en/methods/page/_common/_index.md b/content/en/methods/page/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/methods/page/_common/_index.md +++ b/content/en/methods/page/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/methods/page/_common/output-format-definition.md b/content/en/methods/page/_common/output-format-definition.md index 25944464a7c..412c5cee692 100644 --- a/content/en/methods/page/_common/output-format-definition.md +++ b/content/en/methods/page/_common/output-format-definition.md @@ -8,4 +8,4 @@ Hugo generates one or more files per page when building a site. For example, whe [taxonomy]: /getting-started/glossary/#taxonomy [term]: /getting-started/glossary/#term [page kind]: /getting-started/glossary/#page-kind -[details]: /templates/output-formats +[details]: /templates/output-formats/ diff --git a/content/en/methods/pager/First.md b/content/en/methods/pager/First.md new file mode 100644 index 00000000000..85e2e0dd376 --- /dev/null +++ b/content/en/methods/pager/First.md @@ -0,0 +1,44 @@ +--- +title: First +description: Returns the first pager in the pager collection. +categories: [] +keywords: [] +action: + related: + - methods/pager/Last + - methods/pager/Prev + - methods/pager/Next + - methods/pager/HasPrev + - methods/pager/HasNext + - methods/page/Paginate + returnType: page.Pager + signatures: [PAGER.First] +--- + +Use the `First` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/HasNext.md b/content/en/methods/pager/HasNext.md new file mode 100644 index 00000000000..e7550d788ee --- /dev/null +++ b/content/en/methods/pager/HasNext.md @@ -0,0 +1,72 @@ +--- +title: HasNext +description: Reports whether there is a pager after the current pager. +categories: [] +keywords: [] +action: + related: + - methods/pager/HasPrev + - methods/pager/Prev + - methods/pager/Next + - methods/pager/First + - methods/pager/Last + - methods/page/Paginate + returnType: bool + signatures: [PAGER.HasNext] +--- + +Use the `HasNext` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ if .HasPrev }} +
  • Previous
  • + {{ end }} + {{ if .HasNext }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` + +You can also write the above without using the `HasNext` method: + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/HasPrev.md b/content/en/methods/pager/HasPrev.md new file mode 100644 index 00000000000..00d5c1deaf4 --- /dev/null +++ b/content/en/methods/pager/HasPrev.md @@ -0,0 +1,72 @@ +--- +title: HasPrev +description: Reports whether there is a pager before the current pager. +categories: [] +keywords: [] +action: + related: + - methods/pager/HasNext + - methods/pager/Prev + - methods/pager/Next + - methods/pager/First + - methods/pager/Last + - methods/page/Paginate + returnType: bool + signatures: [PAGER.HasPrev] +--- + +Use the `HasPrev` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ if .HasPrev }} +
  • Previous
  • + {{ end }} + {{ if .HasNext }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` + +You can also write the above without using the `HasPrev` method: + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/Last.md b/content/en/methods/pager/Last.md new file mode 100644 index 00000000000..074a469433a --- /dev/null +++ b/content/en/methods/pager/Last.md @@ -0,0 +1,44 @@ +--- +title: Last +description: Returns the last pager in the pager collection. +categories: [] +keywords: [] +action: + related: + - methods/pager/First + - methods/pager/Prev + - methods/pager/Next + - methods/pager/HasPrev + - methods/pager/HasNext + - methods/page/Paginate + returnType: page.Pager + signatures: [PAGER.Last] +--- + +Use the `Last` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/Next.md b/content/en/methods/pager/Next.md new file mode 100644 index 00000000000..099ac198e99 --- /dev/null +++ b/content/en/methods/pager/Next.md @@ -0,0 +1,44 @@ +--- +title: Next +description: Returns the next pager in the pager collection. +categories: [] +keywords: [] +action: + related: + - methods/pager/Prev + - methods/pager/HasPrev + - methods/pager/HasNext + - methods/pager/First + - methods/pager/Last + - methods/page/Paginate + returnType: page.Pager + signatures: [PAGER.Next] +--- + +Use the `Next` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/NumberOfElements.md b/content/en/methods/pager/NumberOfElements.md new file mode 100644 index 00000000000..3980cdfe23f --- /dev/null +++ b/content/en/methods/pager/NumberOfElements.md @@ -0,0 +1,25 @@ +--- +title: NumberOfElements +description: Returns the number of pages in the current pager. +categories: [] +keywords: [] +action: + related: + - methods/pager/TotalNumberOfElements + - methods/page/Paginate + returnType: int + signatures: [PAGER.NumberOfElements] +--- + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} + {{ .NumberOfElements }} +{{ end }} +``` diff --git a/content/en/methods/pager/PageGroups.md b/content/en/methods/pager/PageGroups.md new file mode 100644 index 00000000000..9dee18c0d06 --- /dev/null +++ b/content/en/methods/pager/PageGroups.md @@ -0,0 +1,29 @@ +--- +title: PageGroups +description: Returns the page groups in the current pager. +categories: [] +keywords: [] +action: + related: + - methods/page/Paginate + returnType: page.PagesGroup + signatures: [PAGER.PageGroups] +--- + +Use the `PageGroups` method with any of the [grouping methods]. + +[grouping methods]: /quick-reference/page-collections/#group + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate ($pages.GroupByDate "Jan 2006") }} + +{{ range $paginator.PageGroups }} +

{{ .Key }}

+ {{ range .Pages }} +

{{ .LinkTitle }}

+ {{ end }} +{{ end }} + +{{ template "_internal/pagination.html" . }} +``` diff --git a/content/en/methods/pager/PageNumber.md b/content/en/methods/pager/PageNumber.md new file mode 100644 index 00000000000..0d99c5a1591 --- /dev/null +++ b/content/en/methods/pager/PageNumber.md @@ -0,0 +1,31 @@ +--- +title: PageNumber +description: Returns the current pager's number within the pager collection. +categories: [] +keywords: [] +action: + related: + - methods/pager/TotalPages + - methods/page/Paginate + returnType: int + signatures: [PAGER.PageNumber] +--- + +Use the `PageNumber` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} + +{{ end }} +``` diff --git a/content/en/methods/pager/PageSize.md b/content/en/methods/pager/PageSize.md new file mode 100644 index 00000000000..a400f929a00 --- /dev/null +++ b/content/en/methods/pager/PageSize.md @@ -0,0 +1,24 @@ +--- +title: PageSize +description: Returns the maximum number of pages per pager. +categories: [] +keywords: [] +action: + related: + - methods/page/Paginate + returnType: int + signatures: [PAGER.PageSize] +--- + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} + {{ .PageSize }} +{{ end }} +``` diff --git a/content/en/methods/pager/Pagers.md b/content/en/methods/pager/Pagers.md new file mode 100644 index 00000000000..5f167c13e06 --- /dev/null +++ b/content/en/methods/pager/Pagers.md @@ -0,0 +1,30 @@ +--- +title: Pagers +description: Returns the pagers collection. +categories: [] +keywords: [] +action: + related: + - methods/page/Paginate + returnType: page.pagers + signatures: [PAGER.Pagers] +--- + +Use the `Pagers` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} + +{{ end }} +``` diff --git a/content/en/methods/pager/Pages.md b/content/en/methods/pager/Pages.md new file mode 100644 index 00000000000..1c049d53ba9 --- /dev/null +++ b/content/en/methods/pager/Pages.md @@ -0,0 +1,22 @@ +--- +title: Pages +description: Returns the pages in the current pager. +categories: [] +keywords: [] +action: + related: + - methods/page/Paginate + returnType: page.Pages + signatures: [PAGER.Pages] +--- + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ template "_internal/pagination.html" . }} +``` diff --git a/content/en/methods/pager/Prev.md b/content/en/methods/pager/Prev.md new file mode 100644 index 00000000000..c129c6a5a58 --- /dev/null +++ b/content/en/methods/pager/Prev.md @@ -0,0 +1,44 @@ +--- +title: Prev +description: Returns the previous pager in the pager collection. +categories: [] +keywords: [] +action: + related: + - methods/pager/Next + - methods/pager/HasPrev + - methods/pager/HasNext + - methods/pager/First + - methods/pager/Last + - methods/page/Paginate + returnType: page.Pager + signatures: [PAGER.Prev] +--- + +Use the `Prev` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/TotalNumberOfElements.md b/content/en/methods/pager/TotalNumberOfElements.md new file mode 100644 index 00000000000..3cd1c8dad42 --- /dev/null +++ b/content/en/methods/pager/TotalNumberOfElements.md @@ -0,0 +1,25 @@ +--- +title: TotalNumberOfElements +description: Returns the number of pages in the pager collection. +categories: [] +keywords: [] +action: + related: + - methods/pager/NumberOfElements + - methods/page/Paginate + returnType: int + signatures: [PAGER.TotalNumberOfElements] +--- + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} + {{ .TotalNumberOfElements }} +{{ end }} +``` diff --git a/content/en/methods/pager/TotalPages.md b/content/en/methods/pager/TotalPages.md new file mode 100644 index 00000000000..e305beeffa0 --- /dev/null +++ b/content/en/methods/pager/TotalPages.md @@ -0,0 +1,41 @@ +--- +title: TotalPages +description: Returns the number of pagers in the pager collection. +categories: [] +keywords: [] +action: + related: + - methods/pager/PageNumber + - methods/page/Paginate + returnType: int + signatures: [PAGER.TotalPages] +--- + +Use the `TotalPages` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +

Pager {{ .PageNumber }} of {{ .TotalPages }}

+
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/URL.md b/content/en/methods/pager/URL.md new file mode 100644 index 00000000000..3daddbbd5aa --- /dev/null +++ b/content/en/methods/pager/URL.md @@ -0,0 +1,39 @@ +--- +title: URL +description: Returns the URL of the current pager relative to the site root. +categories: [] +keywords: [] +action: + related: + - methods/page/Paginate + returnType: string + signatures: [PAGER.URL] +--- + +Use the `URL` method to build navigation between pagers. + +```go-html-template +{{ $pages := where site.RegularPages "Type" "posts" }} +{{ $paginator := .Paginate $pages }} + +{{ range $paginator.Pages }} +

{{ .LinkTitle }}

+{{ end }} + +{{ with $paginator }} +
    + {{ with .First }} +
  • First
  • + {{ end }} + {{ with .Prev }} +
  • Previous
  • + {{ end }} + {{ with .Next }} +
  • Next
  • + {{ end }} + {{ with .Last }} +
  • Last
  • + {{ end }} +
+{{ end }} +``` diff --git a/content/en/methods/pager/_index.md b/content/en/methods/pager/_index.md new file mode 100644 index 00000000000..58a1def7b17 --- /dev/null +++ b/content/en/methods/pager/_index.md @@ -0,0 +1,14 @@ +--- +title: Pager methods +linkTitle: Pager +description: Use these methods with Pager objects when paginating a list page. +keywords: [] +menu: + docs: + identifier: + parent: methods +--- + +Use these methods with Pager objects when building navigation for a [paginated] list page. + +[paginated]: /templates/pagination/ diff --git a/content/en/methods/pages/_common/_index.md b/content/en/methods/pages/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/methods/pages/_common/_index.md +++ b/content/en/methods/pages/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/methods/resource/Colors.md b/content/en/methods/resource/Colors.md index 1452d558f78..b062210baf3 100644 --- a/content/en/methods/resource/Colors.md +++ b/content/en/methods/resource/Colors.md @@ -5,18 +5,174 @@ categories: [] keywords: [] action: related: [] - returnType: '[]string' + returnType: '[]images.Color' signatures: [RESOURCE.Colors] +toc: true +math: true --- {{< new-in 0.104.0 >}} +The `Resources.Colors` method returns a slice of the most dominant colors in an image, ordered from most dominant to least dominant. This method is fast, but if you also downsize your image you can improve performance by extracting the colors from the scaled image. + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +## Methods + +Each color is an object with the following methods: + +ColorHex +{{< new-in 0.125.0 >}} +: (`string`) Returns the [hexadecimal color] value, prefixed with a hash sign. + +Luminance +{{< new-in 0.125.0 >}} +: (`float64`) Returns the [relative luminance] of the color in the sRGB colorspace in the range [0, 1]. A value of `0` represents the darkest black, while a value of `1` represents the lightest white. + +{{% note %}} +Image filters such as [`images.Dither`], [`images.Padding`], and [`images.Text`] accept either hexadecimal color values or `images.Color` objects as arguments. + +Hugo renders an `images.Color` object as a hexadecimal color value. + +[`images.Dither`]: /functions/images/dither/ +[`images.Padding`]: /functions/images/padding/ +[`images.Text`]: /functions/images/text/ +{{% /note %}} + +[hexadecimal color]: https://developer.mozilla.org/en-US/docs/Web/CSS/hex-color +[relative luminance]: https://www.w3.org/TR/WCAG21/#dfn-relative-luminance + +## Sorting + +As a contrived example, create a table of an image's dominant colors with the most dominant color first, and display the relative luminance of each dominant color: + ```go-html-template {{ with resources.Get "images/a.jpg" }} - {{ .Colors }} → [#bebebd #514947 #768a9a #647789 #90725e #a48974] + + + + + + + + + {{ range .Colors }} + + + + + {{ end }} + +
ColorRelative luminance
{{ .ColorHex }}{{ .Luminance | lang.FormatNumber 4 }}
{{ end }} ``` -This method is fast, but if you also scale down your images, it would be good for performance to extract the colors from the scaled image. +Hugo renders this to: -{{% include "methods/resource/_common/global-page-remote-resources.md" %}} +ColorHex|Relative luminance +:--|:-- +`#bebebd`|`0.5145` +`#514947`|`0.0697` +`#768a9a`|`0.2436` +`#647789`|`0.1771` +`#90725e`|`0.1877` +`#a48974`|`0.2704` + +To sort by dominance with the least dominant color first: + +```go-html-template +{{ range .Colors | collections.Reverse }} +``` + +To sort by relative luminance with the darkest color first: + +```go-html-template +{{ range sort .Colors "Luminance" }} +``` + +To sort by relative luminance with the lightest color first, use either of these constructs: + +```go-html-template +{{ range sort .Colors "Luminance" | collections.Reverse }} +{{ range sort .Colors "Luminance" "desc" }} +``` + +## Examples + +### Image borders + +To add a 5 pixel border to an image using the most dominant color: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ $mostDominant := index .Colors 0 }} + {{ $filter := images.Padding 5 $mostDominant }} + {{ with .Filter $filter }} + + {{ end }} +{{ end }} +``` + +To add a 5 pixel border to an image using the darkest dominant color: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ $darkest := index (sort .Colors "Luminance") 0 }} + {{ $filter := images.Padding 5 $darkest }} + {{ with .Filter $filter }} + + {{ end }} +{{ end }} +``` + +### Light text on dark background + +To create a text box where the foreground and background colors are derived from an image's lightest and darkest dominant colors: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ $darkest := index (sort .Colors "Luminance") 0 }} + {{ $lightest := index (sort .Colors "Luminance" "desc") 0 }} +
+
+

This is light text on a dark background.

+
+
+{{ end }} +``` + +### WCAG contrast ratio + +In the previous example we placed light text on a dark background, but does this color combination conform to [WCAG] guidelines for either the [minimum] or the [enhanced] contrast ratio? + +The WCAG defines the [contrast ratio] as: + +$$contrast\ ratio = { L_1 + 0.05 \over L_2 + 0.05 }$$ + +where $L_1$ is the relative luminance of the lightest color and $L_2$ is the relative luminance of the darkest color. + +Calculate the contrast ratio to determine WCAG conformance: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ $lightest := index (sort .Colors "Luminance" "desc") 0 }} + {{ $darkest := index (sort .Colors "Luminance") 0 }} + {{ $cr := div + (add $lightest.Luminance 0.05) + (add $darkest.Luminance 0.05) + }} + {{ if ge $cr 7.5 }} + {{ printf "The %.2f contrast ratio conforms to WCAG Level AAA." $cr }} + {{ else if ge $cr 4.5 }} + {{ printf "The %.2f contrast ratio conforms to WCAG Level AA." $cr }} + {{ else }} + {{ printf "The %.2f contrast ratio does not conform to WCAG guidelines." $cr }} + {{ end }} +{{ end }} +``` + + +[WCAG]: https://en.wikipedia.org/wiki/Web_Content_Accessibility_Guidelines +[contrast ratio]: https://www.w3.org/TR/WCAG21/#dfn-contrast-ratio +[enhanced]: https://www.w3.org/WAI/WCAG22/quickref/?showtechniques=145#contrast-enhanced +[minimum]: https://www.w3.org/WAI/WCAG22/quickref/?showtechniques=145#contrast-minimum diff --git a/content/en/methods/resource/Content.md b/content/en/methods/resource/Content.md index a5945ff6568..4135113e973 100644 --- a/content/en/methods/resource/Content.md +++ b/content/en/methods/resource/Content.md @@ -12,7 +12,7 @@ toc: The `Content` method on a `Resource` object returns `template.HTML` when the resource type is `page`, otherwise it returns a `string`. -[resource type]: /methods/resource/resourcetype +[resource type]: /methods/resource/resourcetype/ {{< code file=assets/quotations/kipling.txt >}} He travels the fastest who travels alone. diff --git a/content/en/methods/resource/Data.md b/content/en/methods/resource/Data.md index 0fbaf619906..43108fce835 100644 --- a/content/en/methods/resource/Data.md +++ b/content/en/methods/resource/Data.md @@ -13,7 +13,7 @@ action: The `Data` method on a resource returned by the [`resources.GetRemote`] function returns information from the HTTP response. -[`resources.GetRemote`]: functions/resources/getremote +[`resources.GetRemote`]: /functions/resources/getremote/ ```go-html-template {{ $url := "https://example.org/images/a.jpg" }} @@ -50,4 +50,4 @@ TransferEncoding : (`string`) The transfer encoding. -[`resources.GetRemote`]: functions/resources/getremote +[`resources.GetRemote`]: /functions/resources/getremote/ diff --git a/content/en/methods/resource/Err.md b/content/en/methods/resource/Err.md index f4b410aa7ab..6baa30e4747 100644 --- a/content/en/methods/resource/Err.md +++ b/content/en/methods/resource/Err.md @@ -13,7 +13,7 @@ action: The `Err` method on a resource returned by the [`resources.GetRemote`] function returns an error message if the HTTP request fails, else nil. If you do not handle the error yourself, Hugo will fail the build. -[`resources.GetRemote`]: functions/resources/getremote +[`resources.GetRemote`]: /functions/resources/getremote/ In this example we send an HTTP request to a nonexistent domain: diff --git a/content/en/methods/resource/Exif.md b/content/en/methods/resource/Exif.md index 765b4c92ff0..1d00ef3bc9a 100644 --- a/content/en/methods/resource/Exif.md +++ b/content/en/methods/resource/Exif.md @@ -15,7 +15,7 @@ Applicable to JPEG and TIFF images, the `Exif` method on an image `Resource` obj ## Methods Date -: (`time.Time`) Returns the image creation date/time. Format with the [`time.Format`]function. +: (`time.Time`) Returns the image creation date/time. Format with the [`time.Format`] function. Lat : (`float64`) Returns the GPS latitude in degrees. @@ -75,4 +75,4 @@ To list specific values: [exif]: https://en.wikipedia.org/wiki/Exif [site configuration]: /content-management/image-processing/#exif-data -[`time.Format`]: /functions/time/format +[`time.Format`]: /functions/time/format/ diff --git a/content/en/methods/resource/Filter.md b/content/en/methods/resource/Filter.md index 329168da7c9..9db6bbe1764 100644 --- a/content/en/methods/resource/Filter.md +++ b/content/en/methods/resource/Filter.md @@ -39,7 +39,7 @@ To apply two or more filters, executing from left to right: You can also apply image filters using the [`images.Filter`] function. -[`images.Filter`]: /functions/images/filter +[`images.Filter`]: /functions/images/filter/ {{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/content/en/methods/resource/Key.md b/content/en/methods/resource/Key.md index 15927aea909..deeba9ab39c 100644 --- a/content/en/methods/resource/Key.md +++ b/content/en/methods/resource/Key.md @@ -1,6 +1,7 @@ --- title: Key description: Returns the unique key for the given resource, equivalent to its publishing path. +draft: true categories: [] keywords: [] action: @@ -40,6 +41,6 @@ The `Key` method is useful if you need to get the resource's publishing path wit {{% include "methods/resource/_common/global-page-remote-resources.md" %}} -[`Permalink`]: /methods/resource/permalink -[`RelPermalink`]: /methods/resource/relpermalink -[`resources.Copy`]: /functions/resources/copy +[`Permalink`]: /methods/resource/permalink/ +[`RelPermalink`]: /methods/resource/relpermalink/ +[`resources.Copy`]: /functions/resources/copy/ diff --git a/content/en/methods/resource/Name.md b/content/en/methods/resource/Name.md index 01b75e5b244..694b67baa8e 100644 --- a/content/en/methods/resource/Name.md +++ b/content/en/methods/resource/Name.md @@ -1,6 +1,6 @@ --- title: Name -description: Returns the name of the given resource as optionally defined in front matter, falling back to a relative path or hashed file name depending on resource type. +description: Returns the name of the given resource as optionally defined in front matter, falling back to its file path. categories: [] keywords: [] action: @@ -20,51 +20,63 @@ With a [global resource], the `Name` method returns the path to the resource, re ```text assets/ └── images/ - └── a.jpg + └── Sunrise in Bryce Canyon.jpg ``` ```go-html-template -{{ with resources.Get "images/a.jpg" }} - {{ .Name }} → images/a.jpg +{{ with resources.Get "images/Sunrise in Bryce Canyon.jpg" }} + {{ .Name }} → /images/Sunrise in Bryce Canyon.jpg {{ end }} ``` ## Page resource -With a [page resource], the `Name` method returns the path to the resource, relative to the page bundle. +With a [page resource], if you create an element in the `resources` array in front matter, the `Name` method returns the value of the `name` parameter. ```text content/ -├── posts/ -│ ├── post-1/ -│ │ ├── images/ -│ │ │ └── a.jpg -│ │ └── index.md -│ └── _index.md +├── example/ +│ ├── images/ +│ │ └── a.jpg +│ └── index.md └── _index.md ``` +{{< code-toggle file=content/example/index.md fm=true >}} +title = 'Example' +[[resources]] +src = 'images/a.jpg' +name = 'Sunrise in Bryce Canyon' +{{< /code-toggle >}} + ```go-html-template {{ with .Resources.Get "images/a.jpg" }} - {{ .Name }} → images/a.jpg + {{ .Name }} → Sunrise in Bryce Canyon {{ end }} ``` -If you create an element in the `resources` array in front matter, the `Name` method returns the value of the `name` parameter: +You can also capture the image by specifying its `name` instead of its path: -{{< code-toggle file=content/posts/post-1.md fm=true >}} -title = 'Post 1' -[[resources]] -src = 'images/a.jpg' -name = 'cat' -title = 'Felix the cat' -[resources.params] -temperament = 'malicious' -{{< /code-toggle >}} +```go-html-template +{{ with .Resources.Get "Sunrise in Bryce Canyon" }} + {{ .Name }} → Sunrise in Bryce Canyon +{{ end }} +``` + +If you do not create an element in the `resources` array in front matter, the `Name` method returns the file path, relative to the page bundle. + +```text +content/ +├── example/ +│ ├── images/ +│ │ └── Sunrise in Bryce Canyon.jpg +│ └── index.md +└── _index.md +``` ```go-html-template -{{ with .Resources.Get "cat" }} - {{ .Name }} → cat +{{ with .Resources.Get "images/Sunrise in Bryce Canyon.jpg" }} + {{ .Name }} → images/Sunrise in Bryce Canyon.jpg {{ end }} ``` ## Remote resource @@ -73,10 +85,11 @@ With a [remote resource], the `Name` method returns a hashed file name. ```go-html-template {{ with resources.GetRemote "https://example.org/images/a.jpg" }} - {{ .Name }} → a_18432433023265451104.jpg + {{ .Name }} → /a_18432433023265451104.jpg {{ end }} ``` [global resource]: /getting-started/glossary/#global-resource +[logical path]: /getting-started/glossary/#logical-path [page resource]: /getting-started/glossary/#page-resource [remote resource]: /getting-started/glossary/#remote-resource diff --git a/content/en/methods/resource/Params.md b/content/en/methods/resource/Params.md index 275182c4691..ff6707f0b22 100644 --- a/content/en/methods/resource/Params.md +++ b/content/en/methods/resource/Params.md @@ -62,4 +62,4 @@ Hugo renders: See the [page resources] section for more information. -[page resources]: /content-management/page-resources +[page resources]: /content-management/page-resources/ diff --git a/content/en/methods/resource/Permalink.md b/content/en/methods/resource/Permalink.md index ab0ad41b0e4..e0fa9aa870a 100644 --- a/content/en/methods/resource/Permalink.md +++ b/content/en/methods/resource/Permalink.md @@ -7,7 +7,6 @@ action: related: - methods/resource/RelPermalink - methods/resource/Publish - - methods/resource/Key returnType: string signatures: [RESOURCE.Permalink] --- diff --git a/content/en/methods/resource/Process.md b/content/en/methods/resource/Process.md index 3c88492df44..550b06401e4 100644 --- a/content/en/methods/resource/Process.md +++ b/content/en/methods/resource/Process.md @@ -59,8 +59,8 @@ The `Process` method is also available as a filter, which is more effective if y example=true >}} -[`Crop`]: /methods/resource/crop -[`Fill`]: /methods/resource/fill -[`Fit`]: /methods/resource/fit -[`Resize`]: /methods/resource/resize -[`images.Process`]: /functions/images/process +[`Crop`]: /methods/resource/crop/ +[`Fill`]: /methods/resource/fill/ +[`Fit`]: /methods/resource/fit/ +[`Resize`]: /methods/resource/resize/ +[`images.Process`]: /functions/images/process/ diff --git a/content/en/methods/resource/Publish.md b/content/en/methods/resource/Publish.md index b090bfe5ab9..05344c65822 100644 --- a/content/en/methods/resource/Publish.md +++ b/content/en/methods/resource/Publish.md @@ -7,7 +7,6 @@ action: related: - methods/resource/Permalink - methods/resource/RelPermalink - - methods/resource/Key returnType: nil signatures: [RESOURCE.Publish] --- diff --git a/content/en/methods/resource/RelPermalink.md b/content/en/methods/resource/RelPermalink.md index 2b96c35d739..190cdf64ae1 100644 --- a/content/en/methods/resource/RelPermalink.md +++ b/content/en/methods/resource/RelPermalink.md @@ -7,7 +7,6 @@ action: related: - methods/resource/Permalink - methods/resource/Publish - - methods/resource/Key returnType: string signatures: [RESOURCE.RelPermalink] --- diff --git a/content/en/methods/resource/Title.md b/content/en/methods/resource/Title.md index e30f86d2e29..c620c2448c8 100644 --- a/content/en/methods/resource/Title.md +++ b/content/en/methods/resource/Title.md @@ -20,73 +20,65 @@ With a [global resource], the `Title` method returns the path to the resource, r ```text assets/ └── images/ - └── a.jpg + └── Sunrise in Bryce Canyon.jpg ``` ```go-html-template -{{ with resources.Get "images/a.jpg" }} - {{ .Title }} → images/a.jpg +{{ with resources.Get "images/Sunrise in Bryce Canyon.jpg" }} + {{ .Title }} → /images/Sunrise in Bryce Canyon.jpg {{ end }} ``` ## Page resource -With a [page resource], the `Title` method returns the path to the resource, relative to the page bundle. +With a [page resource], if you create an element in the `resources` array in front matter, the `Title` method returns the value of the `title` parameter. ```text content/ -├── posts/ -│ ├── post-1/ -│ │ ├── images/ -│ │ │ └── a.jpg -│ │ └── index.md -│ └── _index.md +├── example/ +│ ├── images/ +│ │ └── a.jpg +│ └── index.md └── _index.md ``` -```go-html-template -{{ with .Resources.Get "images/a.jpg" }} - {{ .Title }} → images/a.jpg -{{ end }} -``` - -If you create an element in the `resources` array in front matter, the `Title` method returns the value of the `title` parameter: - -{{< code-toggle file=content/posts/post-1.md fm=true >}} -title = 'Post 1' +{{< code-toggle file=content/example/index.md fm=true >}} +title = 'Example' [[resources]] src = 'images/a.jpg' -name = 'cat' -title = 'Felix the cat' -[resources.params] -temperament = 'malicious' +title = 'A beautiful sunrise in Bryce Canyon' {{< /code-toggle >}} ```go-html-template -{{ with .Resources.Get "cat" }} - {{ .Title }} → Felix the cat +{{ with .Resources.Get "images/a.jpg" }} + {{ .Title }} → A beautiful sunrise in Bryce Canyon {{ end }} ``` -If the page resource is a content file, the `Title` methods return the `title` field as defined in front matter. +If you do not create an element in the `resources` array in front matter, the `Title` method returns the file path, relative to the page bundle. ```text content/ -├── lessons/ -│ ├── lesson-1/ -│ │ ├── _objectives.md <-- resource type = page -│ │ └── index.md -│ └── _index.md +├── example/ +│ ├── images/ +│ │ └── Sunrise in Bryce Canyon.jpg +│ └── index.md └── _index.md ``` +```go-html-template +{{ with .Resources.Get "Sunrise in Bryce Canyon.jpg" }} + {{ .Title }} → images/Sunrise in Bryce Canyon.jpg +{{ end }} +``` + ## Remote resource With a [remote resource], the `Title` method returns a hashed file name. ```go-html-template {{ with resources.GetRemote "https://example.org/images/a.jpg" }} - {{ .Title }} → a_18432433023265451104.jpg + {{ .Title }} → /a_18432433023265451104.jpg {{ end }} ``` diff --git a/content/en/methods/resource/_common/_index.md b/content/en/methods/resource/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/methods/resource/_common/_index.md +++ b/content/en/methods/resource/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/methods/shortcode/Get.md b/content/en/methods/shortcode/Get.md index cd674614f12..8874c764961 100644 --- a/content/en/methods/shortcode/Get.md +++ b/content/en/methods/shortcode/Get.md @@ -1,6 +1,6 @@ --- title: Get -description: Returns the value of the given parameter. +description: Returns the value of the given argument. categories: [] keywords: [] action: @@ -8,44 +8,44 @@ action: - methods/shortcode/IsNamedParams - methods/shortcode/Params returnType: any - signatures: [SHORTCODE.Get PARAM] + signatures: [SHORTCODE.Get ARG] toc: true --- -Specify the parameter by position or by name. When calling a shortcode within markdown, use either positional or named parameters, but not both. +Specify the argument by position or by name. When calling a shortcode within Markdown, use either positional or named argument, but not both. {{% note %}} -Some shortcodes support positional parameters, some support named parameters, and others support both. Refer to the shortcode's documentation for usage details. +Some shortcodes support positional arguments, some support named arguments, and others support both. Refer to the shortcode's documentation for usage details. {{% /note %}} -## Positional parameters +## Positional arguments -This shortcode call uses positional parameters: +This shortcode call uses positional arguments: {{< code file=content/about.md lang=md >}} {{}} {{< /code >}} -To retrieve parameters by position: +To retrieve arguments by position: {{< code file=layouts/shortcodes/myshortcode.html >}} {{ printf "%s %s." (.Get 0) (.Get 1) }} → Hello world. {{< /code >}} -## Named parameters +## Named arguments -This shortcode call uses named parameters: +This shortcode call uses named arguments: {{< code file=content/about.md lang=md >}} {{}} {{< /code >}} -To retrieve parameters by name: +To retrieve arguments by name: {{< code file=layouts/shortcodes/myshortcode.html >}} {{ printf "%s %s." (.Get "greeting") (.Get "firstName") }} → Hello world. {{< /code >}} {{% note %}} -Parameter names are case-sensitive. +Argument names are case-sensitive. {{% /note %}} diff --git a/content/en/methods/shortcode/Inner.md b/content/en/methods/shortcode/Inner.md index de7c284cb2c..9271adb34a0 100644 --- a/content/en/methods/shortcode/Inner.md +++ b/content/en/methods/shortcode/Inner.md @@ -46,13 +46,13 @@ Is rendered to: ``` {{% note %}} -Content between opening and closing shortcode tags may include leading and/or trailing newlines, depending on placement within the markdown. Use the [`trim`] function as shown above to remove both carriage returns and newlines. +Content between opening and closing shortcode tags may include leading and/or trailing newlines, depending on placement within the Markdown. Use the [`trim`] function as shown above to remove both carriage returns and newlines. -[`trim`]: /functions/strings/trim +[`trim`]: /functions/strings/trim/ {{% /note %}} {{% note %}} -In the example above, the value returned by `Inner` is markdown, but it was rendered as plain text. Use either of the following approaches to render markdown to HTML. +In the example above, the value returned by `Inner` is Markdown, but it was rendered as plain text. Use either of the following approaches to render Markdown to HTML. {{% /note %}} @@ -60,7 +60,7 @@ In the example above, the value returned by `Inner` is markdown, but it was rend Let's modify the example above to pass the value returned by `Inner` through the [`RenderString`] method on the `Page` object: -[`RenderString`]: /methods/page/renderstring +[`RenderString`]: /methods/page/renderstring/ {{< code file=layouts/shortcodes/card.html >}}
@@ -86,8 +86,8 @@ Hugo renders this to: You can use the [`markdownify`] function instead of the `RenderString` method, but the latter is more flexible. See [details]. -[details]: /methods/page/renderstring -[`markdownify`]: /functions/transform/markdownify +[details]: /methods/page/renderstring/ +[`markdownify`]: /functions/transform/markdownify/ ## Use alternate notation @@ -99,9 +99,9 @@ We design the **best** widgets in the world. {{%/* /card */%}} {{< /code >}} -When you use the `{{%/* */%}}` notation, Hugo renders the entire shortcode as markdown, requiring the following changes. +When you use the `{{%/* */%}}` notation, Hugo renders the entire shortcode as Markdown, requiring the following changes. -First, configure the renderer to allow raw HTML within markdown: +First, configure the renderer to allow raw HTML within Markdown: {{< code-toggle file=hugo >}} [markup.goldmark.renderer] @@ -110,7 +110,7 @@ unsafe = true This configuration is not unsafe if _you_ control the content. Read more about Hugo's [security model]. -Second, because we are rendering the entire shortcode as markdown, we must adhere to the rules governing [indentation] and inclusion of [raw HTML blocks] as provided in the [CommonMark] specification. +Second, because we are rendering the entire shortcode as Markdown, we must adhere to the rules governing [indentation] and inclusion of [raw HTML blocks] as provided in the [CommonMark] specification. {{< code file=layouts/shortcodes/card.html >}}
@@ -150,4 +150,4 @@ When using the `{{%/* */%}}` notation, do not pass the value returned by `Inner` [commonmark]: https://commonmark.org/ [indentation]: https://spec.commonmark.org/0.30/#indented-code-blocks [raw html blocks]: https://spec.commonmark.org/0.30/#html-blocks -[security model]: /about/security-model/ +[security model]: /about/security/ diff --git a/content/en/methods/shortcode/InnerDeindent.md b/content/en/methods/shortcode/InnerDeindent.md index 136412bc75c..b5f5cf20614 100644 --- a/content/en/methods/shortcode/InnerDeindent.md +++ b/content/en/methods/shortcode/InnerDeindent.md @@ -14,7 +14,7 @@ Similar to the [`Inner`] method, `InnerDeindent` returns the content between ope This allows us to effectively bypass the rules governing [indentation] as provided in the [CommonMark] specification. -Consider this markdown, an unordered list with a small gallery of thumbnail images within each list item: +Consider this Markdown, an unordered list with a small gallery of thumbnail images within each list item: {{< code file=content/about.md lang=md >}} - Gallery one @@ -42,7 +42,7 @@ With this shortcode, calling `Inner` instead of `InnerDeindent`:
{{< /code >}} -Hugo renders the markdown to: +Hugo renders the Markdown to: ```html
    @@ -73,7 +73,7 @@ Although technically correct per the CommonMark specification, this is not what
{{< /code >}} -Hugo renders the markdown to: +Hugo renders the Markdown to: ```html
    @@ -96,4 +96,4 @@ Hugo renders the markdown to: [commonmark]: https://commonmark.org/ [indentation]: https://spec.commonmark.org/0.30/#indented-code-blocks -[`Inner`]: /methods/shortcode/inner +[`Inner`]: /methods/shortcode/inner/ diff --git a/content/en/methods/shortcode/IsNamedParams.md b/content/en/methods/shortcode/IsNamedParams.md index 83eeb2f74b7..a1d93ddac59 100644 --- a/content/en/methods/shortcode/IsNamedParams.md +++ b/content/en/methods/shortcode/IsNamedParams.md @@ -1,6 +1,6 @@ --- title: IsNamedParams -description: Reports whether the shortcode call uses named parameters. +description: Reports whether the shortcode call uses named arguments. categories: [] keywords: [] action: @@ -10,7 +10,7 @@ action: signatures: [SHORTCODE.IsNamedParams] --- -To support both positional and named parameters when calling a shortcode, use the `IsNamedParams` method to determine how the shortcode was called. +To support both positional and named arguments when calling a shortcode, use the `IsNamedParams` method to determine how the shortcode was called. With this shortcode template: diff --git a/content/en/methods/shortcode/Name.md b/content/en/methods/shortcode/Name.md index 18bddfe1f12..fcf92718f4e 100644 --- a/content/en/methods/shortcode/Name.md +++ b/content/en/methods/shortcode/Name.md @@ -11,19 +11,19 @@ action: signatures: [SHORTCODE.Name] --- -The `Name` method is useful for error reporting. For example, if your shortcode requires a "greeting" parameter: +The `Name` method is useful for error reporting. For example, if your shortcode requires a "greeting" argument: {{< code file=layouts/shortcodes/myshortcode.html >}} {{ $greeting := "" }} {{ with .Get "greeting" }} {{ $greeting = . }} {{ else }} - {{ errorf "The %q shortcode requires a 'greeting' parameter. See %s" .Name .Position }} + {{ errorf "The %q shortcode requires a 'greeting' argument. See %s" .Name .Position }} {{ end }} {{< /code >}} -In the absence of a "greeting" parameter, Hugo will throw an error message and fail the build: +In the absence of a "greeting" argument, Hugo will throw an error message and fail the build: ```text -ERROR The "myshortcode" shortcode requires a 'greeting' parameter. See "/home/user/project/content/about.md:11:1" +ERROR The "myshortcode" shortcode requires a 'greeting' argument. See "/home/user/project/content/about.md:11:1" ``` diff --git a/content/en/methods/shortcode/Ordinal.md b/content/en/methods/shortcode/Ordinal.md index 95494025886..6f3580d0fcf 100644 --- a/content/en/methods/shortcode/Ordinal.md +++ b/content/en/methods/shortcode/Ordinal.md @@ -32,7 +32,7 @@ This shortcode performs error checking, then renders an HTML `img` element with {{ errorf "The %q shortcode was unable to find %s. See %s" $.Name $src $.Position }} {{ end }} {{ else }} - {{ errorf "The %q shortcode requires a 'src' parameter. See %s" .Name .Position }} + {{ errorf "The %q shortcode requires a 'src' argument. See %s" .Name .Position }} {{ end }} {{< /code >}} @@ -46,5 +46,5 @@ Hugo renders the page to: {{% note %}} In the shortcode template above, the [`with`] statement is used to create conditional blocks. Remember that the `with` statement binds context (the dot) to its expression. Inside of a `with` block, preface shortcode method calls with a `$` to access the top level context passed into the template. -[`with`]: /functions/go-template/with +[`with`]: /functions/go-template/with/ {{% /note %}} diff --git a/content/en/methods/shortcode/Params.md b/content/en/methods/shortcode/Params.md index 63df768a62a..c0772e36a3f 100644 --- a/content/en/methods/shortcode/Params.md +++ b/content/en/methods/shortcode/Params.md @@ -1,6 +1,6 @@ --- title: Params -description: Returns a collection of the shortcode parameters. +description: Returns a collection of the shortcode arguments. categories: [] keywords: [] action: @@ -10,7 +10,7 @@ action: signatures: [SHORTCODE.Params] --- -When you call a shortcode using positional parameters, the `Params` method returns a slice. +When you call a shortcode using positional arguments, the `Params` method returns a slice. {{< code file=content/about.md lang=md >}} {{}} @@ -21,7 +21,7 @@ When you call a shortcode using positional parameters, the `Params` method retur {{ index .Params 1 }} → world {{< /code >}} -When you call a shortcode using named parameters, the `Params` method returns a map. +When you call a shortcode using named arguments, the `Params` method returns a map. {{< code file=content/about.md lang=md >}} {{}} diff --git a/content/en/methods/shortcode/Parent.md b/content/en/methods/shortcode/Parent.md index 50ae521daf7..c500af3759d 100644 --- a/content/en/methods/shortcode/Parent.md +++ b/content/en/methods/shortcode/Parent.md @@ -9,7 +9,7 @@ action: signatures: [SHORTCODE.Parent] --- -This is useful for inheritance of common shortcode parameters from the root. +This is useful for inheritance of common shortcode arguments from the root. In this contrived example, the "greeting" shortcode is the parent, and the "now" shortcode is child. @@ -45,6 +45,6 @@ Welcome. Today is {{}}. The "now" shortcode formats the current time using: -1. The `dateFormat` parameter passed to the "now" shortcode, if present -2. The `dateFormat` parameter passed to the "greeting" shortcode, if present +1. The `dateFormat` argument passed to the "now" shortcode, if present +2. The `dateFormat` argument passed to the "greeting" shortcode, if present 3. The default layout string defined at the top of the shortcode diff --git a/content/en/methods/shortcode/Position.md b/content/en/methods/shortcode/Position.md index 565a158bfe5..6f047c01b1a 100644 --- a/content/en/methods/shortcode/Position.md +++ b/content/en/methods/shortcode/Position.md @@ -11,21 +11,21 @@ action: signatures: [SHORTCODE.Position] --- -The `Position` method is useful for error reporting. For example, if your shortcode requires a "greeting" parameter: +The `Position` method is useful for error reporting. For example, if your shortcode requires a "greeting" argument: {{< code file=layouts/shortcodes/myshortcode.html >}} {{ $greeting := "" }} {{ with .Get "greeting" }} {{ $greeting = . }} {{ else }} - {{ errorf "The %q shortcode requires a 'greeting' parameter. See %s" .Name .Position }} + {{ errorf "The %q shortcode requires a 'greeting' argument. See %s" .Name .Position }} {{ end }} {{< /code >}} -In the absence of a "greeting" parameter, Hugo will throw an error message and fail the build: +In the absence of a "greeting" argument, Hugo will throw an error message and fail the build: ```text -ERROR The "myshortcode" shortcode requires a 'greeting' parameter. See "/home/user/project/content/about.md:11:1" +ERROR The "myshortcode" shortcode requires a 'greeting' argument. See "/home/user/project/content/about.md:11:1" ``` {{% note %}} diff --git a/content/en/methods/shortcode/Scratch.md b/content/en/methods/shortcode/Scratch.md index 3ab195a3f03..fcfc99d5386 100644 --- a/content/en/methods/shortcode/Scratch.md +++ b/content/en/methods/shortcode/Scratch.md @@ -1,6 +1,6 @@ --- title: Scratch -description: Creates a "scratch pad" scoped to the shortcode to store and manipulate data. +description: Returns a "scratch pad" scoped to the shortcode to store and manipulate data. categories: [] keywords: [] action: @@ -16,7 +16,7 @@ The `Scratch` method within a shortcode creates a [scratch pad] to store and man With the introduction of the [`newScratch`] function, and the ability to [assign values to template variables] after initialization, the `Scratch` method within a shortcode is obsolete. [assign values to template variables]: https://go.dev/doc/go1.11#text/template -[`newScratch`]: functions/collections/newscratch +[`newScratch`]: /functions/collections/newscratch/ {{% /note %}} [scratch pad]: /getting-started/glossary/#scratch-pad diff --git a/content/en/methods/shortcode/Site.md b/content/en/methods/shortcode/Site.md index fa2d274deba..af2a755ee80 100644 --- a/content/en/methods/shortcode/Site.md +++ b/content/en/methods/shortcode/Site.md @@ -12,7 +12,7 @@ action: See [Site methods]. -[Site methods]: /methods/site +[Site methods]: /methods/site/ ```go-html-template {{ .Site.Title }} diff --git a/content/en/methods/site/AllPages.md b/content/en/methods/site/AllPages.md index 8df6348f9b5..e02c2cbbc15 100644 --- a/content/en/methods/site/AllPages.md +++ b/content/en/methods/site/AllPages.md @@ -16,7 +16,7 @@ This method returns all page [kinds] in all languages. That includes the home pa In most cases you should use the [`RegularPages`] method instead. -[`RegularPages`]: methods/site/regularpages +[`RegularPages`]: /methods/site/regularpages/ [kinds]: /getting-started/glossary/#page-kind ```go-html-template diff --git a/content/en/methods/site/BaseURL.md b/content/en/methods/site/BaseURL.md index f9c43bca357..ea965a56889 100644 --- a/content/en/methods/site/BaseURL.md +++ b/content/en/methods/site/BaseURL.md @@ -30,8 +30,8 @@ There is almost never a good reason to use this method in your templates. Its us Use the [`absURL`], [`absLangURL`], [`relURL`], or [`relLangURL`] functions instead. -[`absURL`]: /functions/urls/absURL -[`absLangURL`]: /functions/urls/absLangURL -[`relURL`]: /functions/urls/relURL -[`relLangURL`]: /functions/urls/relLangURL +[`absURL`]: /functions/urls/absURL/ +[`absLangURL`]: /functions/urls/absLangURL/ +[`relURL`]: /functions/urls/relURL/ +[`relLangURL`]: /functions/urls/relLangURL/ {{% /note %}} diff --git a/content/en/methods/site/Data.md b/content/en/methods/site/Data.md index b78caddec5e..65cdadd0147 100644 --- a/content/en/methods/site/Data.md +++ b/content/en/methods/site/Data.md @@ -20,7 +20,7 @@ Use the `Data` method on a `Site` object to access data within the data director {{% note %}} Although Hugo can unmarshal CSV files with the [`transform.Unmarshal`] function, do not place CSV files in the data directory. You cannot access data within CSV files using this method. -[`transform.Unmarshal`]: /functions/transform/unmarshal +[`transform.Unmarshal`]: /functions/transform/unmarshal/ {{% /note %}} Consider this data directory: @@ -101,8 +101,14 @@ To find a fiction book by ISBN: {{ end }} ``` -In the template examples above, each of the keys is a valid identifier. For example, none of the keys contains a hyphen. To access a key that is not a valid identifier, use the [`index`] function: +In the template examples above, each of the keys is a valid [identifier]. For example, none of the keys contains a hyphen. To access a key that is not a valid identifier, use the [`index`] function. For example: -[`index`]: /functions/collections/indexfunction +[identifier]: /getting-started/glossary/#identifier + +```go-html-template +{{ index .Site.Data.books "historical-fiction" }} +``` + +[`index`]: /functions/collections/indexfunction/ [chaining]: /getting-started/glossary/#chain [identifiers]: /getting-started/glossary/#identifier diff --git a/content/en/methods/site/DisqusShortname.md b/content/en/methods/site/DisqusShortname.md index 2d444748504..0e900ac4ed5 100644 --- a/content/en/methods/site/DisqusShortname.md +++ b/content/en/methods/site/DisqusShortname.md @@ -13,5 +13,5 @@ expiryDate: 2024-10-30 # deprecated 2023-10-30 {{% deprecated-in 0.120.0 %}} Use [`Site.Config.Services.Disqus.Shortname`] instead. -[`Site.Config.Services.Disqus.Shortname`]: /methods/site/config +[`Site.Config.Services.Disqus.Shortname`]: /methods/site/config/ {{% /deprecated-in %}} diff --git a/content/en/methods/site/GetPage.md b/content/en/methods/site/GetPage.md index b7d4b8f32f5..3505e582abd 100644 --- a/content/en/methods/site/GetPage.md +++ b/content/en/methods/site/GetPage.md @@ -13,7 +13,7 @@ toc: true The `GetPage` method is also available on `Page` objects, allowing you to specify a path relative to the current page. See [details]. -[details]: /methods/page/getpage +[details]: /methods/page/getpage/ When using the `GetPage` method on a `Site` object, specify a path relative to the content directory. diff --git a/content/en/methods/site/GoogleAnalytics.md b/content/en/methods/site/GoogleAnalytics.md index 50f479b492d..c5897445212 100644 --- a/content/en/methods/site/GoogleAnalytics.md +++ b/content/en/methods/site/GoogleAnalytics.md @@ -13,5 +13,5 @@ expiryDate: 2024-10-30 # deprecated 2023-10-30 {{% deprecated-in 0.120.0 %}} Use [`Site.Config.Services.GoogleAnalytics.ID`] instead. -[`Site.Config.Services.GoogleAnalytics.ID`]: /methods/site/config +[`Site.Config.Services.GoogleAnalytics.ID`]: /methods/site/config/ {{% /deprecated-in %}} diff --git a/content/en/methods/site/IsDevelopment.md b/content/en/methods/site/IsDevelopment.md index c009ba0de95..6f443316ba9 100644 --- a/content/en/methods/site/IsDevelopment.md +++ b/content/en/methods/site/IsDevelopment.md @@ -13,7 +13,7 @@ expiryDate: 2024-10-30 # deprecated 2023-10-30 {{% deprecated-in 0.120.0 %}} Use [`hugo.IsDevelopment`] instead. -[`hugo.IsDevelopment`]: /functions/hugo/isdevelopment +[`hugo.IsDevelopment`]: /functions/hugo/isdevelopment/ {{% /deprecated-in %}} ```go-html-template diff --git a/content/en/methods/site/IsMultiLingual.md b/content/en/methods/site/IsMultiLingual.md index 61cc5e46240..a14283787b1 100644 --- a/content/en/methods/site/IsMultiLingual.md +++ b/content/en/methods/site/IsMultiLingual.md @@ -1,6 +1,6 @@ --- title: IsMultiLingual -description: Reports whether the site is multilingual. +description: Reports whether there are two or more configured languages. categories: [] keywords: [] action: @@ -9,6 +9,12 @@ action: signatures: [SITE.IsMultiLingual] --- +{{% deprecated-in 0.124.0 %}} +Use [`hugo.IsMultilingual`] instead. + +[`hugo.IsMultilingual`]: /functions/hugo/ismultilingual/ +{{% /deprecated-in %}} + Site configuration: {{< code-toggle file=hugo >}} diff --git a/content/en/methods/site/IsServer.md b/content/en/methods/site/IsServer.md index 3d5ce41b56d..a688c553a5b 100644 --- a/content/en/methods/site/IsServer.md +++ b/content/en/methods/site/IsServer.md @@ -13,7 +13,7 @@ expiryDate: 2024-10-30 # deprecated 2023-10-30 {{% deprecated-in 0.120.0 %}} Use [`hugo.IsServer`] instead. -[`hugo.IsServer`]: /functions/hugo/isserver +[`hugo.IsServer`]: /functions/hugo/isserver/ {{% /deprecated-in %}} ```go-html-template diff --git a/content/en/methods/site/Language.md b/content/en/methods/site/Language.md index 1babc099bbd..7179038e427 100644 --- a/content/en/methods/site/Language.md +++ b/content/en/methods/site/Language.md @@ -35,7 +35,7 @@ Lang ``` LanguageCode -: (`string`) The language code from the site configuration. +: (`string`) The language code from the site configuration. Falls back to `Lang` if not defined. ```go-html-template {{ .Site.Language.LanguageCode }} → de-DE @@ -68,16 +68,10 @@ Some of the methods above are commonly used in a base template as attributes for ```go-html-template +
    {{ debug.Dump .Site.Languages }}
    ``` With this site configuration: diff --git a/content/en/methods/site/LastChange.md b/content/en/methods/site/LastChange.md index aceee691d02..2a8c3e49152 100644 --- a/content/en/methods/site/LastChange.md +++ b/content/en/methods/site/LastChange.md @@ -9,13 +9,19 @@ action: signatures: [SITE.LastChange] --- +{{% deprecated-in 0.123.0 %}} +Use [`.Site.Lastmod`] instead. + +[`.Site.Lastmod`]: /methods/site/lastmod/ +{{% /deprecated-in %}} + The `LastChange` method on a `Site` object returns a [`time.Time`] value. Use this with time [functions] and [methods]. For example: ```go-html-template -{{ .Site.LastChange | time.Format ":date_long" }} → October 16, 2023 +{{ .Site.LastChange | time.Format ":date_long" }} → January 31, 2024 ``` [`time.Time`]: https://pkg.go.dev/time#Time -[functions]: /functions/time -[methods]: /methods/time +[functions]: /functions/time/ +[methods]: /methods/time/ diff --git a/content/en/methods/site/Lastmod.md b/content/en/methods/site/Lastmod.md new file mode 100644 index 00000000000..08148195637 --- /dev/null +++ b/content/en/methods/site/Lastmod.md @@ -0,0 +1,23 @@ +--- +title: Lastmod +description: Returns the last modification date of site content. +categories: [] +keywords: [] +action: + related: [] + returnType: time.Time + signatures: [SITE.Lastmod] +--- + +{{< new-in 0.123.0 >}} + +The `Lastmod` method on a `Site` object returns a [`time.Time`] value. Use this with time [functions] and [methods]. For example: + +```go-html-template +{{ .Site.Lastmod | time.Format ":date_long" }} → January 31, 2024 + +``` + +[`time.Time`]: https://pkg.go.dev/time#Time +[functions]: /functions/time/ +[methods]: /methods/time/ diff --git a/content/en/methods/site/Menus.md b/content/en/methods/site/Menus.md index c204fe97b2d..98ce4e879de 100644 --- a/content/en/methods/site/Menus.md +++ b/content/en/methods/site/Menus.md @@ -88,7 +88,7 @@ You will typically render a menu using a partial template. As the active menu en The example above is simplistic. Please see the [menu templates] section for more information. -[menu templates]: /templates/menu-templates +[menu templates]: /templates/menu-templates/ -[`partial`]: /functions/partials/include -[`partialCached`]: /functions/partials/includecached +[`partial`]: /functions/partials/include/ +[`partialCached`]: /functions/partials/includecached/ diff --git a/content/en/methods/site/Pages.md b/content/en/methods/site/Pages.md index 583e98c11c9..ac6e13c4a14 100644 --- a/content/en/methods/site/Pages.md +++ b/content/en/methods/site/Pages.md @@ -16,7 +16,7 @@ This method returns all page [kinds] in the current language. That includes the In most cases you should use the [`RegularPages`] method instead. -[`RegularPages`]: methods/site/regularpages +[`RegularPages`]: /methods/site/regularpages/ [kinds]: /getting-started/glossary/#page-kind ```go-html-template diff --git a/content/en/methods/site/Params.md b/content/en/methods/site/Params.md index 518d93bf3e5..95e016b81e6 100644 --- a/content/en/methods/site/Params.md +++ b/content/en/methods/site/Params.md @@ -33,7 +33,7 @@ Access the custom parameters by [chaining] the [identifiers]: {{ .Site.Params.author.name }} → John Smith {{ $layout := .Site.Params.layouts.rfc_1123 }} -{{ .Site.LastChange.Format $layout }} → Tue, 17 Oct 2023 13:21:02 PDT +{{ .Site.Lastmod.Format $layout }} → Tue, 17 Oct 2023 13:21:02 PDT ``` In the template example above, each of the keys is a valid identifier. For example, none of the keys contains a hyphen. To access a key that is not a valid identifier, use the [`index`] function: @@ -42,6 +42,6 @@ In the template example above, each of the keys is a valid identifier. For examp {{ index .Site.Params "copyright-year" }} → 2023 ``` -[`index`]: /functions/collections/indexfunction +[`index`]: /functions/collections/indexfunction/ [chaining]: /getting-started/glossary/#chain [identifiers]: /getting-started/glossary/#identifier diff --git a/content/en/methods/site/Sites.md b/content/en/methods/site/Sites.md index f7bafd3ed2c..ac287d3b4df 100644 --- a/content/en/methods/site/Sites.md +++ b/content/en/methods/site/Sites.md @@ -1,6 +1,6 @@ --- title: Sites -description: Returns a collection of all Site objects, one for each language, ordered by language weight. +description: Returns a collection of all Site objects, one for each language, ordered by default content language then by language weight. categories: [] keywords: [] action: @@ -49,10 +49,10 @@ Produces a list of links to each home page:
``` -To render a link to home page of the primary (first) language: +To render a link to the home page of the site corresponding to the default content language: ```go-html-template -{{ with .Site.Sites.First }} +{{ with .Site.Sites.Default }} {{ .Title }} {{ end }} ``` diff --git a/content/en/methods/site/Taxonomies.md b/content/en/methods/site/Taxonomies.md index 72bfc75d56c..219fe188b11 100644 --- a/content/en/methods/site/Taxonomies.md +++ b/content/en/methods/site/Taxonomies.md @@ -95,5 +95,5 @@ Hugo's taxonomy system is powerful, allowing you to classify content and create Please see the [taxonomies] section for a complete explanation and examples. -[taxonomies]: content-management/taxonomies/ +[taxonomies]: /content-management/taxonomies/ {{% /note %}} diff --git a/content/en/methods/taxonomy/Alphabetical.md b/content/en/methods/taxonomy/Alphabetical.md index 7845dbf3d5e..ea90cfdf9df 100644 --- a/content/en/methods/taxonomy/Alphabetical.md +++ b/content/en/methods/taxonomy/Alphabetical.md @@ -34,7 +34,7 @@ To reverse the sort order: To inspect the data structure: ```go-html-template -
{{ jsonify (dict "indent" "  ") $taxonomyObject.Alphabetical }}
+
{{ debug.Dump $taxonomyObject.Alphabetical }}
``` {{% include "methods/taxonomy/_common/ordered-taxonomy-element-methods.md" %}} diff --git a/content/en/methods/taxonomy/ByCount.md b/content/en/methods/taxonomy/ByCount.md index 40f58420a5b..68143ccff2f 100644 --- a/content/en/methods/taxonomy/ByCount.md +++ b/content/en/methods/taxonomy/ByCount.md @@ -34,7 +34,7 @@ To reverse the sort order: To inspect the data structure: ```go-html-template -
{{ jsonify (dict "indent" "  ") $taxonomyObject.ByCount }}
+
{{ debug.Dump $taxonomyObject.ByCount }}
``` {{% include "methods/taxonomy/_common/ordered-taxonomy-element-methods.md" %}} diff --git a/content/en/methods/taxonomy/Get.md b/content/en/methods/taxonomy/Get.md index 3bac86f08a3..79d25b704bd 100644 --- a/content/en/methods/taxonomy/Get.md +++ b/content/en/methods/taxonomy/Get.md @@ -43,7 +43,7 @@ You could also use the [`index`] function, but the syntax is more verbose: To inspect the data structure: ```go-html-template -
{{ jsonify (dict "indent" "  ") $weightedPages }}
+
{{ debug.Dump $weightedPages }}
``` ## Example @@ -66,7 +66,7 @@ Hugo renders: ``` [chaining]: /getting-started/glossary/#chain -[`index`]: /functions/collections/indexfunction +[`index`]: /functions/collections/indexfunction/ [identifier]: /getting-started/glossary/#identifier [term]: /getting-started/glossary/#term [weighted pages]: /getting-started/glossary/#weighted-page diff --git a/content/en/methods/taxonomy/Page.md b/content/en/methods/taxonomy/Page.md new file mode 100644 index 00000000000..e148ac5c70c --- /dev/null +++ b/content/en/methods/taxonomy/Page.md @@ -0,0 +1,26 @@ +--- +title: Page +description: Returns the taxonomy page or nil if the taxonomy has no terms. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Page + signatures: [TAXONOMY.Page] +--- + +{{< new-in 0.125.0 >}} + +This `TAXONOMY` method returns nil if the taxonomy has no terms, so you must code defensively: + +```go-html-template +{{ with .Site.Taxonomies.tags.Page }} + {{ .LinkTitle }} +{{ end }} +``` + +This is rendered to: + +```html +Tags +``` diff --git a/content/en/methods/taxonomy/_common/_index.md b/content/en/methods/taxonomy/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/methods/taxonomy/_common/_index.md +++ b/content/en/methods/taxonomy/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md b/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md index 4c4fc42c91c..6bf86cd85a8 100644 --- a/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md +++ b/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md @@ -41,7 +41,7 @@ To capture the "genres" taxonomy object when rendering its page with a taxonomy To inspect the data structure: ```go-html-template -
{{ jsonify (dict "indent" "  ") $taxonomyObject }}
+
{{ debug.Dump $taxonomyObject }}
``` Although the [`Alphabetical`] and [`ByCount`] methods provide a better data structure for ranging through the taxonomy, you can render the weighted pages by term directly from the `Taxonomy` object: @@ -60,9 +60,9 @@ Although the [`Alphabetical`] and [`ByCount`] methods provide a better data stru In the example above, the first anchor element is a link to the term page. -[`Alphabetical`]: /methods/taxonomy/alphabetical -[`ByCount`]: /methods/taxonomy/bycount +[`Alphabetical`]: /methods/taxonomy/alphabetical/ +[`ByCount`]: /methods/taxonomy/bycount/ -[`data`]: /methods/page/data +[`data`]: /methods/page/data/ [`terms`]: /methods/page/data/#in-a-taxonomy-template -[`taxonomies`]: /methods/site/taxonomies +[`taxonomies`]: /methods/site/taxonomies/ diff --git a/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md b/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md index 9c94729ba7e..7201ad3188a 100644 --- a/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md +++ b/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md @@ -21,5 +21,5 @@ Term WeightedPages : (`page.WeightedPages`) Returns a slice of weighted pages to which the term is assigned, sorted by [taxonomic weight]. The `Pages` method above is more flexible, allowing you to sort and group. -[methods]: /methods/pages +[methods]: /methods/pages/ [taxonomic weight]: /getting-started/glossary/#taxonomic-weight diff --git a/content/en/methods/time/Format.md b/content/en/methods/time/Format.md index fc3e2635cec..d526b7b64f8 100644 --- a/content/en/methods/time/Format.md +++ b/content/en/methods/time/Format.md @@ -27,7 +27,7 @@ aliases: [/methods/time/format] To [localize] the return value, use the [`time.Format`] function instead. [localize]: /getting-started/glossary/#localization -[`time.Format`]: /functions/time/format +[`time.Format`]: /functions/time/format/ {{% /note %}} Use the `Format` method with any `time.Time` value, including the four predefined front matter dates: @@ -44,7 +44,7 @@ Use the `Format` method with any `time.Time` value, including the four predefine {{% note %}} Use the [`time.Format`] function to format string representations of dates, and to format raw TOML dates that exclude time and time zone offset. -[`time.Format`]: /functions/time/format +[`time.Format`]: /functions/time/format/ {{% /note %}} ## Layout string diff --git a/content/en/methods/time/Round.md b/content/en/methods/time/Round.md new file mode 100644 index 00000000000..988c56ba94e --- /dev/null +++ b/content/en/methods/time/Round.md @@ -0,0 +1,26 @@ +--- +title: Round +description: Returns the result of rounding TIME to the nearest multiple of DURATION since January 1, 0001, 00:00:00 UTC. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + - functions/time/ParseDuration + - methods/time/Truncate + returnType: time.Time + signatures: [TIME.Round DURATION] +--- + +The rounding behavior for halfway values is to round up. + +The `Round` method operates on TIME as an absolute duration since the [zero time]; it does not operate on the presentation form of the time. If DURATION is a multiple of one hour, `Round` may return a time with a non-zero minute, depending on the time zone. + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $d := time.ParseDuration "1h"}} + +{{ ($t.Round $d).Format "2006-01-02T15:04:05-00:00" }} → 2023-01-28T00:00:00-00:00 +``` + +[zero time]: /getting-started/glossary/#zero-time diff --git a/content/en/methods/time/Truncate.md b/content/en/methods/time/Truncate.md new file mode 100644 index 00000000000..da6e0b26bad --- /dev/null +++ b/content/en/methods/time/Truncate.md @@ -0,0 +1,24 @@ +--- +title: Truncate +description: Returns the result of rounding TIME down to a multiple of DURATION since January 1, 0001, 00:00:00 UTC. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + - functions/time/ParseDuration + - methods/time/Round + returnType: time.Time + signatures: [TIME.Truncate DURATION] +--- + +The `Truncate` method operates on TIME as an absolute duration since the [zero time]; it does not operate on the presentation form of the time. If DURATION is a multiple of one hour, `Truncate` may return a time with a non-zero minute, depending on the time zone. + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $d := time.ParseDuration "1h"}} + +{{ ($t.Truncate $d).Format "2006-01-02T15:04:05-00:00" }} → 2023-01-27T23:00:00-00:00 +``` + +[zero time]: /getting-started/glossary/#zero-time diff --git a/content/en/methods/time/YearDay.md b/content/en/methods/time/YearDay.md index 40d7d6aabc5..f380cdffe9e 100644 --- a/content/en/methods/time/YearDay.md +++ b/content/en/methods/time/YearDay.md @@ -1,6 +1,6 @@ --- title: YearDay -description: Returns the day of the year of the given time.Time value, in the range [1, 365] for non-leap years, and [1,366] in leap years. +description: Returns the day of the year of the given time.Time value, in the range [1, 365] for non-leap years, and [1, 366] in leap years. categories: [] keywords: [] action: diff --git a/content/en/news/_index.md b/content/en/news/_index.md index e37c33a3cea..a1959bd1d49 100644 --- a/content/en/news/_index.md +++ b/content/en/news/_index.md @@ -1,4 +1,7 @@ --- -title: Hugo News +title: News +outputs: + - html + - rss aliases: [/release-notes/] --- diff --git a/content/en/quick-reference/_index.md b/content/en/quick-reference/_index.md index 492cfa09b76..b5f434e2d77 100644 --- a/content/en/quick-reference/_index.md +++ b/content/en/quick-reference/_index.md @@ -1,12 +1,12 @@ --- title: Quick reference guides -linkTitle: Overview +linkTitle: In this section description: Quick reference guides to Hugo's features, functions, and methods. categories: [] keywords: [] menu: docs: - identifier: quick-reference-overview + identifier: quick-reference-in-this-section parent: quick-reference weight: 10 weight: 10 diff --git a/content/en/quick-reference/emojis.md b/content/en/quick-reference/emojis.md index e6b1ed415f1..8ae01098be4 100644 --- a/content/en/quick-reference/emojis.md +++ b/content/en/quick-reference/emojis.md @@ -1,6 +1,6 @@ --- title: Emojis -description: Include emoji shortcodes in your markdown or templates. +description: Include emoji shortcodes in your Markdown or templates. categories: [quick reference] keywords: [emoji] menu: @@ -11,13 +11,13 @@ weight: 20 toc: true --- -Configure Hugo to enable emoji processing in markdown: +Configure Hugo to enable emoji processing in Markdown: {{< code-toggle file=hugo >}} enableEmoji = true {{< /code-toggle >}} -With emoji processing enabled, this markdown: +With emoji processing enabled, this Markdown: ```md Hello! :wave: @@ -37,8 +37,8 @@ To process an emoji shortcode from within a template, use the [`emojify`] functi {{ "Hello! :wave:" | .RenderString }} ``` -[`emojify`]: /functions/transform/emojify -[`RenderString`]: /methods/page/renderstring +[`emojify`]: /functions/transform/emojify/ +[`RenderString`]: /methods/page/renderstring/ ## Introduction diff --git a/content/en/quick-reference/page-collections.md b/content/en/quick-reference/page-collections.md index 795eb494dc1..eca65a93e08 100644 --- a/content/en/quick-reference/page-collections.md +++ b/content/en/quick-reference/page-collections.md @@ -31,7 +31,7 @@ Use these `Site` methods when rendering lists on any page. Use the [`where`] function to filter page collections. -[`where`]: /functions/collections/where +[`where`]: /functions/collections/where/ ## Sort diff --git a/content/en/variables/_common/_index.md b/content/en/render-hooks/_common/_index.md similarity index 79% rename from content/en/variables/_common/_index.md rename to content/en/render-hooks/_common/_index.md index 47d5812fba5..4328d4d145b 100644 --- a/content/en/variables/_common/_index.md +++ b/content/en/render-hooks/_common/_index.md @@ -7,7 +7,7 @@ cascade: --- diff --git a/content/en/render-hooks/_common/pageinner.md b/content/en/render-hooks/_common/pageinner.md new file mode 100644 index 00000000000..de1316cbab7 --- /dev/null +++ b/content/en/render-hooks/_common/pageinner.md @@ -0,0 +1,42 @@ +--- +# Do not remove front matter. +--- + +## PageInner details + +{{< new-in 0.125.0 >}} + +The primary use case for `PageInner` is to resolve links and [page resources] relative to an included `Page`. For example, create an "include" shortcode to compose a page from multiple content files, while preserving a global context for footnotes and the table of contents: + +{{< code file=layouts/shortcodes/include.html >}} +{{ with site.GetPage (.Get 0) }} + {{ .RenderShortcodes }} +{{ end }} +{{< /code >}} + +Then call the shortcode in your Markdown: + +{{< code file=content/posts/p1.md >}} +{{%/* include "/posts/p2" */%}} +{{< /code >}} + +Any render hook triggered while rendering `/posts/p2` will get: + +- `/posts/p1` when calling `Page` +- `/posts/p2` when calling `PageInner` + +`PageInner` falls back to the value of `Page` if not relevant, and always returns a value. + +{{% note %}} +The `PageInner` method is only relevant for shortcodes that invoke the [`RenderShortcodes`] method, and you must call the shortcode using the `{{%/*..*/%}}` notation. + +[`RenderShortcodes`]: /methods/page/rendershortcodes/ +{{% /note %}} + +As a practical example, Hugo's embedded link and image render hooks use the `PageInner` method to resolve markdown link and image destinations. See the source code for each: + +- [Embedded link render hook]({{% eturl render-link %}}) +- [Embedded image render hook]({{% eturl render-image %}}) + +[`RenderShortcodes`]: /methods/page/rendershortcodes/ +[page resources]: /getting-started/glossary/#page-resource diff --git a/content/en/render-hooks/_index.md b/content/en/render-hooks/_index.md new file mode 100644 index 00000000000..8cf72c4e821 --- /dev/null +++ b/content/en/render-hooks/_index.md @@ -0,0 +1,17 @@ +--- +title: Render hooks +linkTitle: In this section +description: Create render hooks to override the rendering of Markdown to HTML. +categories: [] +keywords: [] +menu: + docs: + identifier: render-hooks-in-this-section + parent: render-hooks + weight: 10 +weight: 10 +showSectionMenu: false +aliases: [/templates/render-hooks/] +--- + +Create render hooks to override the rendering of Markdown to HTML. diff --git a/content/en/render-hooks/code-blocks.md b/content/en/render-hooks/code-blocks.md new file mode 100755 index 00000000000..0c11c7864bb --- /dev/null +++ b/content/en/render-hooks/code-blocks.md @@ -0,0 +1,152 @@ +--- +title: Code block render hooks +linkTitle: Code blocks +description: Create a code block render hook to override the rendering of Markdown code blocks to HTML. +categories: [render hooks] +keywords: [] +menu: + docs: + parent: render-hooks + weight: 30 +weight: 30 +toc: true +--- + +## Markdown + +This Markdown example contains a fenced code block: + +{{< code file=content/example.md lang=text >}} +```bash {class="my-class" id="my-codeblock" lineNos=inline tabWidth=2} +declare a=1 +echo "$a" +exit +``` +{{< /code >}} + +A fenced code block consists of: + +- A leading [code fence] +- An optional [info string] +- A code sample +- A trailing code fence + +[code fence]: https://spec.commonmark.org/0.31.2/#code-fence +[info string]: https://spec.commonmark.org/0.31.2/#info-string + +In the previous example, the info string contains: + +- The language of the code sample (the first word) +- An optional space-delimited or comma-delimited list of attributes (everything within braces) + +The attributes in the info string can be generic attributes or highlighting options. + +In the example above, the _generic attributes_ are `class` and `id`. In the absence of special handling within a code block render hook, Hugo adds each generic attribute to the HTML element surrounding the rendered code block. Consistent with its content security model, Hugo removes HTML event attributes such as `onclick` and `onmouseover`. Generic attributes are typically global HTML attributes, but you may include custom attributes as well. + +In the example above, the _highlighting options_ are `lineNos` and `tabWidth`. Hugo uses the [Chroma] syntax highlighter to render the code sample. You can control the appearance of the rendered code by specifying one or more [highlighting options]. + +[Chroma]: https://github.com/alecthomas/chroma/ +[highlighting options]: /functions/transform/highlight/#options + +{{% note %}} +Although `style` is a global HTML attribute, when used in an info string it is a highlighting option. +{{% /note %}} + +## Context + +Code block render hook templates receive the following [context]: + +[context]: /getting-started/glossary/#context + +###### Attributes + +(`map`) The generic attributes from the info string. + +###### Inner + +(`string`) The content between the leading and trailing code fences, excluding the info string. + +###### Options + +(`map`) The highlighting options from the info string. + +###### Ordinal + +(`int`) The zero-based ordinal of the code block on the page. + +###### Page + +(`page`) A reference to the current page. + +###### PageInner + +{{< new-in 0.125.0 >}} + +(`page`) A reference to a page nested via the [`RenderShortcodes`] method. [See details](#pageinner-details). + +[`RenderShortcodes`]: /methods/page/rendershortcodes + +###### Position + +(`text.Position`) The position of the code block within the page content. + +###### Type + +(`string`) The first word of the info string, typically the code language. + +## Examples + +In its default configuration, Hugo renders fenced code blocks by passing the code sample through the Chroma syntax highlighter and wrapping the result. To create a render hook that does the same thing: + +[CommonMark specification]: https://spec.commonmark.org/current/ + +{{< code file=layouts/_default/_markup/render-codeblock.html copy=true >}} +{{ $result := transform.HighlightCodeBlock . }} +{{ $result.Wrapped }} +{{< /code >}} + +Although you can use one template with conditional logic to control the behavior on a per-language basis, you can also create language-specific templates. + +```text +layouts/ +└── _default/ + └── _markup/ + ├── render-codeblock-mermaid.html + ├── render-codeblock-python.html + └── render-codeblock.html +``` + +For example, to create a code block render hook to render [Mermaid] diagrams: + +[Mermaid]: https://mermaid.js.org/ + +{{< code file=layouts/_default/_markup/render-codeblock-mermaid.html copy=true >}} +
+  {{- .Inner | safeHTML }}
+
+{{ .Page.Store.Set "hasMermaid" true }} +{{< /code >}} + +Then include this snippet at the bottom of the your base template: + +{{< code file=layouts/_default/baseof.html copy=true >}} +{{ if .Store.Get "hasMermaid" }} + +{{ end }} +{{< /code >}} + +See the [diagrams] page for details. + +[diagrams]: /content-management/diagrams/#mermaid-diagrams + +## Embedded + +Hugo includes an [embedded code block render hook] to render [GoAT diagrams]. + +[embedded code block render hook]: {{% eturl render-codeblock-goat %}} +[GoAT diagrams]: /content-management/diagrams/#goat-diagrams-ascii + +{{% include "/render-hooks/_common/pageinner.md" %}} diff --git a/content/en/render-hooks/headings.md b/content/en/render-hooks/headings.md new file mode 100755 index 00000000000..c48bb11e183 --- /dev/null +++ b/content/en/render-hooks/headings.md @@ -0,0 +1,79 @@ +--- +title: Heading render hooks +linkTitle: Headings +description: Create a heading render hook to override the rendering of Markdown headings to HTML. +categories: [render hooks] +keywords: [] +menu: + docs: + parent: render-hooks + weight: 40 +weight: 40 +toc: true +--- + +## Context + +Heading render hook templates receive the following [context]: + +[context]: /getting-started/glossary/#context + +###### Anchor + +(`string`) The `id` attribute of the heading element. + +###### Attributes + +(`map`) The Markdown attributes, available if you configure your site as follows: + +{{< code-toggle file=hugo >}} +[markup.goldmark.parser.attribute] +title = true +{{< /code-toggle >}} + +###### Level + +(`int`) The heading level, 1 through 6. + +###### Page + +(`page`) A reference to the current page. + +###### PageInner + +{{< new-in 0.125.0 >}} + +(`page`) A reference to a page nested via the [`RenderShortcodes`] method. [See details](#pageinner-details). + +[`RenderShortcodes`]: /methods/page/rendershortcodes + +###### PlainText + +(`string`) The heading text as plain text. + +###### Text + +(`string`) The heading text. + +## Examples + +In its default configuration, Hugo renders Markdown headings according to the [CommonMark specification] with the addition of automatic `id` attributes. To create a render hook that does the same thing: + +[CommonMark specification]: https://spec.commonmark.org/current/ + +{{< code file=layouts/_default/_markup/render-heading.html copy=true >}} + + {{- .Text | safeHTML -}} + +{{< /code >}} + +To add an anchor link to the right of each heading: + +{{< code file=layouts/_default/_markup/render-heading.html copy=true >}} + + {{ .Text | safeHTML }} + # + +{{< /code >}} + +{{% include "/render-hooks/_common/pageinner.md" %}} diff --git a/content/en/render-hooks/images.md b/content/en/render-hooks/images.md new file mode 100755 index 00000000000..e68cd1b9515 --- /dev/null +++ b/content/en/render-hooks/images.md @@ -0,0 +1,163 @@ +--- +title: Image render hooks +linkTitle: Images +description: Create an image render to hook override the rendering of Markdown images to HTML. +categories: [render hooks] +keywords: [] +menu: + docs: + parent: render-hooks + weight: 50 +weight: 50 +toc: true +--- + +## Markdown + +A Markdown image has three components: the image description, the image destination, and optionally the image title. + +```text +![white kitten](/images/kitten.jpg "A kitten!") + ------------ ------------------ --------- + description destination title +``` + +These components are passed into the render hook [context] as shown below. + +[context]: /getting-started/glossary/#context + +## Context + +Image render hook templates receive the following context: + +###### Attributes + +(`map`) The Markdown attributes, available if you configure your site as follows: + +{{< code-toggle file=hugo >}} +[markup.goldmark.parser] +wrapStandAloneImageWithinParagraph = false +[markup.goldmark.parser.attribute] +block = true +{{< /code-toggle >}} + +###### Destination + +(`string`) The image destination. + +###### IsBlock + +(`bool`) Returns true if a standalone image is not wrapped within a paragraph element. + +###### Ordinal + +(`int`) The zero-based ordinal of the image on the page. + +###### Page + +(`page`) A reference to the current page. + +###### PageInner + +{{< new-in 0.125.0 >}} + +(`page`) A reference to a page nested via the [`RenderShortcodes`] method. [See details](#pageinner-details). + +[`RenderShortcodes`]: /methods/page/rendershortcodes + +###### PlainText + +(`string`) The image description as plain text. + +###### Text + +(`string`) The image description. + +###### Title + +(`string`) The image title. + +## Examples + +{{% note %}} +With inline elements such as images and links, remove leading and trailing whitespace using the `{{‑ ‑}}` delimiter notation to prevent whitespace between adjacent inline elements and text. +{{% /note %}} + +In its default configuration, Hugo renders Markdown images according to the [CommonMark specification]. To create a render hook that does the same thing: + +[CommonMark specification]: https://spec.commonmark.org/current/ + +{{< code file=layouts/_default/_markup/render-image.html copy=true >}} +{{ . }} +{{- /* chomp trailing newline */ -}} +{{< /code >}} + +To render standalone images within `figure` elements: + +{{< code file=layouts/_default/_markup/render-image.html copy=true >}} +{{- if .IsBlock -}} +
+ {{ . }} +
{{ .Title }}
+
+{{- else -}} + {{ . }} +{{- end -}} +{{< /code >}} + +Note that the above requires the following site configuration: + +{{< code-toggle file=hugo >}} +[markup.goldmark.parser] +wrapStandAloneImageWithinParagraph = false +{{< /code-toggle >}} + +## Default + +{{< new-in 0.123.0 >}} + +Hugo includes an [embedded image render hook] to resolve Markdown image destinations. Disabled by default, you can enable it in your site configuration: + +[embedded image render hook]: {{% eturl render-image %}} + +{{< code-toggle file=hugo >}} +[markup.goldmark.renderHooks.image] +enableDefault = true +{{< /code-toggle >}} + +A custom render hook, even when provided by a theme or module, will override the embedded render hook regardless of the configuration setting above. + +{{% note %}} +The embedded image render hook is automatically enabled for multilingual single-host sites if [duplication of shared page resources] is disabled. This is the default configuration for multilingual single-host sites. + +[duplication of shared page resources]: /getting-started/configuration-markup/#duplicateresourcefiles +{{% /note %}} + +The embedded image render hook resolves internal Markdown destinations by looking for a matching [page resource], falling back to a matching [global resource]. Remote destinations are passed through, and the render hook will not throw an error or warning if it is unable to resolve a destination. + +[page resource]: /getting-started/glossary/#page-resource +[global resource]: /getting-started/glossary/#global-resource + +You must place global resources in the assets directory. If you have placed your resources in the static directory, and you are unable or unwilling to move them, you must mount the static directory to the assets directory by including both of these entries in your site configuration: + +{{< code-toggle file=hugo >}} +[[module.mounts]] +source = 'assets' +target = 'assets' + +[[module.mounts]] +source = 'static' +target = 'assets' +{{< /code-toggle >}} + +Note that the embedded image render hook does not perform image processing. Its sole purpose is to resolve Markdown image destinations. + +{{% include "/render-hooks/_common/pageinner.md" %}} diff --git a/content/en/render-hooks/introduction.md b/content/en/render-hooks/introduction.md new file mode 100755 index 00000000000..ebf95c00f15 --- /dev/null +++ b/content/en/render-hooks/introduction.md @@ -0,0 +1,85 @@ +--- +title: Introduction +description: An introduction to Hugo's render hooks. +categories: [render hooks] +keywords: [] +menu: + docs: + identifier: render-hooks-introduction + parent: render-hooks + weight: 20 +weight: 20 +--- + +When rendering Markdown to HTML, render hooks override the conversion. Each render hook is a template, with one template for each supported element type: + +- [Code blocks](/render-hooks/code-blocks) +- [Headings](/render-hooks/headings) +- [Images](/render-hooks/images) +- [Links](/render-hooks/links) + +{{% note %}} +Hugo supports multiple [content formats] including Markdown, HTML, AsciiDoc, Emacs Org Mode, Pandoc, and reStructuredText. + +The render hook capability is limited to Markdown. You cannot create render hooks for the other content formats. + +[content formats]: /content-management/formats/ +{{% /note %}} + +For example, consider this Markdown: + +```text +[Hugo](https://gohugo.io) + +![kitten](kitten.jpg) +``` + +Without link or image render hooks, this example above is rendered to: + +```html +

Hugo

+

kitten

+``` + +By creating link and image render hooks, you can alter the conversion from Markdown to HTML. For example: + +```html +

Hugo

+

kitten

+``` + +Each render hook is a template, with one template for each supported element type: + +```text +layouts/ +└── _default/ + └── _markup/ + ├── render-codeblock.html + ├── render-heading.html + ├── render-image.html + └── render-link.html +``` + +The template lookup order allows you to create different render hooks for each page [type], [kind], language, and [output format]. For example: + +```text +layouts/ +├── _default/ +│ └── _markup/ +│ ├── render-link.html +│ └── render-link.text.txt +├── books/ +│ └── _markup/ +│ ├── render-link.html +│ └── render-link.text.txt +└── films/ + └── _markup/ + ├── render-link.html + └── render-link.text.txt +``` + +[kind]: /getting-started/glossary/#page-kind +[output format]: /getting-started/glossary/#output-format +[type]: /getting-started/glossary/#content-type + +The remaining pages in this section describe each type of render hook, including examples and the context received by each template. diff --git a/content/en/render-hooks/links.md b/content/en/render-hooks/links.md new file mode 100755 index 00000000000..bf048506885 --- /dev/null +++ b/content/en/render-hooks/links.md @@ -0,0 +1,133 @@ +--- +title: Link render hooks +linkTitle: Links +description: Create a link render hook to override the rendering of Markdown links to HTML. +categories: [render hooks] +keywords: [] +menu: + docs: + parent: render-hooks + weight: 60 +weight: 60 +toc: true +--- + +## Markdown + +A Markdown link has three components: the link text, the link destination, and optionally the link title. + +```text +[Post 1](/posts/post-1 "My first post") + ------ ------------- ------------- + text destination title +``` + +These components are passed into the render hook [context] as shown below. + +[context]: /getting-started/glossary/#context + +## Context + +Link render hook templates receive the following context: + +[context]: /getting-started/glossary/#context + +###### Destination + +(`string`) The link destination. + +###### Page + +(`page`) A reference to the current page. + +###### PageInner + +{{< new-in 0.125.0 >}} + +(`page`) A reference to a page nested via the [`RenderShortcodes`] method. [See details](#pageinner-details). + +[`RenderShortcodes`]: /methods/page/rendershortcodes + +###### PlainText + +(`string`) The link description as plain text. + +###### Text + +(`string`) The link description. + +###### Title + +(`string`) The link title. + +## Examples + +{{% note %}} +With inline elements such as images and links, remove leading and trailing whitespace using the `{{‑ ‑}}` delimiter notation to prevent whitespace between adjacent inline elements and text. +{{% /note %}} + +In its default configuration, Hugo renders Markdown links according to the [CommonMark specification]. To create a render hook that does the same thing: + +[CommonMark specification]: https://spec.commonmark.org/current/ + +{{< code file=layouts/_default/_markup/render-link.html copy=true >}} + + {{- with .Text | safeHTML }}{{ . }}{{ end -}} + +{{- /* chomp trailing newline */ -}} +{{< /code >}} + +To include a `rel` attribute set to `external` for external links: + +{{< code file=layouts/_default/_markup/render-link.html copy=true >}} +{{- $u := urls.Parse .Destination -}} + + {{- with .Text | safeHTML }}{{ . }}{{ end -}} + +{{- /* chomp trailing newline */ -}} +{{< /code >}} + +## Default + +{{< new-in 0.123.0 >}} + +Hugo includes an [embedded link render hook] to resolve Markdown link destinations. Disabled by default, you can enable it in your site configuration: + +[embedded link render hook]: {{% eturl render-link %}} + +{{< code-toggle file=hugo >}} +[markup.goldmark.renderHooks.link] +enableDefault = true +{{< /code-toggle >}} + +A custom render hook, even when provided by a theme or module, will override the embedded render hook regardless of the configuration setting above. + +{{% note %}} +The embedded link render hook is automatically enabled for multilingual single-host sites if [duplication of shared page resources] is disabled. This is the default configuration for multilingual single-host sites. + +[duplication of shared page resources]: /getting-started/configuration-markup/#duplicateresourcefiles +{{% /note %}} + +The embedded link render hook resolves internal Markdown destinations by looking for a matching page, falling back to a matching [page resource], then falling back to a matching [global resource]. Remote destinations are passed through, and the render hook will not throw an error or warning if it is unable to resolve a destination. + +[page resource]: /getting-started/glossary/#page-resource +[global resource]: /getting-started/glossary/#global-resource + +You must place global resources in the assets directory. If you have placed your resources in the static directory, and you are unable or unwilling to move them, you must mount the static directory to the assets directory by including both of these entries in your site configuration: + +{{< code-toggle file=hugo >}} +[[module.mounts]] +source = 'assets' +target = 'assets' + +[[module.mounts]] +source = 'static' +target = 'assets' +{{< /code-toggle >}} + +{{% include "/render-hooks/_common/pageinner.md" %}} diff --git a/content/en/showcase/forestry/index.md b/content/en/showcase/forestry/index.md index 32a932a7a86..fabcb7cd3e0 100644 --- a/content/en/showcase/forestry/index.md +++ b/content/en/showcase/forestry/index.md @@ -36,7 +36,7 @@ Lastly, we want to take the opportunity to give some love to other amazing tools ### What tools did we use? * Our Norwegian designer Nichlas is in love with [**Sketch**](https://www.sketchapp.com/). From what we hear it’s a designer’s dream come true. -* Some say our main graphic is [mesmerizing](https://twitter.com/hmncllctv/status/968907474664284160). Nichlas created it using [**3DS Max**](https://www.autodesk.com/products/3ds-max/overview). +* Some say our main graphic is [mesmerizing](https://x.com/hmncllctv/status/968907474664284160). Nichlas created it using [**3DS Max**](https://www.autodesk.com/products/3ds-max/overview). * [**Hugo**](https://gohugo.io/) -- of course. * Chris can’t think of modern web development without [**Gulp**](https://gulpjs.com/) & [**Webpack**](https://webpack.js.org/). We used them to add additional build steps such as Browsersync, CSS, JS and SVG optimization. * Speaking about adding steps to our build, our lives would be much harder without [**CircleCI**](https://circleci.com/) for continuous deployment and automated testing purposes. diff --git a/content/en/showcase/keycdn/index.md b/content/en/showcase/keycdn/index.md index d092aa07d5d..6308b34c46b 100644 --- a/content/en/showcase/keycdn/index.md +++ b/content/en/showcase/keycdn/index.md @@ -26,5 +26,5 @@ Below is an overview of what we used with Hugo to build our website: * Our search is powered by a custom solution that we’ve built. It allows our pages, blog, and knowledge base to be searched. It uses [Axios](https://github.com/axios/axios) to send a `POST` request containing the search query. An index file in JSON generated by Hugo is searched and the results are then returned. * Our commenting system is also powered by a custom solution that we’ve built. It uses Axios to send a `GET` request containing the slug to pull the comment thread and a `POST` request containing the name, email address, and comment when submitting a comment. * Our contact form is a simple HTML form, which uses Axios as well. -* Our writers use shortcodes to enhance the capability of markdown. +* Our writers use shortcodes to enhance the capability of Markdown. * Our entire website is delivered through KeyCDN using a Pull Zone, which means all of our edge locations are delivering our website. diff --git a/content/en/showcase/quiply-employee-communications-app/index.md b/content/en/showcase/quiply-employee-communications-app/index.md index a8c31cc33e7..e1e426ed26c 100644 --- a/content/en/showcase/quiply-employee-communications-app/index.md +++ b/content/en/showcase/quiply-employee-communications-app/index.md @@ -24,6 +24,6 @@ With the launch of our Employee Communications app Quiply we created a very simp As our customer base and demand for marketing and communication started to grow, we needed a solution to easily grow and extend the contents of our web presence. As we do not have the need to serve dynamic content, we decided to use a static site generator. Amongst a couple of others, we tried Hugo and it became immediately clear that we'd use Hugo going forward as it compiles super-fast, is intuitive to use and offers all the features we need. -Our website which we launched a couple of weeks ago is still growing and new content is being added constantly. By using Hugo, this can be easily done by content authors writing markdown files without always having to touch HTML or CSS code. It is available in German only for the time being, an English version is in the works. +Our website which we launched a couple of weeks ago is still growing and new content is being added constantly. By using Hugo, this can be easily done by content authors writing Markdown files without always having to touch HTML or CSS code. It is available in German only for the time being, an English version is in the works. Huge thanks to everyone involved in making Hugo a success. diff --git a/content/en/templates/404.md b/content/en/templates/404.md index 7fd27a35825..44858f8b151 100644 --- a/content/en/templates/404.md +++ b/content/en/templates/404.md @@ -1,7 +1,7 @@ --- title: Custom 404 page -linkTitle: 404 page -description: If you know how to create a single page template, you have unlimited options for creating a custom 404. +linkTitle: 404 template +description: Create a template to render a 404 error page. categories: [templates] keywords: ['404',page not found] menu: @@ -11,45 +11,43 @@ menu: weight: 220 --- -When using Hugo with [GitHub Pages](https://pages.github.com/), you can provide your own template for a [custom 404 error page](https://docs.github.com/en/pages/getting-started-with-github-pages/creating-a-custom-404-page-for-your-github-pages-site) by creating a 404.html template file in the root of your `layouts` folder. When Hugo generates your site, the `404.html` file will be placed in the root. - -404 pages will have all the regular [page variables][pagevars] available to use in the templates. - -In addition to the standard page variables, the 404 page has access to all site content accessible from `.Pages`. - -```txt -▾ layouts/ - 404.html -``` - -## 404.html - -This is a basic example of a 404.html template: +To render a 404 error page in the root of your site, create a 404 template in the root of the layouts directory. For example: {{< code file=layouts/404.html >}} {{ define "main" }} -
-
-

Go Home

-
-
+

404 Not Found

+

The page you requested cannot be found.

+

+ + Return to the home page + +

{{ end }} {{< /code >}} -## Automatic loading +For multilingual sites, add the language key to the file name: -Your 404.html file can be set to load automatically when a visitor enters a mistaken URL path, dependent upon the web serving environment you are using. For example: - -* [GitHub Pages](/hosting-and-deployment/hosting-on-github/), [GitLab Pages](/hosting-and-deployment/hosting-on-gitlab/) and [Cloudflare Pages](/hosting-and-deployment/hosting-on-cloudflare-pages/). The 404 page is automatic. -* Apache. You can specify `ErrorDocument 404 /404.html` in an `.htaccess` file in the root of your site. -* Nginx. You might specify `error_page 404 /404.html;` in your `nginx.conf` file. [Details here](https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page). -* Amazon AWS S3. When setting a bucket up for static web serving, you can specify the error file from within the S3 GUI. -* Amazon CloudFront. You can specify the page in the Error Pages section in the CloudFront Console. [Details here](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) -* Caddy Server. Use the `handle_errors` directive to specify error pages for one or more status codes. [Details here](https://caddyserver.com/docs/caddyfile/directives/handle_errors) -* Netlify. Add `/* /404.html 404` to `content/_redirects`. [Details Here](https://www.netlify.com/docs/redirects/#custom-404) -* Azure Static Web App. set `responseOverrides.404.rewrite` and `responseOverrides.404.statusCode` in configfile `staticwebapp.config.json`. [Details here](https://docs.microsoft.com/en-us/azure/static-web-apps/configuration#response-overrides) -* Azure Storage as Static Web Site Hosting. You can specify the `Error document path` in the Static website configuration page of the Azure portal. [Details here](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website). -* DigitalOcean App Platform. You can specify `error_document` in your app specification file or use control panel to set up error document. [Details here](https://docs.digitalocean.com/products/app-platform/how-to/manage-static-sites/#configure-a-static-site). -* [Firebase Hosting](https://firebase.google.com/docs/hosting/full-config#404): `/404.html` automatically gets used as the 404 page. +```text +layouts/ +├── 404.de.html +├── 404.en.html +└── 404.fr.html +``` -[pagevars]: /variables/page/ +Your production server redirects the browser to the 404 page when a page is not found. Capabilities and configuration vary by host. + +Host|Capabilities and configuration +:--|:-- +Amazon CloudFront|See [details](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html). +Amazon S3|See [details](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CustomErrorDocSupport.html). +Apache|See [details](https://httpd.apache.org/docs/2.4/custom-error.html). +Azure Static Web Apps|See [details](https://learn.microsoft.com/en-us/azure/static-web-apps/configuration#response-overrides). +Azure Storage|See [details](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website#setting-up-a-static-website). +Caddy|See [deatils](https://caddyserver.com/docs/caddyfile/directives/handle_errors). +Cloudflare Pages|See [details](https://developers.cloudflare.com/pages/configuration/serving-pages/#not-found-behavior). +DigitalOcean App Platform|See [details](https://docs.digitalocean.com/products/app-platform/how-to/manage-static-sites/#configure-a-static-site). +Firebase|See [details](https://firebase.google.com/docs/hosting/full-config#404). +GitHub Pages|Redirection to is automatic and not configurable. +GitLab Pages|See [details](https://docs.gitlab.com/ee/user/project/pages/introduction.html#custom-error-codes-pages). +NGINX|See [details](https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page). +Netlify|See [details](https://docs.netlify.com/routing/redirects/redirect-options/). diff --git a/content/en/templates/_index.md b/content/en/templates/_index.md index b2197d162cf..23b2a3eaf62 100644 --- a/content/en/templates/_index.md +++ b/content/en/templates/_index.md @@ -1,12 +1,12 @@ --- title: Templates -linkTitle: Overview +linkTitle: In this section description: Go templating, template types and lookup order, shortcodes, and data. categories: [] keywords: [] menu: docs: - identifier: templates-overview + identifier: templates-in-this-section parent: templates weight: 10 weight: 10 diff --git a/content/en/templates/base.md b/content/en/templates/base.md index 63bf2f9b293..6262e74b878 100644 --- a/content/en/templates/base.md +++ b/content/en/templates/base.md @@ -91,7 +91,7 @@ The following shows how you can override both the `"main"` and `"title"` block a {{ end }} {{< /code >}} -[hugolists]: /templates/lists +[hugolists]: /templates/lists/ [lookup]: /templates/lookup-order/ [rendering the section]: /templates/section-templates/ [singletemplate]: /templates/single-page-templates/ diff --git a/content/en/templates/data-templates.md b/content/en/templates/data-templates.md deleted file mode 100644 index 435bd70b221..00000000000 --- a/content/en/templates/data-templates.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Data templates -description: In addition to Hugo's built-in variables, you can specify your own custom data in templates or shortcodes that pull from both local and dynamic sources. -categories: [templates] -keywords: [data,dynamic,csv,json,toml,yaml,xml] -menu: - docs: - parent: templates - weight: 150 -weight: 150 -toc: true -aliases: [/extras/datafiles/,/extras/datadrivencontent/,/doc/datafiles/] ---- - -Hugo supports loading data from YAML, JSON, XML, and TOML files located in the `data` directory at the root of your Hugo project. - -{{< youtube FyPgSuwIMWQ >}} - -## The data directory - -The `data` directory 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: - -- Extending the content when the front matter fields grow out of control, or -- Showing a larger dataset in a template (see the example below). - -In both cases, it's a good idea to outsource the data in their (own) files. - -These files must be YAML, JSON, XML, or TOML files (using the `.yml`, `.yaml`, `.json`, `.xml`, or `.toml` extension). The data will be accessible as a `map` in the `.Site.Data` variable. - -To access the data using the `site.Data.filename` notation, the file name must begin with an underscore or a Unicode letter, followed by zero or more underscores, Unicode letters, or Unicode digits. For example: - -- `123.json` - Invalid -- `x123.json` - Valid -- `_123.json` - Valid - -To access the data using the [`index`](/functions/collections/indexfunction) function, the file name is irrelevant. For example: - -Data file|Template code -:--|:-- -`123.json`|`{{ index .Site.Data "123" }}` -`x123.json`|`{{ index .Site.Data "x123" }}` -`_123.json`|`{{ index .Site.Data "_123" }}` -`x-123.json`|`{{ index .Site.Data "x-123" }}` - -## Data files in themes - -Data Files can also be used in themes. - -However, note that the theme data files are merged with the project directory taking precedence. That is, Given two files with the same name and relative path, the data in the file in the root project `data` directory will override the data from the file in the `themes//data` directory *for keys that are duplicated*). - -Therefore, theme authors should be careful not to include data files that could be easily overwritten by a user who decides to [customize a theme][customize]. For theme-specific data items that shouldn't be overridden, it can be wise to prefix the folder structure with a namespace; e.g. `mytheme/data//somekey/...`. To check if any such duplicate exists, run hugo with the `-v` flag. - -The keys in the map created with data templates from data files will be a dot-chained set of `path`, `filename`, and `key` in the file (if applicable). - -This is best explained with an example: - -## Examples - -### Jaco Pastorius' Solo Discography - -[Jaco Pastorius](https://en.wikipedia.org/wiki/Jaco_Pastorius_discography) was a great bass player, but his solo discography is short enough to use as an example. [John Patitucci](https://en.wikipedia.org/wiki/John_Patitucci) is another bass giant. - -The example below is a bit contrived, but it illustrates the flexibility of data Files. This example uses TOML as its file format with the two following data files: - -* `data/jazz/bass/jacopastorius.toml` -* `data/jazz/bass/johnpatitucci.toml` - -`jacopastorius.toml` contains the content below. `johnpatitucci.toml` contains a similar list: - -{{< code-toggle file=data/jazz/bass/jacopastorius >}} -discography = [ -"1974 - Modern American Music … Period! The Criteria Sessions", -"1974 - Jaco", -"1976 - Jaco Pastorius", -"1981 - Word of Mouth", -"1981 - The Birthday Concert (released in 1995)", -"1982 - Twins I & II (released in 1999)", -"1983 - Invitation", -"1986 - Broadway Blues (released in 1998)", -"1986 - Honestly Solo Live (released in 1990)", -"1986 - Live In Italy (released in 1991)", -"1986 - Heavy'n Jazz (released in 1992)", -"1991 - Live In New York City, Volumes 1-7.", -"1999 - Rare Collection (compilation)", -"2003 - Punk Jazz: The Jaco Pastorius Anthology (compilation)", -"2007 - The Essential Jaco Pastorius (compilation)" -] -{{< /code-toggle >}} - -The list of bass players can be accessed via `.Site.Data.jazz.bass`, a single bass player by adding the file name without the suffix, e.g. `.Site.Data.jazz.bass.jacopastorius`. - -You can now render the list of recordings for all the bass players in a template: - -```go-html-template -{{ range $.Site.Data.jazz.bass }} - {{ partial "artist.html" . }} -{{ end }} -``` - -And then in the `partials/artist.html`: - -```go-html-template -
    -{{ range .discography }} -
  • {{ . }}
  • -{{ end }} -
-``` - -Discover a new favorite bass player? Just add another `.toml` file in the same directory. - -### Accessing named values in a data file - -Assume you have the following data structure in your `user0123` data file located directly in `data/`: - -{{< code-toggle file=data/user0123 >}} -Name: User0123 -"Short Description": "He is a **jolly good** fellow." -Achievements: - - "Can create a Key, Value list from Data File" - - "Learns Hugo" - - "Reads documentation" -{{}} - -You can use the following code to render the `Short Description` in your layout: - -```go-html-template -
Short Description of {{ .Site.Data.user0123.Name }}:

{{ index .Site.Data.user0123 "Short Description" | markdownify }}

-``` - -Note the use of the [`markdownify`] function. This will send the description through the Markdown rendering engine. - -## Remote data - -Retrieve remote data using these template functions: - -- [`resources.GetRemote`](/functions/resources/getremote) (recommended) -- [`data.GetCSV`](/functions/data/getcsv) -- [`data.GetJSON`](/functions/data/getjson) - -## LiveReload with data files - -There is no chance to trigger a [LiveReload] when the content of a URL changes. However, when a *local* file changes (i.e., `data/*` and `themes//data/*`), a LiveReload will be triggered. Symlinks are not supported. Note too that because downloading data takes a while, Hugo stops processing your Markdown files until the data download has been completed. - -{{% note %}} -If you change any local file and the LiveReload is triggered, Hugo will read the data-driven (URL) content from the cache. If you have disabled the cache (i.e., by running the server with `hugo server --ignoreCache`), Hugo will re-download the content every time LiveReload triggers. This can create *huge* traffic. You may reach API limits quickly. -{{% /note %}} - -## Examples of data-driven content - -- Photo gallery JSON powered: [https://github.com/pcdummy/hugo-lightslider-example](https://github.com/pcdummy/hugo-lightslider-example) -- GitHub Starred Repositories [in a post](https://github.com/SchumacherFM/blog-cs/blob/master/content%2Fposts%2Fgithub-starred.md) using data-driven content in a [custom short code](https://github.com/SchumacherFM/blog-cs/blob/master/layouts%2Fshortcodes%2FghStarred.html). - -## Specs for data formats - -* [TOML Spec][toml] -* [YAML Spec][yaml] -* [JSON Spec][json] -* [CSV Spec][csv] -* [XML Spec][xml] - -[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 -[LiveReload]: /getting-started/usage/#livereload -[lookup]: /templates/lookup-order/ -[`markdownify`]: /functions/transform/markdownify -[OAuth]: https://en.wikipedia.org/wiki/OAuth -[partials]: /templates/partials/ -[toml]: https://toml.io/en/latest -[variadic]: https://en.wikipedia.org/wiki/Variadic_function -[vars]: /variables/ -[yaml]: https://yaml.org/spec/ -[xml]: https://www.w3.org/XML/ diff --git a/content/en/templates/embedded.md b/content/en/templates/embedded.md new file mode 100644 index 00000000000..5b2043962d6 --- /dev/null +++ b/content/en/templates/embedded.md @@ -0,0 +1,223 @@ +--- +title: Embedded templates +description: Hugo provides embedded templates for common use cases. +categories: [templates] +keywords: [internal, analytics,] +menu: + docs: + parent: templates + weight: 190 +weight: 190 +toc: true +aliases: [/templates/internal] +--- + +## Disqus + +{{% note %}} +To override Hugo's embedded Disqus template, copy the [source code] to a file with the same name in the layouts/partials directory, then call it from your templates using the [`partial`] function: + +`{{ partial "disqus.html" . }}` + +[`partial`]: /functions/partials/include/ +[source code]: {{% eturl disqus %}} +{{% /note %}} + +Hugo includes an embedded template for [Disqus], a popular commenting system for both static and dynamic websites. To effectively use Disqus, secure a Disqus "shortname" by [signing up] for the free service. + +[Disqus]: https://disqus.com +[signing up]: https://disqus.com/profile/signup/ + +To include the embedded template: + +```go-html-template +{{ template "_internal/disqus.html" . }} +``` + +### Configure Disqus + +To use Hugo's Disqus template, first set up a single configuration value: + +{{< code-toggle file="hugo" >}} +[services.disqus] +shortname = 'your-disqus-shortname' +{{}} + +Hugo's Disqus template accesses this value with: + +```go-html-template +{{ .Site.Config.Services.Disqus.Shortname }} +``` + +You can also set the following in the front matter for a given piece of content: + +- `disqus_identifier` +- `disqus_title` +- `disqus_url` + +## Google Analytics + +{{% note %}} +To override Hugo's embedded Google Analytics template, copy the [source code] to a file with the same name in the layouts/partials directory, then call it from your templates using the [`partial`] function: + +`{{ partial "google_analytics.html" . }}` + +[`partial`]: /functions/partials/include/ +[source code]: {{% eturl google_analytics %}} +{{% /note %}} + +Hugo includes an embedded template supporting [Google Analytics 4]. + +[Google Analytics 4]: https://support.google.com/analytics/answer/10089681 + +To include the embedded template: + +```go-html-template +{{ template "_internal/google_analytics.html" . }} +``` + +### Configure Google Analytics + +Provide your tracking ID in your configuration file: + +{{< code-toggle file=hugo >}} +[services.googleAnalytics] +ID = "G-MEASUREMENT_ID" +{{}} + +To use this value in your own template, access the configured ID with `{{ site.Config.Services.GoogleAnalytics.ID }}`. + +## Open Graph + +{{% note %}} +To override Hugo's embedded Open Graph template, copy the [source code] to a file with the same name in the layouts/partials directory, then call it from your templates using the [`partial`] function: + +`{{ partial "opengraph.html" . }}` + +[`partial`]: /functions/partials/include/ +[source code]: {{% eturl opengraph %}} +{{% /note %}} + +Hugo includes an embedded template for the [Open Graph protocol](https://ogp.me/), metadata that enables a page to become a rich object in a social graph. +This format is used for Facebook and some other sites. + +To include the embedded template: + +```go-html-template +{{ template "_internal/opengraph.html" . }} +``` + +### Configure Open Graph + +Hugo's Open Graph template is configured using a mix of configuration settings and [front matter](/content-management/front-matter/) on individual pages. + +{{< code-toggle file=hugo >}} +[params] + description = 'Text about my cool site' + images = ['site-feature-image.jpg'] + title = 'My cool site' + [params.social] + facebook_admin = 'jsmith' +[taxonomies] + series = 'series' +{{}} + +{{< code-toggle file=content/blog/my-post.md fm=true >}} +title = "Post title" +description = "Text about this post" +date = 2024-03-08T08:18:11-08:00 +images = ["post-cover.png"] +audio = [] +videos = [] +series = [] +tags = [] +{{}} + +Hugo uses the page title and description for the title and description metadata. +The first 6 URLs from the `images` array are used for image metadata. +If [page bundles](/content-management/page-bundles/) are used and the `images` array is empty or undefined, images with file names matching `*feature*` or `*cover*,*thumbnail*` are used for image metadata. + +Various optional metadata can also be set: + +- Date, published date, and last modified data are used to set the published time metadata if specified. +- `audio` and `videos` are URL arrays like `images` for the audio and video metadata tags, respectively. +- The first 6 `tags` on the page are used for the tags metadata. +- The `series` taxonomy is used to specify related "see also" pages by placing them in the same series. + +If using YouTube this will produce a og:video tag like ``. Use the `https://youtu.be/` format with YouTube videos (example: `https://youtu.be/qtIqKaDlqXo`). + +## Schema + +{{% note %}} +To override Hugo's embedded Schema template, copy the [source code] to a file with the same name in the layouts/partials directory, then call it from your templates using the [`partial`] function: + +`{{ partial "schema.html" . }}` + +[`partial`]: /functions/partials/include/ +[source code]: {{% eturl schema %}} +{{% /note %}} + +Hugo includes an embedded template to render [microdata] `meta` elements within the `head` element of your templates. + +[microdata]: https://html.spec.whatwg.org/multipage/microdata.html#microdata + +To include the embedded template: + +```go-html-template +{{ template "_internal/schema.html" . }} +``` + +## X (Twitter) Cards + +{{% note %}} +To override Hugo's embedded Twitter Cards template, copy the [source code] to a file with the same name in the layouts/partials directory, then call it from your templates using the [`partial`] function: + +`{{ partial "twitter_cards.html" . }}` + +[`partial`]: /functions/partials/include/ +[source code]: {{% eturl twitter_cards %}} +{{% /note %}} + +Hugo includes an embedded template for [X (Twitter) Cards](https://developer.x.com/en/docs/twitter-for-websites/cards/overview/abouts-cards), +metadata used to attach rich media to Tweets linking to your site. + +To include the embedded template: + +```go-html-template +{{ template "_internal/twitter_cards.html" . }} +``` + +### Configure X (Twitter) Cards + +Hugo's X (Twitter) Card template is configured using a mix of configuration settings and [front-matter](/content-management/front-matter/) values on individual pages. + +{{< code-toggle file=hugo >}} +[params] + images = ["site-feature-image.jpg"] + description = "Text about my cool site" +{{}} + +{{< code-toggle file=content/blog/my-post.md >}} +title = "Post title" +description = "Text about this post" +images = ["post-cover.png"] +{{}} + +If `images` aren't specified in the page front-matter, then hugo searches for [image page resources](/content-management/image-processing/) with `feature`, `cover`, or `thumbnail` in their name. +If no image resources with those names are found, the images defined in the [site config](/getting-started/configuration/) are used instead. +If no images are found at all, then an image-less Twitter `summary` card is used instead of `summary_large_image`. + +Hugo uses the page title and description for the card's title and description fields. The page summary is used if no description is given. + +Set the value of `twitter:site` in your site configuration: + +{{< code-toggle file="hugo" copy=false >}} +[params.social] +twitter = "GoHugoIO" +{{}} + +NOTE: The `@` will be added for you + +```html + +``` diff --git a/content/en/templates/homepage.md b/content/en/templates/homepage.md index 59b7472fbc0..cd5b32604e8 100644 --- a/content/en/templates/homepage.md +++ b/content/en/templates/homepage.md @@ -12,11 +12,8 @@ toc: true aliases: [/layout/homepage/,/templates/homepage-template/] --- -Homepage is a `Page` and therefore has all the [page variables][pagevars] and [site variables][sitevars] available for use. - -{{% note %}} The homepage template is the *only* required template for building a site and therefore useful when bootstrapping a new site and template. It is also the only required template if you are developing a single-page website. -{{% /note %}} + {{< youtube ut1xtRZ1QOA >}} @@ -32,8 +29,6 @@ See the homepage template below or [Content Organization][contentorg] for more i ## Example homepage template -The following is an example of a homepage template that uses [partial][partials], [base] templates, and a content file at `content/_index.md` to populate the `{{ .Title }}` and `{{ .Content }}` [page variables][pagevars]. - {{< code file=layouts/index.html >}} {{ define "main" }}
@@ -56,10 +51,6 @@ The following is an example of a homepage template that uses [partial][partials] {{ end }} {{< /code >}} -[base]: /templates/base/ [contentorg]: /content-management/organization/ [lists]: /templates/lists/ [lookup]: /templates/lookup-order/ -[pagevars]: /variables/page/ -[partials]: /templates/partials/ -[sitevars]: /variables/site/ diff --git a/content/en/templates/internal.md b/content/en/templates/internal.md deleted file mode 100644 index 9438bfa6f1b..00000000000 --- a/content/en/templates/internal.md +++ /dev/null @@ -1,221 +0,0 @@ ---- -title: Internal templates -description: Hugo ships with a group of boilerplate templates that cover the most common use cases for static websites. -categories: [templates] -keywords: [internal, analytics,] -menu: - docs: - parent: templates - weight: 190 -weight: 190 -toc: true ---- - -{{% note %}} -While the following internal templates are called similar to partials, they do *not* observe the partial template lookup order. -{{% /note %}} - -## Google Analytics - -Hugo ships with an internal template supporting [Google Analytics 4]. - -[Google Analytics 4]: https://support.google.com/analytics/answer/10089681 - -### Configure Google Analytics - -Provide your tracking ID in your configuration file: - -**Google Analytics 4 (gtag.js)** -{{< code-toggle file=hugo >}} -[services.googleAnalytics] -ID = "G-MEASUREMENT_ID" -{{}} - -### Use the Google Analytics template - -Include the Google Analytics internal template in your templates where you want the code to appear: - -```go-html-template -{{ template "_internal/google_analytics.html" . }} -``` - -To create your own template, access the configured ID with `{{ site.Config.Services.GoogleAnalytics.ID }}`. - -## Disqus - -Hugo also ships with an internal template for [Disqus comments][disqus], a popular commenting system for both static and dynamic websites. To effectively use Disqus, secure a Disqus "shortname" by [signing up for the free service][disqussignup]. - -### Configure Disqus - -To use Hugo's Disqus template, first set up a single configuration value: - -{{< code-toggle file="hugo" >}} -[services.disqus] -shortname = 'your-disqus-shortname' -{{}} - -Hugo's Disqus template accesses this value with: - -```go-html-template -{{ .Site.Config.Services.Disqus.Shortname }} -``` - -You can also set the following in the front matter for a given piece of content: - -* `disqus_identifier` -* `disqus_title` -* `disqus_url` - -### Use the Disqus template - -To add Disqus, include the following line in the templates where you want your comments to appear: - -```go-html-template -{{ template "_internal/disqus.html" . }} -``` - -### Conditional loading of Disqus comments - -Users have noticed that enabling Disqus comments when running the Hugo web server on `localhost` (i.e. via `hugo server`) causes the creation of unwanted discussions on the associated Disqus account. - -You can create the following `layouts/partials/disqus.html`: - -{{< code file=layouts/partials/disqus.html >}} -
- - -comments powered by Disqus -{{< /code >}} - -The `if` statement skips the initialization of the Disqus comment injection when you are running on `localhost`. - -You can then render your custom Disqus partial template as follows: - -```go-html-template -{{ partial "disqus.html" . }} -``` - -## Open Graph - -An internal template for the [Open Graph protocol](https://ogp.me/), metadata that enables a page to become a rich object in a social graph. -This format is used for Facebook and some other sites. - -### Configure Open Graph - -Hugo's Open Graph template is configured using a mix of configuration variables and [front-matter](/content-management/front-matter/) on individual pages. - -{{< code-toggle file=hugo >}} -[params] - title = "My cool site" - images = ["site-feature-image.jpg"] - description = "Text about my cool site" -[taxonomies] - series = "series" -{{}} - -{{< code-toggle file=content/blog/my-post.md >}} -title = "Post title" -description = "Text about this post" -date = "2006-01-02" -images = ["post-cover.png"] -audio = [] -videos = [] -series = [] -tags = [] -{{}} - -Hugo uses the page title and description for the title and description metadata. -The first 6 URLs from the `images` array are used for image metadata. -If [page bundles](/content-management/page-bundles/) are used and the `images` array is empty or undefined, images with file names matching `*feature*` or `*cover*,*thumbnail*` are used for image metadata. - -Various optional metadata can also be set: - -- Date, published date, and last modified data are used to set the published time metadata if specified. -- `audio` and `videos` are URL arrays like `images` for the audio and video metadata tags, respectively. -- The first 6 `tags` on the page are used for the tags metadata. -- The `series` taxonomy is used to specify related "see also" pages by placing them in the same series. - -If using YouTube this will produce a og:video tag like ``. Use the `https://youtu.be/` format with YouTube videos (example: `https://youtu.be/qtIqKaDlqXo`). - -### Use the Open Graph template - -To add Open Graph metadata, include the following line between the `` tags in your templates: - -```go-html-template -{{ template "_internal/opengraph.html" . }} -``` - -## Twitter Cards - -An internal template for [Twitter Cards](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards), -metadata used to attach rich media to Tweets linking to your site. - -### Configure Twitter Cards - -Hugo's Twitter Card template is configured using a mix of configuration variables and [front-matter](/content-management/front-matter/) on individual pages. - -{{< code-toggle file=hugo >}} -[params] - images = ["site-feature-image.jpg"] - description = "Text about my cool site" -{{}} - -{{< code-toggle file=content/blog/my-post.md >}} -title = "Post title" -description = "Text about this post" -images = ["post-cover.png"] -{{}} - -If `images` aren't specified in the page front-matter, then hugo searches for [image page resources](/content-management/image-processing/) with `feature`, `cover`, or `thumbnail` in their name. -If no image resources with those names are found, the images defined in the [site config](/getting-started/configuration/) are used instead. -If no images are found at all, then an image-less Twitter `summary` card is used instead of `summary_large_image`. - -Hugo uses the page title and description for the card's title and description fields. The page summary is used if no description is given. - -Set the value of `twitter:site` in your site configuration: - -{{< code-toggle file="hugo" copy=false >}} -[params.social] -twitter = "GoHugoIO" -{{}} - -NOTE: The `@` will be added for you - -```html - -``` - -### Use the Twitter Cards template - -To add Twitter card metadata, include the following line immediately after the `` element in your templates: - -```go-html-template -{{ template "_internal/twitter_cards.html" . }} -``` - -## The internal templates - -The code for these templates is located [here](https://github.com/gohugoio/hugo/tree/master/tpl/tplimpl/embedded/templates). - -* `_internal/disqus.html` -* `_internal/google_analytics.html` -* `_internal/opengraph.html` -* `_internal/pagination.html` -* `_internal/schema.html` -* `_internal/twitter_cards.html` - -[disqus]: https://disqus.com -[disqussignup]: https://disqus.com/profile/signup/ diff --git a/content/en/templates/introduction.md b/content/en/templates/introduction.md index 7fb0ddecfb0..994e8185405 100644 --- a/content/en/templates/introduction.md +++ b/content/en/templates/introduction.md @@ -1,672 +1,563 @@ --- -title: Templating -linkTitle: Templating -description: Hugo uses Go's `html/template` and `text/template` libraries as the basis for the templating. +title: Introduction to templating +linkTitle: Introduction +description: Create templates to render your content, resources, and data. categories: [templates,fundamentals] -keywords: [go] +keywords: [] menu: docs: + identifier: templates-introduction parent: templates weight: 20 weight: 20 toc: true -aliases: [/layouts/introduction/,/layout/introduction/, /templates/go-templates/] --- -{{% note %}} -The following is only a primer on Go Templates. For an in-depth look into Go Templates, check the official [Go docs](https://golang.org/pkg/text/template/). -{{% /note %}} - -Go Templates provide an extremely simple template language that adheres to the belief that only the most basic of logic belongs in the template or view layer. +A template is a file in the layouts directory of a project, theme, or module. Templates use [variables] , [functions], and [methods] to transform your content, resources, and data into a published page. -## Basic syntax +[functions]: /functions/ +[methods]: /methods/ +[variables]: #variables -Go Templates are HTML files with the addition of [variables][variables] and [functions][functions]. Go Template variables and functions are accessible within `{{ }}`. +{{% note %}} +Hugo uses Go's [text/template] and [html/template] packages. -### Access a predefined variable +The text/template package implements data-driven templates for generating textual output, while the html/template package implements data-driven templates for generating HTML output safe against code injection. -A _predefined variable_ could be a variable already existing in the -current scope (like the `.Title` example in the [Variables](#variables) section below) or a custom variable (like the -`$address` example in that same section). +By default, Hugo uses the html/template package when rendering HTML files. -```go-html-template -{{ .Title }} -{{ $address }} -``` +[text/template]: https://pkg.go.dev/text/template +[html/template]: https://pkg.go.dev/html/template +{{% /note %}} -Parameters for functions are separated using spaces. The general syntax is: +For example, this HTML template initializes the `$v1` and `$v2` variables, then displays them and their product within an HTML paragraph. ```go-html-template -{{ FUNCTION ARG1 ARG2 .. }} +{{ $v1 := 6 }} +{{ $v2 := 7 }} +

The product of {{ $v1 }} and {{ $v2 }} is {{ mul $v1 $v2 }}.

``` -The following example calls the `add` function with inputs of `1` and `2`: +While HTML templates are the most common, you can create templates for any [output format] including CSV, JSON, RSS, and plain text. -```go-html-template -{{ add 1 2 }} -``` +[output format]: /templates/output-formats/ -#### Methods and fields are accessed via dot notation +## Context -Accessing the Page Parameter `bar` defined in a piece of content's [front matter]. +The most important concept to understand before creating a template is _context_, the data passed into each template. The data may be a simple value, or more commonly [objects] and associated [methods]. -```go-html-template -{{ .Params.bar }} -``` +[objects]: /getting-started/glossary/#object +[methods]: /getting-started/glossary/#method -#### Parentheses can be used to group items together +For example, a template for a single page receives a `Page` object, and the `Page` object provides methods to return values or perform actions. -```go-html-template -{{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }} -``` - -#### A single statement can be split over multiple lines - -```go-html-template -{{ if or - (isset .Params "alt") - (isset .Params "caption") -}} -``` +### Current context -#### Raw string literals can include newlines - -```go-html-template -{{ $msg := `Line one. -Line two.` }} -``` - -## Variables +Within a template, the dot (`.`) represents the current context. -Each Go Template gets a data object. In Hugo, each template is passed -a `Page`. In the below example, `.Title` is one of the elements -accessible in that [`Page` variable][pagevars]. +{{< code file=layouts/_default/single.html >}} +

{{ .Title }}

+{{< /code >}} -With the `Page` being the default scope of a template, the `Title` -element in current scope (`.` -- "the **dot**") is accessible simply -by the dot-prefix (`.Title`): +In the example above the dot represents the `Page` object, and we call its [`Title`] method to return the title as defined in [front matter]. -```go-html-template -{{ .Title }} -``` +[front matter]: /content-management/front-matter/ +[`Title`]: /methods/page/title -Values can also be stored in custom variables and referenced later: +The current context may change within a template. For example, at the top of a template the context might be a `Page` object, but we rebind the context to another value or object within [`range`] or [`with`] blocks. -{{% note %}} -The custom variables need to be prefixed with `$`. -{{% /note %}} +[`range`]: /functions/go-template/range/ +[`with`]: /functions/go-template/with/ -```go-html-template -{{ $address := "123 Main St." }} -{{ $address }} -``` +{{< code file=layouts/_default/single.html >}} +

{{ .Title }}

-Variables can be re-defined using the `=` operator. The example below -prints "Var is Hugo Home" on the home page, and "Var is Hugo Page" on -all other pages: +{{ range slice "foo" "bar" }} +

{{ . }}

+{{ end }} -```go-html-template -{{ $var := "Hugo Page" }} -{{ if .IsHome }} - {{ $var = "Hugo Home" }} +{{ with "baz" }} +

{{ . }}

{{ end }} -Var is {{ $var }} -``` +{{< /code >}} -Variable names must conform to Go's naming rules for [identifiers][identifier]. +In the example above, the context changes as we `range` through the [slice] of values. In the first iteration the context is "foo", and in the second iteration the context is "bar". Inside of the `with` block the context is "baz". Hugo renders the above to: -## Functions +[slice]: /getting-started/glossary/#slice -Go Templates only ship with a few basic functions but also provide a mechanism for applications to extend the original set. +```html +

My Page Title

+

foo

+

bar

+

baz

+``` -[Hugo template functions][functions] provide additional functionality specific to building websites. Functions are called by using their name followed by the required parameters separated by spaces. Template functions cannot be added without recompiling Hugo. +### Template context -### Example 1: adding numbers +Within a `range` or `with` block you can access the context passed into the template by prepending a dollar sign (`$`) to the dot: -```go-html-template -{{ add 1 2 }} - -``` +{{< code file=layouts/_default/single.html >}} +{{ with "foo" }} +

{{ $.Title }} - {{ . }}

+{{ end }} +{{< /code >}} -### Example 2: comparing numbers +Hugo renders this to: -```go-html-template -{{ lt 1 2 }} - +```html +

My Page Title - foo

``` -Note that both examples make use of Go Template's [math][math] functions. - {{% note %}} -There are more boolean operators than those listed in the Hugo docs in the [Go Template documentation](https://golang.org/pkg/text/template/#hdr-Functions). +Make sure that you thoroughly understand the concept of _context_ before you continue reading. The most common templating errors made by new users relate to context. {{% /note %}} -## Includes +## Actions -When including another template, you will need to pass it the data that it would -need to access. +In the examples above the paired opening and closing braces represent the beginning and end of a template action, a data evaluation or control structure within a template. -{{% note %}} -To pass along the current context, please remember to include a trailing **dot**. -{{% /note %}} +A template action may contain literal values ([boolean], [string], [integer], and [float]), variables, functions, and methods. -The templates location will always be starting at the `layouts/` directory -within Hugo. +[boolean]: /getting-started/glossary/#boolean +[string]: /getting-started/glossary/#string +[integer]: /getting-started/glossary/#integer +[float]: /getting-started/glossary/#float -### Partial +{{< code file=layouts/_default/single.html >}} +{{ $convertToLower := true }} +{{ if $convertToLower }} +

{{ strings.ToLower .Title }}

+{{ end }} +{{< /code >}} -The [`partial`][partials] function is used to include _partial_ templates using -the syntax `{{ partial "/." . }}`. +In the example above: -Example of including a `layouts/partials/header.html` partial: +- `$convertToLower` is a variable +- `true` is a literal boolean value +- `strings.ToLower` is a function that converts all characters to lowercase +- `Title` is a method on a the `Page` object -```go-html-template -{{ partial "header.html" . }} +Hugo renders the above to: + +```html + + +

my page title

+ ``` -### Template +### Whitespace -The `template` function was used to include _partial_ templates -in much older Hugo versions. Now it's useful only for calling -[_internal_ templates][internal templates]. The syntax is `{{ template -"_internal/