Flip Tanedo June 2021
See Academic_README.md
for the README file for the Hugo Academic Resumé template. I periodically re-do my personal website from scratch using the latest Academic template.
Most of the material is copied from earlier websites. This README.md
file is a personal reminder of how I edited the page.
What was previous the Hugo Academic theme is now called Wowchemy. The default method to build a page is to pick a template and deply through Netlify. This, in turn, will automatically link to GitHub to create a repository, which you can then fork with git clone https://github...
where you fill in the appropriate URL for the GitHub repository.
Make sure you have Hugo e.g. through Homebrew. If it's been a while, you may want to update (upgrade) hugo using brew upgrade hugo
at the terminal.
hugo server -D
The output will include a URL: Web Server is available at //localhost:1313/
, navigate your browser to this URL to view the page.
I end up getting the following error:
Error: failed to download modules: exec: "go": executable file not found in $PATH
This means we have to install some Go dependences:
brew install git golang hugo
Then open ~/.zshrc
and add the following line
export PATH=$PATH:/usr/local/go/bin
You have to restart the Terminal app.
Since I last did this, the George Cushen's Academic theme has been renamed and expanded to Wowchemy. This new version has a content management server (CMS) that I find a bit cumbersome to navigate due to how I tend to bend the tempalte. The main references for modifying the template are here:
- https://wowchemy.com/docs/getting-started/customization/
- https://wowchemy.com/docs/getting-started/page-builder/
Hugo now uses modules, see this discussion.
Wowchemy (Hugo Theme Academic) is a template.
Hugo makes it easy to modify the template by searching for local template files ahead of the default template files. In theory, one can simply copy one of the default html template files and place the copy in the appropraite local directory to over-ride the default template. Previously, the theme files were located in .themes/academic
, now you can find them on the wowchemy/wowchemy-hugo-modules GitHub page. In principle, one should be able to place modified files in ./layouts/
relative to the root directory. Unfortunately this doesn't quite work; more notes on this as we go.
I suggest downloading that GitHub repository to make it easy to copy the html files. For more information, see: https://gohugo.io/getting-started/directory-structure/
All paths are relative to the project root.
-
Note: this didn't work for me (see below). Create a
./layouts/
folder (or copy over the 2020 folder). Hugo will look here for templates and shortcodes first. This over-rides any files from the theme. Copy the contents of the 2020 webpage./layouts/
folder. This should include three subfolders:./layouts/partials/
templates for the home page../layouts/shortcodes/
these include a shortcode for twitter and a shortcode for e-mail hyperlinks that are robust against bots looking for e-mail addresses to spam../layouts/_default/baseof.html
, the superstructure of the homepage, which we'll want to weak for the background and the footer.
Fix: we'll have to make a local copy of the wowchemy/wowchemy-hugo-modules theme. Then go to
./go.mod
and add a line of the form:replace github.com/wowchemy/wowchemy-hugo-modules/wowchemy => /Users/flip/Documents/Website/wowchemy-hugo-modules-main/wowchemy
See Modifying modules. Then make the modifications directly to the local copy. You can skip this part for now; the other steps in this section modify meta-data rather than hacking the template. Remark: it turns out that once I started using a local copy of wowchemy, Hugo started reading the local
./layouts
folder in my project directory. -
Copy the
./assets/scss
folder (containingcustom.css
) from the 2020 version. This includes:- "crypted email" to make it harder to skim email addresses
- CSS styles for fonts
- Google Calendar settings
- CSS style adding a watermark
- CSS style for a sidebar picture on the CV widget
- CSS style for footer
- CSS style for the About Me section
- CSS styles for various types of icon lists
- CSS style hack for navigation bar opacity
-
Now set up the toml files for custom fonts and color theme. The color theme is
./data/themes/fliptheme.toml
, the font theme is.data/fonts/flipfont.toml
. -
Now copy over the static files. Hugo still supports placing files and images in a
./static
folder (e.g. see this help page). See, e.g. this wowchemy note on linking to files. Note, however, that wowchemy looks for images inassets/media/
. For our purposes, let's start by copying over./static
from the old site and we can modify things as needed.- There's a bunch.
- Move the research images to
assets/media/research
(not static; the research carousel will look here)
-
Favicon: this goes in
./assets/images
as a 512x512 image titledicon.png
. If there is also a file nameslogo.png
then this will be uesd in place of the site name on the menubar.
Check that the page compiles.
Because there are significant structural changes in Hugo and Wowchemy/Academic
-
Let's start with
./config/_default/config.yaml
- Most of these are self-explanatory. Update the
title
,baseurl
, andcopyright
.
- Most of these are self-explanatory. Update the
-
Go to
./config/_default/menus.yaml
; there's nothing to do here yet, but let's take a peek to see how it works. Tip: edit this file as you write new sections incontent/home/
.- This sets the navigation of the homepage.
- Note that the list
menus.yaml
only controls the homepage menu items: name, link, and position on the navigation bar. It is independent of the weights in the./content/home/...md
widgets and their separate weights, which control the ordering of the sections on the page.
-
Go to
./config/_default/params.yaml
-
theme: fliptheme
, assuming./data/themes/fliptheme.toml
-
day_night: false
to turn off the day/night toggle -
font: 'flipfont'
, assuming.data/fonts/flipfont.toml
-
Copy the email fields from the previous
params.toml
. Theemail1
,email2
, andemail3
parameters are used by the cryptedemail css hack. -
Turn off
show_search
-
Set the
main_menu
alignment tor
-
Turn off
math
to enable the LaTeX markdown extension -
At the bottom:
## ADDED BY FLIP # Feynman Diagram Footer footmark: 'layout/feynmanfooter.png' # Footer logos midlogo: 'logo/UCRPAlogo2.png' mylogo: 'logo/FlipAmbigram.png' # watermark on the about widget watermark: 'background/Bundle3.jpg' ## /FLIP
-
The ./content
folder contains subfolders for biographical data (authors/admin
) and the homepage widgets home/
. We won't use the other components.
Update avatar.jpg
with your photo, update _index.md
. This is where the about
widget draws its information from.
In content/authors/admin
:
- replace
avatar.jpg
with a profile photo - Update the personal data in
_index.md
- We won't be using the
interests
oreducation
lists in_index.md
- We won't be using the
- Transfer over the long list of social icons. We'll eventually edit the template files so that they show up under the bio blurb, not the profile picture.
-
Delete
privacy.md
andterms.md
; this may be something to explore in the future. -
Delete the following folders in
./content/
:- slides
- publication
- project
- post
- event
In the future I may want to include these.
-
Delete (or set
active = false
) the following widgets (.md
files) in./content/home/
:- talks
- tags
- skills
- publications
- projects
- posts
- featured
- experience
- accomplishments
- demo.md
So that's everything except
about.md
,contact.md
,index.md
. Note that there is no longer aslider.md
default. It looks like it's still available, though.
We'll fill in the content later.
Remark: at this stage, the site probably looks a bit sparse. It is a good check point to make sure everything is in place.
This is the annoying part. Make sure you have a local copy of the wowchemy theme; see the transfering assets section above. Go ahead and make sure that the following files are copied from the old site to the local copy of the wowchemy theme.
./layouts/partials/
templates for the home page../layouts/shortcodes/
these include a shortcode for twitter and a shortcode for e-mail hyperlinks that are robust against bots looking for e-mail addresses to spam../layouts/_default/baseof.html
: keep the old version, we're going to modify it below.
Remark: I'm very confused with how this is working or not working. What does work for me is to make sure that (1) there is a local copy of the wowchemy theme, (2) the ./go.mod
file in the project directory is pointing to that local copy using a replace
command. Only then will hugo use the local layouts
directory for templating. I'm sure this is just a silly bug.
Reminder: we'll have to make a local copy of the wowchemy/wowchemy-hugo-modules theme. Then go to ./go.mod
and add a line of the form:
replace github.com/wowchemy/wowchemy-hugo-modules/wowchemy => /Users/flip/Documents/Website/wowchemy-hugo-modules-main/wowchemy
See Modifying modules. It seems like you do not have to modify the local copy of the template; you can place the modified files in ./layouts
.
There are two major design edits here. They're a bit of a pain to implement, but that's my hubris for you. Note: the copy of ./layouts/_default/baseof.html
that we put in here is now outdated. Let's start by placing the most updated version, which we will shortly edit.
Make sure you have included /layouts/_default/baseof.html
from the previous site.
Here's what baseof.html
looks like (you can grab this from the wowchemy template files on GitHub) after I modified it. Remark: make sure any updated layout files are modified from the latest template, not just copies of the previous version.
<!DOCTYPE html>
<!-- TEST -->
{{- $language_code := site.LanguageCode | default "en-us" -}}
<html lang="{{$language_code}}" {{ if in site.Data.i18n.rtl.rtl $language_code }}dir="rtl"{{end}}>
{{ partial "site_head" . }}
{{ $show_navbar := site.Params.main_menu.enable | default true }}
{{- $highlight_active_link := site.Params.main_menu.highlight_active_link | default true -}}
<body id="top" data-spy="scroll" {{ if $show_navbar }}data-offset="70"{{end}} data-target="{{ if or .IsHome (eq .Type "widget_page") | and $highlight_active_link }}#navbar-main{{else}}#TableOfContents{{end}}" class="page-wrapper {{with .Params.design.css_class}}{{.}}{{end}} {{ if not (.Scratch.Get "light") }}dark{{end}} {{ if not $show_navbar }}no-navbar{{end}}" {{with .File}}data-wc-page-id="{{.File.UniqueID}}"{{end}} {{with .Params.design.css_style}}style="{{. | safeCSS}}"{{end}}>
{{/* Initialise Wowchemy. */}}
{{ $js_license := printf "/*! Wowchemy v%s | https://wowchemy.com/ */\n" site.Data.wowchemy.version }}
{{ $js_license := $js_license | printf "%s/*! Copyright 2016-present George Cushen (https://georgecushen.com/) */\n" }}
{{ $js_license := $js_license | printf "%s/*! License: https://github.com/wowchemy/wowchemy-hugo-modules/blob/main/LICENSE.md */\n" }}
{{ $js_bundle_head := $js_license | resources.FromString "js/bundle-head.js" }}
{{ $wcDarkLightEnabled := site.Params.day_night | default false }}
{{ $wcIsSiteThemeDark := not (.Scratch.Get "light") | default false }}
{{ $js_params := dict "wcDarkLightEnabled" $wcDarkLightEnabled "wcIsSiteThemeDark" $wcIsSiteThemeDark }}
{{ $js_bundle := resources.Get "js/wowchemy-init.js" | js.Build (dict "params" $js_params) }}
{{- if hugo.IsProduction -}}
{{- $js_bundle = $js_bundle | js.Build (dict "format" "iife") | minify -}}
{{- else -}}
{{- $js_bundle = $js_bundle | js.Build (dict "format" "iife" "sourceMap" "inline") -}}
{{ end }}
{{ $js_bundle := slice $js_bundle_head $js_bundle | resources.Concat "js/wowchemy-init.min.js" }}
{{- if hugo.IsProduction -}}
{{ $js_bundle = $js_bundle | fingerprint "md5" }}
{{- end -}}
<script src="{{ $js_bundle.RelPermalink }}"></script>
{{ partial "search" . }}
<!-- FLIP: FOR WATERMARK -->
<div id="watermark" style="background-image:url('{{ $.Site.BaseURL }}/img/{{ .Site.Params.watermark }}');"></div>
<!-- /FLIP -->
<div class="page-header">
{{ partial "navbar" . }}
</div>
<!-- FLIP 2019 -->
<div id="THECONTENT"> <!-- closed below; see flip2019.css -->
<!-- /FLIP 2019 -->
<div class="page-body">
{{ block "main" . }}{{ end }}
</div>
<div class="page-footer">
{{/* Docs and Updates layouts include the site footer in a different location. */}}
{{ if not (in (slice "book" "docs" "updates") .Type) }}
<!-- FLIP -->
<div style="position: relative; width: 0; height: 0">
<div id="feynmanfoot" style="background-image:url('{{ $.Site.BaseURL }}/img/{{ .Site.Params.footmark }}');"></div>
</div>
<div id="botbar1"></div>
<!-- -- -->
<div id="FOOTERBAR">
<!-- /FLIP -->
<div class="container">
{{ partial "site_footer" . }}
</div>
<!-- FLIP -->
</div> <!-- closes div FOOTERBAR -->
<!-- /FLIP -->
{{ end }}
</div>
<!-- FLIP -->
</div> <!-- closes id="THECONTENT" -->
<!-- /FLIP -->
{{ partial "citation" . }}
{{ partial "site_js" . }}
</body>
</html>
My edits are highlighted with comments.
We can see where the navigation bar is called and where the footer is called. The stuff in between calls the sections of the home page. Here's what we want to do:
-
We want the background of the
<body>
to be dark gray. Aesthetically we want the background to be white. However, the navigation bar and footer will be dark gray. What this means is that if one over-scrolls (pulls above or below the main page by a little) then you get a bit of white pulling from under the footer or from above the navigation bar. This looks distracting, so we're going to jump through some hoops. This involves:a) setting the
<body>
background to be dark gray. If you've copied over the style files, this should already be active.b) creating a new
<div id="THECONTENT">
that has a white background. All of the sections will be inside this division. Over scrolling, however, will pull more space from outside this division, which will be dark gray. -
We want the fancy footer. I have a neat Feynman diagram footer graphic that I like. Observe that the
<div class="container">
that encloses the footer does not spread across the entire navigator width. Thecontainer
class is something inherited from Bootstrap, the responsive design grid system that Academic is built upon.We have to place additional
<div>
s just around and above the footer.
Bonus: at this stage you can also put in the baseof.html
code for a watermark.
In earlier steps we defined the locations of the graphics in params.yaml
## ADDED BY FLIP
# Feynman Diagram Footer
footmark: 'layout/feynmanfooter.png'
# Footer logos
midlogo: 'logo/UCRPAlogo2.png'
mylogo: 'logo/FlipAmbigram.png'
# watermark on the about widget
watermark: 'background/Bundle3.jpg'
## /FLIP
This is a good checkpoint: the website should look reasonable at this stage.
We have this copied over from last time, but a better thing to do is to update it with the latest wowchemy template.
The breakpoint of a navigation bar is the window width at which the bar collapses into the familiar "three horizontal bars" symbol for an expanding menu. Bootstrap 4 makes this easy. Here's how it works:
Changing the navbar breakpoint is easier in Bootstrap 4 using the navbar-expand-* classes:
<nav class="navbar fixed-top navbar-expand-sm">..</nav>
The options are
navbar-expand-sm
: mobile menu on xs screens <576pxnavbar-expand-md
: mobile menu on sm screens <768pxnavbar-expand-lg
: mobile menu on md screens <992pxnavbar-expand-xl
: mobile menu on lg screens <1200pxnavbar-expand
: never use mobile menu- (no expand class) = always use mobile menu
The relevant line shows up at the top of themes/academic/layouts/partials/navbar.html
. You know what that means: make a copy of that file in /layouts/partials/
and change
<nav class="navbar navbar-light fixed-top navbar-expand-lg py-0 compensate-for-scrollbar" id="navbar-main">
to
<nav class="navbar navbar-light fixed-top navbar-expand-md py-0 compensate-for-scrollbar" id="navbar-main">
You can use navbar-expand-sm
if your menu is particularly brief.
By the way, this is also way easier than it used to be in Bootstrap 3, remember to be grateful.
We have also copied over themes/academic/layouts/partials/site_footer.html
. It's worth updating the base file to match the wowchemy template and then inserting the new text.
Here's my modification:
<footer class="site-footer">
<!-- FLIP: commented out all the old stuff -->
<!--
{{ if .IsTranslated | and site.Params.footer.show_translations }}
<div class="powered-by d-flex flex-wrap pb-2 justify-content-center">
<div class="p-2 font-weight-bold"><i class="fas fa-globe pr-1" aria-hidden="true"></i>{{ i18n "languages" }}:</div>
<div class="p-2">{{ index site.Data.i18n.languages .Lang }}</div>
{{ range .Translations }}
<div class="p-2"><a href="{{ .Permalink }}">{{ index site.Data.i18n.languages .Lang }}</a></div>
{{ end }}
</div>
{{ end }}
{{ if or (site.GetPage "terms.md") (site.GetPage "privacy.md") }}
<p class="powered-by">
{{ with site.GetPage "privacy.md" }}
{{ printf "<a href=\"%s\">%s</a>" .RelPermalink .Title | safeHTML }}
{{ end }}
{{ with site.GetPage "terms.md" }}
{{ if site.GetPage "privacy.md" }} · {{ end }}
{{ printf "<a href=\"%s\">%s</a>" .RelPermalink .Title | safeHTML }}
{{ end }}
</p>
{{ end }}
{{ with site.Copyright }}
<p class="powered-by">
{{ replace . "{year}" now.Year | markdownify }}
</p>
{{ end }}
{{/* Display copyright license. */}}
{{ partial "site_footer_license" . }}
<p class="powered-by">
{{ $is_sponsor := site.Params.i_am_a_sponsor | default false }}
{{ $hide_published_with_footer := site.Params.power_ups.hide_published_with | default true }}
{{ if not (and $is_sponsor $hide_published_with_footer) }}
{{ $default := "Published with {wowchemy} — the free, {repo_link}open source{/repo_link} website builder that empowers creators." }}
{{ $i18n_published_with := i18n "published_with" | default $default }}
{{ if not (findRE "{wowchemy}" $i18n_published_with) }}
{{ warnf "Please attribute Wowchemy using `{wowchemy}` in the `published_with` text." }}
{{ $i18n_published_with = $default }}
{{ end }}
{{ $i18n_published_with = replace $i18n_published_with "{wowchemy}" "<a href=\"https://wowchemy.com/?utm_campaign=poweredby\" target=\"_blank\" rel=\"noopener\">Wowchemy</a>" | safeHTML }}
{{ $i18n_published_with = replace $i18n_published_with "{repo_link}" "<a href=\"https://github.com/wowchemy/wowchemy-hugo-modules\" target=\"_blank\" rel=\"noopener\">" | safeHTML }}
{{ $i18n_published_with = replace $i18n_published_with "{/repo_link}" "</a>" | safeHTML }}
{{ $i18n_published_with | markdownify | emojify }}
{{ end }}
</p> -->
<!-- FLIP: new -->
<div class="row" id="footer-columns">
<div class="col-md-4" id="footer-col-1">
<img src="{{ $.Site.BaseURL }}img/{{ $.Site.Params.mylogo }}" class="center-me">
</div>
<div class="col-md-4" id="footer-col-1">
<img src="{{ $.Site.BaseURL }}img/{{ $.Site.Params.midlogo }}" class="center-me">
</div>
<div class="col-md-4" id="footer-col-1">
<p class="powered-by">
{{ with site.Copyright }}{{ replace . "{year}" now.Year | markdownify}} · {{ end }}
Published with G. Cushen's
<a href="https://github.com/wowchemy/wowchemy-hugo-modules" target="_blank" rel="noopener">wowchemy</a> for
<a href="https://gohugo.io" target="_blank" rel="noopener">Hugo</a>.
{{ if ne .Type "docs" }}
<span class="float-right" aria-hidden="true">
<a href="#" id="back_to_top">
<span class="button_icon">
<i class="fas fa-chevron-up fa-2x"></i>
</span>
</a>
</span>
{{ end }}
</p>
</div>
</div>
<!-- /FLIP -->
</footer>
Note: there's a new way to do this within wowchemy, I may want to change to that instead in the future. For now we'll use the old method
One fancy thing to add in is a watermark. If you copied the watermark code in baseof.html
and params.toml
(as well as the relevant parts of custom.css
, it should already be up and running.
In baseof.html
: the code:
<!-- FLIP: FOR WATERMARK -->
<div id="watermark" style="background-image:url('{{ $.Site.BaseURL }}/img/{{ .Site.Params.watermark }}');"></div>
<!-- /FLIP -->
{{ partial "navbar.html" . }}
Note that I've tried to annotate my edits compared to the default file. This is helpful since the next time I make edits, the default file may have been upgraded and I need to remember where to put hacks.
Now we move on to filling out the widgets on the homepage. We've copied over the widget layouts from the previous version. However, these are modified on an old version of the theme. We want to copy the current theme widgets and apply the hacks from the previous version to make sure the widgets are compatible.
All of the following are in layouts/partials/widgets/
. I assume that you are starting from a clean version from the latest version of the theme. By marking all replacements and removals with comments (e.g. <!-- FLIP -->
), it's easy to find where to insert new code in the clean version. In this file I'll just write a few general comments, you can refer to the previous files in ./layouts/partials/widgets
.
- Comment out icon list, move it below.
- Add a
{{ $page.Content }}
portion. Note that this is different from{{ $person_page.Content }}
. The latter is filled in from_index.md
in the./config
folder. The former is used for the small comment. - Removed the interests/education; we'll put that in the CV
- Go ahead and edit
.content/home/about.md
The next item on the website should be a mini-CV with links to a full CV. Copy the latest version of /layouts/partials/widgets/blank.html
to the project directory, ./layouts/partials/widgets/blank.html
. Make another copy in the project directory rename it to CV.html
.
Actually, I think the CV widget is fine as is. I just copied from the previous version. Go ahead and copy .content/home/CV.md
from the previous version.
Comments:
-
Note also the minor tweak of
<h1>
to<h2>
in the following line:{{ with $st.Title }}<h2>{{ . | markdownify | emojify }}</h2>{{ end }}
This is so that "Curriculum Vitae" fits on one line on large screens.
-
In
CV.html
under<div class="col-xs-12 col-md-4 section-heading">
:<p> <a class="btn btn-outline-primary btn-xs" href="{{ $st.Params.cv_pdf }}"> Download Complete CV </a> </p>
-
In the header of
CV.md
:# CV location cv_pdf = "./files/Tanedo.pdf"
Note that this has to go between the
+++
in the header section, and above any list parameters (Defined with brackets:[list]
).
I'm not sure what's going on here. The main reference is here: https://wowchemy.com/docs/getting-started/page-builder/#slider
-
The png images with transparencies are not darkened.
-
Images aren't being rescaled. Bug report from someone else.
-
Hack: based on slider.html template
-
Looks like I want to modify class
carousel-inner
-
Suggestion is
ground-position:center; background-repeat: no-repeat; background-size: cover;
via this thread -
Propose: put this in
custom.css
.carousel-inner { ground-position:center; background-repeat: no-repeat; background-size: cover; }
-
Alternative that works in the markdown for
slider.md
:height = "400px; background-position:center; background-repeat: no-repeat; background-size: cover"
This works because the height is inserted right where the image is called.
-
Tried again: using the default template from wowchemy. Seems to work ok. New problem: the dimmer will dim the entire carousel, not just the image. Problem is in the
slider.html
where a typical element looks like<div class="wg-hero dark carousel-item active" style=" height: 300px; background-color: #666;background-image: url('http://localhost:1313/flip/media/bubbles.jpg');filter: brightness(0.5);"> <div class="container" style="text-align: center;"> <h1 class="hero-title"> Hello </h1> <p class="hero-lead" style="margin: 0 auto 0 auto;"> I am center aligned 😄 </p> <p> <a href="https://example.org" class="btn btn-light btn-lg"><i class="fas fa-graduation-cap" style="padding-right: 10px;"></i>Download my app</a> </p> </div> </div>
The
filter:brightness(0.5)
is affecting the sub-divs. The issue is discussed here. Looks like no good solution. Better to just dim images by hand.
-
- Leaving this as-is for now. Note that we're still using TOML format, where most of the current files in the template use YAML.
In the future, it may be better to make a separate style for only this widget, which seems to be something allowed. (I'm not sure where to put the css file, though.)
This uses the blank widget with a twitter shortcode (Hugo's way of inserting bits of html). I had to adapt this since last year due to some updates on how Hugo does short codes.
Should probably move press items to a separate file.
We can hack the contact.html
template to include a Google Calendar widget. Insert the following code: below <div class="col-12 {{if eq $columns "2"}}col-lg-8{{end}}">
:
<div class="col-12 {{if eq $columns "2"}}col-lg-8{{end}}">
{{ with $st.Content }}{{ . }}{{ end }}
<!-- FLIP 2019 -->
{{ with $page.Params.calendar }}
<iframe src="https://calendar.google.com/calendar/embed?height=200&wkst=1&bgcolor=%23ffffff&ctz=America%2FLos_Angeles&{{ range $index, $item := $page.Params.calendar }}src={{ with $item.src }}{{ . }}{{ end }}&{{ end }}color=%23C0CA33&color=%23F4511E&color=%237986CB&color=%23F6BF26&mode=AGENDA&showNav=0&showPrint=0&showTabs=0&showCalendars=0&showTitle=0" style="border:solid 1px #777" width="98%" height="200" frameborder="0" scrolling="no"></iframe>
{{ end }}
<!-- /FLIP 2019 -->
Next comment out the old email line. We want to replace it with the "crypted email" code which hides the full email address from the final html file. This is a super low-level way of making it harder to skim your email address. I think this was effective in the mid 2000s, and probably completely irrelevant today. Still, I've been using this on my personal website for over a decade, so I might as well keep up the tradition.
<!-- FLIP: comment out -->
<!-- {{ if $data.email }}
<li>
<i class="fa-li fas fa-envelope fa-2x" aria-hidden="true"></i>
<span id="person-email">
{{- if $autolink }}<a href="mailto:{{ $data.email }}">{{ $data.email }}</a>{{ else }}{{ $data.email }}{{ end -}}
</span>
</li>
{{ end }} -->
<!-- /FLIP -->
Replace it with:
<!-- FLIP 2019 -->
<!-- from: https://stackoverflow.com/a/41566570 -->
{{ with $.Site.Params.email1 }}
<li>
<i class="fa-li fas fa-envelope fa-2x" aria-hidden="true"></i>
<span id="person-email" itemprop="email">
<a data-name="{{ $.Site.Params.email1 }}" data-domain="{{ $.Site.Params.email2 }}" data-tld="{{ $.Site.Params.email3 }}" href="#" class="cryptedmail" onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld"></a>
</span>
</li>
{{ end }}
<!-- /FLIP 2019 -->
There was an issue with section headings on small screens. Section headings from widget layouts that I ported from the last version are all left-aligned on small screens. On the other hand, when the 2021 default wowchemy blank layout is used, they are center aligned on small screens.
Issue seems to be in widget_page.html
which calls the widgets: line 110
{{ $use_cols := in (slice "pages" "featured" "experience" "accomplishments" "contact" "blank" "tag_cloud" "portfolio") $widget }}
Has to do with whether or not you are using a custom layout or blank.html. This is called here:
{{if $use_cols}}
<div class="row {{if not $st.Title | or (eq $columns "1") }}justify-content-center{{end}}">
{{ if $st.Title }}
{{ if eq $columns "1" }}
<div class="section-heading col-12 mb-3 text-center">
{{ with $st.Title }}<h1 class="mb-0">{{ . | markdownify | emojify }}</h1>{{ end }}
{{ with $st.Params.subtitle }}<p class="mt-1">{{ . | markdownify | emojify }}</p>{{ end }}
</div>
{{else}}
<div class="section-heading col-12 col-lg-4 mb-3 mb-lg-0 d-flex flex-column align-items-center align-items-lg-start">
{{ with $st.Title }}<h1 class="mb-0">{{ . | markdownify | emojify }}</h1>{{ end }}
{{ with $st.Params.subtitle }}<p class="mt-1">{{ . | markdownify | emojify }}</p>{{ end }}
</div>
{{end}}
{{end}}
{{end}}
My solution: modify templates, but also modify widget_page.html
line 110 to include my custom widget layouts:
{{ $use_cols := in (slice "pages" "featured" "experience" "accomplishments" "contact" "blank" "tag_cloud" "portfolio" "teaching") $widget }}
Corresponding change to teaching.html
:
{{ $st := .page }}
{{ $columns := $st.Params.design.columns | default "2" }}
{{ if ne $columns "1" }}
<div class="col-12 col-lg-8">
{{ $st.Content }}
<div class="row">
{{ with $st.Params.teaching }}
{{ range .class }}
<div class="col-3 teaching">
<a href="{{ .website }}"><img class="teachingpic" src="{{ $.Site.BaseURL }}img/teaching/{{ .photo }}"></a>
<a href="{{ .website }}">{{ .number }}, {{ .session }}</a> <br />
<span class="smaller">{{ .name }}</span>
</div>
{{ end }}
{{ end }}
</div>
</div>
{{ else }}
{{ end }}
Have to do this for each custom 2-column widget.
Note: UCR now uses 2-factor authentication. In order to ssh/sftp into the server, one needs to connect with a VPN in order to open up the porn.
- Emoji in Hugo
- See 2020 Readme for some previous design notes.