Skip to content

Instantly share code, notes, and snippets.

View budparr's full-sized avatar
🎯
Focusing

Bud Parr budparr

🎯
Focusing
View GitHub Profile
{{ dateFormat .Site.Params.DateForm (default .Date (.PublishDate)) }}
<!-- Above is the optimized version of below, thanks to https://discuss.gohugo.io/t/how-to-use-the-publishdate-if-both-publishdate-and-date-are-set-in-frontmatter/5142/3?u=kaushalmodi -->
{{/* with .PublishDate */}}
{{/* if eq ($.PublishDate.Format "2006-01-02") "0001-01-01" */}}
<!-- Print the Date instead of PublishDate if PublishDate is defined but at its initial value of Jan 1, 0001 -->
{{/* $.Date.Format $.Site.Params.DateForm */}}
{{/* else */}}
{{/* $.PublishDate.Format $.Site.Params.DateForm */}}
{{/* end */}}
{{/* end */}}
{{ printf "%#v" . }}
If you ever need to drill into what is passed to a template, just put this at the top of your template somewhere:
{{ printf "%#v" . }}
Then look at a page generated by that template - that'll print out what the top level object is, and what it's fields are. When I do it with a shortcode template, I get something like this:
&hugolib.ShortcodeWithPage{Params:[]string{"."}, Inner:"", Page:(*hugolib.Page)(0xc2082e4840)}
@budparr
budparr / hugo-date-formatting
Last active February 1, 2017 14:44
Hugo date formatting
Go's reference time for layouts is:
Mon Jan 2 15:04:05 MST 2006
which can also be expressed as:
01/02 03:04:05PM '06 -0700
For more information: http://golang.org/pkg/time/#pkg-constants535
By picking a default date, there is less parsing that needs to happen, plus they chose a date that shows definitively how to handle things like leading zeroes, day/month ordering and other edge cases that aren't discernible from all dates.
.Site.Pages = All the Pages (note the capital P) in the site.
.Data.Pages: All the Pages for the given Node (sections, taxonomies). This will be a subset of the above for all other nodes than the home page: On that Node I believe these slices are the same.
{{ $url := replace .Permalink ( printf "%s" .Site.BaseURL) "" }}
{{ $.Scratch.Add "path" .Site.BaseURL }}
<ol class="breadcrumbs">
<li><a href="/">home</a></li>
{{ range $index, $element := split $url "/" }}
{{ $.Scratch.Add "path" $element }}
{{ if ne $element "" }}
<li><a href='{{ $.Scratch.Get "path" }}'>{{ . }}</a></li>
{{ $.Scratch.Add "path" "/" }}
{{ end }}
@budparr
budparr / hugo-repeater.html
Created January 12, 2017 03:12
Hugo repeater using modulo
{{ define "main" }}
{{ $.Scratch.Add "boxClasses" "dt flex center pt0 pb3 pv3-m pv3-ns" }}
{{ $.Scratch.Add "boxCopyClasses" "db dtc-ns v-mid w-100 w-75-ns" }}
{{ $.Scratch.Add "boxImageClasses" "db dtc-ns v-mid-ns w-25" }}
{{ $.Scratch.Add "ImageClasses" "w-100" }}
<main class="cf pa3 pa4-m pa5-l mw9 w-60-l center">
<h2>
{{ .Title }}
</h2>
@budparr
budparr / hugo-multiple-where-statmenets.html
Last active May 6, 2021 14:12
multiple where statements Remember that Hugo uses parameters in the range statement from the inside out. Order matters.
{{ range first 3 (where (where .Site.Pages.ByDate.Reverse "Section" "posts") ".Title" "!=" .Title) }}
<!-- latest posts -->
{{ end }}
@budparr
budparr / widow-control.js
Created November 17, 2016 20:47
widow control script
//control widows, ala www.css-tricks.com/preventing-widows-in-post-titles/
$("ID").each(function() {
var wordArray = $(this).text().split(" ");
if (wordArray.length > 1) {
wordArray[wordArray.length-2] += "&nbsp;" + wordArray[wordArray.length-1];
wordArray.pop();
$(this).html(wordArray.join(" "));
}
});
@budparr
budparr / test.html
Created November 10, 2016 17:36
Sample code for Jekyll Workshop
<!-- code -->
@budparr
budparr / jekyll-events.html
Last active July 25, 2016 01:49
Jekyll Events, with limiting posts
{% assign events = "" | split: "|" %}
{% for item in site.posts %}
{% assign current_date = site.time | date: "%Y%m%d" %}
{% assign postdate = item.date | date: "%Y%m%d" %}
{% if postdate > current_date %}
{% assign events = events | push: item %}
{% endif %}
{% endfor %}