You can call other partials from themes/hugo-relearn-themes/ besides those in themes/hugo-relearn-themes/layouts/partials/_relearn. However, using partials not mentioned as customizable below might make future updates more challenging.
Customizable Partials
The Relearn theme allows you to customize various parts of the theme by overriding partials. This makes the theme highly configurable.
A good rule to follow: The less code a partial contains, the easier it will be to update the theme in the future.
Here’s a list of partials you can safely override:
layouts/partials/content.html: The main content of a page. Override this to display additonal page metadata.
layouts/partials/content-header.html: The header above the title. By default, it shows tags, but you can change this.
layouts/partials/content-footer.html: The footer below the content. By default, it shows author info, modification dates, and categories. You can customize this.
layouts/partials/custom-header.html: For adding custom CSS. Remember to include the style HTML tag.
layouts/partials/custom-footer.html: For adding custom JavaScript. Remember to include the script HTML tag.
layouts/partials/favicon.html: The favicon. You should definitely customize this.
layouts/partials/heading.html: the page’s title headings
layouts/partials/heading-pre.html: Add content before the page’s title headings. Remember to consider the headingPre front matter.
layouts/partials/heading-post.html: Add content after the page’s title headings. Remember to consider the headingPost front matter.
layouts/partials/logo.html: The logo in the top left corner. You should customize this.
layouts/partials/menu-pre.html: Add content before menu items. Remember to consider the menuPre front matter.
layouts/partials/menu-post.html: Add content after menu items. Remember to consider the menuPost front matter.
layouts/partials/menu-footer.html: The footer of the left menu.
You can override other partials from themes/hugo-relearn-themes/, but be careful as this might make future updates more difficult.
Extending Scripts
A common question is how to add extra CSS styles or JavaScript to your site. This depends on what you need.
Adding JavaScript or Stylesheets to All Pages
To add JavaScript files or CSS stylesheets to every page, you can include them in layouts/partials/custom-header.html or layouts/partials/custom-footer.html.
However, this can make your site larger than necessary if these files are only needed on a few pages. The next section explains how to add dependencies only when needed.
Custom Shortcodes with Dependencies
Some shortcodes need extra JavaScript and CSS files. The theme only loads these when the shortcode is used. You can use this for your own shortcodes too.
For example, to create a shortcode called myshortcode that needs the jquery library:
Create the shortcode file layouts/shortcodes/myshortcode.html and add the folloging line somewhere:
Give a unique name for the location parameter when you call it, so you can distinguish your loaders behavior depending on the location it was called from.
Image Effects
This page shows you, how to configure custom image effects on top of existing ones.
Nevertheless, your requirements may differ from this configuration. Luckily, the theme has you covered as the topbar, its buttons, and the functionality behind these buttons are fully configurable by you.
Tip
All mentioned file names below can be clicked and show you the implementation for a better understanding.
Areas
The default configuration comes with three predefined areas that may contain an arbitrary set of buttons.
end: shown on the opposite breadcrumb side in comparison to the start area
more: shown when pressing the more button in the topbar
While you cannot add additional areas in the topbar, you are free to configure additional buttons that behave like the more button, providing further user-defined areas.
Buttons
The theme ships with the following predefined buttons (from left to right in the screenshot):
sidebar: opens the sidebar flyout if in mobile layout
Not all buttons are displayed at every given time. This is configurable (see below if interested).
Redefining Areas
Each predefined area and button comes in its own file. By that, it is easy for you to overwrite an area file in your installation, reusing only the buttons you like.
E.g., you can redefine the predefined end area by adding the file layouts/partials/topbar/area/end.html in your installation (not in the theme itself) to remove all but the more button.
The below example sets an explicit value for the onempty parameter, overriding the specific default value for this button (these defaults vary depending on the button). The parameter causes the more button to always be displayed instead of hiding once its content is empty.
The theme distinguishes between two types of buttons:
button: a clickable button that either browses to another site, triggers a user-defined script or opens an overlay containing user-defined content
area-button: the template for the more button, to define your own area overlay buttons
Button Parameter
Screen Widths and Actions
Depending on the screen width, you can configure how the button should behave. Screen width is divided into three classes:
s: (controlled by the onwidths parameter) mobile layout where the menu sidebar is hidden
m: (controlled by the onwidthm parameter) desktop layout with visible sidebar while the content area width still resizes
l: (controlled by the onwidthl parameter) desktop layout with visible sidebar once the content area reached its maximum width
For each width class, you can configure one of the following actions:
show: the button is displayed in its given area
hide: the button is removed
area-XXX: the button is moved from its given area into the area XXX; for example, this is used to move buttons to the more area overlay in the mobile layout
Hiding and Disabling Stuff
While hiding a button depending on the screen size can be configured with the above-described hide action, you may want to hide the button on certain other conditions as well.
For example, the print button in its default configuration should only be displayed if print support was configured. This is done in your button template by checking the conditions first before displaying the button (see layouts/partials/topbar/button/print.html).
This parameter can have one of the following values:
disable: the button is displayed in a disabled state if the overlay is empty
hide: the button is removed if the overlay is empty
If you want to disable a button containing no overlay, this can be achieved by an empty href parameter. An example can be seen in the prev button (see layouts/partials/topbar/button/prev.html) where the URL for the previous site may be empty.
For displaying an area in the button’s overlay, see Area-Button.
Parameter
Name
Default
Notes
page
<empty>
Mandatory reference to the page.
class
<empty>
Mandatory unique class name for this button. Displaying two buttons with the same value for class is undefined.
href
<empty>
Either the destination URL for the button or JavaScript code to be executed on click.
- If starting with javascript: all following text will be executed in your browser - Every other string will be interpreted as URL - If empty, the button will be displayed in a disabled state regardless of its content
Defines what to do with the button if the content parameter was set but ends up empty:
- disable: The button is displayed in a disabled state. - hide: The button is removed.
onwidths
show
The action that should be executed if the site is displayed in the given width:
- show: The button is displayed in its given area - hide: The button is removed. - area-XXX: The button is moved from its given area into the area XXX.
onwidthm
show
See above.
onwidthl
show
See above.
hint
<empty>
Arbitrary text displayed in the tooltip.
title
<empty>
Arbitrary text for the button.
content
<empty>
Arbitrary HTML to put into the content overlay. This parameter may be empty. In this case, no overlay will be generated.
Call this from your own button templates if you want to implement a button with an area overlay like the more button (layouts/partials/topbar/button/more.html).
Parameter
Name
Default
Notes
page
<empty>
Mandatory reference to the page.
area
<empty>
Mandatory unique area name for this area. Displaying two areas with the same value for area is undefined.
Defines what to do with the button if the content overlay is empty:
- disable: The button is displayed in a disabled state. - hide: The button is removed.
onwidths
show
The action that should be executed if the site is displayed in the given width:
- show: The button is displayed in its given area - hide: The button is removed. - area-XXX: The button is moved from its given area into the area XXX.
onwidthm
show
See above.
onwidthl
show
See above.
hint
<empty>
Arbitrary text displayed in the tooltip.
title
<empty>
Arbitrary text for the button.
Predefined Buttons
The predefined buttons by the theme (all other buttons besides the more and toc button in layouts/partials/topbar/button).
Call these from your own redefined area templates if you want to use default button behavior.
The <varying> parameter values are different for each button and configured for standard behavior as seen on this page.
Parameter
Name
Default
Notes
page
<empty>
Mandatory reference to the page.
onwidths
<varying>
The action that should be executed if the site is displayed in the given width:
- show: The button is displayed in its given area - hide: The button is removed. - area-XXX: The button is moved from its given area into the area XXX.
Call these from your own redefined area templates if you want to use default button behavior utilizing overlay functionality.
The <varying> parameter values are different for each button and configured for standard behavior as seen on this page.
Parameter
Name
Default
Notes
page
<empty>
Mandatory reference to the page.
onempty
disable
Defines what to do with the button if the content overlay is empty:
- disable: The button is displayed in a disabled state. - hide: The button is removed.
onwidths
<varying>
The action that should be executed if the site is displayed in the given width:
- show: The button is displayed in its given area - hide: The button is removed. - area-XXX: The button is moved from its given area into the area XXX.
onwidthm
<varying>
See above.
onwidthl
<varying>
See above.
Page Designs
A page is displayed by exactly one page design. The Relearn theme offers the page designs home, chapter, and default.
A page design usually consists of
an archetype file: a template for creating new Markdown files with this design
If no type is set in your front matter, the page is treated as if type='default' was set.
Warning
Don’t use the type option in your modifications for other functionality!
All shipped designs use the theme’s framework from themes/hugo-theme-learn/layouts/_default/baseof.html, containing of the same topbar and sidebar but can change how content appears in the center of the page.
Using a Page Design
Regardless of shipped or custom page design, you are using them in the same way.
Creating a Page Designs
To make a custom page design:
Choose a name (for example, mydesign)
Create a content view file at layouts/mydesign/views/article.html
If you want to add a new output format called myformat that outputs HTML and you want to build everything yourself without using the theme’s components:
Create a file layouts/_default/baseof.myformat.html
Implement all the necessary code in this file
Using the Theme’s Structure
If you want to keep the general framework and only change specific parts, you can override these files:
layouts/_default/views/article.html: Controls how a page’s content and title are displayed
layouts/_default/views/body.html: Determines the page body structure
layouts/_default/views/menu.html: Defines the sidebar menu layout
layouts/_default/views/storeOutputFormat.html: Stores the output format name for use in the framework
For a real-world example, check out the print output format implementations