From: Bjørn Erik Pedersen Date: Fri, 4 May 2018 07:44:59 +0000 (+0200) Subject: Merge commit '83bef6955e014d40c0f00db9cebe09113154e999' X-Git-Tag: v0.41~44 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=914cc85e2;p=brevno-suite%2Fhugo Merge commit '83bef6955e014d40c0f00db9cebe09113154e999' --- 914cc85e22af2e6c28f24a5fc70de94e4b9f1b1b diff --cc docs/config.toml index c66fbd15,00000000..279c24b1 mode 100644,000000..100644 --- a/docs/config.toml +++ b/docs/config.toml @@@ -1,273 -1,0 +1,409 @@@ +baseURL = "https://gohugo.io/" +paginate = 100 +defaultContentLanguage = "en" +enableEmoji = true +# Set the unicode character used for the "return" link in page footnotes. +footnotereturnlinkcontents = "↩" +languageCode = "en-us" +metaDataFormat = "yaml" +title = "Hugo" +theme = "gohugoioTheme" + +googleAnalytics = "UA-7131036-4" + +pluralizeListTitles = false + +# We do redirects via Netlify's _redirects file, generated by Hugo (see "outputs" below). +disableAliases = true + +# Highlighting config (Pygments) +# It is (currently) not in use, but you can do ```go in a content file if you want to. +pygmentsCodeFences = true + +pygmentsOptions = "" +# Use the Chroma stylesheet +pygmentsUseClasses = true +pygmentsUseClassic = false + +# See https://help.farbox.com/pygments.html +pygmentsStyle = "trac" + +[outputs] +home = [ "HTML", "RSS", "REDIR", "HEADERS" ] +section = [ "HTML", "RSS"] + +[mediaTypes] +[mediaTypes."text/netlify"] +suffix = "" +delimiter = "" + +[outputFormats] +[outputFormats.REDIR] +mediatype = "text/netlify" +baseName = "_redirects" +isPlainText = true +notAlternative = true +[outputFormats.HEADERS] +mediatype = "text/netlify" +baseName = "_headers" +isPlainText = true +notAlternative = true + +[related] + +threshold = 80 +includeNewer = true +toLower = false + +[[related.indices]] +name = "keywords" +weight = 100 +[[related.indices]] +name = "date" +weight = 10 +pattern = "2006" + +[social] +twitter = "GoHugoIO" + +#CUSTOM PARAMS +[params] + description = "The world’s fastest framework for building websites" + ## Used for views in rendered HTML (i.e., rather than using the .Hugo variable) + release = "0.41-DEV" + ## Setting this to true will add a "noindex" to *EVERY* page on the site + removefromexternalsearch = false + ## Gh repo for site footer (include trailing slash) + ghrepo = "https://github.com/gohugoio/hugoDocs/" + ## GH Repo for filing a new issue + github_repo = "https://github.com/gohugoio/hugo/issues/new" + ### Edit content repo (set to automatically enter "edit" mode; this is good for "improve this page" links) + ghdocsrepo = "https://github.com/gohugoio/hugoDocs/tree/master/docs" + ## Gitter URL + gitter = "https://gitter.im/spf13/hugo" + ## Discuss Forum URL + forum = "https://discourse.gohugo.io/" + ## Google Tag Manager + gtmid = "" + + # First one is picked as the Twitter card image if not set on page. + images = ["images/gohugoio-card.png"] + + flex_box_interior_classes = "flex-auto w-100 w-40-l mr3 mb3 bg-white ba b--moon-gray nested-copy-line-height" + + #sidebar_direction = "sidebar_left" + +# MARKDOWN +## Configuration for BlackFriday markdown parser: https://github.com/russross/blackfriday +[blackfriday] + plainIDAnchors = true + # See https://github.com/gohugoio/hugo/issues/2424 + hrefTargetBlank = false + angledQuotes = false + latexDashes = true + +[imaging] +# See https://github.com/disintegration/imaging +# CatmullRom is a sharp bicubic filter which should fit the docs site well with its many screenshots. +# Note that you can also set this per image processing. +resampleFilter = "CatmullRom" + +# Defatult JPEG quality setting. Default is 75. +quality = 75 + +anchor = "smart" + + +## As of v0.20, all content files include a default "categories" value that's the same as the section. This was a cheap future-proofing method and should/could be changed accordingly. +[taxonomies] + category = "categories" + +# High level items + +[[menu.docs]] + name = "About Hugo" + weight = 1 + identifier = "about" + url = "/about/" + +[[menu.docs]] + name = "Getting Started" + weight = 5 + identifier = "getting-started" + url = "/getting-started/" + + +[[menu.docs]] + name = "Themes" + weight = 15 + identifier = "themes" + post = "break" + url = "/themes/" + +# Core Menus + +[[menu.docs]] + name = "Content Management" + weight = 20 + identifier = "content-management" + post = "expanded" + url = "/content-management/" + +[[menu.docs]] + name = "Templates" + weight = 25 + identifier = "templates" + + url = "/templates/" + +[[menu.docs]] + name = "Functions" + weight = 30 + identifier = "functions" + url = "/functions/" + +[[menu.docs]] + name = "Variables" + weight = 35 + identifier = "variables" + url = "/variables/" + +[[menu.docs]] + name = "CLI" + weight = 40 + post = "break" + identifier = "commands" + url = "/commands/" + + + +# LOW LEVEL ITEMS + + +[[menu.docs]] + name = "Troubleshooting" + weight = 60 + identifier = "troubleshooting" + url = "/troubleshooting/" + +[[menu.docs]] + name = "Tools" + weight = 70 + identifier = "tools" + url = "/tools/" + +[[menu.docs]] + name = "Hosting & Deployment" + weight = 80 + identifier = "hosting-and-deployment" + url = "/hosting-and-deployment/" + +[[menu.docs]] + name = "Contribute" + weight = 100 + post = "break" + identifier = "contribute" + url = "/contribute/" + +#[[menu.docs]] +# name = "Tags" +# weight = 120 +# identifier = "tags" +# url = "/tags/" + + +# [[menu.docs]] +# name = "Categories" +# weight = 140 +# identifier = "categories" +# url = "/categories/" + +######## QUICKLINKS + + [[menu.quicklinks]] + name = "Fundamentals" + weight = 1 + identifier = "fundamentals" + url = "/tags/fundamentals/" + + + + +######## GLOBAL ITEMS TO BE SHARED WITH THE HUGO SITES + +[[menu.global]] + name = "News" + weight = 1 + identifier = "news" + url = "/news/" + + [[menu.global]] + name = "Docs" + weight = 5 + identifier = "docs" + url = "/documentation/" + + [[menu.global]] + name = "Themes" + weight = 10 + identifier = "themes" + url = "https://themes.gohugo.io/" + + [[menu.global]] + name = "Showcase" + weight = 20 + identifier = "showcase" + url = "/showcase/" + + # Anything with a weight > 100 gets an external icon + [[menu.global]] + name = "Community" + weight = 150 + icon = true + identifier = "community" + post = "external" + url = "https://discourse.gohugo.io/" + + + [[menu.global]] + name = "GitHub" + weight = 200 + identifier = "github" + post = "external" + url = "https://github.com/gohugoio/hugo" ++ ++### LANGUAGES ### ++ ++[languages] ++ [languages.en] ++ contentDir = "content/en" ++ languageName = "English" ++ weight = 1 ++ [languages.zh] ++ contentDir = "content/zh" ++ languageName = "中文" ++ weight = 2 ++ ++ ++### LANGUAGE-SPECIFIC MENUS ### ++ ++# Chinese menus ++ ++[[languages.zh.menu.docs]] ++ name = "关于 Hugo" ++ weight = 1 ++ identifier = "about" ++ url = "/zh/about/" ++ ++[[languages.zh.menu.docs]] ++ name = "入门" ++ weight = 5 ++ identifier = "getting-started" ++ url = "/zh/getting-started/" ++ ++[[languages.zh.menu.docs]] ++ name = "主题" ++ weight = 15 ++ identifier = "themes" ++ post = "break" ++ url = "/zh/themes/" ++ ++# Core languages.zh.menus ++ ++[[languages.zh.menu.docs]] ++ name = "内容管理" ++ weight = 20 ++ identifier = "content-management" ++ post = "expanded" ++ url = "/zh/content-management/" ++ ++[[languages.zh.menu.docs]] ++ name = "模板" ++ weight = 25 ++ identifier = "templates" ++ url = "/zh/templates/" ++ ++[[languages.zh.menu.docs]] ++ name = "函数" ++ weight = 30 ++ identifier = "functions" ++ url = "/zh/functions/" ++ ++[[languages.zh.menu.docs]] ++ name = "变量" ++ weight = 35 ++ identifier = "variables" ++ url = "/zh/variables/" ++ ++[[languages.zh.menu.docs]] ++ name = "CLI" ++ weight = 40 ++ post = "break" ++ identifier = "commands" ++ url = "/commands/" ++ ++# LOW LEVEL ITEMS ++[[languages.zh.menu.docs]] ++ name = "故障排除" ++ weight = 60 ++ identifier = "troubleshooting" ++ url = "/zh/troubleshooting/" ++ ++[[languages.zh.menu.docs]] ++ name = "工具" ++ weight = 70 ++ identifier = "tools" ++ url = "/zh/tools/" ++ ++[[languages.zh.menu.docs]] ++ name = "托管与部署" ++ weight = 80 ++ identifier = "hosting-and-deployment" ++ url = "/zh/hosting-and-deployment/" ++ ++[[languages.zh.menu.docs]] ++ name = "贡献" ++ weight = 100 ++ post = "break" ++ identifier = "contribute" ++ url = "/zh/contribute/" ++ ++[[languages.zh.menu.global]] ++ name = "新闻" ++ weight = 1 ++ identifier = "news" ++ url = "/zh/news/" ++ ++[[languages.zh.menu.global]] ++ name = "文档" ++ weight = 5 ++ identifier = "docs" ++ url = "/zh/documentation/" ++ ++[[languages.zh.menu.global]] ++ name = "主题" ++ weight = 10 ++ identifier = "themes" ++ url = "https://themes.gohugo.io/" ++ ++[[languages.zh.menu.global]] ++ name = "作品展示" ++ weight = 20 ++ identifier = "showcase" ++ url = "/zh/showcase/" ++ ++# Anything with a weight > 100 gets an external icon ++[[languages.zh.menu.global]] ++ name = "社区" ++ weight = 150 ++ icon = true ++ identifier = "community" ++ post = "external" ++ url = "https://discourse.gohugo.io/" ++ ++[[languages.zh.menu.global]] ++ name = "GitHub" ++ weight = 200 ++ identifier = "github" ++ post = "external" ++ url = "https://github.com/gohugoio/hugo" diff --cc docs/content/en/_index.md index 00000000,00000000..30269eb2 new file mode 100644 --- /dev/null +++ b/docs/content/en/_index.md @@@ -1,0 -1,0 +1,49 @@@ ++--- ++title: "The world’s fastest framework for building websites" ++date: 2017-03-02T12:00:00-05:00 ++features: ++ - heading: Blistering Speed ++ image_path: /images/icon-fast.svg ++ tagline: What's modern about waiting for your site to build? ++ copy: Hugo is the fastest tool of its kind. At <1 ms per page, the average site builds in less than a second. ++ ++ - heading: Robust Content Management ++ image_path: /images/icon-content-management.svg ++ tagline: Flexibility rules. Hugo is a content strategist's dream. ++ copy: Hugo supports unlimited content types, taxonomies, menus, dynamic API-driven content, and more, all without plugins. ++ ++ - 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. ++ ++ - heading: Built-in Templates ++ image_path: /images/icon-built-in-templates.svg ++ tagline: Hugo has common patterns to get your work done quickly. ++ copy: Hugo ships with pre-made templates to make quick work of SEO, commenting, analytics and other functions. One line of code, and you're done. ++ ++ - heading: Multilingual and i18n ++ image_path: /images/icon-multilingual2.svg ++ tagline: Polyglot baked in. ++ copy: Hugo provides full i18n support for multi-language sites with the same straightforward development experience Hugo users love in single-language sites. ++ ++ - heading: Custom Outputs ++ image_path: /images/icon-custom-outputs.svg ++ tagline: HTML not enough? ++ copy: Hugo allows you to output your content in multiple formats, including JSON or AMP, and makes it easy to create your own. ++sections: ++ - heading: "100s of Themes" ++ cta: Check out the Hugo themes. ++ link: http://themes.gohugo.io/ ++ color_classes: bg-accent-color white ++ image: /images/homepage-screenshot-hugo-themes.jpg ++ copy: "Hugo provides a robust theming system that is easy to implement but capable of producing even the most complicated websites." ++ - heading: "Capable Templating" ++ cta: Get Started. ++ link: templates/ ++ color_classes: bg-primary-color-light black ++ image: /images/home-page-templating-example.png ++ copy: "Hugo's Go-based templating provides just the right amount of logic to build anything from the simple to complex. If you prefer Jade/Pug-like syntax, you can also use Amber, Ace, or any combination of the three." ++--- ++ ++Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again. diff --cc docs/content/en/about/_index.md index 00000000,00000000..8ed441b6 new file mode 100644 --- /dev/null +++ b/docs/content/en/about/_index.md @@@ -1,0 -1,0 +1,20 @@@ ++--- ++title: About Hugo ++linktitle: Overview ++description: Hugo's features, roadmap, license, and motivation. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [] ++keywords: [] ++menu: ++ docs: ++ parent: "about" ++ weight: 1 ++weight: 1 ++draft: false ++aliases: [/about-hugo/,/docs/] ++toc: false ++--- ++ ++Hugo is not your average static site generator. diff --cc docs/content/en/about/benefits.md index 00000000,00000000..0ba28c5c new file mode 100644 --- /dev/null +++ b/docs/content/en/about/benefits.md @@@ -1,0 -1,0 +1,43 @@@ ++--- ++title: The Benefits of Static Site Generators ++linktitle: The Benefits of Static ++description: Improved performance, security and ease of use are just a few of the reasons static site generators are so appealing. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++keywords: [ssg,static,performance,security] ++menu: ++ docs: ++ parent: "about" ++ weight: 30 ++weight: 30 ++sections_weight: 30 ++draft: false ++aliases: [] ++toc: false ++--- ++ ++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]: http://www.oreilly.com/web-platform/free/files/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 --cc docs/content/en/about/features.md index 00000000,00000000..9d29c5bd new file mode 100644 --- /dev/null +++ b/docs/content/en/about/features.md @@@ -1,0 -1,0 +1,88 @@@ ++--- ++title: Hugo Features ++linktitle: 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. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++menu: ++ docs: ++ parent: "about" ++ weight: 20 ++weight: 20 ++sections_weight: 20 ++draft: false ++aliases: [/about/features] ++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][], [Amber], and [Ace][] HTML templates ++* [Syntax highlighting][] powered by [Pygments][] ++ ++ ++[Ace]: /templates/alternatives/ ++[aliases]: /content-management/urls/#aliases ++[Amber]: https://github.com/eknkc/amber ++[content summaries]: /content-management/summaries/ ++[content types]: /content-management/types/ ++[Disqus]: https://disqus.com/ ++[Dynamic menu]: /templates/menus/ ++[Extremely fast]: https://github.com/bep/hugo-benchmark ++[front matter]: /content-management/front-matter/ ++[functions]: /functions/ ++[Go]: http://golang.org/pkg/html/template/ ++[Google Analytics]: https://google-analytics.com/ ++[homepage]: /templates/homepage/ ++[hostanywhere]: /hosting-and-deployment/ ++[install]: /getting-started/installing/ ++[LiveReload]: /getting-started/usage/ ++[organization for your projects]: /getting-started/directory-structure/ ++[pagevars]: /variables/page/ ++[Permalink]: /content-management/urls/#permalinks ++[Powerful theming]: /themes/ ++[Pretty URLs]: /content-management/urls/ ++[Pygments]: http://pygments.org/ ++[RSS]: /templates/rss/ ++[Shortcodes]: /content-management/shortcodes/ ++[sort content]: /templates/ ++[supported formats]: /content-management/formats/ ++[Syntax highlighting]: /tools/syntax-highlighting/ ++[table of contents]: /content-management/toc/ ++[taxonomies]: /content-management/taxonomies/ ++[URLs]: /content-management/urls/ diff --cc docs/content/en/about/license.md index 00000000,00000000..a8e7c4ab new file mode 100644 --- /dev/null +++ b/docs/content/en/about/license.md @@@ -1,0 -1,0 +1,165 @@@ ++--- ++title: Apache License ++linktitle: License ++description: Hugo v0.15 and later are released under the Apache 2.0 license. ++date: 2016-02-01 ++publishdate: 2016-02-01 ++lastmod: 2016-03-02 ++categories: ["about hugo"] ++keywords: ["License","apache"] ++menu: ++ docs: ++ parent: "about" ++ weight: 60 ++weight: 60 ++sections_weight: 60 ++aliases: [/meta/license] ++toc: true ++--- ++ ++{{% note %}} ++Hugo v0.15 and later are released under the Apache 2.0 license. ++Earlier versions of Hugo were released under the [Simple Public License](https://opensource.org/licenses/Simple-2.0). ++{{% /note %}} ++ ++_Version 2.0, January 2004_
++ ++ ++*Terms and Conditions for use, reproduction, and distribution* ++ ++## 1. Definitions ++ ++“License” shall mean the terms and conditions for use, reproduction, and ++distribution as defined by Sections 1 through 9 of this document. ++ ++“Licensor” shall mean the copyright owner or entity authorized by the copyright ++owner that is granting the License. ++ ++“Legal Entity” shall mean the union of the acting entity and all other entities ++that control, are controlled by, or are under common control with that entity. ++For the purposes of this definition, “control” means **(i)** the power, direct or ++indirect, to cause the direction or management of such entity, whether by ++contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the ++outstanding shares, or **(iii)** beneficial ownership of such entity. ++ ++“You” (or “Your”) shall mean an individual or Legal Entity exercising ++permissions granted by this License. ++ ++“Source” form shall mean the preferred form for making modifications, including ++but not limited to software source code, documentation source, and configuration ++files. ++ ++“Object” form shall mean any form resulting from mechanical transformation or ++translation of a Source form, including but not limited to compiled object code, ++generated documentation, and conversions to other media types. ++ ++“Work” shall mean the work of authorship, whether in Source or Object form, made ++available under the License, as indicated by a copyright notice that is included ++in or attached to the work (an example is provided in the Appendix below). ++ ++“Derivative Works” shall mean any work, whether in Source or Object form, that ++is based on (or derived from) the Work and for which the editorial revisions, ++annotations, elaborations, or other modifications represent, as a whole, an ++original work of authorship. For the purposes of this License, Derivative Works ++shall not include works that remain separable from, or merely link (or bind by ++name) to the interfaces of, the Work and Derivative Works thereof. ++ ++“Contribution” shall mean any work of authorship, including the original version ++of the Work and any modifications or additions to that Work or Derivative Works ++thereof, that is intentionally submitted to Licensor for inclusion in the Work ++by the copyright owner or by an individual or Legal Entity authorized to submit ++on behalf of the copyright owner. For the purposes of this definition, ++“submitted” means any form of electronic, verbal, or written communication sent ++to the Licensor or its representatives, including but not limited to ++communication on electronic mailing lists, source code control systems, and ++issue tracking systems that are managed by, or on behalf of, the Licensor for ++the purpose of discussing and improving the Work, but excluding communication ++that is conspicuously marked or otherwise designated in writing by the copyright ++owner as “Not a Contribution.” ++ ++“Contributor” shall mean Licensor and any individual or Legal Entity on behalf ++of whom a Contribution has been received by Licensor and subsequently ++incorporated within the Work. ++ ++## 2. Grant of Copyright License ++ ++Subject to the terms and conditions of this License, each Contributor hereby ++grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, ++irrevocable copyright license to reproduce, prepare Derivative Works of, ++publicly display, publicly perform, sublicense, and distribute the Work and such ++Derivative Works in Source or Object form. ++ ++## 3. Grant of Patent License ++ ++Subject to the terms and conditions of this License, each Contributor hereby ++grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, ++irrevocable (except as stated in this section) patent license to make, have ++made, use, offer to sell, sell, import, and otherwise transfer the Work, where ++such license applies only to those patent claims licensable by such Contributor ++that are necessarily infringed by their Contribution(s) alone or by combination ++of their Contribution(s) with the Work to which such Contribution(s) was ++submitted. If You institute patent litigation against any entity (including a ++cross-claim or counterclaim in a lawsuit) alleging that the Work or a ++Contribution incorporated within the Work constitutes direct or contributory ++patent infringement, then any patent licenses granted to You under this License ++for that Work shall terminate as of the date such litigation is filed. ++ ++## 4. Redistribution ++ ++You may reproduce and distribute copies of the Work or Derivative Works thereof ++in any medium, with or without modifications, and in Source or Object form, ++provided that You meet the following conditions: ++ ++* **(a)** You must give any other recipients of the Work or Derivative Works a copy of ++this License; and ++* **(b)** You must cause any modified files to carry prominent notices stating that You ++changed the files; and ++* **\(c)** You must retain, in the Source form of any Derivative Works that You distribute, ++all copyright, patent, trademark, and attribution notices from the Source form ++of the Work, excluding those notices that do not pertain to any part of the ++Derivative Works; and ++* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. ++ ++You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. ++ ++## 5. Submission of Contributions ++ ++Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. ++ ++## 6. Trademarks ++ ++This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. ++ ++## 7. Disclaimer of Warranty ++ ++Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. ++ ++## 8. Limitation of Liability ++ ++In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. ++ ++## 9. Accepting Warranty or Additional Liability ++ ++While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ++ ++_END OF TERMS AND CONDITIONS_ ++ ++## APPENDIX: How to apply the Apache License to your work ++ ++To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets `[]` replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same “printed page” as the copyright notice for easier identification within third-party archives. ++ ++{{< code file="apache-notice.txt" download="apache-notice.txt" >}} ++Copyright [yyyy] [name of copyright owner] ++ ++Licensed under the Apache License, Version 2.0 (the "License"); ++you may not use this file except in compliance with the License. ++You may obtain a copy of the License at ++ ++ http://www.apache.org/licenses/LICENSE-2.0 ++ ++Unless required by applicable law or agreed to in writing, software ++distributed under the License is distributed on an "AS IS" BASIS, ++WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++See the License for the specific language governing permissions and ++limitations under the License. ++{{< /code >}} diff --cc docs/content/en/about/new-in-032/index.md index 00000000,00000000..b8ca6430 new file mode 100644 --- /dev/null +++ b/docs/content/en/about/new-in-032/index.md @@@ -1,0 -1,0 +1,209 @@@ ++--- ++title: Hugo 0.32 HOWTO ++description: About page bundles, image processing and more. ++date: 2017-12-28 ++keywords: [ssg,static,performance,security] ++menu: ++ docs: ++ parent: "about" ++ weight: 10 ++weight: 10 ++sections_weight: 10 ++draft: false ++aliases: [] ++toc: true ++images: ++- images/blog/sunset.jpg ++--- ++ ++ ++{{% note %}} ++This documentation belongs in other places in this documentation site, but is put here first ... to get something up and running fast. ++{{% /note %}} ++ ++ ++Also see this demo project from [bep](https://github.com/bep/), the clever Norwegian behind these new features: ++ ++* http://hugotest.bep.is/ ++* https://github.com/bep/hugotest (source) ++ ++## Page Resources ++ ++### Organize Your Content ++ ++{{< figure src="/images/hugo-content-bundles.png" title="Pages with image resources" >}} ++ ++The content folder above shows a mix of content pages (`md` (i.e. markdown) files) and image resources. ++ ++{{% note %}} ++You can use any file type as a content resource as long as it is a MIME type recognized by Hugo (`json` files will, as one example, work fine). If you want to get exotic, you can define your [own media type](/templates/output-formats/#media-types). ++{{% /note %}} ++ ++The 3 page bundles marked in red explained from top to bottom: ++ ++1. The home page with one image resource (`1-logo.png`) ++2. The blog section with two images resources and two pages resources (`content1.md`, `content2.md`). Note that the `_index.md` represents the URL for this section. ++3. An article (`hugo-is-cool`) with a folder with some images and one content resource (`cats-info.md`). Note that the `index.md` represents the URL for this article. ++ ++The content files below `blog/posts` are just regular standalone pages. ++ ++{{% note %}} ++Note that changes to any resource inside the `content` folder will trigger a reload when running in watch (aka server or live reload mode), it will even work with `--navigateToChanged`. ++{{% /note %}} ++ ++#### Sort Order ++ ++* Pages are sorted according to standard Hugo page sorting rules. ++* Images and other resources are sorted in lexicographical order. ++ ++### Handle Page Resources in Templates ++ ++ ++#### List all Resources ++ ++```go-html-template ++{{ range .Resources }} ++
  • {{ .ResourceType | title }}
  • ++{{ end }} ++``` ++ ++For an absolute URL, use `.Permalink`. ++ ++**Note:** The permalink will be relative to the content page, respecting permalink settings. Also, included page resources will not have a value for `RelPermalink`. ++ ++#### List All Resources by Type ++ ++```go-html-template ++{{ with .Resources.ByType "image" }} ++{{ end }} ++ ++``` ++ ++Type here is `page` for pages, else the main type in the MIME type, so `image`, `json` etc. ++ ++#### Get a Specific Resource ++ ++```go-html-template ++{{ $logo := .Resources.GetByPrefix "logo" }} ++{{ with $logo }} ++{{ end }} ++``` ++ ++#### Include Page Resource Content ++ ++```go-html-template ++{{ with .Resources.ByType "page" }} ++{{ range . }} ++

    {{ .Title }}

    ++{{ .Content }} ++{{ end }} ++{{ end }} ++ ++``` ++ ++ ++## Image Processing ++ ++The `image` resource implements the methods `Resize`, `Fit` and `Fill`: ++ ++Resize ++: Resize to the given dimension, `{{ $logo.Resize "200x" }}` will resize to 200 pixels wide and preserve the aspect ratio. Use `{{ $logo.Resize "200x100" }}` to control both height and width. ++ ++Fit ++: Scale down the image to fit the given dimensions, e.g. `{{ $logo.Fit "200x100" }}` will fit the image inside a box that is 200 pixels wide and 100 pixels high. ++ ++Fill ++: Resize and crop the image given dimensions, e.g. `{{ $logo.Fill "200x100" }}` will resize and crop to width 200 and height 100 ++ ++ ++{{% note %}} ++Image operations in Hugo currently **do not preserve EXIF data** as this is not supported by Go's [image package](https://github.com/golang/go/search?q=exif&type=Issues&utf8=%E2%9C%93). This will be improved on in the future. ++{{% /note %}} ++ ++ ++### Image Processing Examples ++ ++_The photo of the sunset used in the examples below is Copyright [Bjørn Erik Pedersen](https://commons.wikimedia.org/wiki/User:Bep) (Creative Commons Attribution-Share Alike 4.0 International license)_ ++ ++ ++{{< imgproc sunset Resize "300x" />}} ++ ++{{< imgproc sunset Fill "90x120 left" />}} ++ ++{{< imgproc sunset Fill "90x120 right" />}} ++ ++{{< imgproc sunset Fit "90x90" />}} ++ ++{{< imgproc sunset Resize "300x q10" />}} ++ ++ ++This is the shortcode used in the examples above: ++ ++ ++{{< code file="layouts/shortcodes/imgproc.html" >}} ++{{< readfile file="layouts/shortcodes/imgproc.html" >}} ++{{< /code >}} ++ ++And it is used like this: ++ ++```go-html-template ++{{}} ++``` ++ ++### Image Processing Options ++ ++In addition to the dimensions (e.g. `200x100`) where either height or width can be omitted, Hugo supports a set of additional image options: ++ ++Anchor ++: Only relevant for `Fill`. This is useful for thumbnail generation where the main motive is located in, say, the left corner. Valid are `Center`, `TopLeft`, `Top`, `TopRight`, `Left`, `Right`, `BottomLeft`, `Bottom`, `BottomRight`. Example: `{{ $logo.Fill "200x100 BottomLeft" }}` ++ ++JPEG Quality ++: Only relevant for JPEG images, values 1 to 100 inclusive, higher is better. Default is 75. `{{ $logo.Resize "200x q50" }}` ++ ++Rotate ++: Rotates an image by the given angle counter-clockwise. The rotation will be performed first to get the dimensions correct. `{{ $logo.Resize "200x r90" }}`. The main use of this is to be able to manually correct for [EXIF orientation](https://github.com/golang/go/issues/4341) of JPEG images. ++ ++Resample Filter ++: Filter used in resizing. Default is `Box`, a simple and fast resampling filter appropriate for downscaling. See https://github.com/disintegration/imaging for more. If you want to trade quality for faster processing, this may be a option to test. ++ ++ ++ ++### Performance ++ ++Processed images are stored below `/resources` (can be set with `resourceDir` config setting). This folder is deliberately placed in the project, as it is recommended to check these into source control as part of the project. These images are not "Hugo fast" to generate, but once generated they can be reused. ++ ++If you change your image settings (e.g. size), remove or rename images etc., you will end up with unused images taking up space and cluttering your project. ++ ++To clean up, run: ++ ++```bash ++hugo --gc ++``` ++ ++ ++{{% note %}} ++**GC** is short for **Garbage Collection**. ++{{% /note %}} ++ ++ ++## Configuration ++ ++### Default Image Processing Config ++ ++You can configure an `imaging` section in `config.toml` with default image processing options: ++ ++```toml ++[imaging] ++# Default resample filter used for resizing. Default is Box, ++# a simple and fast averaging filter appropriate for downscaling. ++# See https://github.com/disintegration/imaging ++resampleFilter = "box" ++ ++# Defatult JPEG quality setting. Default is 75. ++quality = 68 ++``` ++ ++ ++ ++ ++ diff --cc docs/content/en/about/new-in-032/sunset.jpg index 00000000,00000000..7d7307be new file mode 100644 Binary files differ diff --cc docs/content/en/about/what-is-hugo.md index 00000000,00000000..2c7339f7 new file mode 100644 --- /dev/null +++ b/docs/content/en/about/what-is-hugo.md @@@ -1,0 -1,0 +1,69 @@@ ++--- ++title: What is Hugo ++linktitle: What is Hugo ++description: Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++layout: single ++menu: ++ docs: ++ parent: "about" ++ weight: 10 ++weight: 10 ++sections_weight: 10 ++draft: false ++aliases: [/overview/introduction/,/about/why-i-built-hugo/] ++toc: true ++--- ++ ++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][], [Aerobatic][], [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 ++[Aerobatic]: https://www.aerobatic.com/ ++[Amazon S3]: http://aws.amazon.com/s3/ ++[Azure]: https://blogs.msdn.microsoft.com/acoat/2016/01/28/publish-a-static-web-site-using-azure-web-apps/ ++[CloudFront]: http://aws.amazon.com/cloudfront/ "Amazon CloudFront" ++[contributing to it]: https://github.com/gohugoio/hugo ++[DreamHost]: http://www.dreamhost.com/ ++[Firebase]: https://firebase.google.com/docs/hosting/ "Firebase static hosting" ++[GitHub Pages]: https://pages.github.com/ ++[GitLab Pages]: https://about.gitlab.com/features/pages/ ++[Go language]: https://golang.org/ ++[GoDaddy]: https://www.godaddy.com/ "Godaddy.com Hosting" ++[Google Cloud Storage]: http://cloud.google.com/storage/ ++[Heroku]: https://www.heroku.com/ ++[Jekyll]: http://jekyllrb.com/ ++[Jekyll]: https://jekyllrb.com/ ++[Middleman]: https://middlemanapp.com/ ++[Middleman]: https://middlemanapp.com/ ++[Nanoc]: http://nanoc.ws/ ++[Nanoc]: https://nanoc.ws/ ++[Netlify]: https://netlify.com ++[rackspace]: https://www.rackspace.com/cloud/files ++[static site generator]: /about/benefits/ ++[Rackspace]: https://www.rackspace.com/cloud/files ++[static site generator]: /about/benefits/ ++[Surge]: https://surge.sh diff --cc docs/content/en/commands/hugo.md index 00000000,00000000..18aed3b7 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo.md @@@ -1,0 -1,0 +1,80 @@@ ++--- ++date: 2018-04-16 ++title: "hugo" ++slug: hugo ++url: /commands/hugo/ ++--- ++## hugo ++ ++hugo builds your site ++ ++### Synopsis ++ ++hugo is the main command, used to build your Hugo site. ++ ++Hugo is a Fast and Flexible Static Site Generator ++built with love by spf13 and friends in Go. ++ ++Complete documentation is available at http://gohugo.io/. ++ ++``` ++hugo [flags] ++``` ++ ++### Options ++ ++``` ++ -b, --baseURL string hostname (and path) to the root, e.g. http://spf13.com/ ++ -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. Defaults: $TMPDIR/hugo_cache/ ++ --canonifyURLs (deprecated) if true, all relative URLs will be canonicalized using baseURL ++ --cleanDestinationDir remove files from destination not found in static directories ++ --config string config file (default is path/config.yaml|json|toml) ++ -c, --contentDir string filesystem path to content directory ++ --debug debug output ++ -d, --destination string filesystem path to write files to ++ --disableKinds stringSlice disable different kind of pages (home, RSS etc.) ++ --enableGitInfo add Git revision, date and author 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 hugo ++ --i18n-warnings print missing translations ++ --ignoreCache ignores the cache directory ++ -l, --layoutDir string filesystem path to layout directory ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --noChmod don't sync permission mode of files ++ --noTimes don't sync modification time of files ++ --pluralizeListTitles (deprecated) pluralize titles in lists using inflect (default true) ++ --preserveTaxonomyNames (deprecated) preserve taxonomy names as written ("Gérard Depardieu" vs "gerard-depardieu") ++ --quiet build in quiet mode ++ --renderToMemory render to memory (only useful for benchmark testing) ++ -s, --source string filesystem path to read files relative from ++ --stepAnalysis display memory and timing of different steps of the program ++ --templateMetrics display metrics about template executions ++ --templateMetricsHints calculate some improvement hints when combined with --templateMetrics ++ -t, --theme string theme to use (located in /themes/THEMENAME/) ++ --themesDir string filesystem path to themes directory ++ --uglyURLs (deprecated) if true, use /filename.html instead of /filename/ ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++ -w, --watch watch filesystem for changes and recreate as needed ++``` ++ ++### SEE ALSO ++ ++* [hugo benchmark](/commands/hugo_benchmark/) - Benchmark Hugo by building a site a number of times. ++* [hugo check](/commands/hugo_check/) - Contains some verification checks ++* [hugo config](/commands/hugo_config/) - Print the site configuration ++* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats ++* [hugo env](/commands/hugo_env/) - Print Hugo version and environment info ++* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. ++* [hugo import](/commands/hugo_import/) - Import your site from others. ++* [hugo list](/commands/hugo_list/) - Listing out various types of content ++* [hugo new](/commands/hugo_new/) - Create new content for your site ++* [hugo server](/commands/hugo_server/) - A high performance webserver ++* [hugo version](/commands/hugo_version/) - Print the version number of Hugo ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_benchmark.md index 00000000,00000000..63348c36 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_benchmark.md @@@ -1,0 -1,0 +1,73 @@@ ++--- ++date: 2018-04-16 ++title: "hugo benchmark" ++slug: hugo_benchmark ++url: /commands/hugo_benchmark/ ++--- ++## hugo benchmark ++ ++Benchmark Hugo by building a site a number of times. ++ ++### Synopsis ++ ++Hugo can build a site many times over and analyze the running process ++creating a benchmark. ++ ++``` ++hugo benchmark [flags] ++``` ++ ++### Options ++ ++``` ++ -b, --baseURL string hostname (and path) to the root, e.g. http://spf13.com/ ++ -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. Defaults: $TMPDIR/hugo_cache/ ++ --canonifyURLs (deprecated) if true, all relative URLs will be canonicalized using baseURL ++ --cleanDestinationDir remove files from destination not found in static directories ++ -c, --contentDir string filesystem path to content directory ++ -n, --count int number of times to build the site (default 13) ++ --cpuprofile string path/filename for the CPU profile file ++ -d, --destination string filesystem path to write files to ++ --disableKinds stringSlice disable different kind of pages (home, RSS etc.) ++ --enableGitInfo add Git revision, date and author 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 benchmark ++ --i18n-warnings print missing translations ++ --ignoreCache ignores the cache directory ++ -l, --layoutDir string filesystem path to layout directory ++ --memprofile string path/filename for the memory profile file ++ --noChmod don't sync permission mode of files ++ --noTimes don't sync modification time of files ++ --pluralizeListTitles (deprecated) pluralize titles in lists using inflect (default true) ++ --preserveTaxonomyNames (deprecated) preserve taxonomy names as written ("Gérard Depardieu" vs "gerard-depardieu") ++ --renderToMemory render to memory (only useful for benchmark testing) ++ -s, --source string filesystem path to read files relative from ++ --stepAnalysis display memory and timing of different steps of the program ++ --templateMetrics display metrics about template executions ++ --templateMetricsHints calculate some improvement hints when combined with --templateMetrics ++ -t, --theme string theme to use (located in /themes/THEMENAME/) ++ --themesDir string filesystem path to themes directory ++ --uglyURLs (deprecated) if true, use /filename.html instead of /filename/ ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_check.md index 00000000,00000000..239934dc new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_check.md @@@ -1,0 -1,0 +1,38 @@@ ++--- ++date: 2018-04-16 ++title: "hugo check" ++slug: hugo_check ++url: /commands/hugo_check/ ++--- ++## hugo check ++ ++Contains some verification checks ++ ++### Synopsis ++ ++Contains some verification checks ++ ++### Options ++ ++``` ++ -h, --help help for check ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++* [hugo check ulimit](/commands/hugo_check_ulimit/) - Check system ulimit settings ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_check_ulimit.md index 00000000,00000000..340a5125 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_check_ulimit.md @@@ -1,0 -1,0 +1,42 @@@ ++--- ++date: 2018-04-16 ++title: "hugo check ulimit" ++slug: hugo_check_ulimit ++url: /commands/hugo_check_ulimit/ ++--- ++## hugo check ulimit ++ ++Check system ulimit settings ++ ++### Synopsis ++ ++Hugo will inspect the current ulimit settings on the system. ++This is primarily to ensure that Hugo can watch enough files on some OSs ++ ++``` ++hugo check ulimit [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for ulimit ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo check](/commands/hugo_check/) - Contains some verification checks ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_config.md index 00000000,00000000..66f3372a new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_config.md @@@ -1,0 -1,0 +1,42 @@@ ++--- ++date: 2018-04-16 ++title: "hugo config" ++slug: hugo_config ++url: /commands/hugo_config/ ++--- ++## hugo config ++ ++Print the site configuration ++ ++### Synopsis ++ ++Print the site configuration, both default and custom settings. ++ ++``` ++hugo config [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for config ++ -s, --source string filesystem path to read files relative from ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_convert.md index 00000000,00000000..7ed15d30 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_convert.md @@@ -1,0 -1,0 +1,45 @@@ ++--- ++date: 2018-04-16 ++title: "hugo convert" ++slug: hugo_convert ++url: /commands/hugo_convert/ ++--- ++## hugo convert ++ ++Convert your content to different formats ++ ++### Synopsis ++ ++Convert your content (e.g. front matter) to different formats. ++ ++See convert's subcommands toJSON, toTOML and toYAML for more information. ++ ++### Options ++ ++``` ++ -h, --help help for convert ++ -o, --output string filesystem path to write files to ++ -s, --source string filesystem path to read files relative from ++ --unsafe enable less safe operations, please backup first ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++* [hugo convert toJSON](/commands/hugo_convert_tojson/) - Convert front matter to JSON ++* [hugo convert toTOML](/commands/hugo_convert_totoml/) - Convert front matter to TOML ++* [hugo convert toYAML](/commands/hugo_convert_toyaml/) - Convert front matter to YAML ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_convert_toJSON.md index 00000000,00000000..03e2f692 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_convert_toJSON.md @@@ -1,0 -1,0 +1,45 @@@ ++--- ++date: 2018-04-16 ++title: "hugo convert toJSON" ++slug: hugo_convert_toJSON ++url: /commands/hugo_convert_tojson/ ++--- ++## hugo convert toJSON ++ ++Convert front matter to JSON ++ ++### Synopsis ++ ++toJSON converts all front matter in the content directory ++to use JSON for the front matter. ++ ++``` ++hugo convert toJSON [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for toJSON ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ -o, --output string filesystem path to write files to ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ --unsafe enable less safe operations, please backup first ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_convert_toTOML.md index 00000000,00000000..9abb418b new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_convert_toTOML.md @@@ -1,0 -1,0 +1,45 @@@ ++--- ++date: 2018-04-16 ++title: "hugo convert toTOML" ++slug: hugo_convert_toTOML ++url: /commands/hugo_convert_totoml/ ++--- ++## hugo convert toTOML ++ ++Convert front matter to TOML ++ ++### Synopsis ++ ++toTOML converts all front matter in the content directory ++to use TOML for the front matter. ++ ++``` ++hugo convert toTOML [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for toTOML ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ -o, --output string filesystem path to write files to ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ --unsafe enable less safe operations, please backup first ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_convert_toYAML.md index 00000000,00000000..8d87896e new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_convert_toYAML.md @@@ -1,0 -1,0 +1,45 @@@ ++--- ++date: 2018-04-16 ++title: "hugo convert toYAML" ++slug: hugo_convert_toYAML ++url: /commands/hugo_convert_toyaml/ ++--- ++## hugo convert toYAML ++ ++Convert front matter to YAML ++ ++### Synopsis ++ ++toYAML converts all front matter in the content directory ++to use YAML for the front matter. ++ ++``` ++hugo convert toYAML [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for toYAML ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ -o, --output string filesystem path to write files to ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ --unsafe enable less safe operations, please backup first ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_env.md index 00000000,00000000..b6062724 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_env.md @@@ -1,0 -1,0 +1,41 @@@ ++--- ++date: 2018-04-16 ++title: "hugo env" ++slug: hugo_env ++url: /commands/hugo_env/ ++--- ++## hugo env ++ ++Print Hugo version and environment info ++ ++### Synopsis ++ ++Print Hugo version and environment info. This is useful in Hugo bug reports. ++ ++``` ++hugo env [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for env ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_gen.md index 00000000,00000000..025fe587 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_gen.md @@@ -1,0 -1,0 +1,41 @@@ ++--- ++date: 2018-04-16 ++title: "hugo gen" ++slug: hugo_gen ++url: /commands/hugo_gen/ ++--- ++## hugo gen ++ ++A collection of several useful generators. ++ ++### Synopsis ++ ++A collection of several useful generators. ++ ++### Options ++ ++``` ++ -h, --help help for gen ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++* [hugo gen autocomplete](/commands/hugo_gen_autocomplete/) - Generate shell autocompletion script for Hugo ++* [hugo gen chromastyles](/commands/hugo_gen_chromastyles/) - Generate CSS stylesheet for the Chroma code highlighter ++* [hugo gen doc](/commands/hugo_gen_doc/) - Generate Markdown documentation for the Hugo CLI. ++* [hugo gen man](/commands/hugo_gen_man/) - Generate man pages for the Hugo CLI ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_gen_autocomplete.md index 00000000,00000000..2d327f64 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_gen_autocomplete.md @@@ -1,0 -1,0 +1,59 @@@ ++--- ++date: 2018-04-16 ++title: "hugo gen autocomplete" ++slug: hugo_gen_autocomplete ++url: /commands/hugo_gen_autocomplete/ ++--- ++## hugo gen autocomplete ++ ++Generate shell autocompletion script for Hugo ++ ++### Synopsis ++ ++Generates a shell autocompletion script for Hugo. ++ ++NOTE: The current version supports Bash only. ++ This should work for *nix systems with Bash installed. ++ ++By default, the file is written directly to /etc/bash_completion.d ++for convenience, and the command may need superuser rights, e.g.: ++ ++ $ sudo hugo gen autocomplete ++ ++Add `--completionfile=/path/to/file` flag to set alternative ++file-path and name. ++ ++Logout and in again to reload the completion scripts, ++or just source them in directly: ++ ++ $ . /etc/bash_completion ++ ++``` ++hugo gen autocomplete [flags] ++``` ++ ++### Options ++ ++``` ++ --completionfile string autocompletion file (default "/etc/bash_completion.d/hugo.sh") ++ -h, --help help for autocomplete ++ --type string autocompletion type (currently only bash supported) (default "bash") ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_gen_chromastyles.md index 00000000,00000000..4db33e88 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_gen_chromastyles.md @@@ -1,0 -1,0 +1,46 @@@ ++--- ++date: 2018-04-16 ++title: "hugo gen chromastyles" ++slug: hugo_gen_chromastyles ++url: /commands/hugo_gen_chromastyles/ ++--- ++## hugo gen chromastyles ++ ++Generate CSS stylesheet for the Chroma code highlighter ++ ++### Synopsis ++ ++Generate CSS stylesheet for the Chroma code highlighter for a given style. This stylesheet is needed if pygmentsUseClasses is enabled in config. ++ ++See https://help.farbox.com/pygments.html for preview of available styles ++ ++``` ++hugo gen chromastyles [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for chromastyles ++ --highlightStyle string style used for highlighting lines (see https://github.com/alecthomas/chroma) (default "bg:#ffffcc") ++ --linesStyle string style used for line numbers (see https://github.com/alecthomas/chroma) ++ --style string highlighter style (see https://help.farbox.com/pygments.html) (default "friendly") ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_gen_doc.md index 00000000,00000000..2abf0c5a new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_gen_doc.md @@@ -1,0 -1,0 +1,48 @@@ ++--- ++date: 2018-04-16 ++title: "hugo gen doc" ++slug: hugo_gen_doc ++url: /commands/hugo_gen_doc/ ++--- ++## hugo gen doc ++ ++Generate Markdown documentation for the Hugo CLI. ++ ++### Synopsis ++ ++Generate Markdown documentation for the Hugo CLI. ++ ++This command is, mostly, used to create up-to-date documentation ++of Hugo's command-line interface for http://gohugo.io/. ++ ++It creates one Markdown file per command with front matter suitable ++for rendering in Hugo. ++ ++``` ++hugo gen doc [flags] ++``` ++ ++### Options ++ ++``` ++ --dir string the directory to write the doc. (default "/tmp/hugodoc/") ++ -h, --help help for doc ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_gen_man.md index 00000000,00000000..50b72d89 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_gen_man.md @@@ -1,0 -1,0 +1,44 @@@ ++--- ++date: 2018-04-16 ++title: "hugo gen man" ++slug: hugo_gen_man ++url: /commands/hugo_gen_man/ ++--- ++## hugo gen man ++ ++Generate man pages for the Hugo CLI ++ ++### Synopsis ++ ++This command automatically generates up-to-date man pages of Hugo's ++command-line interface. By default, it creates the man page files ++in the "man" directory under the current directory. ++ ++``` ++hugo gen man [flags] ++``` ++ ++### Options ++ ++``` ++ --dir string the directory to write the man pages. (default "man/") ++ -h, --help help for man ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_import.md index 00000000,00000000..5dae58be new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_import.md @@@ -1,0 -1,0 +1,40 @@@ ++--- ++date: 2018-04-16 ++title: "hugo import" ++slug: hugo_import ++url: /commands/hugo_import/ ++--- ++## hugo import ++ ++Import your site from others. ++ ++### Synopsis ++ ++Import your site from other web site generators like Jekyll. ++ ++Import requires a subcommand, e.g. `hugo import jekyll jekyll_root_path target_path`. ++ ++### Options ++ ++``` ++ -h, --help help for import ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++* [hugo import jekyll](/commands/hugo_import_jekyll/) - hugo import from Jekyll ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_import_jekyll.md index 00000000,00000000..c61116c6 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_import_jekyll.md @@@ -1,0 -1,0 +1,44 @@@ ++--- ++date: 2018-04-16 ++title: "hugo import jekyll" ++slug: hugo_import_jekyll ++url: /commands/hugo_import_jekyll/ ++--- ++## hugo import jekyll ++ ++hugo import from Jekyll ++ ++### Synopsis ++ ++hugo import from Jekyll. ++ ++Import from Jekyll requires two paths, e.g. `hugo import jekyll jekyll_root_path target_path`. ++ ++``` ++hugo import jekyll [flags] ++``` ++ ++### Options ++ ++``` ++ --force allow import into non-empty target directory ++ -h, --help help for jekyll ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo import](/commands/hugo_import/) - Import your site from others. ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_list.md index 00000000,00000000..69c3f8aa new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_list.md @@@ -1,0 -1,0 +1,43 @@@ ++--- ++date: 2018-04-16 ++title: "hugo list" ++slug: hugo_list ++url: /commands/hugo_list/ ++--- ++## hugo list ++ ++Listing out various types of content ++ ++### Synopsis ++ ++Listing out various types of content. ++ ++List requires a subcommand, e.g. `hugo list drafts`. ++ ++### Options ++ ++``` ++ -h, --help help for list ++ -s, --source string filesystem path to read files relative from ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++* [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 ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_list_drafts.md index 00000000,00000000..c5f6251f new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_list_drafts.md @@@ -1,0 -1,0 +1,42 @@@ ++--- ++date: 2018-04-16 ++title: "hugo list drafts" ++slug: hugo_list_drafts ++url: /commands/hugo_list_drafts/ ++--- ++## hugo list drafts ++ ++List all drafts ++ ++### Synopsis ++ ++List all of the drafts in your content directory. ++ ++``` ++hugo list drafts [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for drafts ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo list](/commands/hugo_list/) - Listing out various types of content ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_list_expired.md index 00000000,00000000..6e5bc37b new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_list_expired.md @@@ -1,0 -1,0 +1,43 @@@ ++--- ++date: 2018-04-16 ++title: "hugo list expired" ++slug: hugo_list_expired ++url: /commands/hugo_list_expired/ ++--- ++## hugo list expired ++ ++List all posts already expired ++ ++### Synopsis ++ ++List all of the posts in your content directory which has already ++expired. ++ ++``` ++hugo list expired [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for expired ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo list](/commands/hugo_list/) - Listing out various types of content ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_list_future.md index 00000000,00000000..4fc13844 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_list_future.md @@@ -1,0 -1,0 +1,43 @@@ ++--- ++date: 2018-04-16 ++title: "hugo list future" ++slug: hugo_list_future ++url: /commands/hugo_list_future/ ++--- ++## hugo list future ++ ++List all posts dated in the future ++ ++### Synopsis ++ ++List all of the posts in your content directory which will be ++posted in the future. ++ ++``` ++hugo list future [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for future ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo list](/commands/hugo_list/) - Listing out various types of content ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_new.md index 00000000,00000000..448951c9 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_new.md @@@ -1,0 -1,0 +1,51 @@@ ++--- ++date: 2018-04-16 ++title: "hugo new" ++slug: hugo_new ++url: /commands/hugo_new/ ++--- ++## hugo new ++ ++Create new content for your site ++ ++### Synopsis ++ ++Create a new content file and automatically set the date and title. ++It will guess which kind of file to create based on the path provided. ++ ++You can also specify the kind with `-k KIND`. ++ ++If archetypes are provided in your theme or site, they will be used. ++ ++``` ++hugo new [path] [flags] ++``` ++ ++### Options ++ ++``` ++ --editor string edit new content with this editor, if provided ++ -h, --help help for new ++ -k, --kind string content type to create ++ -s, --source string filesystem path to read files relative from ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++* [hugo new site](/commands/hugo_new_site/) - Create a new site (skeleton) ++* [hugo new theme](/commands/hugo_new_theme/) - Create a new theme ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_new_site.md index 00000000,00000000..65316f7c new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_new_site.md @@@ -1,0 -1,0 +1,46 @@@ ++--- ++date: 2018-04-16 ++title: "hugo new site" ++slug: hugo_new_site ++url: /commands/hugo_new_site/ ++--- ++## hugo new site ++ ++Create a new site (skeleton) ++ ++### Synopsis ++ ++Create a new site in the provided directory. ++The new site will have the correct structure, but no content or theme yet. ++Use `hugo new [contentPath]` to create new content. ++ ++``` ++hugo new site [path] [flags] ++``` ++ ++### Options ++ ++``` ++ --force init inside non-empty directory ++ -f, --format string config & frontmatter format (default "toml") ++ -h, --help help for site ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo new](/commands/hugo_new/) - Create new content for your site ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_new_theme.md index 00000000,00000000..a7def203 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_new_theme.md @@@ -1,0 -1,0 +1,45 @@@ ++--- ++date: 2018-04-16 ++title: "hugo new theme" ++slug: hugo_new_theme ++url: /commands/hugo_new_theme/ ++--- ++## hugo new theme ++ ++Create a new theme ++ ++### Synopsis ++ ++Create a new theme (skeleton) called [name] in the current directory. ++New theme is a skeleton. Please add content to the touched files. Add your ++name to the copyright line in the license and adjust the theme.toml file ++as you see fit. ++ ++``` ++hugo new theme [name] [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for theme ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -s, --source string filesystem path to read files relative from ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo new](/commands/hugo_new/) - Create new content for your site ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_server.md index 00000000,00000000..c3ed93bc new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_server.md @@@ -1,0 -1,0 +1,91 @@@ ++--- ++date: 2018-04-16 ++title: "hugo server" ++slug: hugo_server ++url: /commands/hugo_server/ ++--- ++## hugo server ++ ++A high performance webserver ++ ++### Synopsis ++ ++Hugo provides its own webserver which builds and serves the site. ++While hugo server is high performance, it is a webserver with limited options. ++Many run it in production, but the standard behavior is for people to use it ++in development and use a more full featured server such as Nginx or Caddy. ++ ++'hugo server' will avoid writing the rendered and served content to disk, ++preferring to store it in 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 ++and push the latest content to them. As most Hugo sites are built in a fraction ++of a second, you will be able to save and see your changes nearly instantly. ++ ++``` ++hugo server [flags] ++``` ++ ++### Options ++ ++``` ++ --appendPort append port to baseURL (default true) ++ -b, --baseURL string hostname (and path) to the root, e.g. http://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. Defaults: $TMPDIR/hugo_cache/ ++ --canonifyURLs (deprecated) if true, all relative URLs will be canonicalized using baseURL ++ --cleanDestinationDir remove files from destination not found in static directories ++ -c, --contentDir string filesystem path to content directory ++ -d, --destination string filesystem path to write files to ++ --disableFastRender enables full re-renders on changes ++ --disableKinds stringSlice disable different kind of pages (home, RSS etc.) ++ --disableLiveReload watch without enabling live browser reload on rebuild ++ --enableGitInfo add Git revision, date and author 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 ++ --i18n-warnings print missing translations ++ --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 ++ --navigateToChanged navigate to changed content file on live browser reload ++ --noChmod don't sync permission mode of files ++ --noHTTPCache prevent HTTP caching ++ --noTimes don't sync modification time of files ++ --pluralizeListTitles (deprecated) pluralize titles in lists using inflect (default true) ++ -p, --port int port on which the server will listen (default 1313) ++ --preserveTaxonomyNames (deprecated) preserve taxonomy names as written ("Gérard Depardieu" vs "gerard-depardieu") ++ --renderToDisk render to Destination path (default is render to memory & serve from there) ++ -s, --source string filesystem path to read files relative from ++ --stepAnalysis display memory and timing of different steps of the program ++ --templateMetrics display metrics about template executions ++ --templateMetricsHints calculate some improvement hints when combined with --templateMetrics ++ -t, --theme string theme to use (located in /themes/THEMENAME/) ++ --themesDir string filesystem path to themes directory ++ --uglyURLs (deprecated) if true, use /filename.html instead of /filename/ ++ -w, --watch watch filesystem for changes and recreate as needed (default true) ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/commands/hugo_version.md index 00000000,00000000..308013a4 new file mode 100644 --- /dev/null +++ b/docs/content/en/commands/hugo_version.md @@@ -1,0 -1,0 +1,41 @@@ ++--- ++date: 2018-04-16 ++title: "hugo version" ++slug: hugo_version ++url: /commands/hugo_version/ ++--- ++## hugo version ++ ++Print the version number of Hugo ++ ++### Synopsis ++ ++All software has versions. This is Hugo's. ++ ++``` ++hugo version [flags] ++``` ++ ++### Options ++ ++``` ++ -h, --help help for version ++``` ++ ++### Options inherited from parent commands ++ ++``` ++ --config string config file (default is path/config.yaml|json|toml) ++ --debug debug output ++ --log enable Logging ++ --logFile string log File path (if set, logging enabled automatically) ++ --quiet build in quiet mode ++ -v, --verbose verbose output ++ --verboseLog verbose logging ++``` ++ ++### SEE ALSO ++ ++* [hugo](/commands/hugo/) - hugo builds your site ++ ++###### Auto generated by spf13/cobra on 16-Apr-2018 diff --cc docs/content/en/content-management/_index.md index 00000000,00000000..28f2ecf8 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/_index.md @@@ -1,0 -1,0 +1,20 @@@ ++--- ++title: Content Management ++linktitle: Content Management Overview ++description: Hugo makes managing large static sites easy with support for archetypes, content types, menus, cross references, summaries, and more. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++menu: ++ docs: ++ parent: "content-management" ++ weight: 1 ++keywords: [source, organization] ++categories: [content management] ++weight: 01 #rem ++draft: false ++aliases: [/content/,/content/organization] ++toc: false ++--- ++ ++A static site generator needs to extend beyond front matter and a couple of templates to be both scalable and *manageable*. Hugo was designed with not only developers in mind, but also content managers and authors. diff --cc docs/content/en/content-management/archetypes.md index 00000000,00000000..904ca8c3 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/archetypes.md @@@ -1,0 -1,0 +1,75 @@@ ++--- ++title: Archetypes ++linktitle: Archetypes ++description: Archetypes are templates used when creating new content. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++keywords: [archetypes,generators,metadata,front matter] ++categories: ["content management"] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 70 ++ quicklinks: ++weight: 70 #rem ++draft: false ++aliases: [/content/archetypes/] ++toc: true ++--- ++ ++## What are Archetypes? ++ ++**Archetypes** are content template files in the [archetypes directory][] of your project that contain preconfigured [front matter][] and possibly also a content disposition for your website's [content types][]. These will be used when you run `hugo new`. ++ ++ ++The `hugo new` uses the `content-section` to find the most suitable archetype template in your project. If your project does not contain any archetype files, it will also look in the theme. ++ ++{{< code file="archetype-example.sh" >}} ++hugo new posts/my-first-post.md ++{{< /code >}} ++ ++The above will create a new content file in `content/posts/my-first-post.md` using the first archetype file found of these: ++ ++1. `archetypes/posts.md` ++2. `archetypes/default.md` ++3. `themes/my-theme/archetypes/posts.md` ++4. `themes/my-theme/archetypes/default.md` ++ ++The last two list items is only applicable if you use a theme and it uses the `my-theme` theme name as an example. ++ ++## Create a New Archetype Template ++ ++A fictional example for the section `newsletter` and the archetype file `archetypes/newsletter.md`. Create a new file in `archetypes/newsletter.md` and open it in a text editor. ++ ++{{< code file="archetypes/newsletter.md" >}} ++--- ++title: "{{ replace .Name "-" " " | title }}" ++date: {{ .Date }} ++draft: true ++--- ++ ++**Insert Lead paragraph here.** ++ ++## New Cool Posts ++ ++{{ range first 10 ( where .Site.RegularPages "Type" "cool" ) }} ++* {{ .Title }} ++{{ end }} ++{{< /code >}} ++ ++When you create a new newsletter with: ++ ++```bash ++hugo new newsletter/the-latest-cool.stuff.md ++``` ++ ++It will create a new newsletter type of content file based on the archetype template. ++ ++**Note:** the site will only be built if the `.Site` is in use in the archetype file, and this can be time consuming for big sites. ++ ++The above _newsletter type archetype_ illustrates the possibilities: The full Hugo `.Site` and all of Hugo's template funcs can be used in the archetype file. ++ ++ ++[archetypes directory]: /getting-started/directory-structure/ ++[content types]: /content-management/types/ ++[front matter]: /content-management/front-matter/ diff --cc docs/content/en/content-management/authors.md index 00000000,00000000..afc94fa6 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/authors.md @@@ -1,0 -1,0 +1,185 @@@ ++--- ++title: Authors ++linktitle: Authors ++description: ++date: 2016-08-22 ++publishdate: 2017-03-12 ++lastmod: 2017-03-12 ++keywords: [authors] ++categories: ["content management"] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 55 ++weight: 55 #rem ++draft: true ++aliases: [/content/archetypes/] ++toc: true ++comments: Before this page is published, need to also update both site- and page-level variables documentation. ++--- ++ ++ ++ ++Larger sites often have multiple content authors. Hugo provides standardized author profiles to organize relationships between content and content creators for sites operating under a distributed authorship model. ++ ++## Author Profiles ++ ++You can create a profile containing metadata for each author on your website. These profiles have to be saved under `data/_authors/`. The filename of the profile will later be used as an identifier. This way Hugo can associate content with one or multiple authors. An author's profile can be defined in the JSON, YAML, or TOML format. ++ ++### Example: Author Profile ++ ++Let's suppose Alice Allison is a blogger. A simple unique identifier would be `alice`. Now, we have to create a file called `alice.toml` in the `data/_authors/` directory. The following example is the standardized template written in TOML: ++ ++{{< code file="data/_authors/alice.toml" >}} ++givenName = "Alice" # or firstName as alias ++familyName = "Allison" # or lastName as alias ++displayName = "Alice Allison" ++thumbnail = "static/authors/alice-thumb.jpg" ++image = "static/authors/alice-full.jpg" ++shortBio = "My name is Alice and I'm a blogger." ++bio = "My name is Alice and I'm a blogger... some other stuff" ++email = "alice.allison@email.com" ++weight = 10 ++ ++[social] ++ facebook = "alice.allison" ++ twitter = "alice" ++ googleplus = "aliceallison1" ++ website = "www.example.com" ++ ++[params] ++ random = "whatever you want" ++{{< /code >}} ++ ++All variables are optional but it's advised to fill all important ones (e.g. names and biography) because themes can vary in their usage. ++ ++You can store files for the `thumbnail` and `image` attributes in the `static` folder. Then add the path to the photos relative to `static`; e.g., `/static/path/to/thumbnail.jpg`. ++ ++`weight` allows you to define the order of an author in an `.Authors` list and can be accessed on list or via the `.Site.Authors` variable. ++ ++The `social` section contains all the links to the social network accounts of an author. Hugo is able to generate the account links for the most popular social networks automatically. This way, you only have to enter your username. You can find a list of all supported social networks [here](#linking-social-network-accounts-automatically). All other variables, like `website` in the example above remain untouched. ++ ++The `params` section can contain arbitrary data much like the same-named section in the config file. What it contains is up to you. ++ ++## Associate Content Through Identifiers ++ ++Earlier it was mentioned that content can be associated with an author through their corresponding identifier. In our case, blogger Alice has the identifier `alice`. In the front matter of a content file, you can create a list of identifiers and assign it to the `authors` variable. Here are examples for `alice` using YAML and TOML, respectively. ++ ++``` ++--- ++title: Why Hugo is so Awesome ++date: 2016-08-22T14:27:502:00 ++authors: ["alice"] ++--- ++ ++Nothing to read here. Move along... ++``` ++ ++``` +++++ ++title = Why Hugo is so Awesome ++date = "2016-08-22T14:27:502:00" ++authors: ["alice"] +++++ ++ ++Nothing to read here. Move along... ++``` ++ ++Future authors who might work on this blog post can append their identifiers to the `authors` array in the front matter as well. ++ ++## Work with Templates ++ ++After a successful setup it's time to give some credit to the authors by showing them on the website. Within the templates Hugo provides a list of the author's profiles if they are listed in the `authors` variable within the front matter. ++ ++The list is accessible via the `.Authors` template variable. Printing all authors of a the blog post is straight forward: ++ ++``` ++{{ range .Authors }} ++ {{ .DisplayName }} ++{{ end }} ++=> Alice Allison ++``` ++ ++Even if there are co-authors you may only want to show the main author. For this case you can use the `.Author` template variable **(note the singular form)**. The template variable contains the profile of the author that is first listed with his identifier in the front matter. ++ ++{{% note %}} ++You can find a list of all template variables to access the profile information in [Author Variables](/variables/authors/). ++{{% /note %}} ++ ++### Link Social Network Accounts ++ ++As aforementioned, Hugo is able to generate links to profiles of the most popular social networks. The following social networks with their corrersponding identifiers are supported: `github`, `facebook`, `twitter`, `googleplus`, `pinterest`, `instagram`, `youtube` and `linkedin`. ++ ++This is can be done with the `.Social.URL` function. Its only parameter is the name of the social network as they are defined in the profile (e.g. `facebook`, `googleplus`). Custom variables like `website` remain as they are. ++ ++Most articles feature a small section with information about the author at the end. Let's create one containing the author's name, a thumbnail, a (summarized) biography and links to all social networks: ++ ++{{< code file="layouts/partials/author-info.html" download="author-info.html" >}} ++{{ with .Author }} ++

    {{ .DisplayName }}

    ++ {{ .DisplayName }} ++

    {{ .ShortBio }}

    ++
      ++ {{ range $network, $username := .Social }} ++
    • {{ $network }}
    • ++ {{ end }} ++
    ++{{ end }} ++{{< /code >}} ++ ++## Who Published What? ++ ++That question can be answered with a list of all authors and another list containing all articles that they each have written. Now we have to translate this idea into templates. The [taxonomy][] feature allows us to logically group content based on information that they have in common; e.g. a tag or a category. Well, many articles share the same author, so this should sound familiar, right? ++ ++In order to let Hugo know that we want to group content based on their author, we have to create a new taxonomy called `author` (the name corresponds to the variable in the front matter). Here is the snippet in a `config.yaml` and `config.toml`, respectively: ++ ++``` ++taxonomies: ++ author: authors ++``` ++ ++``` ++[taxonomies] ++ author = "authors" ++``` ++ ++ ++### List All Authors ++ ++In the next step we can create a template to list all authors of your website. Later, the list can be accessed at `www.example.com/authors/`. Create a new template in the `layouts/taxonomy/` directory called `authors.term.html`. This template will be exclusively used for this taxonomy. ++ ++{{< code file="layouts/taxonomy/author.term.html" download="author.term.html" >}} ++ ++{{< /code >}} ++ ++`.Data.Terms` contains the identifiers of all authors and we can range over it to create a list with all author names. The `$profile` variable gives us access to the profile of the current author. This allows you to generate a nice info box with a thumbnail, a biography and social media links, like at the [end of a blog post](#linking-social-network-accounts-automatically). ++ ++### List Each Author's Publications ++ ++Last but not least, we have to create the second list that contains all publications of an author. Each list will be shown in its own page and can be accessed at `www.example.com/authors/`. Replace `` with a valid author identifier like `alice`. ++ ++The layout for this page can be defined in the template `layouts/taxonomy/author.html`. ++ ++{{< code file="layouts/taxonomy/author.html" download="author.html" >}} ++{{ range .Data.Pages }} ++

    {{ .Title }}

    ++ written by {{ .Author.DisplayName }} ++ {{ .Summary }} ++{{ end }} ++{{< /code >}} ++ ++The example above generates a simple list of all posts written by a single author. Inside the loop you've access to the complete set of [page variables][pagevars]. Therefore, you can add additional information about the current posts like the publishing date or the tags. ++ ++With a lot of content this list can quickly become very long. Consider to use the [pagination][] feature. It splits the list into smaller chunks and spreads them over multiple pages. ++ ++[pagevars]: /variables/page/ ++[pagination]: /templates/pagination/ diff --cc docs/content/en/content-management/comments.md index 00000000,00000000..20932a82 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/comments.md @@@ -1,0 -1,0 +1,80 @@@ ++--- ++title: Comments ++linktitle: Comments ++description: Hugo ships with an internal Disqus template, but this isn't the only commenting system that will work with your new Hugo website. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-03-09 ++keywords: [sections,content,organization] ++categories: [project organization, fundamentals] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 140 ++weight: 140 #rem ++draft: false ++aliases: [/extras/comments/] ++toc: true ++--- ++ ++Hugo ships with support for [Disqus](https://disqus.com/), a third-party service that provides comment and community capabilities to websites via JavaScript. ++ ++Your theme may already support Disqus, but if not, it is easy to add to your templates via [Hugo's built-in Disqus partial][disquspartial]. ++ ++## Add Disqus ++ ++Hugo comes with all the code you need to load Disqus into your templates. Before adding Disqus to your site, you'll need to [set up an account][disqussetup]. ++ ++### Configure Disqus ++ ++Disqus comments require you set a single value in your [site's configuration file][configuration] like so: ++ ++{{< code-toggle copy="false" >}} ++disqusShortname = "yourdiscussshortname" ++{{}} ++ ++For many websites, this is enough configuration. However, you also have the option to set the following in the [front matter][] of a single content file: ++ ++* `disqus_identifier` ++* `disqus_title` ++* `disqus_url` ++ ++### Render Hugo's Built-in Disqus Partial Template ++ ++See [Partial Templates][partials] to learn how to add the Disqus partial to your Hugo website's templates. ++ ++## Comments Alternatives ++ ++There are a few alternatives to commenting on static sites for those who do not want to use Disqus: ++ ++* [Static Man](https://staticman.net/) ++* [txtpen](https://txtpen.com) ++* [IntenseDebate](http://intensedebate.com/) ++* [Graph Comment][] ++* [Muut](http://muut.com/) ++* [isso](http://posativ.org/isso/) (Self-hosted, Python) ++ * [Tutorial on Implementing Isso with Hugo][issotutorial] ++ ++ ++ ++ ++ ++ ++ ++[configuration]: /getting-started/configuration/ ++[disquspartial]: /templates/partials/#disqus ++[disqussetup]: https://disqus.com/profile/signup/ ++[forum]: https://discourse.gohugo.io ++[front matter]: /content-management/front-matter/ ++[Graph Comment]: https://graphcomment.com/ ++[kaijuissue]: https://github.com/spf13/kaiju/issues/new ++[issotutorial]: https://stiobhart.net/2017-02-24-isso-comments/ ++[partials]: /templates/partials/ ++[MongoDB]: https://www.mongodb.com/ ++[tweet]: https://twitter.com/spf13 diff --cc docs/content/en/content-management/cross-references.md index 00000000,00000000..2980719e new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/cross-references.md @@@ -1,0 -1,0 +1,130 @@@ ++--- ++title: Links and Cross References ++description: Hugo makes it easy to link documents together. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-03-31 ++categories: [content management] ++keywords: ["cross references","references", "anchors", "urls"] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 100 ++weight: 100 #rem ++aliases: [/extras/crossreferences/] ++toc: true ++--- ++ ++ ++ The `ref` and `relref` shortcodes link documents together, both of which are [built-in Hugo shortcodes][]. These shortcodes are also used to provide links to headings inside of your content, whether across documents or within a document. The only difference between `ref` and `relref` is whether the resulting URL is absolute (`http://1.com/about/`) or relative (`/about/`), respectively. ++ ++## Use `ref` and `relref` ++ ++``` ++{{}} ++{{}} ++{{}} ++{{}} ++{{}} ++{{}} ++``` ++ ++The single parameter to `ref` is a string with a content `documentname` (e.g., `about.md`) with or without an appended in-document `anchor` (`#who`) without spaces. ++ ++### Document Names ++ ++The `documentname` is the name of a document, including the format extension; this may be just the filename, or the relative path from the `content/` directory. With a document `content/blog/post.md`, either format will produce the same result: ++ ++``` ++{{}} => `/blog/post/` ++{{}} => `/blog/post/` ++``` ++ ++If you have the same filename used across multiple sections, you should only use the relative path format; otherwise, the behavior will be `undefined`. This is best illustrated with an example `content` directory: ++ ++``` ++. ++└── content ++ ├── events ++ │   └── my-birthday.md ++ ├── galleries ++ │   └── my-birthday.md ++ ├── meta ++ │   └── my-article.md ++ └── posts ++ └── my-birthday.md ++``` ++ ++To be sure to get the correct reference in this case, use the full path: ++ ++{{< code file="content/meta/my-article.md" copy="false" >}} ++{{}} => /events/my-birthday/ ++{{< /code >}} ++ ++### With Multiple Output Formats ++ ++If the page exists in multiple [output formats][], `ref` or `relref` can be used with a output format name: ++ ++``` ++ [Neat]({{}}) ++``` ++ ++### Anchors ++ ++When an `anchor` is provided by itself, the current page’s unique identifier will be appended; when an `anchor` is provided appended to `documentname`, the found page's unique identifier will be appended: ++ ++``` ++{{}} => #anchors:9decaf7 ++{{}} => /blog/post/#who:badcafe ++``` ++ ++The above examples render as follows for this very page as well as a reference to the "Content" heading in the Hugo docs features pageyoursite ++ ++``` ++{{}} => #who:9decaf7 ++{{}} => /blog/post/#who:badcafe ++``` ++ ++More information about document unique identifiers and headings can be found [below]({{< ref "#hugo-heading-anchors" >}}). ++ ++### Examples ++ ++* `{{}}` => `https://example.com/blog/post/` ++* `{{}}` => `https://example.com/blog/post/#tldr:caffebad` ++* `{{}}` => `/blog/post/` ++* `{{}}` => `/blog/post/#tldr:caffebad` ++* `{{}}` => `#tldr:badcaffe` ++* `{{}}` => `#tldr:badcaffe` ++ ++## Hugo Heading Anchors ++ ++When using Markdown document types, Hugo generates heading anchors automatically. The generated anchor for this section is `hugo-heading-anchors`. Because the heading anchors are generated automatically, Hugo takes some effort to ensure that heading anchors are unique both inside a document and across the entire site. ++ ++Ensuring heading uniqueness across the site is accomplished with a unique identifier for each document based on its path. Unless a document is renamed or moved between sections *in the filesystem*, the unique identifier for the document will not change: `blog/post.md` will always have a unique identifier of `81df004c333b392d34a49fd3a91ba720`. ++ ++`ref` and `relref` were added so you can make these reference links without having to know the document’s unique identifier. (The links in document tables of contents are automatically up-to-date with this value.) ++ ++``` ++{{}} ++/content-management/cross-references/#hugo-heading-anchors:77cd9ea530577debf4ce0f28c8dca242 ++``` ++ ++### Manually Specifying Anchors ++ ++For Markdown content files, if the `headerIds` [Blackfriday extension][bfext] is ++enabled (which it is by default), user can manually specify the anchor for any ++heading. ++ ++Few examples: ++ ++``` ++## Alpha 101 {#alpha} ++ ++## Version 1.0 {#version-1-dot-0} ++``` ++ ++[built-in Hugo shortcodes]: /content-management/shortcodes/#using-the-built-in-shortcodes ++[lists]: /templates/lists/ ++[output formats]: /templates/output-formats/ ++[shortcode]: /content-management/shortcodes/ ++[bfext]: /content-management/formats/#blackfriday-extensions diff --cc docs/content/en/content-management/formats.md index 00000000,00000000..6c53ab46 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/formats.md @@@ -1,0 -1,0 +1,249 @@@ ++--- ++title: Supported Content Formats ++linktitle: Supported Content Formats ++description: Markdown and Emacs Org-Mode have native support, and additional formats (e.g. Asciidoc) come via external helpers. ++date: 2017-01-10 ++publishdate: 2017-01-10 ++lastmod: 2017-04-06 ++categories: [content management] ++keywords: [markdown,asciidoc,mmark,pandoc,content format] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 20 ++weight: 20 #rem ++draft: false ++aliases: [/content/markdown-extras/,/content/supported-formats/,/doc/supported-formats/,/tutorials/mathjax/] ++toc: true ++--- ++ ++**Markdown is the main content format** and comes in two flavours: The excellent [Blackfriday project][blackfriday] (name your files `*.md` or set `markup = "markdown"` in front matter) or its fork [Mmark][mmark] (name your files `*.mmark` or set `markup = "mmark"` in front matter), both very fast markdown engines written in Go. ++ ++For Emacs users, [goorgeous](https://github.com/chaseadamsio/goorgeous) provides built-in native support for Org-mode (name your files `*.org` or set `markup = "org"` in front matter) ++ ++{{% note "Deeply Nested Lists" %}} ++Before you begin writing your content in markdown, Blackfriday has a known issue [(#329)](https://github.com/russross/blackfriday/issues/329) with handling deeply nested lists. Luckily, there is an easy workaround. Use 4-spaces (i.e., tab) rather than 2-space indentations. ++{{% /note %}} ++ ++## Configure BlackFriday Markdown Rendering ++ ++You can configure multiple aspects of Blackfriday as show in the following list. See the docs on [Configuration][config] for the full list of explicit directions you can give to Hugo when rendering your site. ++ ++{{< readfile file="/content/en/readfiles/bfconfig.md" markdown="true" >}} ++ ++## Extend Markdown ++ ++Hugo provides some convenient methods for extending markdown. ++ ++### Task Lists ++ ++Hugo supports [GitHub-styled task lists (i.e., TODO lists)][gfmtasks] for the Blackfriday markdown renderer. If you do not want to use this feature, you can disable it in your configuration. ++ ++#### Example Task List Input ++ ++{{< code file="content/my-to-do-list.md" >}} ++- [ ] a task list item ++- [ ] list syntax required ++- [ ] incomplete ++- [x] completed ++{{< /code >}} ++ ++#### Example Task List Output ++ ++The preceding markdown produces the following HTML in your rendered website: ++ ++``` ++
      ++
    • a task list item
    • ++
    • list syntax required
    • ++
    • incomplete
    • ++
    • completed
    • ++
    ++``` ++ ++#### Example Task List Display ++ ++The following shows how the example task list will look to the end users of your website. Note that visual styling of lists is up to you. This list has been styled according to [the Hugo Docs stylesheet][hugocss]. ++ ++- [ ] a task list item ++- [ ] list syntax required ++- [ ] incomplete ++- [x] completed ++ ++### Emojis ++ ++To add emojis directly to content, set `enableEmoji` to `true` in your [site configuration][config]. To use emojis in templates or shortcodes, see [`emojify` function][]. ++ ++For a full list of emojis, see the [Emoji cheat sheet][emojis]. ++ ++### Shortcodes ++ ++If you write in Markdown and find yourself frequently embedding your content with raw HTML, Hugo provides built-in shortcodes functionality. This is one of the most powerful features in Hugo and allows you to create your own Markdown extensions very quickly. ++ ++See [Shortcodes][sc] for usage, particularly for the built-in shortcodes that ship with Hugo, and [Shortcode Templating][sct] to learn how to build your own. ++ ++### Code Blocks ++ ++Hugo supports GitHub-flavored markdown's use of triple back ticks, as well as provides a special [`highlight` shortcode][hlsc], and syntax highlights those code blocks natively using *Chroma*. Users also have an option to use *Pygments* instead. See the [Syntax Highlighting][hl] section for details. ++ ++## Mmark ++ ++Mmark is a [fork of BlackFriday][mmark] and markdown superset that is well suited for writing [IETF documentation][ietf]. You can see examples of the syntax in the [Mmark GitHub repository][mmarkgh] or the full syntax on [Miek Gieben's website][]. ++ ++### Use Mmark ++ ++As Hugo ships with Mmark, using the syntax is as easy as changing the extension of your content files from `.md` to `.mmark`. ++ ++In the event that you want to only use Mmark in specific files, you can also define the Mmark syntax in your content's front matter: ++ ++``` ++--- ++title: My Post ++date: 2017-04-01 ++markup: mmark ++--- ++``` ++ ++{{% warning %}} ++Thare are some features not available in Mmark; one example being that shortcodes are not translated when used in an included `.mmark` file ([#3131](https://github.com/gohugoio/hugo/issues/3137)), and `EXTENSION_ABBREVIATION` ([#1970](https://github.com/gohugoio/hugo/issues/1970)) and the aforementioned GFM todo lists ([#2270](https://github.com/gohugoio/hugo/issues/2270)) are not fully supported. Contributions are welcome. ++{{% /warning %}} ++ ++## MathJax with Hugo ++ ++[MathJax](http://www.mathjax.org/) is a JavaScript library that allows the display of mathematical expressions described via a LaTeX-style syntax in the HTML (or Markdown) source of a web page. As it is a pure a JavaScript library, getting it to work within Hugo is fairly straightforward, but does have some oddities that will be discussed here. ++ ++This is not an introduction into actually using MathJax to render typeset mathematics on your website. Instead, this page is a collection of tips and hints for one way to get MathJax working on a website built with Hugo. ++ ++### Enable MathJax ++ ++The first step is to enable MathJax on pages that you would like to have typeset math. There are multiple ways to do this (adventurous readers can consult the [Loading and Configuring](http://docs.mathjax.org/en/latest/configuration.html) section of the MathJax documentation for additional methods of including MathJax), but the easiest way is to use the secure MathJax CDN by include a ` ++{{< /code >}} ++ ++One way to ensure that this code is included in all pages is to put it in one of the templates that live in the `layouts/partials/` directory. For example, I have included this in the bottom of my template `footer.html` because I know that the footer will be included in every page of my website. ++ ++### Options and Features ++ ++MathJax is a stable open-source library with many features. I encourage the interested reader to view the [MathJax Documentation](http://docs.mathjax.org/en/latest/index.html), specifically the sections on [Basic Usage](http://docs.mathjax.org/en/latest/index.html#basic-usage) and [MathJax Configuration Options](http://docs.mathjax.org/en/latest/index.html#mathjax-configuration-options). ++ ++### Issues with Markdown ++ ++{{% note %}} ++The following issues with Markdown assume you are using `.md` for content and BlackFriday for parsing. Using [Mmark](#mmark) as your content format will obviate the need for the following workarounds. ++ ++When using Mmark with MathJax, use `displayMath: [['$$','$$'], ['\\[','\\]']]`. See the [Mmark `README.md`](https://github.com/miekg/mmark/wiki/Syntax#math-blocks) for more information. In addition to MathJax, Mmark has been shown to work well with [KaTeX](https://github.com/Khan/KaTeX). See this [related blog post from a Hugo user](http://nosubstance.me/post/a-great-toolset-for-static-blogging/). ++{{% /note %}} ++ ++After enabling MathJax, any math entered between proper markers (see the [MathJax documentation][mathjaxdocs]) will be processed and typeset in the web page. One issue that comes up, however, with Markdown is that the underscore character (`_`) is interpreted by Markdown as a way to wrap text in `emph` blocks while LaTeX (MathJax) interprets the underscore as a way to create a subscript. This "double speak" of the underscore can result in some unexpected and unwanted behavior. ++ ++### Solution ++ ++There are multiple ways to remedy this problem. One solution is to simply escape each underscore in your math code by entering `\_` instead of `_`. This can become quite tedious if the equations you are entering are full of subscripts. ++ ++Another option is to tell Markdown to treat the MathJax code as verbatim code and not process it. One way to do this is to wrap the math expression inside a `
    ` `
    ` block. Markdown would ignore these sections and they would get passed directly on to MathJax and processed correctly. This works great for display style mathematics, but for inline math expressions the line break induced by the `
    ` is not acceptable. The syntax for instructing Markdown to treat inline text as verbatim is by wrapping it in backticks (`` ` ``). You might have noticed, however, that the text included in between backticks is rendered differently than standard text (on this site these are items highlighted in red). To get around this problem, we could create a new CSS entry that would apply standard styling to all inline verbatim text that includes MathJax code. Below I will show the HTML and CSS source that would accomplish this (note this solution was adapted from [this blog post](http://doswa.com/2011/07/20/mathjax-in-markdown.html)---all credit goes to the original author). ++ ++{{< code file="mathjax-markdown-solution.html" >}} ++ ++ ++ ++{{< /code >}} ++ ++ ++ ++As before, this content should be included in the HTML source of each page that will be using MathJax. The next code snippet contains the CSS that is used to have verbatim MathJax blocks render with the same font style as the body of the page. ++ ++{{< code file="mathjax-style.css" >}} ++code.has-jax { ++ font: inherit; ++ font-size: 100%; ++ background: inherit; ++ border: inherit; ++ color: #515151; ++} ++{{< /code >}} ++ ++In the CSS snippet, notice the line `color: #515151;`. `#515151` is the value assigned to the `color` attribute of the `body` class in my CSS. In order for the equations to fit in with the body of a web page, this value should be the same as the color of the body. ++ ++### Usage ++ ++With this setup, everything is in place for a natural usage of MathJax on pages generated using Hugo. In order to include inline mathematics, just put LaTeX code in between `` `$ TeX Code $` `` or `` `\( TeX Code \)` ``. To include display style mathematics, just put LaTeX code in between `
    $$TeX Code$$
    `. All the math will be properly typeset and displayed within your Hugo generated web page! ++ ++## Additional Formats Through External Helpers ++ ++Hugo has a new concept called _external helpers_. It means that you can write your content using [Asciidoc][ascii], [reStructuredText][rest], or [pandoc]. If you have files with associated extensions, Hugo will call external commands to generate the content. ([See the Hugo source code for external helpers][helperssource].) ++ ++For example, for Asciidoc files, Hugo will try to call the `asciidoctor` or `asciidoc` command. This means that you will have to install the associated tool on your machine to be able to use these formats. ([See the Asciidoctor docs for installation instructions](http://asciidoctor.org/docs/install-toolchain/)). ++ ++To use these formats, just use the standard extension and the front matter exactly as you would do with natively supported `.md` files. ++ ++Hugo passes reasonable default arguments to these external helpers by default: ++ ++- `asciidoc`: `--no-header-footer --safe -` ++- `asciidoctor`: `--no-header-footer --safe --trace -` ++- `rst2html`: `--leave-comments --initial-header-level=2` ++- `pandoc`: `--mathjax` ++ ++{{% warning "Performance of External Helpers" %}} ++Because additional formats are external commands generation performance will rely heavily on the performance of the external tool you are using. As this feature is still in its infancy, feedback is welcome. ++{{% /warning %}} ++ ++## Learn Markdown ++ ++Markdown syntax is simple enough to learn in a single sitting. The following are excellent resources to get you up and running: ++ ++* [Daring Fireball: Markdown, John Gruber (Creator of Markdown)][fireball] ++* [Markdown Cheatsheet, Adam Pritchard][mdcheatsheet] ++* [Markdown Tutorial (Interactive), Garen Torikian][mdtutorial] ++ ++[`emojify` function]: /functions/emojify/ ++[ascii]: http://asciidoctor.org/ ++[bfconfig]: /getting-started/configuration/#configuring-blackfriday-rendering ++[blackfriday]: https://github.com/russross/blackfriday ++[mmark]: https://github.com/miekg/mmark ++[config]: /getting-started/configuration/ ++[developer tools]: /tools/ ++[emojis]: https://www.webpagefx.com/tools/emoji-cheat-sheet/ ++[fireball]: https://daringfireball.net/projects/markdown/ ++[gfmtasks]: https://guides.github.com/features/mastering-markdown/#syntax ++[helperssource]: https://github.com/gohugoio/hugo/blob/77c60a3440806067109347d04eb5368b65ea0fe8/helpers/general.go#L65 ++[hl]: /content-management/syntax-highlighting/ ++[hlsc]: /content-management/shortcodes/#highlight ++[hugocss]: /css/style.css ++[ietf]: https://tools.ietf.org/html/ ++[mathjaxdocs]: https://docs.mathjax.org/en/latest/ ++[mdcheatsheet]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet ++[mdtutorial]: http://www.markdowntutorial.com/ ++[Miek Gieben's website]: https://miek.nl/2016/March/05/mmark-syntax-document/ ++[mmark]: https://github.com/miekg/mmark ++[mmarkgh]: https://github.com/miekg/mmark/wiki/Syntax ++[org]: http://orgmode.org/ ++[pandoc]: http://www.pandoc.org/ ++[Pygments]: http://pygments.org/ ++[rest]: http://docutils.sourceforge.net/rst.html ++[sc]: /content-management/shortcodes/ ++[sct]: /templates/shortcode-templates/ diff --cc docs/content/en/content-management/front-matter.md index 00000000,00000000..bf067797 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/front-matter.md @@@ -1,0 -1,0 +1,174 @@@ ++--- ++title: Front Matter ++linktitle: ++description: Hugo allows you to add front matter in yaml, toml, or json to your content files. ++date: 2017-01-09 ++publishdate: 2017-01-09 ++lastmod: 2017-02-24 ++categories: [content management] ++keywords: ["front matter", "yaml", "toml", "json", "metadata", "archetypes"] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 30 ++weight: 30 #rem ++draft: false ++aliases: [/content/front-matter/] ++toc: true ++--- ++ ++**Front matter** allows you to keep metadata attached to an instance of a [content type][]---i.e., embedded inside a content file---and is one of the many features that gives Hugo its strength. ++ ++{{< youtube Yh2xKRJGff4 >}} ++ ++## Front Matter Formats ++ ++Hugo supports three formats for front matter, each with their own identifying tokens. ++ ++TOML ++: identified by opening and closing `+++`. ++ ++YAML ++: identified by opening and closing `---`. ++ ++JSON ++: a single JSON object surrounded by '`{`' and '`}`', followed by a new line. ++ ++### Example ++ ++{{< code-toggle >}} +++++ ++title = "spf13-vim 3.0 release and new website" ++description = "spf13-vim is a cross platform distribution of vim plugins and resources for Vim." ++tags = [ ".vimrc", "plugins", "spf13-vim", "vim" ] ++date = "2012-04-06" ++categories = [ ++ "Development", ++ "VIM" ++] ++slug = "spf13-vim-3-0-release-and-new-website" +++++ ++{{}} ++ ++## Front Matter Variables ++ ++### Predefined ++ ++There are a few predefined variables that Hugo is aware of. See [Page Variables][pagevars] for how to call many of these predefined variables in your templates. ++ ++aliases ++: an array of one or more aliases (e.g., old published paths of renamed content) that will be created in the output directory structure . See [Aliases][aliases] for details. ++ ++date ++: the datetime at which the content was created; note this value is auto-populated according to Hugo's built-in [archetype][]. ++ ++description ++: the description for the content. ++ ++draft ++: if `true`, the content will not be rendered unless the `--buildDrafts` flag is passed to the `hugo` command. ++ ++expiryDate ++: the datetime at which the content should no longer be published by Hugo; expired content will not be rendered unless the `--buildExpired` flag is passed to the `hugo` command. ++ ++headless ++: if `true`, sets a leaf bundle to be [headless][headless-bundle]. ++ ++isCJKLanguage ++: if `true`, Hugo will explicitly treat the content as a CJK language; both `.Summary` and `.WordCount` work properly in CJK languages. ++ ++keywords ++: the meta keywords for the content. ++ ++layout ++: the layout Hugo should select from the [lookup order][lookup] when rendering the content. If a `type` is not specified in the front matter, Hugo will look for the layout of the same name in the layout directory that corresponds with a content's section. See ["Defining a Content Type"][definetype] ++ ++lastmod ++: the datetime at which the content was last modified. ++ ++linkTitle ++: used for creating links to content; if set, Hugo defaults to using the `linktitle` before the `title`. Hugo can also [order lists of content by `linktitle`][bylinktitle]. ++ ++markup ++: **experimental**; specify `"rst"` for reStructuredText (requires`rst2html`) or `"md"` (default) for Markdown. ++ ++outputs ++: allows you to specify output formats specific to the content. See [output formats][outputs]. ++ ++publishDate ++: if in the future, content will not be rendered unless the `--buildFuture` flag is passed to `hugo`. ++ ++resources ++: used for configuring page bundle resources. See [Page Resources][page-resources]. ++ ++slug ++: appears as the tail of the output URL. A value specified in front matter will override the segment of the URL based on the filename. ++ ++title ++: the title for the content. ++ ++type ++: the type of the content; this value will be automatically derived from the directory (i.e., the [section][]) if not specified in front matter. ++ ++url ++: the full path to the content from the web root. It makes no assumptions about the path of the content file. It also ignores any language prefixes of ++the multilingual feature. ++ ++weight ++: used for [ordering your content in lists][ordering]. ++ ++\ ++: field name of the *plural* form of the index. See `tags` and `categories` in the above front matter examples. _Note that the plural form of user-defined taxonomies cannot be the same as any of the predefined front matter variables._ ++ ++{{% note "Hugo's Default URL Destinations" %}} ++If neither `slug` nor `url` is present and [permalinks are not configured otherwise in your site `config` file](/content-management/urls/#permalinks), Hugo will use the filename of your content to create the output URL. See [Content Organization](/content-management/organization) for an explanation of paths in Hugo and [URL Management](/content-management/urls/) for ways to customize Hugo's default behaviors. ++{{% /note %}} ++ ++### User-Defined ++ ++You can add fields to your front matter arbitrarily to meet your needs. These user-defined key-values are placed into a single `.Params` variable for use in your templates. ++ ++The following fields can be accessed via `.Params.include_toc` and `.Params.show_comments`, respectively. The [Variables][] section provides more information on using Hugo's page- and site-level variables in your templates. ++ ++{{< code-toggle copy="false" >}} ++include_toc: true ++show_comments: false ++{{}} ++ ++ ++## Order Content Through Front Matter ++ ++You can assign content-specific `weight` in the front matter of your content. These values are especially useful for [ordering][ordering] in list views. You can use `weight` for ordering of content and the convention of [`_weight`][taxweight] for ordering content within a taxonomy. See [Ordering and Grouping Hugo Lists][lists] to see how `weight` can be used to organize your content in list views. ++ ++## Override Global Markdown Configuration ++ ++It's possible to set some options for Markdown rendering in a content's front matter as an override to the [BlackFriday rendering options set in your project configuration][config]. ++ ++## Front Matter Format Specs ++ ++* [TOML Spec][toml] ++* [YAML Spec][yaml] ++* [JSON Spec][json] ++ ++[variables]: /variables/ ++[aliases]: /content-management/urls/#aliases/ ++[archetype]: /content-management/archetypes/ ++[bylinktitle]: /templates/lists/#by-link-title ++[config]: /getting-started/configuration/ "Hugo documentation for site configuration" ++[content type]: /content-management/types/ ++[contentorg]: /content-management/organization/ ++[definetype]: /content-management/types/#defining-a-content-type "Learn how to specify a type and a layout in a content's front matter" ++[headless-bundle]: /content-management/page-bundles/#headless-bundle ++[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation" ++[lists]: /templates/lists/#ordering-content "See how to order content in list pages; for example, templates that look to specific _index.md for content and front matter." ++[lookup]: /templates/lookup-order/ "Hugo traverses your templates in a specific order when rendering content to allow for DRYer templating." ++[ordering]: /templates/lists/ "Hugo provides multiple ways to sort and order your content in list templates" ++[outputs]: /templates/output-formats/ "With the release of v22, you can output your content to any text format using Hugo's familiar templating" ++[page-resources]: /content-management/page-resources/ ++[pagevars]: /variables/page/ ++[section]: /content-management/sections/ ++[taxweight]: /content-management/taxonomies/ ++[toml]: https://github.com/toml-lang/toml "Specification for TOML, Tom's Obvious Minimal Language" ++[urls]: /content-management/urls/ ++[variables]: /variables/ ++[yaml]: http://yaml.org/spec/ "Specification for YAML, YAML Ain't Markup Language" diff --cc docs/content/en/content-management/image-processing/index.md index 00000000,00000000..ecc85bb5 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/image-processing/index.md @@@ -1,0 -1,0 +1,195 @@@ ++--- ++title: "Image Processing" ++description: "Image Page resources can be resized and cropped." ++date: 2018-01-24T13:10:00-05:00 ++lastmod: 2018-01-26T15:59:07-05:00 ++linktitle: "Image Processing" ++categories: ["content management"] ++keywords: [bundle,content,resources,images] ++weight: 4004 ++draft: false ++toc: true ++menu: ++ docs: ++ parent: "content-management" ++ weight: 32 ++--- ++ ++## The Image Page Resource ++ ++The `image` is a [Page Resource]({{< relref "content-management/page-resources" >}}), and the processing methods listed below does not work on images inside your `/static` folder. ++ ++ ++To get all images in a [Page Bundle]({{< relref "content-management/organization#page-bundles" >}}): ++ ++ ++```go-html-template ++{{ with .Resources.ByType "image" }} ++{{ end }} ++ ++``` ++ ++## Image Processing Methods ++ ++ ++The `image` resource implements the methods `Resize`, `Fit` and `Fill`, each returning the transformed image using the specified dimensions and processing options. ++ ++Resize ++: Resizes the image to the specified width and height. ++ ++```go ++// Resize to a width of 600px and preserve ratio ++{{ $image := $resource.Resize "600x" }} ++ ++// Resize to a height of 400px and preserve ratio ++{{ $image := $resource.Resize "x400" }} ++ ++// Resize to a width 600px and a height of 400px ++{{ $image := $resource.Resize "600x400" }} ++``` ++ ++Fit ++: Scale down the image to fit the given dimensions while maintaining aspect ratio. Both height and width are required. ++ ++```go ++{{ $image := $resource.Fit "600x400" }} ++``` ++ ++Fill ++: Resize and crop the image to match the given dimensions. Both height and width are required. ++ ++```go ++{{ $image := $resource.Fill "600x400" }} ++``` ++ ++ ++{{% note %}} ++Image operations in Hugo currently **do not preserve EXIF data** as this is not supported by Go's [image package](https://github.com/golang/go/search?q=exif&type=Issues&utf8=%E2%9C%93). This will be improved on in the future. ++{{% /note %}} ++ ++ ++## Image Processing Options ++ ++In addition to the dimensions (e.g. `600x400`), Hugo supports a set of additional image options. ++ ++ ++JPEG Quality ++: Only relevant for JPEG images, values 1 to 100 inclusive, higher is better. Default is 75. ++ ++```go ++{{ $image.Resize "600x q50" }} ++``` ++ ++Rotate ++: Rotates an image by the given angle counter-clockwise. The rotation will be performed first to get the dimensions correct. The main use of this is to be able to manually correct for [EXIF orientation](https://github.com/golang/go/issues/4341) of JPEG images. ++ ++```go ++{{ $image.Resize "600x r90" }} ++``` ++ ++Anchor ++: Only relevant for the `Fill` method. This is useful for thumbnail generation where the main motive is located in, say, the left corner. ++Valid are `Center`, `TopLeft`, `Top`, `TopRight`, `Left`, `Right`, `BottomLeft`, `Bottom`, `BottomRight`. ++ ++```go ++{{ $image.Fill "300x200 BottomLeft" }} ++``` ++ ++Resample Filter ++: Filter used in resizing. Default is `Box`, a simple and fast resampling filter appropriate for downscaling. ++ ++Examples are: `Box`, `NearestNeighbor`, `Linear`, `Gaussian`. ++ ++See https://github.com/disintegration/imaging for more. If you want to trade quality for faster processing, this may be a option to test. ++ ++```go ++{{ $image.Resize "600x400 Gaussian" }} ++``` ++ ++## Image Processing Examples ++ ++_The photo of the sunset used in the examples below is Copyright [Bjørn Erik Pedersen](https://commons.wikimedia.org/wiki/User:Bep) (Creative Commons Attribution-Share Alike 4.0 International license)_ ++ ++ ++{{< imgproc sunset Resize "300x" />}} ++ ++{{< imgproc sunset Fill "90x120 left" />}} ++ ++{{< imgproc sunset Fill "90x120 right" />}} ++ ++{{< imgproc sunset Fit "90x90" />}} ++ ++{{< imgproc sunset Resize "300x q10" />}} ++ ++ ++This is the shortcode used in the examples above: ++ ++ ++{{< code file="layouts/shortcodes/imgproc.html" >}} ++{{< readfile file="layouts/shortcodes/imgproc.html" >}} ++{{< /code >}} ++ ++And it is used like this: ++ ++```go-html-template ++{{}} ++``` ++ ++ ++{{% note %}} ++**Tip:** Note the self-closing shortcode syntax above. The `imgproc` shortcode can be called both with and without **inner content**. ++{{% /note %}} ++ ++## Image Processing Config ++ ++You can configure an `imaging` section in `config.toml` with default image processing options: ++ ++```toml ++[imaging] ++# Default resample filter used for resizing. Default is Box, ++# a simple and fast averaging filter appropriate for downscaling. ++# See https://github.com/disintegration/imaging ++resampleFilter = "box" ++ ++# Defatult JPEG quality setting. Default is 75. ++quality = 75 ++ ++# Anchor used when cropping pictures. ++# Default is "smart" which does Smart Cropping, using https://github.com/muesli/smartcrop ++# Smart Cropping is content aware and tries to find the best crop for each image. ++# Valid values are Smart, Center, TopLeft, Top, TopRight, Left, Right, BottomLeft, Bottom, BottomRight ++anchor = "smart" ++ ++``` ++ ++All of the above settings can also be set per image procecssing. ++ ++## Smart Cropping of Images ++ ++By default, Hugo will use the [Smartcrop](https://github.com/muesli/smartcrop), a library created by [muesli](https://github.com/muesli), when cropping images with `.Fill`. You can set the anchor point manually, but in most cases the smart option will make a good choice. And we will work with the libray author to improve this in the future. ++ ++An example using the sunset image from above: ++ ++ ++{{< imgproc sunset Fill "200x200 smart" />}} ++ ++ ++## Image Processing Performance Consideration ++ ++Processed images are stored below `/resources` (can be set with `resourceDir` config setting). This folder is deliberately placed in the project, as it is recommended to check these into source control as part of the project. These images are not "Hugo fast" to generate, but once generated they can be reused. ++ ++If you change your image settings (e.g. size), remove or rename images etc., you will end up with unused images taking up space and cluttering your project. ++ ++To clean up, run: ++ ++```bash ++hugo --gc ++``` ++ ++ ++{{% note %}} ++**GC** is short for **Garbage Collection**. ++{{% /note %}} ++ ++ ++ diff --cc docs/content/en/content-management/image-processing/sunset.jpg index 00000000,00000000..7d7307be new file mode 100644 Binary files differ diff --cc docs/content/en/content-management/menus.md index 00000000,00000000..c2eadf50 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/menus.md @@@ -1,0 -1,0 +1,161 @@@ ++--- ++title: Menus ++linktitle: Menus ++description: Hugo has a simple yet powerful menu system. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-03-31 ++categories: [content management] ++keywords: [menus] ++draft: false ++menu: ++ docs: ++ parent: "content-management" ++ weight: 120 ++weight: 120 #rem ++aliases: [/extras/menus/] ++toc: true ++--- ++ ++{{% note "Lazy Blogger"%}} ++If all you want is a simple menu for your sections, see the ["Section Menu for Lazy Bloggers" in Menu Templates](/templates/menu-templates/#section-menu-for-lazy-bloggers). ++{{% /note %}} ++ ++You can do this: ++ ++* Place content in one or many menus ++* Handle nested menus with unlimited depth ++* Create menu entries without being attached to any content ++* Distinguish active element (and active branch) ++ ++## What is a Menu in Hugo? ++ ++A **menu** is a named array of menu entries accessible by name via the [`.Site.Menus` site variable][sitevars]. For example, you can access your site's `main` menu via `.Site.Menus.main`. ++ ++{{% note "Menus on Multilingual Sites" %}} ++If you make use of the [multilingual feature](/content-management/multilingual/), you can define language-independent menus. ++{{% /note %}} ++ ++A menu entry has the following properties (i.e., variables) available to it: ++ ++`.URL` ++: string ++ ++`.Name` ++: string ++ ++`.Menu` ++: string ++ ++`.Identifier` ++: string ++ ++`.Pre` ++: template.HTML ++ ++`.Post` ++: template.HTML ++ ++`.Weight` ++: int ++ ++`.Parent` ++: string ++ ++`.Children` ++: Menu ++ ++Note that menus also have the following functions available as well: ++ ++`.HasChildren` ++: boolean ++ ++Additionally, there are some relevant functions available to menus on a page: ++ ++`.IsMenuCurrent` ++: (menu string, menuEntry *MenuEntry ) boolean ++ ++`.HasMenuCurrent` ++: (menu string, menuEntry *MenuEntry) boolean ++ ++## Add content to menus ++ ++Hugo allows you to add content to a menu via the content's [front matter](/content-management/front-matter/). ++ ++### Simple ++ ++If all you need to do is add an entry to a menu, the simple form works well. ++ ++#### A Single Menu ++ ++``` ++--- ++menu: "main" ++--- ++``` ++ ++#### Multiple Menus ++ ++``` ++--- ++menu: ["main", "footer"] ++--- ++``` ++ ++#### Advanced ++ ++ ++``` ++--- ++menu: ++ docs: ++ parent: 'extras' ++ weight: 20 ++--- ++``` ++ ++## Add Non-content Entries to a Menu ++ ++You can also add entries to menus that aren’t attached to a piece of content. This takes place in your Hugo project's [`config` file][config]. ++ ++Here’s an example snippet pulled from a configuration file: ++ ++{{< code-toggle file="config.toml" >}} ++[[menu.main]] ++ name = "about hugo" ++ pre = "" ++ weight = -110 ++ identifier = "about" ++ url = "/about/" ++[[menu.main]] ++ name = "getting started" ++ pre = "" ++ weight = -100 ++ url = "/getting-started/" ++{{< /code-toggle >}} ++ ++{{% note %}} ++The URLs must be relative to the context root. If the `baseURL` is `https://example.com/mysite/`, then the URLs in the menu must not include the context root `mysite`. Using an absolute URL will override the baseURL. If the value used for `URL` in the above example is `https://subdomain.example.com/`, the output will be `https://subdomain.example.com`. ++{{% /note %}} ++ ++## Nesting ++ ++All nesting of content is done via the `parent` field. ++ ++The parent of an entry should be the identifier of another entry. The identifier should be unique (within a menu). ++ ++The following order is used to determine an Identifier: ++ ++`.Name > .LinkTitle > .Title` ++ ++This means that `.Title` will be used unless `.LinkTitle` is present, etc. In practice, `.Name` and `.Identifier` are only used to structure relationships and therefore never displayed. ++ ++In this example, the top level of the menu is defined in your [site `config` file][config]). All content entries are attached to one of these entries via the `.Parent` field. ++ ++## Render Menus ++ ++See [Menu Templates](/templates/menu-templates/) for information on how to render your site menus within your templates. ++ ++[config]: /getting-started/configuration/ ++[multilingual]: /content-management/multilingual/ ++[sitevars]: /variables/ diff --cc docs/content/en/content-management/multilingual.md index 00000000,00000000..28a6e4fe new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/multilingual.md @@@ -1,0 -1,0 +1,386 @@@ ++--- ++title: Multilingual Mode ++linktitle: Multilingual and i18n ++description: Hugo supports the creation of websites with multiple languages side by side. ++date: 2017-01-10 ++publishdate: 2017-01-10 ++lastmod: 2017-01-10 ++categories: [content management] ++keywords: [multilingual,i18n, internationalization] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 150 ++weight: 150 #rem ++draft: false ++aliases: [/content/multilingual/,/content-management/multilingual/,/tutorials/create-a-multilingual-site/] ++toc: true ++--- ++ ++You should define the available languages in a `languages` section in your site configuration. ++ ++## Configure Languages ++ ++The following is an example of a site configuration for a multilingual Hugo project: ++ ++{{< code-toggle file="config" >}} ++DefaultContentLanguage = "en" ++copyright = "Everything is mine" ++ ++[params.navigation] ++help = "Help" ++ ++[languages] ++[languages.en] ++title = "My blog" ++weight = 1 ++[languages.en.params] ++linkedin = "english-link" ++ ++[languages.fr] ++copyright = "Tout est à moi" ++title = "Mon blog" ++weight = 2 ++[languages.fr.params] ++linkedin = "lien-francais" ++[languages.fr.params.navigation] ++help = "Aide" ++{{< /code-toggle >}} ++ ++Anything not defined in a `[languages]` block will fall back to the global ++value for that key (e.g., `copyright` for the English [`en`] language). ++ ++With the configuration above, all content, sitemap, RSS feeds, paginations, ++and taxonomy pages will be rendered below `/` in English (your default content language) and then below `/fr` in French. ++ ++When working with front matter `Params` in [single page templates][singles], omit the `params` in the key for the translation. ++ ++If you want all of the languages to be put below their respective language code, enable `defaultContentLanguageInSubdir: true`. ++ ++Only the obvious non-global options can be overridden per language. Examples of global options are `baseURL`, `buildDrafts`, etc. ++ ++## Disable a Language ++ ++You can disable one or more languages. This can be useful when working on a new translation. ++ ++```toml ++disableLanguages = ["fr", "jp"] ++``` ++ ++Note that you cannot disable the default content language. ++ ++We kept this as a standalone setting to make it easier to set via [OS environment](/getting-started/configuration/#configure-with-environment-variables): ++ ++```bash ++HUGO_DISABLELANGUAGES="fr jp" hugo ++``` ++If you have already a list of disabled languages in `config.toml`, you can enable them in development like this: ++ ++```bash ++HUGO_DISABLELANGUAGES=" " hugo server ++``` ++ ++ ++## Configure Multilingual Multihost ++ ++From **Hugo 0.31** we support multiple languages in a multihost configuration. See [this issue](https://github.com/gohugoio/hugo/issues/4027) for details. ++ ++This means that you can now configure a `baseURL` per `language`: ++ ++ ++> If a `baseURL` is set on the `language` level, then all languages must have one and they must all be different. ++ ++Example: ++ ++{{< code-toggle file="config" >}} ++[languages] ++[languages.no] ++baseURL = "https://example.no" ++languageName = "Norsk" ++weight = 1 ++title = "På norsk" ++ ++[languages.en] ++baseURL = "https://example.com" ++languageName = "English" ++weight = 2 ++title = "In English" ++{{}} ++ ++With the above, the two sites will be generated into `public` with their own root: ++ ++```bash ++public ++├── en ++└── no ++``` ++ ++**All URLs (i.e `.Permalink` etc.) will be generated from that root. So the English home page above will have its `.Permalink` set to `https://example.com/`.** ++ ++When you run `hugo server` we will start multiple HTTP servers. You will typlically see something like this in the console: ++ ++```bash ++Web Server is available at 127.0.0.1:1313 (bind address 127.0.0.1) ++Web Server is available at 127.0.0.1:1314 (bind address 127.0.0.1) ++Press Ctrl+C to stop ++``` ++ ++Live reload and `--navigateToChanged` between the servers work as expected. ++ ++## Taxonomies and Blackfriday ++ ++Taxonomies and [Blackfriday configuration][config] can also be set per language: ++ ++ ++{{< code-toggle file="config" >}} ++[Taxonomies] ++tag = "tags" ++ ++[blackfriday] ++angledQuotes = true ++hrefTargetBlank = true ++ ++[languages] ++[languages.en] ++weight = 1 ++title = "English" ++[languages.en.blackfriday] ++angledQuotes = false ++ ++[languages.fr] ++weight = 2 ++title = "Français" ++[languages.fr.Taxonomies] ++plaque = "plaques" ++{{}} ++ ++## Translate Your Content ++ ++Translated articles are identified by the name of the content file. ++ ++### Examples of Translated Articles ++ ++1. `/content/about.en.md` ++2. `/content/about.fr.md` ++ ++In this example, the `about.md` will be assigned the configured `defaultContentLanguage`. ++ ++1. `/content/about.md` ++2. `/content/about.fr.md` ++ ++This way, you can slowly start to translate your current content without having to rename everything. If left unspecified, the default value for `defaultContentLanguage` is `en`. ++ ++By having the same **directory and base filename**, the content pieces are linked together as translated pieces. ++ ++You can also set the key used to link the translations explicitly in front matter: ++ ++```yaml ++translationKey: "my-story" ++``` ++ ++If you need distinct URLs per language, you can set the slug in the non-default language file. For example, you can define a custom slug for a French translation in the front matter of `content/about.fr.md` as follows: ++ ++```yaml ++slug: "a-propos" ++ ++``` ++ ++At render, Hugo will build both `/about/` and `/a-propos/` as properly linked translated pages. ++ ++For merging of content from other languages (i.e. missing content translations), see [lang.Merge](/functions/lang.merge/). ++ ++## Link to Translated Content ++ ++To create a list of links to translated content, use a template similar to the following: ++ ++{{< code file="layouts/partials/i18nlist.html" >}} ++{{ if .IsTranslated }} ++

    {{ i18n "translations" }}

    ++ ++{{ end }} ++{{< /code >}} ++ ++The above can be put in a `partial` (i.e., inside `layouts/partials/`) and included in any template, be it for a [single content page][contenttemplate] or the [homepage][]. It will not print anything if there are no translations for a given page. ++ ++The above also uses the [`i18n` function][i18func] described in the next section. ++ ++## List All Available Languages ++ ++`.AllTranslations` on a `Page` can be used to list all translations, including itself. Called on the home page it can be used to build a language navigator: ++ ++ ++{{< code file="layouts/partials/allLanguages.html" >}} ++ ++{{< /code >}} ++ ++## Translation of Strings ++ ++Hugo uses [go-i18n][] to support string translations. [See the project's source repository][go-i18n-source] to find tools that will help you manage your translation workflows. ++ ++Translations are collected from the `themes//i18n/` folder (built into the theme), as well as translations present in `i18n/` at the root of your project. In the `i18n`, the translations will be merged and take precedence over what is in the theme folder. Language files should be named according to [RFC 5646][] with names such as `en-US.toml`, `fr.toml`, etc. ++ ++{{% note %}} ++From **Hugo 0.31** you no longer need to use a valid language code. It _can be_ anything. ++ ++See https://github.com/gohugoio/hugo/issues/3564 ++ ++{{% /note %}} ++ ++From within your templates, use the `i18n` function like this: ++ ++``` ++{{ i18n "home" }} ++``` ++ ++This uses a definition like this one in `i18n/en-US.toml`: ++ ++``` ++[home] ++other = "Home" ++``` ++ ++Often you will want to use to the page variables in the translations strings. To do that, pass on the "." context when calling `i18n`: ++ ++``` ++{{ i18n "wordCount" . }} ++``` ++ ++This uses a definition like this one in `i18n/en-US.toml`: ++ ++``` ++[wordCount] ++other = "This article has {{ .WordCount }} words." ++``` ++An example of singular and plural form: ++ ++``` ++[readingTime] ++one = "One minute read" ++other = "{{.Count}} minutes read" ++``` ++And then in the template: ++ ++``` ++{{ i18n "readingTime" .ReadingTime }} ++``` ++To track down missing translation strings, run Hugo with the `--i18n-warnings` flag: ++ ++``` ++ hugo --i18n-warnings | grep i18n ++i18n|MISSING_TRANSLATION|en|wordCount ++``` ++ ++## Customize Dates ++ ++At the time of this writing, Golang does not yet have support for internationalized locales, but if you do some work, you can simulate it. For example, if you want to use French month names, you can add a data file like ``data/mois.yaml`` with this content: ++ ++~~~yaml ++1: "janvier" ++2: "février" ++3: "mars" ++4: "avril" ++5: "mai" ++6: "juin" ++7: "juillet" ++8: "août" ++9: "septembre" ++10: "octobre" ++11: "novembre" ++12: "décembre" ++~~~ ++ ++... then index the non-English date names in your templates like so: ++ ++~~~html ++ ++~~~ ++ ++This technique extracts the day, month and year by specifying ``.Date.Day``, ``.Date.Month``, and ``.Date.Year``, and uses the month number as a key, when indexing the month name data file. ++ ++## Menus ++ ++You can define your menus for each language independently. The [creation of a menu][menus] works analogous to earlier versions of Hugo, except that they have to be defined in their language-specific block in the configuration file: ++ ++``` ++defaultContentLanguage = "en" ++ ++[languages.en] ++weight = 0 ++languageName = "English" ++ ++[[languages.en.menu.main]] ++url = "/" ++name = "Home" ++weight = 0 ++ ++ ++[languages.de] ++weight = 10 ++languageName = "Deutsch" ++ ++[[languages.de.menu.main]] ++url = "/" ++name = "Startseite" ++weight = 0 ++``` ++ ++The rendering of the main navigation works as usual. `.Site.Menus` will just contain the menu of the current language. Pay attention to the generation of the menu links. `absLangURL` takes care that you link to the correct locale of your website. Otherwise, both menu entries would link to the English version as the default content language that resides in the root directory. ++ ++``` ++
      ++ {{- $currentPage := . -}} ++ {{ range .Site.Menus.main -}} ++
    • ++ {{ .Name }} ++
    • ++ {{- end }} ++
    ++ ++``` ++ ++## Missing Translations ++ ++If a string does not have a translation for the current language, Hugo will use the value from the default language. If no default value is set, an empty string will be shown. ++ ++While translating a Hugo website, it can be handy to have a visual indicator of missing translations. The [`enableMissingTranslationPlaceholders` configuration option][config] will flag all untranslated strings with the placeholder `[i18n] identifier`, where `identifier` is the id of the missing translation. ++ ++{{% note %}} ++Hugo will generate your website with these missing translation placeholders. It might not be suited for production environments. ++{{% /note %}} ++ ++For merging of content from other languages (i.e. missing content translations), see [lang.Merge](/functions/lang.merge/). ++ ++## Multilingual Themes support ++ ++To support Multilingual mode in your themes, some considerations must be taken for the URLs in the templates. If there is more than one language, URLs must meet the following criteria: ++ ++* Come from the built-in `.Permalink` or `.URL` ++* Be constructed with ++ * The [`relLangURL` template function][rellangurl] or the [`absLangURL` template function][abslangurl] **OR** ++ * Prefixed with `{{ .LanguagePrefix }}` ++ ++If there is more than one language defined, the `LanguagePrefix` variable will equal `/en` (or whatever your `CurrentLanguage` is). If not enabled, it will be an empty string and is therefore harmless for single-language Hugo websites. ++ ++[abslangurl]: /functions/abslangurl ++[config]: /getting-started/configuration/ ++[contenttemplate]: /templates/single-page-templates/ ++[go-i18n-source]: https://github.com/nicksnyder/go-i18n ++[go-i18n]: https://github.com/nicksnyder/go-i18n ++[homepage]: /templates/homepage/ ++[i18func]: /functions/i18n/ ++[menus]: /content-management/menus/ ++[rellangurl]: /functions/rellangurl ++[RFC 5646]: https://tools.ietf.org/html/rfc5646 ++[singles]: /templates/single-page-templates/ diff --cc docs/content/en/content-management/organization/1-featured-content-bundles.png index 00000000,00000000..1706a29d new file mode 100644 Binary files differ diff --cc docs/content/en/content-management/organization/index.md index 00000000,00000000..b810f617 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/organization/index.md @@@ -1,0 -1,0 +1,240 @@@ ++--- ++title: Content Organization ++linktitle: Organization ++description: Hugo assumes that the same structure that works to organize your source content is used to organize the rendered site. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [content management,fundamentals] ++keywords: [sections,content,organization,bundle,resources] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 10 ++weight: 10 #rem ++draft: false ++aliases: [/content/sections/] ++toc: true ++--- ++ ++## Page Bundles ++ ++Hugo `0.32` announced page-relative images and other resources packaged into `Page Bundles`. ++ ++These terms are connected, and you also need to read about [Page Resources]({{< relref "content-management/page-resources" >}}) and [Image Processing]({{< relref "content-management/image-processing" >}}) to get the full picture. ++ ++{{% imgproc 1-featured Resize "300x" %}} ++The illustration shows 3 bundles. Note that the home page bundle cannot contain other content pages, but other files (images etc.) are fine. ++{{% /imgproc %}} ++ ++ ++{{% note %}} ++The bundle documentation is **work in progress**. We will publish more comprehensive docs about this soon. ++{{% /note %}} ++ ++ ++# Organization of Content Source ++ ++ ++In Hugo, your content should be organized in a manner that reflects the rendered website. ++ ++While Hugo supports content nested at any level, the top levels (i.e. `content/`) are special in Hugo and are considered the content type used to determine layouts etc. To read more about sections, including how to nest them, see [sections][]. ++ ++Without any additional configuration, the following will just work: ++ ++``` ++. ++└── content ++ └── about ++ | └── _index.md // <- https://example.com/about/ ++ ├── post ++ | ├── firstpost.md // <- https://example.com/post/firstpost/ ++ | ├── happy ++ | | └── ness.md // <- https://example.com/post/happy/ness/ ++ | └── secondpost.md // <- https://example.com/post/secondpost/ ++ └── quote ++ ├── first.md // <- https://example.com/quote/first/ ++ └── second.md // <- https://example.com/quote/second/ ++``` ++ ++## Path Breakdown in Hugo ++ ++ ++The following demonstrates the relationships between your content organization and the output URL structure for your Hugo website when it renders. These examples assume you are [using pretty URLs][pretty], which is the default behavior for Hugo. The examples also assume a key-value of `baseurl = "https://example.com"` in your [site's configuration file][config]. ++ ++### Index Pages: `_index.md` ++ ++`_index.md` has a special role in Hugo. It allows you to add front matter and content to your [list templates][lists]. These templates include those for [section templates][], [taxonomy templates][], [taxonomy terms templates][], and your [homepage template][]. ++ ++{{% note %}} ++**Tip:** You can get a reference to the content and metadata in `_index.md` using the [`.Site.GetPage` function](/functions/getpage/). ++{{% /note %}} ++ ++You can keep one `_index.md` for your homepage and one in each of your content sections, taxonomies, and taxonomy terms. The following shows typical placement of an `_index.md` that would contain content and front matter for a `posts` section list page on a Hugo website: ++ ++ ++``` ++. url ++. ⊢--^-⊣ ++. path slug ++. ⊢--^-⊣⊢---^---⊣ ++. filepath ++. ⊢------^------⊣ ++content/posts/_index.md ++``` ++ ++At build, this will output to the following destination with the associated values: ++ ++``` ++ ++ url ("/posts/") ++ ⊢-^-⊣ ++ baseurl section ("posts") ++⊢--------^---------⊣⊢-^-⊣ ++ permalink ++⊢----------^-------------⊣ ++https://example.com/posts/index.html ++``` ++ ++The [sections][] can be nested as deeply as you need. The important part to understand is, that to make the section tree fully navigational, at least the lower-most section needs a content file. (i.e. `_index.md`). ++ ++ ++### Single Pages in Sections ++ ++Single content files in each of your sections are going to be rendered as [single page templates][singles]. Here is an example of a single `post` within `posts`: ++ ++ ++``` ++ path ("posts/my-first-hugo-post.md") ++. ⊢-----------^------------⊣ ++. section slug ++. ⊢-^-⊣⊢--------^----------⊣ ++content/posts/my-first-hugo-post.md ++``` ++ ++At the time Hugo builds your site, the content will be output to the following destination: ++ ++``` ++ ++ url ("/posts/my-first-hugo-post/") ++ ⊢------------^----------⊣ ++ baseurl section slug ++⊢--------^--------⊣⊢-^--⊣⊢-------^---------⊣ ++ permalink ++⊢--------------------^---------------------⊣ ++https://example.com/posts/my-first-hugo-post/index.html ++``` ++ ++ ++## Paths Explained ++ ++The following concepts will provide more insight into the relationship between your project's organization and the default behaviors of Hugo when building the output website. ++ ++### `section` ++ ++A default content type is determined by a piece of content's section. `section` is determined by the location within the project's `content` directory. `section` *cannot* be specified or overridden in front matter. ++ ++### `slug` ++ ++A content's `slug` is either `name.extension` or `name/`. The value for `slug` is determined by ++ ++* the name of the content file (e.g., `lollapalooza.md`) OR ++* front matter overrides ++ ++### `path` ++ ++A content's `path` is determined by the section's path to the file. The file `path` ++ ++* is based on the path to the content's location AND ++* does not include the slug ++ ++### `url` ++ ++The `url` is the relative URL for the piece of content. The `url` ++ ++* is based on the content's location within the directory structure OR ++* is defined in front matter and *overrides all the above* ++ ++## Override Destination Paths via Front Matter ++ ++Hugo believes that you organize your content with a purpose. The same structure that works to organize your source content is used to organize the rendered site. As displayed above, the organization of the source content will be mirrored in the destination. ++ ++There are times where you may need more control over your content. In these cases, there are fields that can be specified in the front matter to determine the destination of a specific piece of content. ++ ++The following items are defined in this order for a specific reason: items explained further down in the list will override earlier items, and not all of these items can be defined in front matter: ++ ++### `filename` ++ ++This isn't in the front matter, but is the actual name of the file minus the extension. This will be the name of the file in the destination (e.g., `content/posts/my-post.md` becomes `example.com/posts/my-post/`). ++ ++### `slug` ++ ++When defined in the front matter, the `slug` can take the place of the filename for the destination. ++ ++{{< code file="content/posts/old-post.md" >}} ++--- ++title: New Post ++slug: "new-post" ++--- ++{{< /code >}} ++ ++This will render to the following destination according to Hugo's default behavior: ++ ++``` ++example.com/posts/new-post/ ++``` ++ ++### `section` ++ ++`section` is determined by a content's location on disk and *cannot* be specified in the front matter. See [sections][] for more information. ++ ++### `type` ++ ++A content's `type` is also determined by its location on disk but, unlike `section`, it *can* be specified in the front matter. See [types][]. This can come in especially handy when you want a piece of content to render using a different layout. In the following example, you can create a layout at `layouts/new/mylayout.html` that Hugo will use to render this piece of content, even in the midst of many other posts. ++ ++{{< code file="content/posts/my-post.md" >}} ++--- ++title: My Post ++type: new ++layout: mylayout ++--- ++{{< /code >}} ++ ++ ++ ++ ++ ++### `url` ++ ++A complete URL can be provided. This will override all the above as it pertains to the end destination. This must be the path from the baseURL (starting with a `/`). `url` will be used exactly as it provided in the front matter and will ignore the `--uglyURLs` setting in your site configuration: ++ ++{{< code file="content/posts/old-url.md" >}} ++--- ++title: Old URL ++url: /blog/new-url/ ++--- ++{{< /code >}} ++ ++Assuming your `baseURL` is [configured][config] to `https://example.com`, the addition of `url` to the front matter will make `old-url.md` render to the following destination: ++ ++``` ++https://example.com/blog/new-url/ ++``` ++ ++You can see more information on how to control output paths in [URL Management][urls]. ++ ++[config]: /getting-started/configuration/ ++[formats]: /content-management/formats/ ++[front matter]: /content-management/front-matter/ ++[getpage]: /functions/getpage/ ++[homepage template]: /templates/homepage/ ++[homepage]: /templates/homepage/ ++[lists]: /templates/lists/ ++[pretty]: /content-management/urls/#pretty-urls ++[section templates]: /templates/section-templates/ ++[sections]: /content-management/sections/ ++[singles]: /templates/single-page-templates/ ++[taxonomy templates]: /templates/taxonomy-templates/ ++[taxonomy terms templates]: /templates/taxonomy-templates/ ++[types]: /content-management/types/ ++[urls]: /content-management/urls/ diff --cc docs/content/en/content-management/page-bundles.md index 00000000,00000000..639d81ef new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/page-bundles.md @@@ -1,0 -1,0 +1,185 @@@ ++--- ++title : "Page Bundles" ++description : "Content organization using Page Bundles" ++date : 2018-01-24T13:09:00-05:00 ++lastmod : 2018-01-28T22:26:40-05:00 ++linktitle : "Page Bundles" ++keywords : ["page", "bundle", "leaf", "branch"] ++categories : ["content management"] ++toc : true ++menu : ++ docs: ++ identifier : "page-bundles" ++ parent : "content-management" ++ weight : 11 ++--- ++ ++Page Bundles are a way to group [Page Resources](/content-management/page-resources/). ++ ++A Page Bundle can be one of: ++ ++- Leaf Bundle (leaf means it has no children) ++- Branch Bundle (home page, section, taxonomy terms, taxonomy list) ++ ++| | Leaf Bundle | Branch Bundle | ++|-------------------------------------|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ++| Usage | Collection of content and attachments for single pages | Collection of attachments for section pages (home page, section, taxonomy terms, taxonomy list) | ++| Index file name | `index.md` [^fn:1] | `_index.md` [^fn:1] | ++| Allowed Resources | Page and non-page (like images, pdf, etc.) types | Only non-page (like images, pdf, etc.) types | ++| Where can the Resources live? | At any directory level within the leaf bundle directory. | Only in the directory level **of** the branch bundle directory i.e. the directory containing the `_index.md` ([ref](https://discourse.gohugo.io/t/question-about-content-folder-structure/11822/4?u=kaushalmodi)). | ++| Layout type | `single` | `list` | ++| Nesting | Does not allow nesting of more bundles under it | Allows nesting of leaf or branch bundles under it | ++| Example | `content/posts/my-post/index.md` | `content/posts/_index.md` | ++| Content from non-index page files .. | Accessed only as page resources | Accessed only as regular pages | ++ ++ ++## Leaf Bundles {#leaf-bundles} ++ ++A _Leaf Bundle_ is a directory at any hierarchy within the `content/` ++directory, that contains an **`index.md`** file. ++ ++### Examples of Leaf Bundle organization {#examples-of-leaf-bundle-organization} ++ ++```text ++content/ ++├── about ++│ ├── index.md ++├── posts ++│ ├── my-post ++│ │ ├── content1.md ++│ │ ├── content2.md ++│ │ ├── image1.jpg ++│ │ ├── image2.png ++│ │ └── index.md ++│ └── my-another-post ++│    └── index.md ++│ ++└── another-section ++ ├── .. ++    └── not-a-leaf-bundle ++ ├── .. ++    └── another-leaf-bundle ++    └── index.md ++``` ++ ++In the above example `content/` directory, there are four leaf ++bundles: ++ ++about ++: This leaf bundle is at the root level (directly under ++ `content` directory) and has only the `index.md`. ++ ++my-post ++: This leaf bundle has the `index.md`, two other content ++ Markdown files and two image files. ++ ++my-another-post ++: This leaf bundle has only the `index.md`. ++ ++another-leaf-bundle ++: This leaf bundle is nested under couple of ++ directories. This bundle also has only the `index.md`. ++ ++{{% note %}} ++The hierarchy depth at which a leaf bundle is created does not matter, ++as long as it is not inside another **leaf** bundle. ++{{% /note %}} ++ ++ ++### Headless Bundle {#headless-bundle} ++ ++A headless bundle is a bundle that is configured to not get published ++anywhere: ++ ++- It will have no `Permalink` and no rendered HTML in `public/`. ++- It will not be part of `.Site.RegularPages`, etc. ++ ++But you can get it by `.Site.GetPage`. Here is an example: ++ ++```go-html-template ++{{ $headless := .Site.GetPage "page" "some-headless-bundle" }} ++{{ $reusablePages := $headless.Resources.Match "author*" }} ++

    Authors

    ++{{ range $reusablePages }} ++

    {{ .Title }}

    ++ {{ .Content }} ++{{ end }} ++``` ++ ++_In this example, we are assuming the `some-headless-bundle` to be a headless ++ bundle containing one or more **page** resources whose `.Name` matches ++ `"author*"`._ ++ ++Explanation of the above example: ++ ++1. Get the `some-headless-bundle` Page "object". ++2. Collect a *slice* of resources in this *Page Bundle* that matches ++ `"author*"` using `.Resources.Match`. ++3. Loop through that *slice* of nested pages, and output their `.Title` and ++ `.Content`. ++ ++--- ++ ++A leaf bundle can be made headless by adding below in the Front Matter ++(in the `index.md`): ++ ++```toml ++headless = true ++``` ++ ++{{% note %}} ++Only leaf bundles can be made headless. ++{{% /note %}} ++ ++There are many use cases of such headless page bundles: ++ ++- Shared media galleries ++- Reusable page content "snippets" ++ ++ ++## Branch Bundles {#branch-bundles} ++ ++A _Branch Bundle_ is any directory at any hierarchy within the ++`content/` directory, that contains at least an **`_index.md`** file. ++ ++This `_index.md` can also be directly under the `content/` directory. ++ ++{{% note %}} ++Here `md` (markdown) is used just as an example. You can use any file ++type as a content resource as long as it is a content type recognized by Hugo. ++{{% /note %}} ++ ++ ++### Examples of Branch Bundle organization {#examples-of-branch-bundle-organization} ++ ++```text ++content/ ++├── branch-bundle-1 ++│   ├── branch-content1.md ++│   ├── branch-content2.md ++│   ├── image1.jpg ++│   ├── image2.png ++│   └── _index.md ++└── branch-bundle-2 ++ ├── _index.md ++ └── a-leaf-bundle ++ └── index.md ++``` ++ ++In the above example `content/` directory, there are two branch ++bundles (and a leaf bundle): ++ ++`branch-bundle-1` ++: This branch bundle has the `_index.md`, two ++ other content Markdown files and two image files. ++ ++`branch-bundle-2` ++: This branch bundle has the `_index.md` and a ++ nested leaf bundle. ++ ++{{% note %}} ++The hierarchy depth at which a branch bundle is created does not ++matter. ++{{% /note %}} ++ ++[^fn:1]: The `.md` extension is just an example. The extension can be `.html`, `.json` or any of any valid MIME type. diff --cc docs/content/en/content-management/page-resources.md index 00000000,00000000..cefb1cd4 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/page-resources.md @@@ -1,0 -1,0 +1,150 @@@ ++--- ++title : "Page Resources" ++description : "Page Resources -- images, other pages, documents etc. -- have page-relative URLs and their own metadata." ++date: 2018-01-24 ++categories: ["content management"] ++keywords: [bundle,content,resources] ++weight: 4003 ++draft: false ++toc: true ++linktitle: "Page Resources" ++menu: ++ docs: ++ parent: "content-management" ++ weight: 31 ++--- ++ ++## Properties ++ ++ResourceType ++: The main type of the resource. For example, a file of MIME type `image/jpg` has for ResourceType `image`. ++ ++Name ++: Default value is the filename (relative to the owning page). Can be set in front matter. ++ ++Title ++: Default blank. Can be set in front matter. ++ ++Permalink ++: The absolute URL to the resource. Resources of type `page` will have no value. ++ ++RelPermalink ++: The relative URL to the resource. Resources of type `page` will have no value. ++ ++## Methods ++ByType ++: Returns the page resources of the given type. ++ ++```go ++{{ .Resources.ByType "image" }} ++``` ++Match ++: Returns all the page resources (as a slice) whose `Name` matches the given Glob pattern ([examples](https://github.com/gobwas/glob/blob/master/readme.md)). The matching is case-insensitive. ++ ++```go ++{{ .Resources.Match "images/*" }} ++``` ++ ++GetMatch ++: Same as `Match` but will return the first match. ++ ++### Pattern Matching ++```go ++// Using Match/GetMatch to find this images/sunset.jpg ? ++.Resources.Match "images/sun*" ✅ ++.Resources.Match "**/Sunset.jpg" ✅ ++.Resources.Match "images/*.jpg" ✅ ++.Resources.Match "**.jpg" ✅ ++.Resources.Match "*" 🚫 ++.Resources.Match "sunset.jpg" 🚫 ++.Resources.Match "*sunset.jpg" 🚫 ++ ++``` ++ ++## Page Resources Metadata ++ ++Page Resources' metadata is managed from their page's front matter with an array/table parameter named `resources`. You can batch assign values using a [wildcards](http://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm). ++ ++{{% note %}} ++Resources of type `page` get `Title` etc. from their own front matter. ++{{% /note %}} ++ ++name ++: Sets the value returned in `Name`. ++ ++{{% warning %}} ++The methods `Match` and `GetMatch` use `Name` to match the resources. ++{{%/ warning %}} ++ ++title ++: Sets the value returned in `Title` ++ ++params ++: A map of custom key/values. ++ ++ ++### Resources metadata example ++ ++{{< code-toggle copy="false">}} ++title: Application ++date : 2018-01-25 ++resources : ++- src : "images/sunset.jpg" ++ name : "header" ++- src : "documents/photo_specs.pdf" ++ title : "Photo Specifications" ++ params: ++ icon : "photo" ++- src : "documents/guide.pdf" ++ title : "Instruction Guide" ++- src : "documents/checklist.pdf" ++ title : "Document Checklist" ++- src : "documents/payment.docx" ++ title : "Proof of Payment" ++- src : "**.pdf" ++ name : "pdf-file-:counter" ++ params : ++ icon : "pdf" ++- src : "**.docx" ++ params : ++ icon : "word" ++{{}} ++ ++From the example above: ++ ++- `sunset.jpg` will receive a new `Name` and can now be found with `.GetMatch "header"`. ++- `documents/photo_specs.pdf` will get the `photo` icon. ++- `documents/checklist.pdf`, `documents/guide.pdf` and `documents/payment.docx` will get `Title` as set by `title`. ++- Every `PDF` in the bundle except `documents/photo_specs.pdf` will get the `pdf` icon. ++- All `PDF` files will get a new `Name`. The `name` parameter contains a special placeholder [`:counter`](#counter), so the `Name` will be `pdf-file-1`, `pdf-file-2`, `pdf-file-3`. ++- Every docx in the bundle will receive the `word` icon. ++ ++{{% warning %}} ++The __order matters__ --- Only the **first set** values of the `title`, `name` and `params`-**keys** will be used. Consecutive parameters will be set only for the ones not already set. For example, in the above example, `.Params.icon` is already first set to `"photo"` in `src = "documents/photo_specs.pdf"`. So that would not get overridden to `"pdf"` by the later set `src = "**.pdf"` rule. ++{{%/ warning %}} ++ ++### The `:counter` placeholder in `name` and `title` ++ ++The `:counter` is a special placeholder recognized in `name` and `title` parameters `resources`. ++ ++The counter starts at 1 the first time they are used in either `name` or `title`. ++ ++For example, if a bundle has the resources `photo_specs.pdf`, `other_specs.pdf`, `guide.pdf` and `checklist.pdf`, and the front matter has specified the `resources` as: ++ ++{{< code-toggle copy="false">}} ++[[resources]] ++ src = "*specs.pdf" ++ title = "Specification #:counter" ++[[resources]] ++ src = "**.pdf" ++ name = "pdf-file-:counter" ++{{}} ++ ++the `Name` and `Title` will be assigned to the resource files as follows: ++ ++| Resource file | `Name` | `Title` | ++|-------------------|-------------------|-----------------------| ++| checklist.pdf | `"pdf-file-1.pdf` | `"checklist.pdf"` | ++| guide.pdf | `"pdf-file-2.pdf` | `"guide.pdf"` | ++| other\_specs.pdf | `"pdf-file-3.pdf` | `"Specification #1"` | ++| photo\_specs.pdf | `"pdf-file-4.pdf` | `"Specification #2"` | diff --cc docs/content/en/content-management/related.md index 00000000,00000000..6f66e446 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/related.md @@@ -1,0 -1,0 +1,143 @@@ ++--- ++title: Related Content ++description: List related content in "See Also" sections. ++date: 2017-09-05 ++categories: [content management] ++keywords: [content] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 40 ++weight: 30 ++draft: false ++aliases: [/content/related/,/related/] ++toc: true ++--- ++ ++{{% note %}} ++We currently do not index **Page content**. We thought we would release something that will make most people happy before we start solving [Sherlock's last case](https://github.com/joearms/sherlock). ++{{% /note %}} ++ ++## List Related Content ++ ++To list up to 5 related pages is as simple as including something similar to this partial in your single page template: ++ ++{{< code file="layouts/partials/related.html" >}} ++{{ $related := .Site.RegularPages.Related . | first 5 }} ++{{ with $related }} ++

    See Also

    ++ ++{{ end }} ++{{< /code >}} ++ ++ ++{{% note %}} ++Read [this blog article](https://regisphilibert.com/blog/2018/04/hugo-optmized-relashionships-with-related-content/) for a great explanation more advanced usage of this feature. ++{{% /note %}} ++ ++The full set of methods available on the page lists can bee seen in this Go interface: ++ ++```go ++// A PageGenealogist finds related pages in a page collection. This interface is implemented ++// by Pages and PageGroup, which makes it available as `{{ .RegularPages.Related . }}` etc. ++type PageGenealogist interface { ++ ++ // Template example: ++ // {{ $related := .RegularPages.Related . }} ++ Related(doc related.Document) (Pages, error) ++ ++ // Template example: ++ // {{ $related := .RegularPages.RelatedIndices . "tags" "date" }} ++ RelatedIndices(doc related.Document, indices ...interface{}) (Pages, error) ++ ++ // Template example: ++ // {{ $related := .RegularPages.RelatedTo ( keyVals "tags" "hugo" "rocks") ( keyVals "date" .Date ) }} ++ RelatedTo(args ...types.KeyValues) (Pages, error) ++} ++``` ++## Configure Related Content ++Hugo provides a sensible default configuration of Related Content, but you can fine-tune this in your configuration, on the global or language level if needed. ++ ++{{% note %}} ++If you add a `related` config section, you need to add a complete configuration. It is not possible to just set, say, `includeNewer` and use the rest from the Hugo defaults. ++{{% /note %}} ++ ++Below is a sample `config.toml` section: ++ ++``` ++[related] ++ ++# Only include matches with rank >= threshold. This is a normalized rank between 0 and 100. ++threshold = 80 ++ ++# To get stable "See also" sections we, by default, exclude newer related pages. ++includeNewer = false ++ ++# Will lower case keywords in both queries and in the indexes. ++toLower = false ++ ++[[related.indices]] ++name = "keywords" ++weight = 150 ++[[related.indices]] ++name = "author" ++toLower = true ++weight = 30 ++[[related.indices]] ++name = "tags" ++weight = 100 ++[[related.indices]] ++name = "date" ++weight = 10 ++pattern = "2006" ++``` ++### Top Level Config Options ++ ++threshold ++: A value between 0-100. Lower value will give more, but maybe not so relevant, matches. ++ ++includeNewer ++: Set to true to include **pages newer than the current page** in the related content listing. This will mean that the output for older posts may change as new related content gets added. ++ ++toLower ++: Set to true to lower case keywords in both the indexes and the queries. This may give more accurate results at a slight performance penalty. Note that this can also be set per index. ++ ++### Config Options per Index ++ ++name ++: The index name. This value maps directly to a page param. Hugo supports string values (`author` in the example) and lists (`tags`, `keywords` etc.) and time and date objects. ++ ++weight ++: An integer weight that indicates _how important_ this parameter is relative to the other parameters. It can be 0, which has the effect of turning this index off, or even negative. Test with different values to see what fits your content best. ++ ++pattern ++: This is currently only relevant for dates. When listing related content, we may want to list content that is also close in time. Setting "2006" (default value for date indexes) as the pattern for a date index will add weight to pages published in the same year. For busier blogs, "200601" (year and month) may be a better default. ++ ++toLower ++: See above. ++ ++## Performance Considerations ++ ++**Fast is Hugo's middle name** and we would not have released this feature had it not been blistering fast. ++ ++This feature has been in the back log and requested by many for a long time. The development got this recent kick start from this Twitter thread: ++ ++{{< tweet 898398437527363585 >}} ++ ++Scott S. Lowe removed the "Related Content" section built using the `intersect` template function on tags, and the build time dropped from 30 seconds to less than 2 seconds on his 1700 content page sized blog. ++ ++He should now be able to add an improved version of that "Related Content" section without giving up the fast live-reloads. But it's worth noting that: ++ ++* If you don't use any of the `Related` methods, you will not use the Relate Content feature, and performance will be the same as before. ++* Calling `.RegularPages.Related` etc. will create one inverted index, also sometimes named posting list, that will be reused for any lookups in that same page collection. Doing that in addition to, as an example, calling `.Pages.Related` will work as expected, but will create one additional inverted index. This should still be very fast, but worth having in mind, especially for bigger sites. ++ ++ ++ ++ ++ ++ ++ diff --cc docs/content/en/content-management/sections.md index 00000000,00000000..79ae201d new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/sections.md @@@ -1,0 -1,0 +1,98 @@@ ++--- ++title: Content Sections ++linktitle: Sections ++description: "Hugo generates a **section tree** that matches your content." ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [content management] ++keywords: [lists,sections,content types,organization] ++menu: ++ docs: ++ parent: "content-management" ++ weight: 50 ++weight: 50 #rem ++draft: false ++aliases: [/content/sections/] ++toc: true ++--- ++ ++A **Section** is a collection of pages that gets defined based on the ++organization structure under the `content/` directory. ++ ++By default, all the **first-level** directories under `content/` form their own ++sections (**root sections**). ++ ++If a user needs to define a section `foo` at a deeper level, they need to create ++a directory named `foo` with an `_index.md` file (see [Branch Bundles][branch bundles] ++for more information). ++ ++ ++{{% note %}} ++A **section** cannot be defined or overridden by a front matter parameter -- it ++is strictly derived from the content organization structure. ++{{% /note %}} ++ ++## Nested Sections ++ ++The sections can be nested as deeply as you need. ++ ++```bash ++content ++└── blog <-- Section, because first-level dir under content/ ++ ├── funny-cats ++ │   ├── mypost.md ++ │   └── kittens <-- Section, because contains _index.md ++ │   └── _index.md ++ └── tech <-- Section, because contains _index.md ++ └── _index.md ++``` ++ ++**The important part to understand is, that to make the section tree fully navigational, at least the lower-most section needs a content file. (e.g. `_index.md`).** ++ ++{{% note %}} ++When we talk about a **section** in correlation with template selection, it is ++currently always the *root section* only (`/blog/funny-cats/mypost/ => blog`). ++ ++If you need a specific template for a sub-section, you need to adjust either the `type` or `layout` in front matter. ++{{% /note %}} ++ ++## Example: Breadcrumb Navigation ++ ++With the available [section variables and methods](#section-page-variables-and-methods) you can build powerful navigation. One common example would be a partial to show Breadcrumb navigation: ++ ++{{< code file="layouts/partials/breadcrumb.html" download="breadcrumb.html" >}} ++ ++{{ define "breadcrumbnav" }} ++{{ if .p1.Parent }} ++{{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 ) }} ++{{ else if not .p1.IsHome }} ++{{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) }} ++{{ end }} ++ ++ {{ .p1.Title }} ++ ++{{ end }} ++{{< /code >}} ++ ++## Section Page Variables and Methods ++ ++Also see [Page Variables](/variables/page/). ++ ++{{< readfile file="/content/en/readfiles/sectionvars.md" markdown="true" >}} ++ ++## Content Section Lists ++ ++Hugo will automatically create pages for each *root section* that list all of the content in that section. See the documentation on [section templates][] for details on customizing the way these pages are rendered. ++ ++## Content *Section* vs Content *Type* ++ ++By default, everything created within a section will use the [content `type`][content type] that matches the *root section* name. For example, Hugo will assume that `posts/post-1.md` has a `posts` content `type`. If you are using an [archetype][] for your `posts` section, Hugo will generate front matter according to what it finds in `archetypes/posts.md`. ++ ++[archetype]: /content-management/archetypes/ ++[content type]: /content-management/types/ ++[directory structure]: /getting-started/directory-structure/ ++[section templates]: /templates/section-templates/ ++[branch bundles]: /content-management/page-bundles/#branch-bundles diff --cc docs/content/en/content-management/shortcodes.md index 00000000,00000000..e5687331 new file mode 100644 --- /dev/null +++ b/docs/content/en/content-management/shortcodes.md @@@ -1,0 -1,0 +1,424 @@@ ++--- ++title: Shortcodes ++linktitle: ++description: Shortcodes are simple snippets inside your content files calling built-in or custom templates. ++godocref: ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-03-31 ++menu: ++ docs: ++ parent: "content-management" ++ weight: 35 ++weight: 35 #rem ++categories: [content management] ++keywords: [markdown,content,shortcodes] ++draft: false ++aliases: [/extras/shortcodes/] ++toc: true ++--- ++ ++## What a Shortcode is ++ ++Hugo loves Markdown because of its simple content format, but there are times when Markdown falls short. Often, content authors are forced to add raw HTML (e.g., video ``) to Markdown content. We think this contradicts the beautiful simplicity of Markdown's syntax. ++ ++Hugo created **shortcodes** to circumvent these limitations. ++ ++A shortcode is a simple snippet inside a content file that Hugo will render using a predefined template. Note that shortcodes will not work in template files. If you need the type of drop-in functionality that shortcodes provide but in a template, you most likely want a [partial template][partials] instead. ++ ++In addition to cleaner Markdown, shortcodes can be updated any time to reflect new classes, techniques, or standards. At the point of site generation, Hugo shortcodes will easily merge in your changes. You avoid a possibly complicated search and replace operation. ++ ++## Use Shortcodes ++ ++{{< youtube 2xkNJL4gJ9E >}} ++ ++In your content files, a shortcode can be called by calling `{{%/* shortcodename parameters */%}}`. Shortcode parameters are space delimited, and parameters with internal spaces can be quoted. ++ ++The first word in the shortcode declaration is always the name of the shortcode. Parameters follow the name. Depending upon how the shortcode is defined, the parameters may be named, positional, or both, although you can't mix parameter types in a single call. The format for named parameters models that of HTML with the format `name="value"`. ++ ++Some shortcodes use or require closing shortcodes. Again like HTML, the opening and closing shortcodes match (name only) with the closing declaration, which is prepended with a slash. ++ ++Here are two examples of paired shortcodes: ++ ++``` ++{{%/* mdshortcode */%}}Stuff to `process` in the *center*.{{%/* /mdshortcode */%}} ++``` ++ ++``` ++{{}} A bunch of code here {{}} ++``` ++ ++The examples above use two different delimiters, the difference being the `%` character in the first and the `<>` characters in the second. ++ ++### Shortcodes with Markdown ++ ++The `%` character indicates that the shortcode's inner content---called in the [shortcode template][sctemps] with the [`.Inner` variable][scvars]---needs further processing by the page's rendering processor (i.e. markdown via Blackfriday). In the following example, Blackfriday would convert `**World**` to `World`: ++ ++``` ++{{%/* myshortcode */%}}Hello **World!**{{%/* /myshortcode */%}} ++``` ++ ++### Shortcodes Without Markdown ++ ++The `<` character indicates that the shortcode's inner content does *not* need further rendering. Often shortcodes without markdown include internal HTML: ++ ++``` ++{{}}

    Hello World!

    {{}} ++``` ++ ++### Nested Shortcodes ++ ++You can call shortcodes within other shortcodes by creating your own templates that leverage the `.Parent` variable. `.Parent` allows you to check the context in which the shortcode is being called. See [Shortcode templates][sctemps]. ++ ++## Use Hugo's Built-in Shortcodes ++ ++Hugo ships with a set of predefined shortcodes that represent very common usage. These shortcodes are provided for author convenience and to keep your markdown content clean. ++ ++### `figure` ++ ++`figure` is an extension of the image syntax in markdown, which does not provide a shorthand for the more semantic [HTML5 `
    ` element][figureelement]. ++ ++The `figure` shortcode can use the following named parameters: ++ ++src ++: URL of the image to be displayed. ++ ++link ++: If the image needs to be hyperlinked, URL of the destination. ++ ++target ++: Optional `target` attribute for the URL if `link` parameter is set. ++ ++rel ++: Optional `rel` attribute for the URL if `link` parameter is set. ++ ++alt ++: Alternate text for the image if the image cannot be displayed. ++ ++title ++: Image title. ++ ++caption ++: Image caption. ++ ++class ++: `class` attribute of the HTML `figure` tag. ++ ++height ++: `height` attribute of the image. ++ ++width ++: `width` attribute of the image. ++ ++attr ++: Image attribution text. ++ ++attrlink ++: If the attribution text needs to be hyperlinked, URL of the destination. ++ ++#### Example `figure` Input ++ ++{{< code file="figure-input-example.md" >}} ++{{}} ++{{< /code >}} ++ ++#### Example `figure` Output ++ ++{{< output file="figure-output-example.html" >}} ++
    ++ ++
    ++

    Steve Francia

    ++
    ++
    ++{{< /output >}} ++ ++### `gist` ++ ++Bloggers often want to include GitHub gists when writing posts. Let's suppose we want to use the [gist at the following url][examplegist]: ++ ++``` ++https://gist.github.com/spf13/7896402 ++``` ++ ++We can embed the gist in our content via username and gist ID pulled from the URL: ++ ++``` ++{{}} ++``` ++ ++#### Example `gist` Input ++ ++If the gist contains several files and you want to quote just one of them, you can pass the filename (quoted) as an optional third argument: ++ ++{{< code file="gist-input.md" >}} ++{{}} ++{{< /code >}} ++ ++#### Example `gist` Output ++ ++{{< output file="gist-output.html" >}} ++{{< gist spf13 7896402 >}} ++{{< /output >}} ++ ++#### Example `gist` Display ++ ++To demonstrate the remarkably efficiency of Hugo's shortcode feature, we have embedded the `spf13` `gist` example in this page. The following simulates the experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup. ++ ++{{< gist spf13 7896402 >}} ++ ++### `highlight` ++ ++This shortcode will convert the source code provided into syntax-highlighted HTML. Read more on [highlighting](/tools/syntax-highlighting/). `highlight` takes exactly one required `language` parameter and requires a closing shortcode. ++ ++#### Example `highlight` Input ++ ++{{< code file="content/tutorials/learn-html.md" >}} ++{{}} ++
    ++
    ++

    {{ .Title }}

    ++ {{ range .Data.Pages }} ++ {{ .Render "summary"}} ++ {{ end }} ++
    ++
    ++{{}} ++{{< /code >}} ++ ++#### Example `highlight` Output ++ ++The `highlight` shortcode example above would produce the following HTML when the site is rendered: ++ ++{{< output file="tutorials/learn-html/index.html" >}} ++<section id="main"> ++ <div> ++ <h1 id="title">{{ .Title }}</h1> ++ {{ range .Data.Pages }} ++ {{ .Render "summary"}} ++ {{ end }} ++ </div> ++</section> ++{{< /output >}} ++ ++{{% note "More on Syntax Highlighting" %}} ++To see even more options for adding syntax-highlighted code blocks to your website, see [Syntax Highlighting in Developer Tools](/tools/syntax-highlighting/). ++{{% /note %}} ++ ++### `instagram` ++ ++If you'd like to embed a photo from [Instagram][], you only need the photo's ID. You can discern an Instagram photo ID from the URL: ++ ++``` ++https://www.instagram.com/p/BWNjjyYFxVx/ ++``` ++ ++#### Example `instagram` Input ++ ++{{< code file="instagram-input.md" >}} ++{{}} ++{{< /code >}} ++ ++You also have the option to hide the caption: ++ ++{{< code file="instagram-input-hide-caption.md" >}} ++{{}} ++{{< /code >}} ++ ++#### Example `instagram` Output ++ ++By adding the preceding `hidecaption` example, the following HTML will be added to your rendered website's markup: ++ ++{{< output file="instagram-hide-caption-output.html" >}} ++{{< instagram BWNjjyYFxVx hidecaption >}} ++{{< /output >}} ++ ++#### Example `instagram` Display ++ ++Using the preceding `instagram` with `hidecaption` example above, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup. ++ ++{{< instagram BWNjjyYFxVx hidecaption >}} ++ ++ ++### `ref` and `relref` ++ ++These shortcodes will look up the pages by their relative path (e.g., `blog/post.md`) or their logical name (`post.md`) and return the permalink (`ref`) or relative permalink (`relref`) for the found page. ++ ++`ref` and `relref` also make it possible to make fragmentary links that work for the header links generated by Hugo. ++ ++{{% note "More on Cross References" %}} ++Read a more extensive description of `ref` and `relref` in the [cross references](/content-management/cross-references/) documentation. ++{{% /note %}} ++ ++`ref` and `relref` take exactly one required parameter of _reference_, quoted and in position `0`. ++ ++#### Example `ref` and `relref` Input ++ ++``` ++[Neat]({{}}) ++[Who]({{}}) ++``` ++ ++#### Example `ref` and `relref` Output ++ ++Assuming that standard Hugo pretty URLs are turned on. ++ ++``` ++Neat ++Who ++``` ++ ++### `speakerdeck` ++ ++To embed slides from [Speaker Deck][], click on "< /> Embed" (under Share right next to the template on Speaker Deck) and copy the URL: ++ ++``` ++ ++``` ++ ++#### `speakerdeck` Example Input ++ ++Extract the value from the field `data-id` and pass it to the shortcode: ++ ++{{< code file="speakerdeck-example-input.md" >}} ++{{}} ++{{< /code >}} ++ ++#### `speakerdeck` Example Output ++ ++{{< output file="speakerdeck-example-input.md" >}} ++{{< speakerdeck 4e8126e72d853c0060001f97 >}} ++{{< /output >}} ++ ++#### `speakerdeck` Example Display ++ ++For the preceding `speakerdeck` example, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup. ++ ++{{< speakerdeck 4e8126e72d853c0060001f97 >}} ++ ++### `tweet` ++ ++You want to include a single tweet into your blog post? Everything you need is the URL of the tweet: ++ ++``` ++https://twitter.com/spf13/status/877500564405444608 ++``` ++ ++#### Example `tweet` Input ++ ++Pass the tweet's ID from the URL as a parameter to the `tweet` shortcode: ++ ++{{< code file="example-tweet-input.md" >}} ++{{}} ++{{< /code >}} ++ ++#### Example `tweet` Output ++ ++Using the preceding `tweet` example, the following HTML will be added to your rendered website's markup: ++ ++{{< output file="example-tweet-output.html" >}} ++{{< tweet 877500564405444608 >}} ++{{< /output >}} ++ ++#### Example `tweet` Display ++ ++Using the preceding `tweet` example, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup. ++ ++{{< tweet 877500564405444608 >}} ++ ++### `vimeo` ++ ++Adding a video from [Vimeo][] is equivalent to the YouTube shortcode above. ++ ++``` ++https://vimeo.com/channels/staffpicks/146022717 ++``` ++ ++#### Example `vimeo` Input ++ ++Extract the ID from the video's URL and pass it to the `vimeo` shortcode: ++ ++{{< code file="example-vimeo-input.md" >}} ++{{}} ++{{< /code >}} ++ ++#### Example `vimeo` Output ++ ++Using the preceding `vimeo` example, the following HTML will be added to your rendered website's markup: ++ ++{{< output file="example-vimeo-output.html" >}} ++{{< vimeo 146022717 >}} ++{{< /output >}} ++ ++{{% tip %}} ++If you want to further customize the visual styling of the YouTube or Vimeo output, add a `class` named parameter when calling the shortcode. The new `class` will be added to the `
    ` that wraps the ` ++
    ++{{< /code >}} ++ ++{{< code file="youtube-embed.html" copy="false" >}} ++
    ++ ++
    ++{{< /code >}} ++ ++### Single Named Example: `image` ++ ++Let's say you want to create your own `img` shortcode rather than use Hugo's built-in [`figure` shortcode][figure]. Your goal is to be able to call the shortcode as follows in your content files: ++ ++{{< code file="content-image.md" >}} ++{{}} ++{{< /code >}} ++ ++You have created the shortcode at `/layouts/shortcodes/img.html`, which loads the following shortcode template: ++ ++{{< code file="/layouts/shortcodes/img.html" >}} ++ ++
    ++ {{ with .Get "link"}}{{ end }} ++ ++ {{ if .Get "link"}}{{ end }} ++ {{ if or (or (.Get "title") (.Get "caption")) (.Get "attr")}} ++
    {{ if isset .Params "title" }} ++

    {{ .Get "title" }}

    {{ end }} ++ {{ if or (.Get "caption") (.Get "attr")}}

    ++ {{ .Get "caption" }} ++ {{ with .Get "attrlink"}} {{ end }} ++ {{ .Get "attr" }} ++ {{ if .Get "attrlink"}} {{ end }} ++

    {{ end }} ++
    ++ {{ end }} ++
    ++ ++{{< /code >}} ++ ++Would be rendered as: ++ ++{{< code file="img-output.html" copy="false" >}} ++
    ++ ++
    ++

    Steve Francia

    ++
    ++
    ++{{< /code >}} ++ ++### Single Flexible Example: `vimeo` ++ ++``` ++{{}} ++{{}} ++``` ++ ++Would load the template found at `/layouts/shortcodes/vimeo.html`: ++ ++{{< code file="/layouts/shortcodes/vimeo.html" >}} ++{{ if .IsNamedParams }} ++
    ++ ++
    ++{{ else }} ++
    ++ ++
    ++{{ end }} ++{{< /code >}} ++ ++Would be rendered as: ++ ++{{< code file="vimeo-iframes.html" copy="false" >}} ++
    ++ ++
    ++
    ++ ++
    ++{{< /code >}} ++ ++### Paired Example: `highlight` ++ ++The following is taken from `highlight`, which is a [built-in shortcode][] that ships with Hugo. ++ ++{{< code file="highlight-example.md" >}} ++{{}} ++ ++ This HTML ++ ++{{}} ++{{< /code >}} ++ ++The template for the `highlight` shortcode uses the following code, which is already included in Hugo: ++ ++``` ++{{ .Get 0 | highlight .Inner }} ++``` ++ ++The rendered output of the HTML example code block will be as follows: ++ ++{{< code file="syntax-highlighted.html" copy="false" >}} ++
    <html>
    ++    <body> This HTML </body>
    ++</html>
    ++
    ++{{< /code >}} ++ ++{{% note %}} ++The preceding shortcode makes use of a Hugo-specific template function called `highlight`, which uses [Pygments](http://pygments.org) to add syntax highlighting to the example HTML code block. See the [developer tools page on syntax highlighting](/tools/syntax-highlighting/) for more information. ++{{% /note %}} ++ ++### Nested Shortcode: Image Gallery ++ ++Hugo's [`.Parent` shortcode variable][parent] returns a boolean value depending on whether the shortcode in question is called within the context of a *parent* shortcode. This provides an inheritance model for common shortcode parameters. ++ ++The following example is contrived but demonstrates the concept. Assume you have a `gallery` shortcode that expects one named `class` parameter: ++ ++{{< code file="layouts/shortcodes/gallery.html" >}} ++
    ++ {{.Inner}} ++
    ++{{< /code >}} ++ ++You also have an `img` shortcode with a single named `src` parameter that you want to call inside of `gallery` and other shortcodes, so that the parent defines the context of each `img`: ++ ++{{< code file="layouts/shortcodes/img.html" >}} ++{{- $src := .Get "src" -}} ++{{- with .Parent -}} ++ ++{{- else -}} ++ ++{{- end }} ++{{< /code >}} ++ ++You can then call your shortcode in your content as follows: ++ ++``` ++{{}} ++ {{}} ++ {{}} ++{{}} ++{{}} ++``` ++ ++This will output the following HTML. Note how the first two `img` shortcodes inherit the `class` value of `content-gallery` set with the call to the parent `gallery`, whereas the third `img` only uses `src`: ++ ++``` ++ ++ ++``` ++ ++## More Shortcode Examples ++ ++More shortcode examples can be found in the [shortcodes directory for spf13.com][spfscs] and the [shortcodes directory for the Hugo docs][docsshortcodes]. ++ ++[basic content files]: /content-management/formats/ "See how Hugo leverages markdown--and other supported formats--to create content for your website." ++[built-in shortcode]: /content-management/shortcodes/ ++[config]: /getting-started/configuration/ "Learn more about Hugo's built-in configuration variables as well as how to us your site's configuration file to include global key-values that can be used throughout your rendered website." ++[Content Management: Shortcodes]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes "Check this section if you are not familiar with the definition of what a shortcode is or if you are unfamiliar with how to use Hugo's built-in shortcodes in your content files." ++[source organization]: /getting-started/directory-structure/#directory-structure-explained "Learn how Hugo scaffolds new sites and what it expects to find in each of your directories." ++[docsshortcodes]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes "See the shortcode source directory for the documentation site you're currently reading." ++[figure]: /content-management/shortcodes/#figure ++[hugosc]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes ++[lookup order]: /templates/lookup-order/ "See the order in which Hugo traverses your template files to decide where and how to render your content at build time" ++[pagevars]: /variables/page/ "See which variables you can leverage in your templating for page vs list templates." ++[parent]: /variables/shortcodes/ ++[shortcodesvars]: /variables/shortcodes/ "Certain variables are specific to shortcodes, although most .Page variables can be accessed within your shortcode template." ++[spfscs]: https://github.com/spf13/spf13.com/tree/master/layouts/shortcodes "See more examples of shortcodes by visiting the shortcode directory of the source for spf13.com, the blog of Hugo's creator, Steve Francia." ++[templates]: /templates/ "The templates section of the Hugo docs." ++[vimeoexample]: #single-flexible-example-vimeo ++[youtubeshortcode]: /content-management/shortcodes/#youtube "See how to use Hugo's built-in YouTube shortcode." diff --cc docs/content/en/templates/single-page-templates.md index 00000000,00000000..79e1312b new file mode 100644 --- /dev/null +++ b/docs/content/en/templates/single-page-templates.md @@@ -1,0 -1,0 +1,92 @@@ ++--- ++title: Single Page Templates ++linktitle: ++description: The primary view of content in Hugo is the single view. Hugo will render every Markdown file provided with a corresponding single template. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-04-06 ++categories: [templates] ++keywords: [page,templates] ++menu: ++ docs: ++ parent: "templates" ++ weight: 60 ++weight: 60 ++sections_weight: 60 ++draft: false ++aliases: [/layout/content/] ++toc: true ++--- ++ ++## Single Page Template Lookup Order ++ ++See [Template Lookup](/templates/lookup-order/). ++ ++## Example Single Page Templates ++ ++Content pages are of the type `page` and will therefore have all the [page variables][pagevars] and [site variables][] available to use in their templates. ++ ++### `post/single.html` ++ ++This single page template makes use of Hugo [base templates][], the [`.Format` function][] for dates, the [`.WordCount` page variable][pagevars], and ranges through the single content's specific [taxonomies][pagetaxonomy]. [`with`][] is also used to check whether the taxonomies are set in the front matter. ++ ++{{< code file="layouts/post/single.html" download="single.html" >}} ++{{ define "main" }} ++
    ++

    {{ .Title }}

    ++
    ++
    ++ {{ .Content }} ++
    ++
    ++
    ++ ++{{ end }} ++{{< /code >}} ++ ++To easily generate new instances of a content type (e.g., new `.md` files in a section like `project/`) with preconfigured front matter, use [content archetypes][archetypes]. ++ ++[archetypes]: /content-management/archetypes/ ++[base templates]: /templates/base/ ++[config]: /getting-started/configuration/ ++[content type]: /content-management/types/ ++[directory structure]: /getting-started/directory-structure/ ++[dry]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself ++[`.Format` function]: /functions/format/ ++[front matter]: /content-management/front-matter/ ++[pagetaxonomy]: /templates/taxonomy-templates/#displaying-a-single-piece-of-content-s-taxonomies ++[pagevars]: /variables/page/ ++[partials]: /templates/partials/ ++[section]: /content-management/sections/ ++[site variables]: /variables/site/ ++[spf13]: http://spf13.com/ ++[`with`]: /functions/with/ diff --cc docs/content/en/templates/sitemap-template.md index 00000000,00000000..29b59ad1 new file mode 100644 --- /dev/null +++ b/docs/content/en/templates/sitemap-template.md @@@ -1,0 -1,0 +1,75 @@@ ++--- ++title: Sitemap Template ++# linktitle: Sitemap ++description: Hugo ships with a built-in template file observing the v0.9 of the Sitemap Protocol, but you can override this template if needed. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [templates] ++keywords: [sitemap, xml, templates] ++menu: ++ docs: ++ parent: "templates" ++ weight: 160 ++weight: 160 ++sections_weight: 160 ++draft: false ++aliases: [/layout/sitemap/,/templates/sitemap/] ++toc: false ++--- ++ ++A single Sitemap template is used to generate the `sitemap.xml` file. ++Hugo automatically comes with this template file. *No work is needed on ++the users' part unless they want to customize `sitemap.xml`.* ++ ++A sitemap is a `Page` and therefore has all the [page variables][pagevars] available to use in this template along with Sitemap-specific ones: ++ ++`.Sitemap.ChangeFreq` ++: The page change frequency ++ ++`.Sitemap.Priority` ++: The priority of the page ++ ++`.Sitemap.Filename` ++: The sitemap filename ++ ++If provided, Hugo will use `/layouts/sitemap.xml` instead of the internal `sitemap.xml` template that ships with Hugo. ++ ++## Hugo’s sitemap.xml ++ ++This template respects the version 0.9 of the [Sitemap Protocol](http://www.sitemaps.org/protocol.html). ++ ++``` ++ ++ {{ range .Data.Pages }} ++ ++ {{ .Permalink }}{{ if not .Lastmod.IsZero }} ++ {{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}{{ end }}{{ with .Sitemap.ChangeFreq }} ++ {{ . }}{{ end }}{{ if ge .Sitemap.Priority 0.0 }} ++ {{ .Sitemap.Priority }}{{ end }} ++ ++ {{ end }} ++ ++``` ++ ++{{% note %}} ++Hugo will automatically add the following header line to this file ++on render. Please don't include this in the template as it's not valid HTML. ++ ++`` ++{{% /note %}} ++ ++## Configure `sitemap.xml` ++ ++Defaults for ``, `` and `filename` values can be set in the site's config file, e.g.: ++ ++{{< code-toggle file="config" >}} ++[sitemap] ++ changefreq = "monthly" ++ priority = 0.5 ++ filename = "sitemap.xml" ++{{}} ++ ++The same fields can be specified in an individual content file's front matter in order to override the value assigned to that piece of content at render time. ++ ++[pagevars]: /variables/page/ diff --cc docs/content/en/templates/taxonomy-templates.md index 00000000,00000000..f3b349a3 new file mode 100644 --- /dev/null +++ b/docs/content/en/templates/taxonomy-templates.md @@@ -1,0 -1,0 +1,347 @@@ ++--- ++title: Taxonomy Templates ++# linktitle: ++description: Taxonomy templating includes taxonomy list pages, taxonomy terms pages, and using taxonomies in your single page templates. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [templates] ++keywords: [taxonomies,metadata,front matter,terms,templates] ++menu: ++ docs: ++ parent: "templates" ++ weight: 50 ++weight: 50 ++sections_weight: 50 ++draft: false ++aliases: [/taxonomies/displaying/,/templates/terms/,/indexes/displaying/,/taxonomies/templates/,/indexes/ordering/, /templates/taxonomies/, /templates/taxonomy/] ++toc: true ++--- ++ ++ ++ ++Hugo includes support for user-defined groupings of content called **taxonomies**. Taxonomies are classifications that demonstrate logical relationships between content. See [Taxonomies under Content Management](/content-management/taxonomies) if you are unfamiliar with how Hugo leverages this powerful feature. ++ ++Hugo provides multiple ways to use taxonomies throughout your project templates: ++ ++* Order the way content associated with a taxonomy term is displayed in a [taxonomy list template](#taxonomy-list-template) ++* Order the way the terms for a taxonomy are displayed in a [taxonomy terms template](#taxonomy-terms-template) ++* List a single content's taxonomy terms within a [single page template][] ++ ++## Taxonomy List Templates ++ ++Taxonomy list page templates are lists and therefore have all the variables and methods available to [list pages][lists]. ++ ++### Taxonomy List Template Lookup Order ++ ++See [Template Lookup](/templates/lookup-order/). ++ ++## Taxonomy Terms Template ++ ++### Taxonomy Terms Templates Lookup Order ++ ++See [Template Lookup](/templates/lookup-order/). ++ ++### Taxonomy Methods ++ ++A Taxonomy is a `map[string]WeightedPages`. ++ ++.Get(term) ++: Returns the WeightedPages for a term. ++ ++.Count(term) ++: The number of pieces of content assigned to this term. ++ ++.Alphabetical ++: Returns an OrderedTaxonomy (slice) ordered by Term. ++ ++.ByCount ++: Returns an OrderedTaxonomy (slice) ordered by number of entries. ++ ++.Reverse ++: Returns an OrderedTaxonomy (slice) in reverse order. Must be used with an OrderedTaxonomy. ++ ++### OrderedTaxonomy ++ ++Since Maps are unordered, an OrderedTaxonomy is a special structure that has a defined order. ++ ++``` ++[]struct { ++ Name string ++ WeightedPages WeightedPages ++} ++``` ++ ++Each element of the slice has: ++ ++.Term ++: The Term used. ++ ++.WeightedPages ++: A slice of Weighted Pages. ++ ++.Count ++: The number of pieces of content assigned to this term. ++ ++.Pages ++: All Pages assigned to this term. All [list methods][renderlists] are available to this. ++ ++## WeightedPages ++ ++WeightedPages is simply a slice of WeightedPage. ++ ++``` ++type WeightedPages []WeightedPage ++``` ++ ++.Count(term) ++: The number of pieces of content assigned to this term. ++ ++.Pages ++: Returns a slice of pages, which then can be ordered using any of the [list methods][renderlists]. ++ ++## Displaying custom metadata in Taxonomy Terms Templates ++ ++If you need to display custom metadata for each taxonomy term, you will need to create a page for that term at `/content///_index.md` and add your metadata in it's front matter, [as explained in the taxonomies documentation](/content-management/taxonomies/#add-custom-meta-data-to-a-taxonomy-term). Based on the Actors taxonomy example shown there, within your taxonomy terms template, you may access your custom fields by iterating through the variable `.Data.Pages` as such: ++ ++``` ++
      ++ {{ range .Data.Pages }} ++
    • ++ {{ .Title }} ++ {{ .Params.wikipedia }} ++
    • ++ {{ end }} ++
    ++``` ++ ++ ++ ++## Order Taxonomies ++ ++Taxonomies can be ordered by either alphabetical key or by the number of content pieces assigned to that key. ++ ++### Order Alphabetically Example ++ ++``` ++
      ++ {{ $data := .Data }} ++ {{ range $key, $value := .Data.Terms.Alphabetical }} ++
    • {{ $value.Name }} {{ $value.Count }}
    • ++ {{ end }} ++
    ++``` ++ ++### Order by Popularity Example ++ ++``` ++
      ++ {{ $data := .Data }} ++ {{ range $key, $value := .Data.Terms.ByCount }} ++
    • {{ $value.Name }} {{ $value.Count }}
    • ++ {{ end }} ++
    ++``` ++ ++### Order by Least Popular Example ++ ++``` ++
      ++ {{ $data := .Data }} ++ {{ range $key, $value := .Data.Terms.ByCount.Reverse }} ++
    • {{ $value.Name }} {{ $value.Count }}
    • ++ {{ end }} ++
    ++``` ++ ++ ++ ++## Order Content within Taxonomies ++ ++Hugo uses both `date` and `weight` to order content within taxonomies. ++ ++Each piece of content in Hugo can optionally be assigned a date. It can also be assigned a weight for each taxonomy it is assigned to. ++ ++When iterating over content within taxonomies, the default sort is the same as that used for [section and list pages]() first by weight then by date. This means that if the weights for two pieces of content are the same, than the more recent content will be displayed first. The default weight for any piece of content is 0. ++ ++### Assign Weight ++ ++Content can be assigned weight for each taxonomy that it's assigned to. ++ ++``` +++++ ++tags = [ "a", "b", "c" ] ++tags_weight = 22 ++categories = ["d"] ++title = "foo" ++categories_weight = 44 +++++ ++Front Matter with weighted tags and categories ++``` ++ ++The convention is `taxonomyname_weight`. ++ ++In the above example, this piece of content has a weight of 22 which applies to the sorting when rendering the pages assigned to the "a", "b" and "c" values of the 'tag' taxonomy. ++ ++It has also been assigned the weight of 44 when rendering the 'd' category. ++ ++With this the same piece of content can appear in different positions in different taxonomies. ++ ++Currently taxonomies only support the default ordering of content which is weight -> date. ++ ++ ++ ++There are two different templates that the use of taxonomies will require you to provide. ++ ++Both templates are covered in detail in the templates section. ++ ++A [list template](/templates/list/) is any template that will be used to render multiple pieces of content in a single html page. This template will be used to generate all the automatically created taxonomy pages. ++ ++A [taxonomy terms template](/templates/terms/) is a template used to ++generate the list of terms for a given template. ++ ++ ++ ++There are four common ways you can display the data in your ++taxonomies in addition to the automatic taxonomy pages created by hugo ++using the [list templates](/templates/list/): ++ ++1. For a given piece of content, you can list the terms attached ++2. For a given piece of content, you can list other content with the same ++ term ++3. You can list all terms for a taxonomy ++4. You can list all taxonomies (with their terms) ++ ++## Display a Single Piece of Content's Taxonomies ++ ++Within your content templates, you may wish to display the taxonomies that piece of content is assigned to. ++ ++Because we are leveraging the front matter system to define taxonomies for content, the taxonomies assigned to each content piece are located in the usual place (i.e., `.Params.`). ++ ++### Example: List Tags in a Single Page Template ++ ++``` ++
      ++ {{ range .Params.tags }} ++
    • {{ . }}
    • ++ {{ end }} ++
    ++``` ++ ++If you want to list taxonomies inline, you will have to take care of optional plural endings in the title (if multiple taxonomies), as well as commas. Let's say we have a taxonomy "directors" such as `directors: [ "Joel Coen", "Ethan Coen" ]` in the TOML-format front matter. ++ ++To list such taxonomies, use the following: ++ ++### Example: Comma-delimit Tags in a Single Page Template ++ ++``` ++{{ if .Params.directors }} ++ Director{{ if gt (len .Params.directors) 1 }}s{{ end }}: ++ {{ range $index, $director := .Params.directors }}{{ if gt $index 0 }}, {{ end }}{{ . }}{{ end }} ++{{ end }} ++``` ++ ++Alternatively, you may use the [delimit template function][delimit] as a shortcut if the taxonomies should just be listed with a separator. See {{< gh 2143 >}} on GitHub for discussion. ++ ++## List Content with the Same Taxonomy Term ++ ++If you are using a taxonomy for something like a series of posts, you can list individual pages associated with the same taxonomy. This is also a quick and dirty method for showing related content: ++ ++### Example: Showing Content in Same Series ++ ++``` ++ ++``` ++ ++## List All content in a Given taxonomy ++ ++This would be very useful in a sidebar as “featured content”. You could even have different sections of “featured content” by assigning different terms to the content. ++ ++### Example: Grouping "Featured" Content ++ ++``` ++ ++``` ++ ++## Render a Site's Taxonomies ++ ++If you wish to display the list of all keys for your site's taxonomy, you can retrieve them from the [`.Site` variable][sitevars] available on every page. ++ ++This may take the form of a tag cloud, a menu, or simply a list. ++ ++The following example displays all terms in a site's tags taxonomy: ++ ++### Example: List All Site Tags ++ ++``` ++
      ++ {{ range $name, $taxonomy := .Site.Taxonomies.tags }} ++
    • {{ $name }}
    • ++ {{ end }} ++
    ++``` ++ ++### Example: List All Taxonomies, Terms, and Assigned Content ++ ++This example will list all taxonomies and their terms, as well as all the content assigned to each of the terms. ++ ++{{< code file="layouts/partials/all-taxonomies.html" download="all-taxonomies.html" download="all-taxonomies.html" >}} ++
    ++
      ++ {{ range $taxonomyname, $taxonomy := .Site.Taxonomies }} ++
    • {{ $taxonomyname }} ++
        ++ {{ range $key, $value := $taxonomy }} ++
      • {{ $key }}
      • ++ ++ {{ end }} ++
      ++
    • ++ {{ end }} ++
    ++
    ++{{< /code >}} ++ ++## `.Site.GetPage` for Taxonomies ++ ++Because taxonomies are lists, the [`.GetPage` function][getpage] can be used to get all the pages associated with a particular taxonomy term using a terse syntax. The following ranges over the full list of tags on your site and links to each of the individual taxonomy pages for each term without having to use the more fragile URL construction of the "List All Site Tags" example above: ++ ++{{< code file="links-to-all-tags" >}} ++
      ++ {{ range ($.Site.GetPage "taxonomyTerm" "tags").Pages }} ++
    • {{ .Title}}
    • ++ {{ end }} ++
    ++{{< /code >}} ++ ++ ++ ++ ++[delimit]: /functions/delimit/ ++[getpage]: /functions/getpage/ ++[lists]: /templates/lists/ ++[renderlists]: /templates/lists/ ++[single page template]: /templates/single-page-templates/ ++[sitevars]: /variables/site/ diff --cc docs/content/en/templates/template-debugging.md index 00000000,00000000..e94a073a new file mode 100644 --- /dev/null +++ b/docs/content/en/templates/template-debugging.md @@@ -1,0 -1,0 +1,81 @@@ ++--- ++title: Template Debugging ++# linktitle: Template Debugging ++description: You can use Go templates' `printf` function to debug your Hugo templates. These snippets provide a quick and easy visualization of the variables available to you in different contexts. ++godocref: http://golang.org/pkg/fmt/ ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [templates] ++keywords: [debugging,troubleshooting] ++menu: ++ docs: ++ parent: "templates" ++ weight: 180 ++weight: 180 ++sections_weight: 180 ++draft: false ++aliases: [] ++toc: false ++--- ++ ++Here are some snippets you can add to your template to answer some common questions. ++ ++These snippets use the `printf` function available in all Go templates. This function is an alias to the Go function, [fmt.Printf](http://golang.org/pkg/fmt/). ++ ++## What Variables are Available in this Context? ++ ++You can use the template syntax, `$.`, to get the top-level template context from anywhere in your template. This will print out all the values under, `.Site`. ++ ++``` ++{{ printf "%#v" $.Site }} ++``` ++ ++This will print out the value of `.Permalink`: ++ ++ ++``` ++{{ printf "%#v" .Permalink }} ++``` ++ ++ ++This will print out a list of all the variables scoped to the current context ++(`.`, aka ["the dot"][tempintro]). ++ ++ ++``` ++{{ printf "%#v" . }} ++``` ++ ++ ++When developing a [homepage][], what does one of the pages you're looping through look like? ++ ++``` ++{{ range .Data.Pages }} ++ {{/* The context, ".", is now each one of the pages as it goes through the loop */}} ++ {{ printf "%#v" . }} ++{{ end }} ++``` ++ ++{{% note "`.Data.Pages` on the Homepage" %}} ++`.Data.Pages` on the homepage is equivalent to `.Site.Pages`. ++{{% /note %}} ++ ++## Why Am I Showing No Defined Variables? ++ ++Check that you are passing variables in the `partial` function: ++ ++``` ++{{ partial "header" }} ++``` ++ ++This example will render the header partial, but the header partial will not have access to any contextual variables. You need to pass variables explicitly. For example, note the addition of ["the dot"][tempintro]. ++ ++``` ++{{ partial "header" . }} ++``` ++ ++The dot (`.`) is considered fundamental to understanding Hugo templating. For more information, see [Introduction to Hugo Templating][tempintro]. ++ ++[homepage]: /templates/homepage/ ++[tempintro]: /templates/introduction/ diff --cc docs/content/en/templates/views.md index 00000000,00000000..ac863646 new file mode 100644 --- /dev/null +++ b/docs/content/en/templates/views.md @@@ -1,0 -1,0 +1,121 @@@ ++--- ++title: Content View Templates ++# linktitle: Content Views ++description: Hugo can render alternative views of your content, which is especially useful in list and summary views. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [templates] ++keywords: [views] ++menu: ++ docs: ++ parent: "templates" ++ weight: 70 ++weight: 70 ++sections_weight: 70 ++draft: false ++aliases: [] ++toc: true ++--- ++ ++These alternative **content views** are especially useful in [list templates][lists]. ++ ++The following are common use cases for content views: ++ ++* You want content of every type to be shown on the homepage but only with limited [summary views][summaries]. ++* You only want a bulleted list of your content on a [taxonomy list page][taxonomylists]. Views make this very straightforward by delegating the rendering of each different type of content to the content itself. ++ ++## Create a Content View ++ ++To create a new view, create a template in each of your different content type directories with the view name. The following example contains an "li" view and a "summary" view for the `post` and `project` content types. As you can see, these sit next to the [single content view][single] template, `single.html`. You can even provide a specific view for a given type and continue to use the `_default/single.html` for the primary view. ++ ++``` ++ ▾ layouts/ ++ ▾ post/ ++ li.html ++ single.html ++ summary.html ++ ▾ project/ ++ li.html ++ single.html ++ summary.html ++``` ++ ++Hugo also has support for a default content template to be used in the event that a specific content view template has not been provided for that type. Content views can also be defined in the `_default` directory and will work the same as list and single templates who eventually trickle down to the `_default` directory as a matter of the lookup order. ++ ++ ++``` ++▾ layouts/ ++ ▾ _default/ ++ li.html ++ single.html ++ summary.html ++``` ++ ++## Which Template Will be Rendered? ++ ++The following is the [lookup order][lookup] for content views: ++ ++1. `/layouts//.html` ++2. `/layouts/_default/.html` ++3. `/themes//layouts//.html` ++4. `/themes//layouts/_default/.html` ++ ++## Example: Content View Inside a List ++ ++The following example demonstrates how to use content views inside of your [list templates][lists]. ++ ++### `list.html` ++ ++In this example, `.Render` is passed into the template to call the [render function][render]. `.Render` is a special function that instructs content to render itself with the view template provided as the first argument. In this case, the template is going to render the `summary.html` view that follows: ++ ++{{< code file="layouts/_default/list.html" download="list.html" >}} ++
    ++
    ++

    {{ .Title }}

    ++ {{ range .Data.Pages }} ++ {{ .Render "summary"}} ++ {{ end }} ++
    ++
    ++{{< /code >}} ++ ++### `summary.html` ++ ++Hugo will pass the entire page object to the following `summary.html` view template. (See [Page Variables][pagevars] for a complete list.) ++ ++{{< code file="layouts/_default/summary.html" download="summary.html" >}} ++ ++{{< /code >}} ++ ++### `li.html` ++ ++Continuing on the previous example, we can change our render function to use a smaller `li.html` view by changing the argument in the call to the `.Render` function (i.e., `{{ .Render "li" }}`). ++ ++{{< code file="layouts/_default/li.html" download="li.html" >}} ++
  • ++ {{ .Title }} ++
    {{ .Date.Format "Mon, Jan 2, 2006" }}
    ++
  • ++{{< /code >}} ++ ++[lists]: /templates/lists/ ++[lookup]: /templates/lookup-order/ ++[pagevars]: /variables/page/ ++[render]: /functions/render/ ++[single]: /templates/single-page-templates/ ++[spf]: http://spf13.com ++[spfsourceli]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/li.html ++[spfsourcesection]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/section.html ++[spfsourcesummary]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/summary.html ++[summaries]: /content-management/summaries/ ++[taxonomylists]: /templates/taxonomy-templates/ diff --cc docs/content/en/themes/_index.md index 00000000,00000000..9e2bc170 new file mode 100644 --- /dev/null +++ b/docs/content/en/themes/_index.md @@@ -1,0 -1,0 +1,26 @@@ ++--- ++title: Themes ++linktitle: Themes Overview ++description: Install, use, and create Hugo themes. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++menu: ++ docs: ++ parent: "themes" ++ weight: 01 ++weight: 01 ++sections_weight: 01 ++categories: [themes] ++keywords: [themes,introduction,overview] ++draft: false ++aliases: [/themes/overview/] ++toc: false ++--- ++ ++Hugo provides a robust theming system that is easy to implement yet feature complete. You can view the themes created by the Hugo community on the [Hugo themes website][hugothemes]. ++ ++Hugo themes are powered by the excellent Go template library and are designed to reduce code duplication. They are easy to both customize and keep in synch with the upstream theme. ++ ++[goprimer]: /templates/introduction/ ++[hugothemes]: http://themes.gohugo.io/ diff --cc docs/content/en/themes/creating.md index 00000000,00000000..a62f7c71 new file mode 100644 --- /dev/null +++ b/docs/content/en/themes/creating.md @@@ -1,0 -1,0 +1,87 @@@ ++--- ++title: Create a Theme ++linktitle: Create a Theme ++description: The `hugo new theme` command will scaffold the beginnings of a new theme for you to get you on your way. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [themes] ++keywords: [themes, source, organization, directories] ++menu: ++ docs: ++ parent: "themes" ++ weight: 30 ++weight: 30 ++sections_weight: 30 ++draft: false ++aliases: [/themes/creation/,/tutorials/creating-a-new-theme/] ++toc: true ++wip: true ++--- ++ ++{{% warning "Use Relative Links" %}} ++If you're creating a theme with plans to share it with the community, use relative URLs since users of your theme may not publish from the root of their website. See [relURL](/functions/relurl) and [absURL](/functions/absurl). ++{{% /warning %}} ++ ++Hugo can initialize a new blank theme directory within your existing `themes` using the `hugo new` command: ++ ++``` ++hugo new theme [name] ++``` ++ ++## Theme Components ++ ++A theme consists of templates and static assets such as javascript and css files. Themes can also provide [archetypes][], which are archetypal content types used by the `hugo new` command to scaffold new content files with preconfigured front matter. ++ ++ ++{{% note "Use the Hugo Generator Tag" %}} ++The [`.Hugo.Generator`](/variables/hugo/) tag is included in all themes featured in the [Hugo Themes Showcase](http://themes.gohugo.io). We ask that you include the generator tag in all sites and themes you create with Hugo to help the core team track Hugo's usage and popularity. ++{{% /note %}} ++ ++## Layouts ++ ++Hugo is built around the concept that things should be as simple as possible. ++Fundamentally, website content is displayed in two different ways, a single ++piece of content and a list of content items. With Hugo, a theme layout starts ++with the defaults. As additional layouts are defined, they are used for the ++content type or section they apply to. This keeps layouts simple, but permits ++a large amount of flexibility. ++ ++## Single Content ++ ++The default single file layout is located at `layouts/_default/single.html`. ++ ++## List of Contents ++ ++The default list file layout is located at `layouts/_default/list.html`. ++ ++## Partial Templates ++ ++Theme creators should liberally use [partial templates](/templates/partials/) ++throughout their theme files. Not only is a good DRY practice to include shared ++code, but partials are a special template type that enables the themes end user ++to be able to overwrite just a small piece of a file or inject code into the ++theme from their local /layouts. These partial templates are perfect for easy ++injection into the theme with minimal maintenance to ensure future ++compatibility. ++ ++## Static ++ ++Everything in the static directory will be copied directly into the final site ++when rendered. No structure is provided here to enable complete freedom. It is ++common to organize the static content into: ++ ++``` ++/css ++/js ++/img ++``` ++ ++The actual structure is entirely up to you, the theme creator, on how you would like to organize your files. ++ ++## Archetypes ++ ++If your theme makes use of specific keys in the front matter, it is a good idea ++to provide an archetype for each content type you have. [Read more about archetypes][archetypes]. ++ ++[archetypes]: /content-management/archetypes/ diff --cc docs/content/en/themes/customizing.md index 00000000,00000000..3444880f new file mode 100644 --- /dev/null +++ b/docs/content/en/themes/customizing.md @@@ -1,0 -1,0 +1,80 @@@ ++--- ++title: Customize a Theme ++linktitle: Customize a Theme ++description: Customize a theme by overriding theme layouts and static assets in your top-level project directories. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [themes] ++keywords: [themes, source, organization, directories] ++menu: ++ docs: ++ parent: "themes" ++ weight: 20 ++weight: 20 ++sections_weight: 20 ++draft: false ++aliases: [/themes/customize/] ++toc: true ++wip: true ++--- ++ ++The following are key concepts for Hugo site customization with themes. Hugo permits you to supplement *or* override any theme template or static file with files in your working directory. ++ ++{{% note %}} ++When you use a theme cloned from its git repository, do not edit the theme's files directly. Instead, theme customization in Hugo is a matter of *overriding* the templates made available to you in a theme. This provides the added flexibility of tweaking a theme to meet your needs while staying current with a theme's upstream. ++{{% /note %}} ++ ++## Override Static Files ++ ++There are times where you want to include static assets that differ from versions of the same asset that ships with a theme. ++ ++For example, a theme may use jQuery 1.8 in the following location: ++ ++``` ++/themes//static/js/jquery.min.js ++``` ++ ++You want to replace the version of jQuery that ships with the theme with the newer `jquery-3.1.1.js`. The easiest way to do this is to replace the file *with a file of the same name* in the same relative path in your project's root. Therefore, change `jquery-3.1.1.js` to `jquery.min.js` so that it is *identical* to the theme's version and place the file here: ++ ++``` ++/static/js/jquery.min.js ++``` ++ ++## Override Template Files ++ ++Anytime Hugo looks for a matching template, it will first check the working directory before looking in the theme directory. If you would like to modify a template, simply create that template in your local `layouts` directory. ++ ++The [template lookup order][lookup] explains the rules Hugo uses to determine which template to use for a given piece of content. Read and understand these rules carefully. ++ ++This is especially helpful when the theme creator used [partial templates][partials]. These partial templates are perfect for easy injection into the theme with minimal maintenance to ensure future compatibility. ++ ++For example: ++ ++``` ++/themes//layouts/_default/single.html ++``` ++ ++Would be overwritten by ++ ++``` ++/layouts/_default/single.html ++``` ++ ++{{% warning %}} ++This only works for templates that Hugo "knows about" (i.e., that follow its convention for folder structure and naming). If a theme imports template files in a creatively named directory, Hugo won’t know to look for the local `/layouts` first. ++{{% /warning %}} ++ ++## Override Archetypes ++ ++If the archetype that ships with the theme for a given content type (or all content types) doesn’t fit with how you are using the theme, feel free to copy it to your `/archetypes` directory and make modifications as you see fit. ++ ++{{% warning "Beware of `layouts/_default`" %}} ++The `_default` directory is a very powerful force in Hugo, especially as it pertains to overwriting theme files. If a default file is located in the local [archetypes](/content-management/archetypes/) or layout directory (i.e., `archetypes/default.md` or `/layouts/_default/*.html`, respectively), it will override the file of the same name in the corresponding theme directory (i.e., `themes//archetypes/default.md` or `themes//layout/_defaults/*.html`, respectively). ++ ++It is usually better to override specific files; i.e. rather than using `layouts/_default/*.html` in your working directory. ++{{% /warning %}} ++ ++[archetypes]: /content-management/archetypes/ ++[lookup]: /templates/lookup-order/ ++[partials]: /templates/partials/ diff --cc docs/content/en/themes/installing-and-using-themes.md index 00000000,00000000..93d81423 new file mode 100644 --- /dev/null +++ b/docs/content/en/themes/installing-and-using-themes.md @@@ -1,0 -1,0 +1,114 @@@ ++--- ++title: Install and Use Themes ++linktitle: Install and Use Themes ++description: Install and use a theme from the Hugo theme showcase easily through the CLI. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [themes] ++keywords: [install, themes, source, organization, directories,usage] ++menu: ++ docs: ++ parent: "themes" ++ weight: 10 ++weight: 10 ++sections_weight: 10 ++draft: false ++aliases: [/themes/usage/,/themes/installing/] ++toc: true ++wip: true ++--- ++ ++{{% note "No Default Theme" %}} ++Hugo currently doesn’t ship with a “default” theme. This decision is intentional. We leave it up to you to decide which theme best suits your Hugo project. ++{{% /note %}} ++ ++## Assumptions ++ ++1. You have already [installed Hugo on your development machine][install]. ++2. You have git installed on your machine and you are familiar with basic git usage. ++ ++## Install Themes ++ ++{{< youtube L34JL_3Jkyc >}} ++ ++The community-contributed themes featured on [themes.gohugo.io](//themes.gohugo.io/) are hosted in a [centralized GitHub repository][themesrepo]. The Hugo Themes Repo at is really a meta repository that contains pointers to a set of contributed themes. ++ ++{{% warning "Get `git` First" %}} ++Without [Git](https://git-scm.com/) installed on your computer, none of the following theme instructions will work. Git tutorials are beyond the scope of the Hugo docs, but [GitHub](https://try.github.io/) and [codecademy](https://www.codecademy.com/learn/learn-git) offer free, interactive courses for beginners. ++{{% /warning %}} ++ ++### Install All Themes ++ ++You can install *all* available Hugo themes by cloning the entire [Hugo Theme repository on GitHub][themesrepo] from within your working directory. Depending on your internet connection the download of all themes might take a while. ++ ++``` ++git clone --depth 1 --recursive https://github.com/gohugoio/hugoThemes.git themes ++``` ++ ++Before you use a theme, remove the .git folder in that theme's root folder. Otherwise, this will cause problem if you deploy using Git. ++ ++### Install a Single Theme ++ ++Change into the `themes` directory and download a theme by replacing `URL_TO_THEME` with the URL of the theme repository: ++ ++``` ++cd themes ++git clone URL_TO_THEME ++``` ++ ++The following example shows how to use the "Hyde" theme, which has its source hosted at : ++ ++{{< code file="clone-theme.sh" >}} ++cd themes ++git clone https://github.com/spf13/hyde ++{{< /code >}} ++ ++Alternatively, you can download the theme as a `.zip` file, unzip the theme contents, and then move the unzipped source into your `themes` directory. ++ ++{{% note "Read the `README`" %}} ++Always review the `README.md` file that is shipped with a theme. Often, these files contain further instructions required for theme setup; e.g., copying values from an example configuration file. ++{{% /note %}} ++ ++## Theme Placement ++ ++Please make certain you have installed the themes you want to use in the ++`/themes` directory. This is the default directory used by Hugo. Hugo comes with the ability to change the themes directory via the [`themesDir` variable in your site configuration][config], but this is not recommended. ++ ++## Use Themes ++ ++Hugo applies the decided theme first and then applies anything that is in the local directory. This allows for easier customization while retaining compatibility with the upstream version of the theme. To learn more, go to [customizing themes][customizethemes]. ++ ++### Command Line ++ ++There are two different approaches to using a theme with your Hugo website: via the Hugo CLI or as part of your [site configuration file][config]. ++ ++To change a theme via the Hugo CLI, you can pass the `-t` [flag][] when building your site: ++ ++``` ++hugo -t themename ++``` ++ ++Likely, you will want to add the theme when running the Hugo local server, especially if you are going to [customize the theme][customizethemes]: ++ ++``` ++hugo server -t themename ++``` ++ ++### `config` File ++ ++If you've already decided on the theme for your site and do not want to fiddle with the command line, you can add the theme directly to your [site configuration file][config]: ++ ++``` ++theme: themename ++``` ++ ++{{% note "A Note on `themename`" %}} ++The `themename` in the above examples must match the name of the specific theme directory inside `/themes`; i.e., the directory name (likely lowercase and urlized) rather than the name of the theme displayed in the [Themes Showcase site](http://themes.gohugo.io). ++{{% /note %}} ++ ++[customizethemes]: /themes/customizing/ ++[flag]: /getting-started/usage/ "See the full list of flags in Hugo's basic usage." ++[install]: /getting-started/installing/ ++[config]: /getting-started/configuration/ "Learn how to customize your Hugo website configuration file in yaml, toml, or json." ++[themesrepo]: https://github.com/gohugoio/hugoThemes diff --cc docs/content/en/tools/_index.md index 00000000,00000000..47cfeb1e new file mode 100644 --- /dev/null +++ b/docs/content/en/tools/_index.md @@@ -1,0 -1,0 +1,25 @@@ ++--- ++title: Developer Tools ++linktitle: Developer Tools Overview ++description: In addition to Hugo's powerful CLI, there is a large number of community-developed tool chains for Hugo developers. ++date: 2016-12-05 ++publishdate: 2016-12-05 ++lastmod: 2017-02-26 ++categories: [developer tools] ++keywords: [] ++menu: ++ docs: ++ parent: "tools" ++ weight: 01 ++weight: 01 ++sections_weight: 01 ++draft: false ++aliases: [/tools/] ++--- ++ ++One of Hugo's greatest strengths is it's passionate---and always evolving---developer community. With the exception of the `highlight` shortcode mentioned in [Syntax Highlighting][syntax], the tools and other projects featured in this section are offerings from both commercial services and open-source projects, many of which are developed by Hugo developers just like you. ++ ++[See the popularity of Hugo compared with other static site generators.][staticgen] ++ ++[staticgen]: https://staticgen.com ++[syntax]: /tools/syntax-highlighting/ diff --cc docs/content/en/tools/editors.md index 00000000,00000000..419a2a04 new file mode 100644 --- /dev/null +++ b/docs/content/en/tools/editors.md @@@ -1,0 -1,0 +1,45 @@@ ++--- ++title: Editor Plug-ins for Hugo ++linktitle: Editor Plug-ins ++description: The Hugo community uses a wide range of preferred tools and has developed plug-ins for some of the most popular text editors to help automate parts of your workflow. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [developer tools] ++keywords: [editor, plug-ins] ++menu: ++ docs: ++ parent: "tools" ++ weight: 50 ++weight: 50 ++sections_weight: 50 ++draft: false ++aliases: [] ++toc: false ++--- ++ ++The Hugo community uses a wide range of preferred tools and has developed plug-ins for some of the most popular text editors to help automate parts of your workflow. ++ ++## Sublime Text ++ ++* [Hugofy](https://github.com/akmittal/Hugofy). Hugofy is a plugin for Sublime Text 3 to make life easier to use Hugo static site generator. ++ ++## Visual Studio Code ++ ++* [Hugofy](https://marketplace.visualstudio.com/items?itemName=akmittal.hugofy). Hugofy is a plugin for Visual Studio Code to "make life easier" when developing with Hugo. The source code can be found [here](https://github.com/akmittal/hugofy-vscode). ++ ++## Emacs ++ ++* [emacs-easy-hugo](https://github.com/masasam/emacs-easy-hugo). Emacs major mode for managing hugo blogs. Note that Hugo also supports [Org-mode][formats]. ++* [ox-hugo.el](https://ox-hugo.scripter.co). Native Org-mode exporter that exports to Blackfriday Markdown with Hugo front-matter. `ox-hugo` supports two common Org blogging flows --- exporting multiple Org sub-trees in a single file to multiple Hugo posts, and exporting a single Org file to a single Hugo post. It also leverages the Org tag and property inheritance features. See [*Why ox-hugo?*](https://ox-hugo.scripter.co/doc/why-ox-hugo/) for more. ++ ++## Vim ++ ++* [Vim Hugo Helper](https://github.com/robertbasic/vim-hugo-helper). A small Vim plugin to help me with writing posts with Hugo. ++ ++## Atom ++ ++* [Hugofy](https://atom.io/packages/hugofy). A Hugo Static Website Generator package for Atom. ++* [language-hugo](https://atom.io/packages/language-hugo). Adds syntax highlighting to Hugo files. ++ ++[formats]: /content-management/formats/ diff --cc docs/content/en/tools/frontends.md index 00000000,00000000..f41751b4 new file mode 100644 --- /dev/null +++ b/docs/content/en/tools/frontends.md @@@ -1,0 -1,0 +1,34 @@@ ++--- ++title: Frontend Interfaces with Hugo ++linktitle: Frontends ++description: Do you prefer a graphical user interface over a text editor? Give these frontends a try. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [developer tools] ++keywords: [frontend,gui] ++menu: ++ docs: ++ parent: "tools" ++ weight: 40 ++weight: 40 ++sections_weight: 40 ++draft: false ++aliases: [] ++toc: false ++--- ++ ++* [enwrite](https://github.com/zzamboni/enwrite). Enwrite enables evernote-powered, statically generated blogs and websites. Now posting to your blog or updating your website is as easy as writing a new note in Evernote! ++* [caddy-hugo](https://github.com/hacdias/caddy-hugo). `caddy-hugo` is an add-on for [Caddy](https://caddyserver.com/) that delivers a good UI to edit the content of your Hugo website. ++* [Lipi](https://github.com/SohanChy/Lipi). Lipi is a native GUI frontend written in Java to manage your Hugo websites. ++* [Netlify CMS](https://netlifycms.org). Netlify CMS is an open source, serverless solution for managing Git based content in static sites, and it works on any platform that can host static sites. A [Hugo/Netlify CMS starter](https://github.com/netlify-templates/one-click-hugo-cms) is available to get new projects running quickly. ++ ++ ++## Commercial Services ++ ++* [Appernetic.io](https://appernetic.io) is a Hugo Static Site Generator as a Service that is easy to use for non-technical users. ++ * **Features:** inline PageDown editor, visual tree view, image upload and digital asset management with Cloudinary, site preview, continuous integration with GitHub, atomic deploy and hosting, Git and Hugo integration, autosave, custom domain, project syncing, theme cloning and management. Developers have complete control over the source code and can manage it with GitHub’s deceptively simple workflow. ++* [DATOCMS](https://www.datocms.com) DatoCMS is a fully customizable administrative area for your static websites. Use your favorite website generator, let your clients publish new content independently, and the host the site anywhere you like. ++* [Forestry.io](https://forestry.io/). Forestry is a simple CMS for Jekyll and Hugo websites with support for GitHub, GitLab, and Bitbucket. Every time an update is made via the CMS, Forestry will commit changes back to your repo and will compile/deploy your website to S3, GitHub Pages, FTP, etc. ++* [Netlify.com](https://www.netlify.com). Netlify builds, deploys, and hosts your static website or app (Hugo, Jekyll, etc). Netlify offers a drag-and-drop interface and automatic deployments from GitHub or Bitbucket. ++ * **Features:** global CDN, atomic deploys, ultra-fast DNS, instant cache invalidation, high availability, automated hosting, Git integration, form submission hooks, authentication providers, and custom domains. Developers have complete control over the source code and can manage it with GitHub or Bitbucket's deceptively simple workflow. diff --cc docs/content/en/tools/migrations.md index 00000000,00000000..ef4f169d new file mode 100644 --- /dev/null +++ b/docs/content/en/tools/migrations.md @@@ -1,0 -1,0 +1,72 @@@ ++--- ++title: Migrate to Hugo ++linktitle: Migrations ++description: A list of community-developed tools for migrating from your existing static site generator or content management system to Hugo. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++keywords: [migrations,jekyll,wordpress,drupal,ghost,contentful] ++menu: ++ docs: ++ parent: "tools" ++ weight: 10 ++weight: 10 ++sections_weight: 10 ++draft: false ++aliases: [/developer-tools/migrations/,/developer-tools/migrated/] ++toc: true ++--- ++ ++This section highlights some projects around Hugo that are independently developed. These tools try to extend the functionality of our static site generator or help you to get started. ++ ++{{% note %}} ++Do you know or maintain a similar project around Hugo? Feel free to open a [pull request](https://github.com/gohugoio/hugo/pulls) on GitHub if you think it should be added. ++{{% /note %}} ++ ++Take a look at this list of migration tools if you currently use other blogging tools like Jekyll or WordPress but intend to switch to Hugo instead. They'll take care to export your content into Hugo-friendly formats. ++ ++## Jekyll ++ ++Alternatively, you can use the new [Jekyll import command](/commands/hugo_import_jekyll/). ++ ++- [JekyllToHugo](https://github.com/SenjinDarashiva/JekyllToHugo) - A Small script for converting Jekyll blog posts to a Hugo site. ++- [ConvertToHugo](https://github.com/coderzh/ConvertToHugo) - Convert your blog from Jekyll to Hugo. ++ ++## Ghost ++ ++- [ghostToHugo](https://github.com/jbarone/ghostToHugo) - Convert Ghost blog posts and export them to Hugo. ++ ++## Octopress ++ ++- [octohug](https://github.com/codebrane/octohug) - Octopress to Hugo migrator. ++ ++## DokuWiki ++ ++- [dokuwiki-to-hugo](https://github.com/wgroeneveld/dokuwiki-to-hugo) - Migrates your dokuwiki source pages from [DokuWiki syntax](https://www.dokuwiki.org/wiki:syntax) to Hugo Markdown syntax. Includes extra's like the TODO plugin. Written with extensibility in mind using python 3. Also generates a TOML header for each page. Designed to copypaste the wiki directory into your /content directory. ++ ++## WordPress ++ ++- [wordpress-to-hugo-exporter](https://github.com/SchumacherFM/wordpress-to-hugo-exporter) - A one-click WordPress plugin that converts all posts, pages, taxonomies, metadata, and settings to Markdown and YAML which can be dropped into Hugo. (Note: If you have trouble using this plugin, you can [export your site for Jekyll](https://wordpress.org/plugins/jekyll-exporter/) and use Hugo's built in Jekyll converter listed above.) ++ ++## Tumblr ++ ++- [tumblr-importr](https://github.com/carlmjohnson/tumblr-importr) - An importer that uses the Tumblr API to create a Hugo static site. ++- [tumblr2hugomarkdown](https://github.com/Wysie/tumblr2hugomarkdown) - Export all your Tumblr content to Hugo Markdown files with preserved original formatting. ++- [Tumblr to Hugo](https://github.com/jipiboily/tumblr-to-hugo) - A migration tool that converts each of your Tumblr posts to a content file with a proper title and path. Furthermore, "Tumblr to Hugo" creates a CSV file with the original URL and the new path on Hugo, to help you setup the redirections. ++ ++## Drupal ++ ++- [drupal2hugo](https://github.com/danapsimer/drupal2hugo) - Convert a Drupal site to Hugo. ++ ++## Joomla ++ ++- [hugojoomla](https://github.com/davetcc/hugojoomla) - This utility written in Java takes a Joomla database and converts all the content into Markdown files. It changes any URLs that are in Joomla's internal format and converts them to a suitable form. ++ ++## Blogger ++ ++- [blogimport](https://github.com/natefinch/blogimport) - A tool to import from Blogger posts to Hugo. ++- [blogger-to-hugo](https://bitbucket.org/petraszd/blogger-to-hugo) - Another tool to import Blogger posts to Hugo. It also downloads embedded images so they will be stored locally. ++ ++## Contentful ++ ++- [contentful2hugo](https://github.com/ArnoNuyts/contentful2hugo) - A tool to create content-files for Hugo from content on [Contentful](https://www.contentful.com/). diff --cc docs/content/en/tools/other.md index 00000000,00000000..0502e1cd new file mode 100644 --- /dev/null +++ b/docs/content/en/tools/other.md @@@ -1,0 -1,0 +1,28 @@@ ++--- ++title: Other Hugo Community Projects ++linktitle: Other Projects ++description: Some interesting projects developed by the Hugo community that don't quite fit into our other developer tool categories. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [developer tools] ++keywords: [frontend,gui] ++menu: ++ docs: ++ parent: "tools" ++ weight: 70 ++weight: 70 ++sections_weight: 70 ++draft: false ++aliases: [] ++toc: false ++--- ++ ++And for all the other small things around Hugo: ++ ++* [hugo-gallery](https://github.com/icecreammatt/hugo-gallery) lets you create an image gallery for Hugo sites. ++* [flickr-hugo-embed](https://github.com/nikhilm/flickr-hugo-embed) prints shortcodes to embed a set of images from an album on Flickr into Hugo. ++* [hugo-openapispec-shortcode](https://github.com/tenfourty/hugo-openapispec-shortcode) A shortcode that allows you to include [Open API Spec](https://openapis.org) (formerly known as Swagger Spec) in a page. ++* [HugoPhotoSwipe](https://github.com/GjjvdBurg/HugoPhotoSwipe) makes it easy to create image galleries using PhotoSwipe. ++* [Hugo SFTP Upload](https://github.com/thomasmey/HugoSftpUpload) Syncs the local build of your Hugo website with your remote webserver via SFTP. ++* [Emacs Easy Hugo](https://github.com/masasam/emacs-easy-hugo) Emacs package for writing blog posts in markdown or org-mode and building your site with Hugo. diff --cc docs/content/en/tools/search.md index 00000000,00000000..2145c187 new file mode 100644 --- /dev/null +++ b/docs/content/en/tools/search.md @@@ -1,0 -1,0 +1,31 @@@ ++--- ++title: Search for your Hugo Website ++linktitle: Search ++description: See some of the open-source and commercial search options for your newly created Hugo website. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-26 ++categories: [developer tools] ++keywords: [search,tools] ++menu: ++ docs: ++ parent: "tools" ++ weight: 60 ++weight: 60 ++sections_weight: 60 ++draft: false ++aliases: [] ++toc: true ++--- ++ ++A static website with a dynamic search function? Yes. As alternatives to embeddable scripts from Google or other search engines, you can provide your visitors a custom search by indexing your content files directly. ++ ++* [GitHub Gist for Hugo Workflow](https://gist.github.com/sebz/efddfc8fdcb6b480f567). This gist contains a simple workflow to create a search index for your static website. It uses a simple Grunt script to index all your content files and [lunr.js](http://lunrjs.com/) to serve the search results. ++* [hugo-lunr](https://www.npmjs.com/package/hugo-lunr). A simple way to add site search to your static Hugo site using [lunr.js](http://lunrjs.com/). Hugo-lunr will create an index file of any html and markdown documents in your Hugo project. ++* [hugo-lunr-zh](https://www.npmjs.com/package/hugo-lunr-zh). A bit like Hugo-lunr, but Hugo-lunr-zh can help you separate the Chinese keywords. ++* [Github Gist for Fuse.js integration](https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae). This gist demonstrates how to leverage Hugo's existing build time processing to generate a searchable JSON index used by [Fuse.js](http://fusejs.io/) on the client side. Although this gist uses Fuse.js for fuzzy matching, any client side search tool capable of reading JSON indexes will work. Does not require npm, grunt or other build-time tools except Hugo! ++* [hugo-search-index](https://www.npmjs.com/package/hugo-search-index). A library containing Gulp tasks and a prebuilt browser script that implements search. Gulp generates a search index from project markdown files. ++ ++## Commercial Search Services ++ ++* [Algolia](https://www.algolia.com/)'s Search API makes it easy to deliver a great search experience in your apps and websites. Algolia Search provides hosted full-text, numerical, faceted, and geolocalized search. diff --cc docs/content/en/tools/starter-kits.md index 00000000,00000000..0ce81cc4 new file mode 100644 --- /dev/null +++ b/docs/content/en/tools/starter-kits.md @@@ -1,0 -1,0 +1,40 @@@ ++--- ++title: Starter Kits ++linktitle: Starter Kits ++description: A list of community-developed projects designed to help you get up and running with Hugo. ++date: 2017-02-22 ++publishdate: 2017-02-01 ++lastmod: 2017-02-22 ++keywords: [starters,assets,pipeline] ++menu: ++ docs: ++ parent: "tools" ++ weight: 30 ++weight: 30 ++sections_weight: 30 ++draft: false ++aliases: [/developer-tools/migrations/,/developer-tools/migrated/] ++toc: false ++--- ++ ++Know of a Hugo-related starter kit that isn't mentioned here? [Please add it to the list.][addkit] ++ ++{{% note "Starter Kits are Not Maintained by the Hugo Team"%}} ++The following starter kits are developed by active members of the Hugo community. If you find yourself having issues with any of the projects, it's best to file an issue directly with the project's maintainer(s). ++{{% /note %}} ++ ++* [Victor Hugo][]. Victor Hugo is a Hugo boilerplate for creating truly epic websites using Gulp + Webpack as an asset pipeline. Victor Hugo uses post-css and Babel for CSS and JavaScript, respectively, and is actively maintained. ++* [GOHUGO AMP][]. GoHugo AMP is a starter theme that aims to make it easy to adopt [Google's AMP Project][amp]. The starter kit comes with 40+ shortcodes and partials plus automatic structured data. The project also includes a [separate site with extensive documentation][gohugodocs]. ++* [Blaupause][]. Blaupause is a developer-friendly Hugo starter kit based on Gulp tasks. It comes ES6-ready with several helpers for SVG and fonts and basic structure for HTML, SCSS, and JavaScript. ++* [hugulp][]. hugulp is a tool to optimize the assets of a Hugo website. The main idea is to recreate the famous Ruby on Rails Asset Pipeline, which minifies, concatenates and fingerprints the assets used in your website. ++* [Atlas][]. Atlas is a Hugo boilerplate designed to speed up development with support for Netlify, Netlify CMS, Gulp, Linting, SCSS, ES6 & more. It's actively maintained and contributions are always welcome. ++ ++ ++[addkit]: https://github.com/gohugoio/hugo/edit/master/docs/content/tools/starter-kits.md ++[amp]: https://www.ampproject.org/ ++[Blaupause]: https://github.com/fspoettel/blaupause ++[GOHUGO AMP]: https://github.com/wildhaber/gohugo-amp ++[gohugodocs]: https://gohugo-amp.gohugohq.com/ ++[hugulp]: https://github.com/jbrodriguez/hugulp ++[Victor Hugo]: https://github.com/netlify/victor-hugo ++[Atlas]: https://github.com/indigotree/atlas diff --cc docs/content/en/troubleshooting/_index.md index 00000000,00000000..3b0e9372 new file mode 100644 --- /dev/null +++ b/docs/content/en/troubleshooting/_index.md @@@ -1,0 -1,0 +1,26 @@@ ++--- ++title: Troubleshoot ++linktitle: Troubleshoot ++description: Frequently asked questions and known issues pulled from the Hugo Discuss forum. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++menu: ++ docs: ++ parent: "troubleshooting" ++ weight: 1 ++weight: 1 ++draft: false ++hidesectioncontents: false ++slug: ++aliases: [/troubleshooting/faqs/,/faqs/] ++toc: false ++notesforauthors: ++--- ++ ++The Troubleshooting section includes known issues, recent workarounds, and FAQs pulled from the [Hugo Discussion Forum][forum]. ++ ++ ++ ++ ++[forum]: https://discourse.gohugo.io diff --cc docs/content/en/troubleshooting/build-performance.md index 00000000,00000000..bc4d30d5 new file mode 100644 --- /dev/null +++ b/docs/content/en/troubleshooting/build-performance.md @@@ -1,0 -1,0 +1,111 @@@ ++--- ++title: Build Performance ++linktitle: Build Performance ++description: An overview of features used for diagnosing and improving performance issues in site builds. ++date: 2017-03-12 ++publishdate: 2017-03-12 ++lastmod: 2017-03-12 ++keywords: [performance, build] ++categories: [troubleshooting] ++menu: ++ docs: ++ parent: "troubleshooting" ++weight: 3 ++slug: ++aliases: [] ++toc: true ++--- ++ ++{{% note %}} ++The example site used below is from https://github.com/gohugoio/hugo/tree/master/examples/blog ++{{% /note %}} ++ ++## Template Metrics ++ ++Hugo is a very fast static site generator, but it is possible to write ++inefficient templates. Hugo's *template metrics* feature is extremely helpful ++in pinpointing which templates are executed most often and how long those ++executions take **in terms of CPU time**. ++ ++| Metric Name | Description | ++|---------------------|-------------| ++| cumulative duration | The cumulative time spent executing a given template. | ++| average duration | The average time spent executing a given template. | ++| maximum duration | The maximum time a single execution took for a given template. | ++| count | The number of times a template was executed. | ++| template | The template name. | ++ ++``` ++▶ hugo --templateMetrics ++Started building sites ... ++ ++Built site for language en: ++0 draft content ++0 future content ++0 expired content ++2 regular pages created ++22 other pages created ++0 non-page files copied ++0 paginator pages created ++4 tags created ++3 categories created ++total in 18 ms ++ ++Template Metrics: ++ ++ cumulative average maximum ++ duration duration duration count template ++ ---------- -------- -------- ----- -------- ++ 6.419663ms 583.605µs 994.374µs 11 _internal/_default/rss.xml ++ 4.718511ms 1.572837ms 3.880742ms 3 indexes/category.html ++ 4.642666ms 2.321333ms 3.282842ms 2 post/single.html ++ 4.364445ms 396.767µs 2.451372ms 11 partials/header.html ++ 2.346069ms 586.517µs 903.343µs 4 indexes/tag.html ++ 2.330919ms 211.901µs 2.281342ms 11 partials/header.includes.html ++ 1.238976ms 103.248µs 446.084µs 12 post/li.html ++ 972.16µs 972.16µs 972.16µs 1 _internal/_default/sitemap.xml ++ 953.597µs 953.597µs 953.597µs 1 index.html ++ 822.263µs 822.263µs 822.263µs 1 indexes/post.html ++ 567.498µs 51.59µs 112.205µs 11 partials/navbar.html ++ 348.22µs 31.656µs 88.249µs 11 partials/meta.html ++ 346.782µs 173.391µs 276.176µs 2 post/summary.html ++ 235.184µs 21.38µs 124.383µs 11 partials/footer.copyright.html ++ 132.003µs 12µs 117.999µs 11 partials/menu.html ++ 72.547µs 6.595µs 63.764µs 11 partials/footer.html ++``` ++ ++{{% note %}} ++**A Note About Parallelism** ++ ++Hugo builds pages in parallel where multiple pages are generated ++simultaneously. Because of this parallelism, the sum of "cumulative duration" ++values is usually greater than the actual time it takes to build a site. ++{{% /note %}} ++ ++ ++## Cached Partials ++ ++Some `partial` templates such as sidebars or menus are executed many times ++during a site build. Depending on the content within the `partial` template and ++the desired output, the template may benefit from caching to reduce the number ++of executions. The [`partialCached`][partialCached] template function provides ++caching capabilities for `partial` templates. ++ ++{{% tip %}} ++Note that you can create cached variants of each `partial` by passing additional ++parameters to `partialCached` beyond the initial context. See the ++`partialCached` documentation for more details. ++{{% /tip %}} ++ ++ ++## Step Analysis ++ ++Hugo provides a means of seeing metrics about each step in the site build ++process. We call that *Step Analysis*. The *step analysis* output shows the ++total time per step, the cumulative time after each step (in parentheses), ++the memory usage per step, and the total memory allocations per step. ++ ++To enable *step analysis*, use the `--stepAnalysis` option when running Hugo. ++ ++ ++[partialCached]:{{< ref "functions/partialCached.md" >}} diff --cc docs/content/en/troubleshooting/faq.md index 00000000,00000000..392d7a8d new file mode 100644 --- /dev/null +++ b/docs/content/en/troubleshooting/faq.md @@@ -1,0 -1,0 +1,40 @@@ ++--- ++title: Frequently Asked Questions ++linktitle: FAQ ++description: Solutions to some common Hugo problems. ++date: 2018-02-10 ++categories: [troubleshooting] ++menu: ++ docs: ++ parent: "troubleshooting" ++keywords: [faqs] ++weight: 2 ++toc: true ++aliases: [/faq/] ++--- ++ ++{{% note %}} ++**Note:** The answers/solutions presented below are short, and may not be note be enough to solve your problem. Visit [Hugo Discourse](https://discourse.gohugo.io/) and use the search. It that does not help, start a new topic and ask your questions. ++{{% /note %}} ++ ++## Can I set configuration variables via OS environment? ++ ++Yes you can! See [Configure with Environment Variables](/getting-started/configuration/#configure-with-environment-variables). ++ ++## How do I schedule posts? ++ ++1. Set `publishDate` in the page [Front Matter](/content-management/front-matter/) to a date in the future. ++2. Build and publish at intervals. ++ ++How to automate the "publish at intervals" part depends on your situation: ++ ++* If you deploy from your own PC/server, you can automate with [Cron](https://en.wikipedia.org/wiki/Cron) or similar. ++* If your site is hosted on a service similar to [Netlify](https://www.netlify.com/) you can use a service such as [ifttt](https://ifttt.com/date_and_time) to schedule the updates. ++ ++Also see this Twitter thread: ++ ++{{< tweet 962380712027590657 >}} ++ ++## Can I use the latest Hugo version on Netlify? ++ ++Yes you can! Read [this](/hosting-and-deployment/hosting-on-netlify/#configure-hugo-version-in-netlify). diff --cc docs/content/en/variables/_index.md index 00000000,00000000..382ee25d new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/_index.md @@@ -1,0 -1,0 +1,23 @@@ ++--- ++title: Variables and Params ++linktitle: Variables Overview ++description: Page-, file-, taxonomy-, and site-level variables and parameters available in templates. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [variables and params] ++keywords: [variables,params,values,globals] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 1 ++weight: 01 #rem ++sections_weight: 01 ++aliases: [/templates/variables/] ++toc: false ++--- ++ ++Hugo's templates are context aware and make a large number of values available to you as you're creating views for your website. ++ ++[Go templates]: /templates/introduction/ "Understand context in Go templates by learning the language's fundamental templating functions." diff --cc docs/content/en/variables/files.md index 00000000,00000000..ac5376db new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/files.md @@@ -1,0 -1,0 +1,48 @@@ ++--- ++title: File Variables ++linktitle: ++description: "You can access filesystem-related data for a content file in the `.File` variable." ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [variables and params] ++keywords: [files] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 40 ++weight: 40 ++sections_weight: 40 ++aliases: [/variables/file-variables/] ++toc: false ++--- ++ ++{{% note "Rendering Local Files" %}} ++For information on creating shortcodes and templates that tap into Hugo's file-related feature set, see [Local File Templates](/templates/files/). ++{{% /note %}} ++ ++The `.File` object contains the following fields: ++ ++.File.Path ++: the original relative path of the page (e.g., `content/posts/foo.en.md`) ++ ++.File.LogicalName ++: the name of the content file that represents a page (e.g., `foo.en.md`) ++ ++.File.TranslationBaseName ++: the filename without extension or optional language identifier (e.g., `foo`) ++ ++.File.BaseFileName ++: the filename without extension (e.g., `foo.en`) ++ ++.File.Ext ++: the file extension of the content file (e.g., `md`); this can also be called using `.File.Extension` as well. Note that it is *only* the extension without `.`. ++ ++.File.Lang ++: the language associated with the given file if Hugo's [Multilingual features][multilingual] are enabled (e.g., `en`) ++ ++.File.Dir ++: given the path `content/posts/dir1/dir2/`, the relative directory path of the content file will be returned (e.g., `posts/dir1/dir2/`) ++ ++[Multilingual]: /content-management/multilingual/ diff --cc docs/content/en/variables/git.md index 00000000,00000000..f9c15476 new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/git.md @@@ -1,0 -1,0 +1,58 @@@ ++--- ++title: Git Info Variables ++linktitle: Git Variables ++description: Get the last Git revision information for every content file. ++date: 2017-03-12 ++publishdate: 2017-03-12 ++lastmod: 2017-03-12 ++categories: [variables and params] ++keywords: [git] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 70 ++weight: 70 ++sections_weight: 70 ++aliases: [/extras/gitinfo/] ++toc: false ++wip: false ++--- ++ ++{{% note "`.GitInfo` Performance Considerations" %}} ++Hugo's Git integrations should be fairly performant but *can* increase your build time. This will depend on the size of your Git history. ++{{% /note %}} ++ ++## `.GitInfo` Prerequisites ++ ++1. The Hugo site must be in a Git-enabled directory. ++2. The Git executable must be installed and in your system `PATH`. ++3. The `.GitInfo` feature must be enabled in your Hugo project by passing `--enableGitInfo` flag on the command line or by setting `enableGitInfo` to `true` in your [site's configuration file][configuration]. ++ ++## The `.GitInfo` Object ++ ++The `GitInfo` object contains the following fields: ++ ++.AbbreviatedHash ++: the abbreviated commit hash (e.g., `866cbcc`) ++ ++.AuthorName ++: the author's name, respecting `.mailmap` ++ ++.AuthorEmail ++: the author's email address, respecting `.mailmap` ++ ++.AuthorDate ++: the author date ++ ++.Hash ++: the commit hash (e.g., `866cbccdab588b9908887ffd3b4f2667e94090c3`) ++ ++.Subject ++: commit message subject (e.g., `tpl: Add custom index function`) ++ ++## `.Lastmod` ++ ++If the `.GitInfo` feature is enabled, **and** if the `lastmod` field in the content's front matter is not set, `.Lastmod` (on `Page`) is fetched from Git i.e. `.GitInfo.AuthorDate`. ++ ++[configuration]: /getting-started/configuration/ diff --cc docs/content/en/variables/hugo.md index 00000000,00000000..c0c5c960 new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/hugo.md @@@ -1,0 -1,0 +1,39 @@@ ++--- ++title: Hugo-specific Variables ++linktitle: Hugo Variables ++description: The `.Hugo` variable provides easy access to Hugo-related data. ++date: 2017-03-12 ++publishdate: 2017-03-12 ++lastmod: 2017-03-12 ++categories: [variables and params] ++keywords: [hugo,generator] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 60 ++weight: 60 ++sections_weight: 60 ++aliases: [] ++toc: false ++wip: false ++--- ++ ++It contains the following fields: ++ ++.Hugo.Generator ++: `` tag for the version of Hugo that generated the site. `.Hugo.Generator` outputs a *complete* HTML tag; e.g. `` ++ ++.Hugo.Version ++: the current version of the Hugo binary you are using e.g. `0.13-DEV`
    ++ ++.Hugo.CommitHash ++: the git commit hash of the current Hugo binary e.g. `0e8bed9ccffba0df554728b46c5bbf6d78ae5247` ++ ++.Hugo.BuildDate ++: the compile date of the current Hugo binary formatted with RFC 3339 e.g. `2002-10-02T10:00:00-05:00`
    ++ ++{{% note "Use the Hugo Generator Tag" %}} ++We highly recommend using `.Hugo.Generator` in your website's ``. `.Hugo.Generator` is included by default in all themes hosted on [themes.gohugo.io](http://themes.gohugo.io). The generator tag allows the Hugo team to track the usage and popularity of Hugo. ++{{% /note %}} ++ diff --cc docs/content/en/variables/menus.md index 00000000,00000000..4216d976 new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/menus.md @@@ -1,0 -1,0 +1,67 @@@ ++--- ++title: Menu Variables ++linktitle: Menu Variables ++description: A menu entry in a menu template has specific variables and functions to make menu management easier. ++date: 2017-03-12 ++publishdate: 2017-03-12 ++lastmod: 2017-03-12 ++categories: [variables and params] ++keywords: [menus] ++draft: false ++menu: ++ docs: ++ title: "variables defined by a menu entry" ++ parent: "variables" ++ weight: 50 ++weight: 50 ++sections_weight: 50 ++aliases: [/variables/menu/] ++toc: false ++--- ++ ++The [menu template][] has the following properties: ++ ++.URL ++: string ++ ++.Name ++: string ++ ++.Title ++: string ++ ++This is a link title, meant to be used in `title`-Attributes of the menu's ``-tags. ++By default it returns `.Page.LinkTitle`, as long as the menu entry was created ++through the page's front matter and not through the site config. ++Setting it explicitly in the site config or the page's front matter overrides this behaviour. ++ ++.Page ++: [Page Object](/variables/page/) ++ ++The `.Page` variable holds a reference to the page. ++It's only set when the menu entry is created from the page's front matter, ++not when it's created from the site config. ++ ++ ++.Menu ++: string ++ ++.Identifier ++: string ++ ++.Pre ++: template.HTML ++ ++.Post ++: template.HTML ++ ++.Weight ++: int ++ ++.Parent ++: string ++ ++.Children ++: Menu ++ ++[menu template]: /templates/menu-templates/ diff --cc docs/content/en/variables/page.md index 00000000,00000000..4e367355 new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/page.md @@@ -1,0 -1,0 +1,286 @@@ ++--- ++title: Page Variables ++linktitle: ++description: Page-level variables are defined in a content file's front matter, derived from the content's file location, or extracted from the content body itself. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [variables and params] ++keywords: [pages] ++draft: false ++menu: ++ docs: ++ title: "variables defined by a page" ++ parent: "variables" ++ weight: 20 ++weight: 20 ++sections_weight: 20 ++aliases: [/variables/page/] ++toc: true ++--- ++ ++The following is a list of page-level variables. Many of these will be defined in the front matter, derived from file location, or extracted from the content itself. ++ ++{{% note "`.Scratch`" %}} ++See [`.Scratch`](/functions/scratch/) for page-scoped, writable variables. ++{{% /note %}} ++ ++## Page Variables ++ ++.AlternativeOutputFormats ++: contains all alternative formats for a given page; this variable is especially useful `link rel` list in your site's ``. (See [Output Formats](/templates/output-formats/).) ++ ++.Content ++: the content itself, defined below the front matter. ++ ++.Data ++: the data specific to this type of page. ++ ++.Date ++: the date associated with the page; `.Date` pulls from the `date` field in a content's front matter. See also `.ExpiryDate`, `.PublishDate`, and `.Lastmod`. ++ ++.Description ++: the description for the page. ++ ++.Dir ++: the path of the folder containing this content file. The path is relative to the `content` folder. ++ ++.Draft ++: a boolean, `true` if the content is marked as a draft in the front matter. ++ ++.ExpiryDate ++: the date on which the content is scheduled to expire; `.ExpiryDate` pulls from the `expirydate` field in a content's front matter. See also `.PublishDate`, `.Date`, and `.Lastmod`. ++ ++.File ++: filesystem-related data for this content file. See also [File Variables][]. ++ ++.FuzzyWordCount ++: the approximate number of words in the content. ++ ++.Hugo ++: see [Hugo Variables](/variables/hugo/). ++ ++.IsHome ++: `true` in the context of the [homepage](/templates/homepage/). ++ ++.IsNode ++: always `false` for regular content pages. ++ ++.IsPage ++: always `true` for regular content pages. ++ ++.IsTranslated ++: `true` if there are translations to display. ++ ++.Keywords ++: the meta keywords for the content. ++ ++.Kind ++: the page's *kind*. Possible return values are `page`, `home`, `section`, `taxonomy`, or `taxonomyTerm`. Note that there are also `RSS`, `sitemap`, `robotsTXT`, and `404` 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. ++ ++.Lang ++: language taken from the language extension notation. ++ ++.Language ++: a language object that points to the language's definition in the site ++`config`. ++ ++.Lastmod ++: the date the content was last modified. `.Lastmod` pulls from the `lastmod` field in a content's front matter. ++ ++ - If `lastmod` is not set, and `.GitInfo` feature is disabled, the front matter `date` field will be used. ++ - If `lastmod` is not set, and `.GitInfo` feature is enabled, `.GitInfo.AuthorDate` will be used instead. ++ ++See also `.ExpiryDate`, `.Date`, `.PublishDate`, and [`.GitInfo`][gitinfo]. ++ ++.LinkTitle ++: access when creating links to the content. If set, Hugo will use the `linktitle` from the front matter before `title`. ++ ++.Next ++: pointer to the following content (based on the `publishdate` field in front matter). ++ ++.NextInSection ++: pointer to the following content within the same section (based on `publishdate` field in front matter). ++ ++.OutputFormats ++: contains all formats, including the current format, for a given page. Can be combined the with [`.Get` function](/functions/get/) to grab a specific format. (See [Output Formats](/templates/output-formats/).) ++ ++.Pages ++: a collection of associated pages. This value will be `nil` for regular content pages. `.Pages` is an alias for `.Data.Pages`. ++ ++.Permalink ++: the Permanent link for this page; see [Permalinks](/content-management/urls/) ++ ++.Plain ++: the Page content stripped of HTML tags and presented as a string. ++ ++.PlainWords ++: the Page content stripped of HTML as a `[]string` using Go's [`strings.Fields`](https://golang.org/pkg/strings/#Fields) to split `.Plain` into a slice. ++ ++.Prev ++: Pointer to the previous content (based on `publishdate` in front matter). ++ ++.PrevInSection ++: Pointer to the previous content within the same section (based on `publishdate` in front matter). For example, `{{if .PrevInSection}}{{.PrevInSection.Permalink}}{{end}}`. ++ ++.PublishDate ++: the date on which the content was or will be published; `.Publishdate` pulls from the `publishdate` field in a content's front matter. See also `.ExpiryDate`, `.Date`, and `.Lastmod`. ++ ++.RSSLink ++: link to the taxonomies' RSS link. ++ ++.RawContent ++: raw markdown content without the front matter. Useful with [remarkjs.com]( ++http://remarkjs.com) ++ ++.ReadingTime ++: the estimated time, in minutes, it takes to read the content. ++ ++.Ref ++: returns the permalink for a given reference (e.g., `.Ref "sample.md"`). `.Ref` does *not* handle in-page fragments correctly. See [Cross References](/content-management/cross-references/). ++ ++.RelPermalink ++: the relative permanent link for this page. ++ ++.RelRef ++: returns the relative permalink for a given reference (e.g., `RelRef ++"sample.md"`). `.RelRef` does *not* handle in-page fragments correctly. See [Cross References](/content-management/cross-references/). ++ ++.Site ++: see [Site Variables](/variables/site/). ++ ++.Summary ++: a generated summary of the content for easily showing a snippet in a summary view. The breakpoint can be set manually by inserting <!--more--> at the appropriate place in the content page. See [Content Summaries](/content-management/summaries/) for more details. ++ ++.TableOfContents ++: the rendered [table of contents](/content-management/toc/) for the page. ++ ++.Title ++: the title for this page. ++ ++.Translations ++: a list of translated versions of the current page. See [Multilingual Mode](/content-management/multilingual/) for more information. ++ ++.Truncated ++: a boolean, `true` if the `.Summary` is truncated. Useful for showing a "Read more..." link only when necessary. See [Summaries](/content-management/summaries/) for more information. ++ ++.Type ++: the [content type](/content-management/types/) of the content (e.g., `post`). ++ ++.URL ++: the URL for the page relative to the web root. Note that a `url` set directly in front matter overrides the default relative URL for the rendered page. ++ ++.UniqueID ++: the MD5-checksum of the content file's path. ++ ++.Weight ++: assigned weight (in the front matter) to this content, used in sorting. ++ ++.WordCount ++: the number of words in the content. ++ ++## Section Variables and Methods ++ ++Also see [Sections](/content-management/sections/). ++ ++{{< readfile file="/content/en/readfiles/sectionvars.md" markdown="true" >}} ++ ++## Page-level Params ++ ++Any other value defined in the front matter in a content file, including taxonomies, will be made available as part of the `.Params` variable. ++ ++``` ++--- ++title: My First Post ++date: 2017-02-20T15:26:23-06:00 ++categories: [one] ++tags: [two,three,four] ++``` ++ ++With the above front matter, the `tags` and `categories` taxonomies are accessible via the following: ++ ++* `.Params.tags` ++* `.Params.categories` ++ ++{{% note "Casing of Params" %}} ++Page-level `.Params` are *only* accessible in lowercase. ++{{% /note %}} ++ ++The `.Params` variable is particularly useful for the introduction of user-defined front matter fields in content files. For example, a Hugo website on book reviews could have the following front matter in `/content/review/book01.md`: ++ ++``` ++--- ++... ++affiliatelink: "http://www.my-book-link.here" ++recommendedby: "My Mother" ++... ++--- ++``` ++ ++These fields would then be accessible to the `/themes/yourtheme/layouts/review/single.html` template through `.Params.affiliatelink` and `.Params.recommendedby`, respectively. ++ ++Two common situations where this type of front matter field could be introduced is as a value of a certain attribute like `href=""` or by itself to be displayed as text to the website's visitors. ++ ++{{< code file="/themes/yourtheme/layouts/review/single.html" >}} ++

    Buy this book

    ++

    It was recommended by {{ .Params.recommendedby }}.

    ++{{< /code >}} ++ ++This template would render as follows, assuming you've set [`uglyURLs`](/content-management/urls/) to `false` in your [site `config`](/getting-started/configuration/): ++ ++{{< output file="yourbaseurl/review/book01/index.html" >}} ++

    Buy this book

    ++

    It was recommended by my Mother.

    ++{{< /output >}} ++ ++{{% note %}} ++See [Archetypes](/content-management/archetypes/) for consistency of `Params` across pieces of content. ++{{% /note %}} ++ ++### The `.Param` Method ++ ++In Hugo, you can declare params in individual pages and globally for your entire website. A common use case is to have a general value for the site param and a more specific value for some of the pages (i.e., a header image): ++ ++``` ++{{ $.Param "header_image" }} ++``` ++ ++The `.Param` method provides a way to resolve a single value according to it's definition in a page parameter (i.e. in the content's front matter) or a site parameter (i.e., in your `config`). ++ ++### Access Nested Fields in Front Matter ++ ++When front matter contains nested fields like the following: ++ ++``` ++--- ++author: ++ given_name: John ++ family_name: Feminella ++ display_name: John Feminella ++--- ++``` ++`.Param` can access these fields by concatenating the field names together with a dot: ++ ++``` ++{{ $.Param "author.display_name" }} ++``` ++ ++If your front matter contains a top-level key that is ambiguous with a nested key, as in the following case: ++ ++``` ++--- ++favorites.flavor: vanilla ++favorites: ++ flavor: chocolate ++--- ++``` ++ ++The top-level key will be preferred. Therefore, the following method, when applied to the previous example, will print `vanilla` and not `chocolate`: ++ ++``` ++{{ $.Param "favorites.flavor" }} ++=> vanilla ++``` ++ ++[gitinfo]: /variables/git/ ++[File Variables]: /variables/files/ diff --cc docs/content/en/variables/shortcodes.md index 00000000,00000000..b194eb7d new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/shortcodes.md @@@ -1,0 -1,0 +1,36 @@@ ++--- ++title: Shortcode Variables ++linktitle: Shortcode Variables ++description: Shortcodes can access page variables and also have their own specific built-in variables. ++date: 2017-03-12 ++publishdate: 2017-03-12 ++lastmod: 2017-03-12 ++categories: [variables and params] ++keywords: [shortcodes] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 20 ++weight: 20 ++sections_weight: 20 ++aliases: [] ++toc: false ++--- ++ ++[Shortcodes][shortcodes] have access to parameters delimited in the shortcode declaration via [`.Get`][getfunction], page- and site-level variables, and also the following shortcode-specific fields: ++ ++.Parent ++: provides access to the parent shortcode context in nested shortcodes. This can be very useful for inheritance of common shortcode parameters from the root. ++ ++.IsNamedParams ++: boolean that returns `true` when the shortcode in question uses [named rather than positional parameters][shortcodes] ++ ++.Inner ++: represents the content between the opening and closing shortcode tags when a [closing shortcode][markdownshortcode] is used ++ ++[getfunction]: /functions/get/ ++[markdownshortcode]: /content-management/shortcodes/#shortcodes-with-markdown ++[shortcodes]: /templates/shortcode-templates/ ++ ++ diff --cc docs/content/en/variables/site.md index 00000000,00000000..a5909a56 new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/site.md @@@ -1,0 -1,0 +1,128 @@@ ++--- ++title: Site Variables ++linktitle: Site Variables ++description: Many, but not all, site-wide variables are defined in your site's configuration. However, Hugo provides a number of built-in variables for convenient access to global values in your templates. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [variables and params] ++keywords: [global,site] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 10 ++weight: 10 ++sections_weight: 10 ++aliases: [/variables/site-variables/] ++toc: true ++--- ++ ++The following is a list of site-level (aka "global") variables. Many of these variables are defined in your site's [configuration file][config], whereas others are built into Hugo's core for convenient usage in your templates. ++ ++## Site Variables List ++ ++.Site.AllPages ++: array of all pages, regardless of their translation. ++ ++.Site.Author ++: a map of the authors as defined in the site configuration. ++ ++.Site.BaseURL ++: the base URL for the site as defined in the site configuration. ++ ++.Site.BuildDrafts ++: a boolean (default: `false`) to indicate whether to build drafts as defined in the site configuration. ++ ++.Site.Copyright ++: a string representing the copyright of your website as defined in the site configuration. ++ ++.Site.Data ++: custom data, see [Data Templates](/templates/data-templates/). ++ ++.Site.DisqusShortname ++: a string representing the shortname of the Disqus shortcode as defined in the site configuration. ++ ++.Site.Files ++: all source files for the Hugo website. ++ ++.Site.GoogleAnalytics ++: a string representing your tracking code for Google Analytics as defined in the site configuration. ++ ++.Site.IsMultiLingual ++: whether there are more than one language in this site. See [Multilingual](/content-management/multilingual/) for more information. ++ ++.Site.IsServer ++: a boolean to indicate if the site is being served with Hugo's built-in server. See [`hugo server`](/commands/hugo_server/) for more information. ++ ++.Site.Language.Lang ++: the language code of the current locale (e.g., `en`). ++ ++.Site.Language.LanguageName ++: the full language name (e.g. `English`). ++ ++.Site.Language.Weight ++: the weight that defines the order in the `.Site.Languages` list. ++ ++.Site.Language ++: indicates the language currently being used to render the website. This object's attributes are set in site configurations' language definition. ++ ++.Site.LanguageCode ++: a string representing the language as defined in the site configuration. This is mostly used to populate the RSS feeds with the right language code. ++ ++.Site.LanguagePrefix ++: this can be used to prefix URLs to point to the correct language. It will even work when only one defined language. See also the functions [absLangURL](/functions/abslangurl/) and [relLangURL](/functions/rellangurl). ++ ++.Site.Languages ++: an ordered list (ordered by defined weight) of languages. ++ ++.Site.LastChange ++: a string representing the date/time of the most recent change to your site. This string is based on the [`date` variable in the front matter](/content-management/front-matter) of your content pages. ++ ++.Site.Menus ++: all of the menus in the site. ++ ++.Site.Pages ++: array of all content ordered by Date with the newest first. This array contains only the pages in the current language. ++ ++.Site.Permalinks ++: a string to override the default [permalink](/content-management/urls/) format as defined in the site configuration. ++ ++.Site.RegularPages ++: a shortcut to the *regular* page collection. `.Site.RegularPages` is equivalent to `where .Site.Pages "Kind" "page"`. ++ ++.Site.RSSLink ++: the URL for the site RSS. ++ ++.Site.Sections ++: top-level directories of the site. ++ ++.Site.Taxonomies ++: the [taxonomies](/taxonomies/usage/) for the entire site. Replaces the now-obsolete `.Site.Indexes` since v0.11. Also see section [Taxonomies elsewhere](#taxonomies-elsewhere). ++ ++.Site.Title ++: a string representing the title of the site. ++ ++## The `.Site.Params` Variable ++ ++`.Site.Params` is a container holding the values from the `params` section of your site configuration. ++ ++### Example: `.Site.Params` ++ ++The following `config.[yaml|toml|json]` defines a site-wide param for `description`: ++ ++{{< code-toggle file="config" >}} ++baseURL = "https://yoursite.example.com/" ++ ++[params] ++ description = "Tesla's Awesome Hugo Site" ++ author = "Nikola Tesla" ++{{}} ++ ++You can use `.Site.Params` in a [partial template](/templates/partials/) to call the default site description: ++ ++{{< code file="layouts/partials/head.html" >}} ++ ++{{< /code >}} ++ ++[config]: /getting-started/configuration/ diff --cc docs/content/en/variables/sitemap.md index 00000000,00000000..dd926f2b new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/sitemap.md @@@ -1,0 -1,0 +1,32 @@@ ++--- ++title: Sitemap Variables ++linktitle: Sitemap Variables ++description: ++date: 2017-03-12 ++publishdate: 2017-03-12 ++lastmod: 2017-03-12 ++categories: [variables and params] ++keywords: [sitemap] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 80 ++weight: 80 ++sections_weight: 80 ++aliases: [] ++toc: false ++--- ++ ++A sitemap is a `Page` and therefore has all the [page variables][pagevars] available to use sitemap templates. They also have the following sitemap-specific variables available to them: ++ ++.Sitemap.ChangeFreq ++: the page change frequency ++ ++.Sitemap.Priority ++: the priority of the page ++ ++.Sitemap.Filename ++: the sitemap filename ++ ++[pagevars]: /variables/page/ diff --cc docs/content/en/variables/taxonomy.md index 00000000,00000000..5bcdffee new file mode 100644 --- /dev/null +++ b/docs/content/en/variables/taxonomy.md @@@ -1,0 -1,0 +1,84 @@@ ++--- ++title: Taxonomy Variables ++linktitle: ++description: Taxonomy pages are of type `Page` and have all page-, site-, and list-level variables available to them. However, taxonomy terms templates have additional variables available to their templates. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [variables and params] ++keywords: [taxonomies,terms] ++draft: false ++menu: ++ docs: ++ parent: "variables" ++ weight: 30 ++weight: 30 ++sections_weight: 30 ++aliases: [] ++toc: true ++--- ++ ++## Taxonomy Terms Page Variables ++ ++[Taxonomy terms pages][taxonomytemplates] are of the type `Page` and have the following additional variables. ++ ++For example, the following fields would be available in `layouts/_defaults/terms.html`, depending on how you organize your [taxonomy templates][taxonomytemplates]: ++ ++.Data.Singular ++: The singular name of the taxonomy (e.g., `tags => tag`) ++ ++.Data.Plural ++: The plural name of the taxonomy (e.g., `tags => tags`) ++ ++.Data.Pages ++: The list of pages in the taxonomy ++ ++.Data.Terms ++: The taxonomy itself ++ ++.Data.Terms.Alphabetical ++: The taxonomy terms alphabetized ++ ++.Data.Terms.ByCount ++: The Terms ordered by popularity ++ ++Note that `.Data.Terms.Alphabetical` and `.Data.Terms.ByCount` can also be reversed: ++ ++* `.Data.Terms.Alphabetical.Reverse` ++* `.Data.Terms.ByCount.Reverse` ++ ++## Use `.Site.Taxonomies` Outside of Taxonomy Templates ++ ++The `.Site.Taxonomies` variable holds all the taxonomies defined site-wide. `.Site.Taxonomies` is a map of the taxonomy name to a list of its values (e.g., `"tags" -> ["tag1", "tag2", "tag3"]`). Each value, though, is not a string but rather a *Taxonomy variable*. ++ ++## The `.Taxonomy` Variable ++ ++The `.Taxonomy` variable, available, for example, as `.Site.Taxonomies.tags`, contains the list of tags (values) and, for each tag, their corresponding content pages. ++ ++### Example Usage of `.Site.Taxonomies` ++ ++The following [partial template][partials] will list all your site's taxonomies, each of their keys, and all the content assigned to each of the keys. For more examples of how to order and render your taxonomies, see [Taxonomy Templates][taxonomytemplates]. ++ ++{{< code file="all-taxonomies-keys-and-pages.html" download="all-taxonomies-keys-and-pages.html" >}} ++
    ++
      ++ {{ range $taxonomyname, $taxonomy := .Site.Taxonomies }} ++
    • {{ $taxonomyname }} ++
        ++ {{ range $key, $value := $taxonomy }} ++
      • {{ $key }}
      • ++ ++ {{ end }} ++
      ++
    • ++ {{ end }} ++
    ++
    ++{{< /code >}} ++ ++[partials]: /templates/partials/ ++[taxonomytemplates]: /templates/taxonomy-templates/ diff --cc docs/content/zh/_index.md index 00000000,00000000..78f9ef15 new file mode 100644 --- /dev/null +++ b/docs/content/zh/_index.md @@@ -1,0 -1,0 +1,49 @@@ ++--- ++title: "世界上最快的网站构建框架 The world’s fastest framework for building websites" ++date: 2017-03-02T12:00:00-05:00 ++features: ++ - heading: Blistering Speed ++ image_path: /images/icon-fast.svg ++ tagline: What's modern about waiting for your site to build? ++ copy: Hugo is the fastest tool of its kind. At <1 ms per page, the average site builds in less than a second. ++ ++ - heading: Robust Content Management ++ image_path: /images/icon-content-management.svg ++ tagline: Flexibility rules. Hugo is a content strategist's dream. ++ copy: Hugo supports unlimited content types, taxonomies, menus, dynamic API-driven content, and more, all without plugins. ++ ++ - 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. ++ ++ - heading: Built-in Templates ++ image_path: /images/icon-built-in-templates.svg ++ tagline: Hugo has common patterns to get your work done quickly. ++ copy: Hugo ships with pre-made templates to make quick work of SEO, commenting, analytics and other functions. One line of code, and you're done. ++ ++ - heading: Multilingual and i18n ++ image_path: /images/icon-multilingual2.svg ++ tagline: Polyglot baked in. ++ copy: Hugo provides full i18n support for multi-language sites with the same straightforward development experience Hugo users love in single-language sites. ++ ++ - heading: Custom Outputs ++ image_path: /images/icon-custom-outputs.svg ++ tagline: HTML not enough? ++ copy: Hugo allows you to output your content in multiple formats, including JSON or AMP, and makes it easy to create your own. ++sections: ++ - heading: "100s of Themes" ++ cta: Check out the Hugo's themes. ++ link: http://themes.gohugo.io/ ++ color_classes: bg-accent-color white ++ image: /images/homepage-screenshot-hugo-themes.jpg ++ copy: "Hugo provides a robust theming system that is easy to implement but capable of producing even the most complicated websites." ++ - heading: "Capable Templating" ++ cta: Get Started. ++ link: templates/ ++ color_classes: bg-primary-color-light black ++ image: /images/home-page-templating-example.png ++ copy: "Hugo's Go-based templating provides just the right amount of logic to build anything from the simple to complex. If you prefer Jade/Pug-like syntax, you can also use Amber, Ace, or any combination of the three." ++--- ++ ++Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again. diff --cc docs/content/zh/about/_index.md index 00000000,00000000..bf19807d new file mode 100644 --- /dev/null +++ b/docs/content/zh/about/_index.md @@@ -1,0 -1,0 +1,20 @@@ ++--- ++title: 关于 Hugo ++linktitle: 概览 ++description: Hugo 的特色、规划、许可和动力。 ++date: 2018-04-26 ++publishdate: 2018-04-26 ++lastmod: 2018-04-26 ++categories: [] ++keywords: [] ++menu: ++ docs: ++ parent: "about" ++ weight: 1 ++weight: 1 ++draft: false ++aliases: [/about-hugo/,/docs/] ++toc: false ++--- ++ ++Hugo 不是一般的静态网站生成器。 diff --cc docs/content/zh/content-management/_index.md index 00000000,00000000..8c088dc5 new file mode 100644 --- /dev/null +++ b/docs/content/zh/content-management/_index.md @@@ -1,0 -1,0 +1,21 @@@ ++--- ++title: 内容管理 ++linktitle: 内容管理概览 ++description: Hugo 可以管理大型的静态网站,支持骨架、内容类型、菜单、引用、概要等等。 ++date: 2018-04-23 ++publishdate: 2018-04-23 ++lastmod: 2018-04-23 ++menu: ++ docs: ++ parent: "content-management" ++ weight: 1 ++keywords: [source, organization] ++categories: [content management] ++weight: 01 #rem ++draft: false ++aliases: [/content/,/content/organization] ++toc: false ++isCJKLanguage: true ++--- ++ ++一个实用的静态网站生成器,需要超越“文件头” (front matter) 和模板的等基本功能,才能兼备可伸缩性和可管理性,满足用户所需。Hugo 不仅是给开发者设计的,也同样适用于内容管理员和写作人员。 diff --cc docs/content/zh/documentation.md index 00000000,00000000..1639bbcd new file mode 100644 --- /dev/null +++ b/docs/content/zh/documentation.md @@@ -1,0 -1,0 +1,21 @@@ ++--- ++title: Hugo 说明文档 ++linktitle: Hugo ++description: Hugo is the world's fastest static website engine. It's written in Go (aka Golang) and developed by bep, spf13 and friends. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++menu: ++ main: ++ parent: "section name" ++ weight: 01 ++weight: 01 #rem ++draft: false ++slug: ++aliases: [] ++toc: false ++layout: documentation-home ++isCJKLanguage: true ++--- ++Hugo 号称**世界上最快的静态网站引擎**。它是以 Go (即 Golang) 编程语言所写成,并由 [bep](https://github.com/bep)、[spf13](https://github.com/spf13) 和[朋友们](https://github.com/gohugoio/hugo/graphs/contributors) 共同开发。 ++ ++下面是我们说明文档中最常用和实用的章节: diff --cc docs/content/zh/news/_index.md index 00000000,00000000..286d32e1 new file mode 100644 --- /dev/null +++ b/docs/content/zh/news/_index.md @@@ -1,0 -1,0 +1,4 @@@ ++--- ++title: "Hugo 新闻" ++aliases: [/release-notes/] ++--- diff --cc docs/content/zh/templates/_index.md index 00000000,00000000..3cd8df43 new file mode 100644 --- /dev/null +++ b/docs/content/zh/templates/_index.md @@@ -1,0 -1,0 +1,19 @@@ ++--- ++title: 模板 Templates ++linktitle: 模板概览 ++description: Go templating, template types and lookup order, shortcodes, and data. ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++menu: ++ docs: ++ parent: "templates" ++ weight: 01 ++weight: 01 #rem ++categories: [templates] ++keywords: [] ++draft: false ++aliases: [/templates/overview/,/templates/content] ++toc: false ++notesforauthors: ++--- diff --cc docs/content/zh/templates/base.md index 00000000,00000000..8f98cfdf new file mode 100644 --- /dev/null +++ b/docs/content/zh/templates/base.md @@@ -1,0 -1,0 +1,132 @@@ ++--- ++title: Base 模板 and Blocks ++linktitle: ++description: The base and block constructs allow you to define the outer shell of your master templates (i.e., the chrome of the page). ++godocref: https://golang.org/pkg/text/template/#example_Template_block ++date: 2017-02-01 ++publishdate: 2017-02-01 ++lastmod: 2017-02-01 ++categories: [templates,fundamentals] ++keywords: [blocks,base] ++menu: ++ docs: ++ parent: "templates" ++ weight: 20 ++weight: 20 ++sections_weight: 20 ++draft: false ++aliases: [/templates/blocks/,/templates/base-templates-and-blocks/] ++toc: true ++--- ++ ++The `block` keyword allows you to define the outer shell of your pages' one or more master template(s) and then fill in or override portions as necessary. ++ ++{{< youtube QVOMCYitLEc >}} ++ ++## Base Template Lookup Order ++ ++The [lookup order][lookup] for base templates is as follows: ++ ++1. `/layouts/section/-baseof.html` ++2. `/themes//layouts/section/-baseof.html` ++3. `/layouts//baseof.html` ++4. `/themes//layouts//baseof.html` ++5. `/layouts/section/baseof.html` ++6. `/themes//layouts/section/baseof.html` ++7. `/layouts/_default/-baseof.html` ++8. `/themes//layouts/_default/-baseof.html` ++9. `/layouts/_default/baseof.html` ++10. `/themes//layouts/_default/baseof.html` ++ ++Variables are denoted by capitalized text set within `<>`. Note that Hugo's default behavior is for `type` to inherit from `section` unless otherwise specified. ++ ++### Example Base Template Lookup Order ++ ++As an example, let's assume your site is using a theme called "mytheme" when rendering the section list for a `post` section. Hugo picks `layout/section/post.html` as the template for [rendering the section][]. The `{{define}}` block in this template tells Hugo that the template is an extension of a base template. ++ ++Here is the lookup order for the `post` base template: ++ ++1. `/layouts/section/post-baseof.html` ++2. `/themes/mytheme/layouts/section/post-baseof.html` ++3. `/layouts/post/baseof.html` ++4. `/themes/mytheme/layouts/post/baseof.html` ++5. `/layouts/section/baseof.html` ++6. `/themes/mytheme/layouts/section/baseof.html` ++7. `/layouts/_default/post-baseof.html` ++8. `/themes/mytheme/layouts/_default/post-baseof.html` ++9. `/layouts/_default/baseof.html` ++10. `/themes/mytheme/layouts/_default/baseof.html` ++ ++## Define the Base Template ++ ++The following defines a simple base template at `_default/baseof.html`. As a default template, it is the shell from which all your pages will be rendered unless you specify another `*baseof.html` closer to the beginning of the lookup order. ++ ++{{< code file="layouts/_default/baseof.html" download="baseof.html" >}} ++ ++ ++ ++ ++ {{ block "title" . }} ++ <!-- Blocks may include default content. --> ++ {{ .Site.Title }} ++ {{ end }} ++ ++ ++ ++ {{ block "main" . }} ++ ++ {{ end }} ++ {{ block "footer" . }} ++ ++ {{ end }} ++ ++ ++{{< /code >}} ++ ++## Override the Base Template ++ ++From the above base template, you can define a [default list template][hugolists]. The default list template will inherit all of the code defined above and can then implement its own `"main"` block from: ++ ++{{< code file="layouts/_default/list.html" download="list.html" >}} ++{{ define "main" }} ++

    Posts

    ++ {{ range .Data.Pages }} ++
    ++

    {{ .Title }}

    ++ {{ .Content }} ++
    ++ {{ end }} ++{{ end }} ++{{< /code >}} ++ ++This replaces the contents of our (basically empty) "main" block with something useful for the list template. In this case, we didn't define a `"title"` block, so the contents from our base template remain unchanged in lists. ++ ++{{% warning %}} ++Code that you put outside the block definitions *can* break your layout. This even includes HTML comments. For example: ++ ++``` ++ ++{{ define "main" }} ++...your code here ++{{ end }} ++``` ++[See this thread from the Hugo discussion forums.](https://discourse.gohugo.io/t/baseof-html-block-templates-and-list-types-results-in-empty-pages/5612/6) ++{{% /warning %}} ++ ++The following shows how you can override both the `"main"` and `"title"` block areas from the base template with code unique to your [default single page template][singletemplate]: ++ ++{{< code file="layouts/_default/single.html" download="single.html" >}} ++{{ define "title" }} ++ ++ {{ .Title }} – {{ .Site.Title }} ++{{ end }} ++{{ define "main" }} ++

    {{ .Title }}

    ++ {{ .Content }} ++{{ end }} ++{{< /code >}} ++ ++[hugolists]: /templates/lists ++[lookup]: /templates/lookup-order/ ++[rendering the section]: /templates/section-templates/ ++[singletemplate]: /templates/single-page-templates/ diff --cc docs/netlify.toml index caf6bc3e,00000000..ee649cf6 mode 100644,000000..100644 --- a/docs/netlify.toml +++ b/docs/netlify.toml @@@ -1,31 -1,0 +1,31 @@@ +[build] +publish = "public" +command = "hugo" + +[context.production.environment] - HUGO_VERSION = "0.39" ++HUGO_VERSION = "0.40.2" +HUGO_ENV = "production" +HUGO_ENABLEGITINFO = "true" + +[context.split1] +command = "hugo --enableGitInfo" + +[context.split1.environment] - HUGO_VERSION = "0.39" ++HUGO_VERSION = "0.40.2" +HUGO_ENV = "production" + +[context.deploy-preview] +command = "hugo -b $DEPLOY_PRIME_URL" + +[context.deploy-preview.environment] - HUGO_VERSION = "0.39" ++HUGO_VERSION = "0.40.2" + +[context.branch-deploy] +command = "hugo -b $DEPLOY_PRIME_URL" + +[context.branch-deploy.environment] - HUGO_VERSION = "0.39" ++HUGO_VERSION = "0.40.2" + +[context.next.environment] +HUGO_ENABLEGITINFO = "true" + diff --cc docs/resources/_gen/images/news/0.40-relnotes/featured-hugo-40-poster_hu20c69e2a166f65e329d8fbabe8d2cc58_69238_480x0_resize_catmullrom_2.png index 00000000,00000000..656e02b3 new file mode 100644 Binary files differ diff --cc docs/resources/_gen/images/news/0.40-relnotes/featured-hugo-40-poster_hu20c69e2a166f65e329d8fbabe8d2cc58_69238_640x0_resize_catmullrom_2.png index 00000000,00000000..0939f8d0 new file mode 100644 Binary files differ diff --cc docs/resources/_gen/images/showcase/flesland-flis/featured_hue4fd3c0e7519777bd75019750a0f5391_309284_1024x512_fill_catmullrom_top_2.png index 00000000,00000000..755f765a new file mode 100644 Binary files differ diff --cc docs/resources/_gen/images/showcase/flesland-flis/featured_hue4fd3c0e7519777bd75019750a0f5391_309284_640x0_resize_catmullrom_2.png index 00000000,00000000..950b2e08 new file mode 100644 Binary files differ diff --cc docs/resources/_gen/images/showcase/flesland-flis/featured_hue4fd3c0e7519777bd75019750a0f5391_309284_f66ed2dc2e475b0cb21d76296890c5a2.png index 00000000,00000000..3056bc37 new file mode 100644 Binary files differ diff --cc docs/static/css/hugofont.css index 00000000,00000000..09d6ce07 new file mode 100644 --- /dev/null +++ b/docs/static/css/hugofont.css @@@ -1,0 -1,0 +1,184 @@@ ++@font-face { ++ font-family: 'hugo'; ++ src:url('../fonts/hugo.eot'); ++ src:url('../fonts/hugo.eot?#iefix') format('embedded-opentype'), ++ url('../fonts/hugo.woff') format('woff'), ++ url('../fonts/hugo.ttf') format('truetype'), ++ url('../fonts/hugo.svg#hugo') format('svg'); ++ font-weight: normal; ++ font-style: normal; ++} ++ ++[class^="icon-"], [class*=" icon-"] { ++ font-family: 'hugo'; ++ speak: none; ++ font-style: normal; ++ font-weight: normal; ++ font-variant: normal; ++ text-transform: none; ++ line-height: 1; ++ ++ /* Better Font Rendering =========== */ ++ -webkit-font-smoothing: antialiased; ++ -moz-osx-font-smoothing: grayscale; ++} ++ ++.icon-home:before { ++ content: "\21"; ++} ++.icon-html5:before { ++ content: "\23"; ++} ++.icon-css3:before { ++ content: "\24"; ++} ++.icon-console:before { ++ content: "\25"; ++} ++.icon-link:before { ++ content: "\26"; ++} ++.icon-fire:before { ++ content: "\28"; ++} ++.icon-check-alt:before { ++ content: "\29"; ++} ++.icon-hugo_serif:before { ++ content: "\e600"; ++} ++.icon-x-altx-alt:before { ++ content: "\2a"; ++} ++.icon-circlestar:before { ++ content: "\2b"; ++} ++.icon-file-css:before { ++ content: "\2c"; ++} ++.icon-radio-checked:before { ++ content: "\2e"; ++} ++.icon-quote:before { ++ content: "\44"; ++} ++.icon-airplane2:before { ++ content: "\45"; ++} ++.icon-heart:before { ++ content: "\46"; ++} ++.icon-rocket:before { ++ content: "\47"; ++} ++.icon-house:before { ++ content: "\48"; ++} ++.icon-arrow-right:before { ++ content: "\e001"; ++} ++.icon-arrow-left:before { ++ content: "\e002"; ++} ++.icon-flow-branch:before { ++ content: "\e004"; ++} ++.icon-pen:before { ++ content: "\e005"; ++} ++.icon-idea:before { ++ content: "\3b"; ++} ++.icon-gears:before { ++ content: "\3c"; ++} ++.icon-talking:before { ++ content: "\3d"; ++} ++.icon-tag:before { ++ content: "\3e"; ++} ++.icon-rocket2:before { ++ content: "\3f"; ++} ++.icon-octocat:before { ++ content: "\41"; ++} ++.icon-announce:before { ++ content: "\42"; ++} ++.icon-edit:before { ++ content: "\43"; ++} ++.icon-power-cord:before { ++ content: "\50"; ++} ++.icon-apple:before { ++ content: "\51"; ++} ++.icon-windows8:before { ++ content: "\52"; ++} ++.icon-tux:before { ++ content: "\53"; ++} ++.icon-file-xml:before { ++ content: "\54"; ++} ++.icon-fork:before { ++ content: "\55"; ++} ++.icon-arrow-down:before { ++ content: "\56"; ++} ++.icon-pacman:before { ++ content: "\e000"; ++} ++.icon-embed:before { ++ content: "\2f"; ++} ++.icon-code:before { ++ content: "\30"; ++} ++.icon-cc:before { ++ content: "\31"; ++} ++.icon-cc-by:before { ++ content: "\32"; ++} ++.icon-cc-nc:before { ++ content: "\33"; ++} ++.icon-beaker-alt:before { ++ content: "\39"; ++} ++.icon-w3c:before { ++ content: "\3a"; ++} ++.icon-bolt:before { ++ content: "\49"; ++} ++.icon-flow-tree:before { ++ content: "\4a"; ++} ++.icon-twitter:before { ++ content: "\4b"; ++} ++.icon-beaker:before { ++ content: "\4c"; ++} ++.icon-images:before { ++ content: "\4d"; ++} ++.icon-bubbles:before { ++ content: "\4e"; ++} ++.icon-meter2:before { ++ content: "\4f"; ++} ++.icon-hugo_sans:before { ++ content: "\68"; ++} ++.icon-spf13:before { ++ content: "\27"; ++} diff --cc docs/static/fonts/hugo.eot index 00000000,00000000..b92f00f9 new file mode 100644 Binary files differ diff --cc docs/static/fonts/hugo.svg index 00000000,00000000..7913f7c1 new file mode 100644 --- /dev/null +++ b/docs/static/fonts/hugo.svg @@@ -1,0 -1,0 +1,63 @@@ ++ ++ ++ ++Generated by IcoMoon ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ diff --cc docs/static/fonts/hugo.ttf index 00000000,00000000..962914d3 new file mode 100644 Binary files differ diff --cc docs/static/fonts/hugo.woff index 00000000,00000000..4693fbe7 new file mode 100644 Binary files differ diff --cc docs/static/img/hugo-logo-med.png index 00000000,00000000..dcc14169 new file mode 100644 Binary files differ diff --cc docs/static/img/hugo-logo.png index 00000000,00000000..a4f1321b new file mode 100644 Binary files differ diff --cc docs/static/img/hugo.png index 00000000,00000000..48acf346 new file mode 100644 Binary files differ diff --cc docs/static/img/hugoSM.png index 00000000,00000000..f64f4308 new file mode 100644 Binary files differ diff --cc docs/themes/gohugoioTheme/layouts/_default/list.html index a0835342,00000000..3b7a2307 mode 100755,000000..100755 --- a/docs/themes/gohugoioTheme/layouts/_default/list.html +++ b/docs/themes/gohugoioTheme/layouts/_default/list.html @@@ -1,4 -1,0 +1,5 @@@ +{{ define "main" }} - {{ $section_to_display := .Sections | default .Paginator.Pages }} ++ {{ $paginator := .Paginate (.Pages | lang.Merge (where .Sites.First.RegularPages "Section" .Section)) }} ++ {{ $section_to_display := .Sections | default $paginator.Pages }} + {{ partial "pagelayout.html" (dict "context" . "section_to_display" $section_to_display ) }} +{{ end }} diff --cc docs/themes/gohugoioTheme/layouts/news/list.html index 716966e1,00000000..5a528465 mode 100644,000000..100644 --- a/docs/themes/gohugoioTheme/layouts/news/list.html +++ b/docs/themes/gohugoioTheme/layouts/news/list.html @@@ -1,42 -1,0 +1,43 @@@ +{{/* TODO: think about adding these tags back in, but they need to be limited to news +{{ define "header" }}{{ partial "page-header" . }}{{ end }} */}} +{{ define "main" }} +
    + +
    +

    + {{ .Title }} +

    +
    + {{ .Content }} +
    +
    + + + +
    + {{/* [wip] add archive lists + */}} + + {{ $interior_classes := $.Site.Params.flex_box_interior_classes }} +
    - {{ range .Paginator.Pages }} ++ {{ $paginator := .Paginate (.Pages | lang.Merge (where .Sites.First.RegularPages "Section" .Section)) -}} ++ {{ range $paginator.Pages }} + {{ partial "boxes-section-summaries" (dict "context" . "classes" $interior_classes "fullcontent" false) }} + {{ end }} +
    +
    + + +
    +{{ end }} diff --cc docs/themes/gohugoioTheme/layouts/page/documentation-home.html index 04b57d4c,00000000..91f744c3 mode 100644,000000..100644 --- a/docs/themes/gohugoioTheme/layouts/page/documentation-home.html +++ b/docs/themes/gohugoioTheme/layouts/page/documentation-home.html @@@ -1,4 -1,0 +1,4 @@@ +{{ define "main" }} - {{ $section_to_display := (.Site.Taxonomies.categories.fundamentals).Pages }} ++{{ $section_to_display := (.Site.Taxonomies.categories.fundamentals).Pages | lang.Merge (.Sites.First.Taxonomies.categories.fundamentals).Pages }} + {{ partial "pagelayout.html" (dict "context" . "section_to_display" $section_to_display ) }} +{{ end }} diff --cc docs/themes/gohugoioTheme/layouts/partials/home-page-sections/showcase.html index 774c10e0,00000000..c73cfa5e mode 100644,000000..100644 --- a/docs/themes/gohugoioTheme/layouts/partials/home-page-sections/showcase.html +++ b/docs/themes/gohugoioTheme/layouts/partials/home-page-sections/showcase.html @@@ -1,42 -1,0 +1,44 @@@ +
    +

    Showcase

    + {{/* NOTE: transitions for this section are in themes/gohugoioTheme/src/css/_carousel.css */}} +
    +
    +
    + {{ $showcasePages := where .Site.RegularPages "Section" "showcase" }} ++ {{ if $showcasePages }} + {{ template "home_showcase_item" (index $showcasePages 0) }} + {{ range $p := first 10 ($showcasePages | after 1 | shuffle) }} + {{template "home_showcase_item" $p }} + {{end}} ++ {{end}} +
    +
    +
    + {{/* END */}} +
    {{/* using Flex to make the button show up on the right side */}} + See All +
    +
    + + +{{ define "home_showcase_item" }} + {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }} + {{ with $img }} + {{ $big := .Fill "1024x512 top" }} + {{ $small := $big.Resize "512x" }} + + {{with $.Title}} +
    +
    + {{.}} → +
    +
    + {{end}} +
    + {{ end }} +{{ end }} diff --cc docs/themes/gohugoioTheme/layouts/partials/nav-links-docs.html index d695008c,00000000..61aa11dd mode 100644,000000..100644 --- a/docs/themes/gohugoioTheme/layouts/partials/nav-links-docs.html +++ b/docs/themes/gohugoioTheme/layouts/partials/nav-links-docs.html @@@ -1,23 -1,0 +1,23 @@@ +{{ $currentPage := . }} + diff --cc docs/themes/gohugoioTheme/theme.toml index 7334c0e2,00000000..fe55ec76 mode 100644,000000..100644 --- a/docs/themes/gohugoioTheme/theme.toml +++ b/docs/themes/gohugoioTheme/theme.toml @@@ -1,15 -1,0 +1,15 @@@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "Hugo Theme" +license = "MIT" +licenselink = "https://github.com/budparr/gohugo.io/blob/master/LICENSE.md" +description = "" +homepage = "https://github.com/budparr/gohugo.io" +tags = ["website"] +features = ["", ""] - min_version = 0.18 ++min_version = 0.38 + +[author] + name = "Bud Parr" + homepage = "https://github.com/budparr"