Compare commits

...

44 Commits

Author SHA1 Message Date
Alan Orth a8ff91e1ea
CHANGELOG.md: Add note about Danish
continuous-integration/drone/push Build is passing Details
continuous-integration/drone Build is passing Details
2022-07-29 20:15:32 +03:00
Alan Orth 31ee2abcad
Merge pull request #146 from schack/feature_danish_translation
en.yaml translated to Danish
2022-07-29 20:14:07 +03:00
Henrik Schack 915caee6dd en.yaml translated to Danish 2022-07-29 15:06:27 +02:00
Alan Orth 08ae262312
CHANGELOG.md: add note about Bootstrap tables
continuous-integration/drone/push Build is passing Details
2022-07-29 10:09:02 +03:00
Alan Orth b781125ed8
Regenerate static assets 2022-07-29 10:07:28 +03:00
Alan Orth ddcae7c761
package-lock.json: run npm update 2022-07-29 10:07:16 +03:00
Alan Orth b415ee2879
Regenerate static assets 2022-07-29 10:05:11 +03:00
Alan Orth 4260a7e1af
source/scss/bootstrap.scss: enable tables
Requested by a user.

See: https://github.com/alanorth/hugo-theme-bootstrap4-blog/issues/145
2022-07-29 10:03:57 +03:00
Alan Orth a94ebccf3d
Use Node.js 14 instead of 12
continuous-integration/drone/push Build is passing Details
2022-06-07 09:36:46 +03:00
Alan Orth 54d3242633
CHANGELOG.md: update notes
continuous-integration/drone/push Build is passing Details
2021-10-18 15:03:01 +03:00
Alan Orth 1d4204a404
Regenerate static assets 2021-10-18 14:53:45 +03:00
Alan Orth 985070b311
package.json: update cleancss options
We use -O1 instead of --level 1 now.
2021-10-18 14:52:55 +03:00
Alan Orth 2e40f6cd69
Update npm dependencies 2021-10-18 14:52:43 +03:00
Alan Orth 99f1a6725c
Regenerate static assets
continuous-integration/drone/push Build is passing Details
2021-09-15 09:59:40 +03:00
Alan Orth 898d91701a
package-lock.json: Run npm update 2021-09-15 09:59:05 +03:00
Alan Orth 40b3fb4979
.drone.yml: Build on Node.js 16
continuous-integration/drone/push Build is passing Details
We want to build on LTS or "current" releases only.

See: https://nodejs.org/en/about/releases/
2021-08-19 16:09:05 +03:00
Alan Orth 5797675dbd
theme.toml: Add demo link
continuous-integration/drone/push Build is passing Details
As of 2021-07-01 the Hugo Themes showcase is no longer building our
themes so we need to include a link to a demo.
2021-07-09 22:36:07 +03:00
Alan Orth 8cdfeb297d
package.json: Run webpack without npx
continuous-integration/drone/push Build is passing Details
This only affects the CI, but the inability to run webpack seems
to have been due to using an older version of npm (v6.14.x), and
now we upgrade npm before install so we don't need this hack.
2021-03-23 11:25:21 +02:00
Alan Orth 7a2ac26879
.drone.yml: Update npm before install and build
continuous-integration/drone/push Build is passing Details
It seems that the issue with not being able to find webpack-cli is
due to some behavior with an older version of npm. My local devel-
opment environment has npm 7.6.x and so does the Node.js 15 conta-
iner, while the Node.js 12 and 14 containers have npm 6.14.x.

Updating npm fixes the issue with `npx webpack` not being able to
find webpack-cli's webpack command (perhaps it installs the peer
dependency automatically, I don't know).
2021-03-23 10:16:02 +02:00
Alan Orth 72fe18fd4d
package.json: Run webpack with npx
continuous-integration/drone/push Build is failing Details
My local dev environment automatically adds ./node_modules/.bin to
the shell PATH, but it seems a better way to do this is to use npx
so that it works here and on the CI.
2021-03-23 09:45:19 +02:00
Alan Orth 085cf9847f
.drone.yml: Run on current and LTS Node.js releases
Node.js v10 will cease to be LTS next month and I haven't even used
it for a while already, so let's change this to only run on 12, 14,
and 15, which are the current active and LTS releases.

See: https://nodejs.org/en/about/releases/
2021-03-23 09:39:40 +02:00
Alan Orth dbc97128f3
package-lock.json: Run npm update
continuous-integration/drone/push Build is failing Details
2021-03-22 13:45:47 +02:00
Alan Orth 5dd511963d
package.json: Only install webpack-cli
We don't explicitly need webpack, as webpack-cli will bring it in
for us.
2021-03-22 13:45:21 +02:00
Alan Orth d24e709cd3
CHANGELOG.md: Minor dependency updates
continuous-integration/drone/push Build is passing Details
2021-01-19 22:11:57 +02:00
Alan Orth 6c30836cc9
Regenerate static assets 2021-01-19 22:10:35 +02:00
Alan Orth ddd2836905
source/scss/bootstrap.scss: Update header
Minor, but can be very confusing when looking at CSS and wondering
why the version is old.
2021-01-19 22:10:04 +02:00
Alan Orth f3a5cf6630
Run npm update
Brings in Bootstrap v4.6.0 as well as a few others.
2021-01-19 22:09:26 +02:00
Alan Orth 1876747063
README.md: Fix link syntax
continuous-integration/drone/push Build is passing Details
2021-01-12 09:25:42 +02:00
Alan Orth 96d6304f09
Remove .travis.yml
continuous-integration/drone/push Build is passing Details
TravisCI changed their business model recently and I realized it is
better to not rely on free cloud services. I am now using a Drone.io
instance on my own infrastructure.
2020-12-10 12:56:02 +02:00
Alan Orth e0c8b5a057
README.md: Use badge from Drone CI 2020-12-10 12:55:37 +02:00
Alan Orth d6ab3cda0a
.drone.yml: Correct npm task
continuous-integration/drone/push Build is passing Details
2020-12-10 12:49:57 +02:00
Alan Orth e1dfe242a6
.travis.yml: Only build on Node.js LTS versions 2020-12-10 12:48:38 +02:00
Alan Orth bfac136c3e
Add .drone.yml for ci.mjanja.ch 2020-12-10 12:48:12 +02:00
Alan Orth 4a922d8657
README.md: Use travis-ci.com domain for badge 2020-12-08 09:07:25 +02:00
Alan Orth 94269648d6
.travis.yml: Try to build on AWS graviton2 instances
These are the second generation of Amazon's ARM-based instances.

See: https://blog.travis-ci.com/2020-09-11-arm-on-aws
2020-12-06 09:54:23 +02:00
Alan Orth 3fc531eb66
Move unreleased changes to 1.6.0 2020-12-05 19:01:52 +02:00
Alan Orth 82362818a1
README.md: Add note about new figure shortcode 2020-12-05 18:59:06 +02:00
Alan Orth 54f85c3beb
layouts/_default/single.html: Fix for images in the page bundle 2020-12-04 14:09:27 +02:00
Alan Orth c6498a4bfb
layouts/partials: Override internal templates for page bundles
The Hugo internal Twitter and OpenGraph templates assume your post
images are in the static directory. This tries to look them up in
the page bundle first and falls back to the Hugo default behavior.
2020-12-04 14:06:47 +02:00
Alan Orth 147ee8cf76
layouts/shortcodes/figure.html: Add srcset support
This overrides Hugo's default figure shortcode to enable img srcset
support, which allows the client to decide which size of image they
want to download based on a CSS media query. During build time Hugo
creates several versions of each image to match several breakpoints.
Unfortunately this only works if the images are in the post's page
bundle, falling back to retrieving images from the static directory
if they aren't found in the bundle.

This shortcode was originally from Charl P. Botha, but I modified
it to automatically rotate images that have orientation EXIF data.

See: https://gohugo.io/content-management/page-bundles/
See: http://www.johann-oberdorfer.eu/blog/2020/01/05/20-01-05_leverage_page_bundles_in_hugo/
See: https://cpbotha.net/2020/05/02/drop-in-replacement-for-hugo-figure-shortcode-with-responsive-img-srcset/
2020-12-04 14:03:29 +02:00
Alan Orth cb81c7818d
CHANGELOG.md: Add note about dart sass 2020-11-30 12:45:04 +02:00
Alan Orth 37e48b1e28
Regenerate static assets 2020-11-30 12:42:10 +02:00
Alan Orth 39a9a8fd2a
Adjust source/scss for dart sass
Imports are relative to the current file it seems.
2020-11-30 12:41:53 +02:00
Alan Orth 64d62a9179
Migrate to dart sass
libsass (and therefore node-sass) is deprecated and dart sass is
recommended.

See: https://sass-lang.com/blog/libsass-is-deprecated
2020-11-30 12:39:54 +02:00
20 changed files with 3271 additions and 3410 deletions

View File

@ -1,6 +1,6 @@
image: archlinux
packages:
- nodejs-lts-erbium
- nodejs-lts-fermium
- npm
sources:
- https://git.sr.ht/~alanorth/hugo-theme-bootstrap4-blog

28
.drone.yml Normal file
View File

@ -0,0 +1,28 @@
kind: pipeline
type: docker
name: node14
steps:
- name: build
image: node:14-alpine
commands:
- npm --version
- npm install -g npm
- npm --version
- npm install
- npm run build
---
kind: pipeline
type: docker
name: node16
steps:
- name: build
image: node:16-alpine
commands:
- npm --version
- npm install -g npm
- npm --version
- npm install
- npm run build

View File

@ -1,10 +0,0 @@
language: node_js
node_js:
- 10
- 12
- 13
- 14
script: npm run build
dist: focal
# vim: ts=2 sw=2 et

View File

@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased Changes
### Updated
- Bootstrap v4.6.0, webpack v5, haven 0.7.0, clean-css-cli, etc
- Use Node.js 14 in CI, remove Node.js 12
## Added
- Support for Bootstrap table classes (#145)
- i18n language keys for Danish (@schack, #146)
## [[ 1.6.0 ]] - 2020-12-05
### Changed
- Migrate to dart sass from node-sass (see [LibSass is Deprecated](https://sass-lang.com/blog/libsass-is-deprecated))
- Use new [figure shortcode](https://cpbotha.net/2020/05/02/drop-in-replacement-for-hugo-figure-shortcode-with-responsive-img-srcset/a) that automatically processes images in a post's page bundle to multiple resolutions and outputs an appropriate img srcset (falls back to getting images from static dir)
## [[1.5.1]] - 2020-11-15
### Updated
- Minor version bump for bootstrap, node-sass, and fontawesome
@ -17,7 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [[1.5.0]] - 2020-05-17
### Updated
- i18n language keys for German (#dermellor, #131)
- i18n language keys for German (@dermellor, #131)
- Boostrap v4.5.0
- Minor version bump for webpack, node-sass, and fontawesome

View File

@ -1,4 +1,4 @@
# Hugo Bootstrap v4 Blog [![Build Status](https://travis-ci.org/alanorth/hugo-theme-bootstrap4-blog.svg?branch=master)](https://travis-ci.org/alanorth/hugo-theme-bootstrap4-blog) [![builds.sr.ht status](https://builds.sr.ht/~alanorth/hugo-theme-bootstrap4-blog.svg)](https://builds.sr.ht/~alanorth/hugo-theme-bootstrap4-blog?)
# Hugo Bootstrap v4 Blog [![Build Status](https://ci.mjanja.ch/api/badges/alanorth/hugo-theme-bootstrap4-blog/status.svg)](https://ci.mjanja.ch/alanorth/hugo-theme-bootstrap4-blog) [![builds.sr.ht status](https://builds.sr.ht/~alanorth/hugo-theme-bootstrap4-blog.svg)](https://builds.sr.ht/~alanorth/hugo-theme-bootstrap4-blog?)
A simple but opinionated [Hugo](https://gohugo.io) theme geared towards blog-style content. Based on the older two-column [Bootstrap blog example](https://v4-alpha.getbootstrap.com/examples/blog/) that was used for several Bootstrap versions, but has now been retired in favor of a "snarky" (their words) new example as of version [4.0.0's final release](https://blog.getbootstrap.com/2018/01/18/bootstrap-4/).
![Screenshot](https://raw.githubusercontent.com/alanorth/hugo-theme-bootstrap4-blog/master/screenshot.png "Screenshot")
@ -18,6 +18,7 @@ See [picturingjordan.com](https://picturingjordan.com) for an example of this th
- Allow addition of custom `<head>` code in site's `layouts/partials/head-custom.html` (see [#17](https://github.com/alanorth/hugo-theme-bootstrap4-blog/pull/17))
- Configurable display of summaries of content in list templates.
- Configurable keywords for every post
- Supports automatic generation of `<img>` srcsets for images in [page bundles](https://gohugo.io/content-management/page-bundles/) using a [new figure shortcode](https://cpbotha.net/2020/05/02/drop-in-replacement-for-hugo-figure-shortcode-with-responsive-img-srcset/) (falls back to default Hugo behavior of looking up images in the static directory)
## Usage
Clone the repository to your site's `themes` directory. Refer to [`exampleSite/config.toml`](https://github.com/alanorth/hugo-theme-bootstrap4-blog/blob/master/exampleSite/config.toml) for recommended configuration values.
@ -37,7 +38,7 @@ A few suggestions to help you get a good looking site quickly:
See the source code and structure of [picturingjordan.com](https://github.com/alanorth/picturingjordan.com) to get more ideas.
## Building (For Developers)
This theme uses the [Bootstrap](https://getbootstrap.com/) framework. A static version of this is already included, but if you want to bump the version, tweak the style, etc, you'll need to rebuild the assets. Make sure you have NodeJS >= v10 installed, and then run the following from inside the theme's directory:
This theme uses the [Bootstrap](https://getbootstrap.com/) framework. A static version of this is already included, but if you want to bump the version, tweak the style, etc, you'll need to rebuild the assets. Make sure you have Node.js >= v14 installed, and then run the following from inside the theme's directory:
```console
$ npm install

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

50
i18n/da.yaml Normal file
View File

@ -0,0 +1,50 @@
- id: about
translation: "Om"
- id: home
translation: "Hjem"
- id: recentPosts
translation: "Seneste indlæg"
- id: readMore
translation: "Læs mere"
- id: translations
translation: "Oversættelser"
- id: share
translation: "Del"
- id: paginatorPrevious
translation: "Forrige side"
- id: paginatorNext
translation: "Næste side"
- id: cookieMessage
translation: "Denne hjemmeside anvender cookies."
- id: cookieLink
translation: "Læs mere."
- id: cookieAccept
translation: "OK"
- id: cookieDecline
translation: "Afbryd"
- id: backToTop
translation: "Til toppen"
- id: links
translation: "Links"
- id: authoredBy
translation: "af"
- id: postedIn
translation: "i"
- id: comma
translation: ","

View File

@ -7,18 +7,28 @@
"@type": "BlogPosting",
{{- /* Google recommends the headline be no more than 110 characters */}}
"headline": {{ substr .Title 0 110 }},
{{- with .Params.images -}}{{ range first 1 . }}
{{- with .Params.images -}}{{- range first 1 . -}}
{{/* try to get the image from the page bundle */}}
{{- with $.Page.Resources.GetMatch (printf "*%s*" .) }}
"image": {
"@type": "ImageObject",
"url": {{ . | absURL }}
"url": {{ .Permalink }},
"height": "{{ .Height }}",
"width": "{{ .Width }}"
{{/* otherwise, get the image from static */}}
{{- else }}
"image": {
"@type": "ImageObject",
{{- $image := . -}}
{{- /* Don't try to get imageConfig if image param is not local */ -}}
{{- if not (or (hasPrefix . "http://") (hasPrefix . "https://")) -}}
{{- with (imageConfig (printf "/static/%s" .)) -}}
,
{{- with (imageConfig (printf "/static/%s" .)) }}
"url": {{ $image | absURL }},
"height": "{{ .Height }}",
"width": "{{ .Width }}"
{{- end -}}
{{ end }}
{{- end -}}
{{ end }}
},
{{- end -}}{{ end }}
"url": {{ printf "%s" .Permalink }},

View File

@ -1,8 +1,8 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{{ template "_internal/opengraph.html" . }}
{{ template "_internal/twitter_cards.html" . }}
{{ partial "opengraph.html" . }}
{{ partial "twitter_cards.html" . }}
{{- with .Site.Params.google_verify_meta -}}
<meta name="google-site-verification" content="{{ . }}" />

View File

@ -0,0 +1,73 @@
<!--
Import Hugo's internal twitter_cards.html template to add support for resolving
images in page bundles and with falling back to the default of looking in the
static assets directory.
See: tpl/tplimpl/embedded/templates/opengraph.html
See: https://github.com/gohugoio/hugo/issues/5078
-->
<meta property="og:title" content="{{ .Title }}" />
<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}" />
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" />
<meta property="og:url" content="{{ .Permalink }}" />
{{ with $.Params.images }}{{ range first 6 . -}}
{{/* try to get the image from the page bundle */}}
{{- with $.Page.Resources.GetMatch (printf "*%s*" .) -}}
<meta property="og:image" content="{{ .Permalink }}" />
{{/* otherwise, get the image from /static */}}
{{- else -}}
<meta property="og:image" content="{{ . | absURL }}" />
{{- end }}
{{ end }}{{ else -}}
{{- $images := $.Resources.ByType "image" -}}
{{- $featured := $images.GetMatch "*feature*" -}}
{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}}
{{- with $featured -}}
<meta property="og:image" content="{{ $featured.Permalink }}"/>
{{ else -}}
{{- with $.Site.Params.images -}}
<meta property="og:image" content="{{ index . 0 | absURL }}"/>
{{ end }}{{ end }}{{ end }}
{{- $iso8601 := "2006-01-02T15:04:05-07:00" -}}
{{- if .IsPage }}
{{- if not .PublishDate.IsZero }}<meta property="article:published_time" {{ .PublishDate.Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />
{{ else if not .Date.IsZero }}<meta property="article:published_time" {{ .Date.Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />
{{ end }}
{{- if not .Lastmod.IsZero }}<meta property="article:modified_time" {{ .Lastmod.Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end }}
{{- else }}
{{- if not .Date.IsZero }}<meta property="og:updated_time" {{ .Lastmod.Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />
{{- end }}
{{- end }}{{/* .IsPage */}}
{{- with .Params.audio }}<meta property="og:audio" content="{{ . }}" />{{ end }}
{{- with .Params.locale }}<meta property="og:locale" content="{{ . }}" />{{ end }}
{{- with .Site.Params.title }}<meta property="og:site_name" content="{{ . }}" />{{ end }}
{{- with .Params.videos }}
{{- range . }}
<meta property="og:video" content="{{ . | absURL }}" />
{{ end }}{{ end }}
{{- /* If it is part of a series, link to related articles */}}
{{- $permalink := .Permalink }}
{{- $siteSeries := .Site.Taxonomies.series }}{{ with .Params.series }}
{{- range $name := . }}
{{- $series := index $siteSeries $name }}
{{- range $page := first 6 $series.Pages }}
{{- if ne $page.Permalink $permalink }}<meta property="og:see_also" content="{{ $page.Permalink }}" />{{ end }}
{{- end }}
{{ end }}{{ end }}
{{- if .IsPage }}
{{- range .Site.Authors }}{{ with .Social.facebook }}
<meta property="article:author" content="https://www.facebook.com/{{ . }}" />{{ end }}{{ with .Site.Social.facebook }}
<meta property="article:publisher" content="https://www.facebook.com/{{ . }}" />{{ end }}
<meta property="article:section" content="{{ .Section }}" />
{{- with .Params.tags }}{{ range first 6 . }}
<meta property="article:tag" content="{{ . }}" />{{ end }}{{ end }}
{{- end }}{{ end }}
{{- /* Facebook Page Admin ID for Domain Insights */}}
{{- with .Site.Social.facebook_admin }}<meta property="fb:admins" content="{{ . }}" />{{ end }}

View File

@ -0,0 +1,42 @@
<!--
Import Hugo's internal twitter_cards.html template to add support for resolving
images in page bundles and with falling back to the default of looking in the
static assets directory.
See: tpl/tplimpl/embedded/templates/twitter_cards.html
See: https://github.com/gohugoio/hugo/issues/5078
-->
{{- with $.Params.images -}}
<meta name="twitter:card" content="summary_large_image"/>
{{/* try to get the image from the page bundle */}}
{{- with $.Page.Resources.GetMatch (printf "*%s*" .) -}}
<meta name="twitter:image" content="{{ .Permalink }}"/>
{{- else -}}
<meta name="twitter:image" content="{{ index . 0 | absURL }}"/>
{{- end -}}
{{ else -}}
{{- $images := $.Resources.ByType "image" -}}
{{- $featured := $images.GetMatch "*feature*" -}}
{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}}
{{- with $featured -}}
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="{{ $featured.Permalink }}"/>
{{- else -}}
{{- with $.Site.Params.images -}}
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="{{ index . 0 | absURL }}"/>
{{ else -}}
<meta name="twitter:card" content="summary"/>
{{- end -}}
{{- end -}}
{{- end }}
<meta name="twitter:title" content="{{ .Title }}"/>
<meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}"/>
{{ with .Site.Social.twitter -}}
<meta name="twitter:site" content="@{{ . }}"/>
{{ end -}}
{{ range .Site.Authors }}
{{ with .twitter -}}
<meta name="twitter:creator" content="@{{ . }}"/>
{{ end -}}
{{ end -}}

View File

@ -0,0 +1,92 @@
{{/*
figure with auto-resizing and srcset v2020-11-30
Drop-in replacement for Hugo's figure shortcode as of 2020-05-02 that uses img srcset
to enable browsers to download only the resolution that they need.
The resizing and srcset magic only works for images that are part of the page
bundle. It will fall back to stock Hugo figure behaviour otherwise.
Improvements that were initially out of reach of my Hugo template programming "skills"
but have now been taken care of:
- [x] gracefully handle images that are not in page bundle, i.e. no image processing available
- [x] use a single configurable sizes array, and derive everything from there
See https://cpbotha.net/2020/05/02/drop-in-replacement-for-hugo-figure-shortcode-with-img-srcset-support/
- original srcset img shortcode from: https://laurakalbag.com/processing-responsive-images-with-hugo/
- original hugo figure shortcode from: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/figure.html
- no unnecessary resizes and more nudges by Stéfan van der Walt https://mentat.za.net/
- mashing together and srcset logic fixes by Charl P. Botha https://cpbotha.net/
Changes:
- 2020-11-30 handle images that are rotated 90 degrees (should handle more eventually)
- 2020-05-10 fall back to stock Hugo behaviour when no page bundle found
- 2020-05-04 no unnecessary resizes, sizes in array
- 2020-05-02 initial release
*/}}
{{/* hugo will resize to all of these sizes that are smaller than your original. configure if you like! */}}
{{ $sizes := (slice "480" "800" "1200" "1500") }}
{{/* get file that matches the filename as specified as src="" in shortcode */}}
{{ $src := .Page.Resources.GetMatch (printf "*%s*" (.Get "src")) }}
<figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
{{- if .Get "link" -}}
<a href="{{ .Get "link" }}"{{ with .Get "target" }} target="{{ . }}"{{ end }}{{ with .Get "rel" }} rel="{{ . }}"{{ end }}>
{{- end }}
<img
{{ if $src }}
sizes="(min-width: 35em) 1200px, 100vw"
{{/* only srcset images smaller than or equal to the src (original) image size, as Hugo will upscale small images */}}
srcset='
{{ range $sizes }}
{{ $size := . }}
{{/* https://discourse.gohugo.io/t/image-exif-orientation/22902/7 */}}
{{/* set orientation to 1 just in case it doesnt exist in Exif */}}
{{ $orientation := 1 }}
{{ with $src.Exif }}
{{ $orientation := .Tags.Orientation }}
{{ if and (ge $src.Width $size) (eq $orientation 8) }}
{{ ($src.Resize (printf "%sx r90" $size)).Permalink }} {{ (printf "%sw" $size) }},
{{ else if ge $src.Width $size }}{{ ($src.Resize (printf "%sx" $size)).Permalink }} {{ (printf "%sw" $size) }},{{ end }}
{{ end }}
{{ end }}'
{{/* when no support for srcset (old browsers, RSS), we load small (800px) */}}
{{/* if image smaller than 800, then load the image itself */}}
{{ if ge $src.Width "800" }}src="{{ ($src.Resize "800x").Permalink }}"
{{ else }}src="{{ $src.Permalink }}"
{{ end }}
{{ else }}
{{/* fall back to stock hugo behaviour when image is not available in bundle */}}
src="{{ .Get "src" }}"
{{ end }}
{{- if or (.Get "alt") (.Get "caption") }}
alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify| plainify }}{{ end }}"
{{- end -}}
{{- with .Get "width" }} width="{{ . }}"{{ end -}}
{{- with .Get "height" }} height="{{ . }}"{{ end -}}
/> <!-- Closing img tag -->
{{- if .Get "link" }}</a>{{ end -}}
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
<figcaption>
{{ with (.Get "title") -}}
<h4>{{ . }}</h4>
{{- end -}}
{{- if or (.Get "caption") (.Get "attr") -}}<p>
{{- .Get "caption" | markdownify -}}
{{- with .Get "attrlink" }}
<a href="{{ . }}">
{{- end -}}
{{- .Get "attr" | markdownify -}}
{{- if .Get "attrlink" }}</a>{{ end }}</p>
{{- end }}
</figcaption>
{{- end }}
</figure>

6193
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +1,31 @@
{
"name": "hugo-theme-bootstrap4-blog",
"version": "1.5.1",
"version": "1.6.0",
"description": "A Bootstrap v4 theme for the Hugo static site generator.",
"repository": {
"type": "git",
"url": "https://github.com/alanorth/hugo-theme-bootstrap4-blog.git"
},
"scripts": {
"build:css": "node-sass --output-style expanded --precision 6 source/scss/style.scss assets/css/style.css.tmp && cleancss --level 1 assets/css/style.css.tmp -o assets/css/style.css",
"build:rtlcss": "rtlcss -s assets/css/style.css.tmp assets/css/style.rtl.css.tmp && cleancss --level 1 assets/css/style.rtl.css.tmp -o assets/css/style.rtl.css",
"build:css": "sass --style expanded source/scss/style.scss assets/css/style.css.tmp && cleancss -O1 assets/css/style.css.tmp -o assets/css/style.css",
"build:rtlcss": "rtlcss -s assets/css/style.css.tmp assets/css/style.rtl.css.tmp && cleancss -O1 assets/css/style.rtl.css.tmp -o assets/css/style.rtl.css",
"build:cookieconsent": "cp node_modules/@chiiya/haven/dist/haven.umd.min.js assets/js",
"build:js": "webpack",
"build": "npm run build:css && npm run build:rtlcss && npm run build:js && npm run build:cookieconsent && npm run clean",
"clean": "rm assets/css/style.css.tmp assets/css/style.rtl.css.tmp"
"clean": "rm assets/css/style.css.tmp assets/css/style.css.tmp.map assets/css/style.rtl.css.tmp"
},
"keywords": "hugo",
"author": "Alan Orth",
"license": "CC-BY-3.0",
"devDependencies": {
"@chiiya/haven": "^0.6.0",
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-brands-svg-icons": "^5.15.1",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"bootstrap": "^4.5.3",
"clean-css-cli": "^4.3.0",
"node-sass": "^5.0.0",
"rtlcss": "^2.6.1",
"webpack": "^5.4.0",
"webpack-cli": "^3.3.12"
"@chiiya/haven": "^0.7.0",
"@fortawesome/fontawesome-svg-core": "^1.2.34",
"@fortawesome/free-brands-svg-icons": "^5.15.2",
"@fortawesome/free-solid-svg-icons": "^5.15.2",
"bootstrap": "^4.6.0",
"clean-css-cli": "^5.4.1",
"rtlcss": "^3.3.0",
"sass": "^1.43.2",
"webpack-cli": "^4.9.1"
}
}

View File

@ -1,44 +1,44 @@
/*!
* Bootstrap v4.5.3 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Bootstrap v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@import "node_modules/bootstrap/scss/functions";
@import "node_modules/bootstrap/scss/variables";
@import "node_modules/bootstrap/scss/mixins";
//@import "node_modules/bootstrap/scss/root";
@import "node_modules/bootstrap/scss/reboot";
@import "node_modules/bootstrap/scss/type";
@import "node_modules/bootstrap/scss/images";
@import "node_modules/bootstrap/scss/code";
@import "node_modules/bootstrap/scss/grid";
//@import "node_modules/bootstrap/scss/tables";
@import "node_modules/bootstrap/scss/forms";
@import "node_modules/bootstrap/scss/buttons";
//@import "node_modules/bootstrap/scss/transitions";
//@import "node_modules/bootstrap/scss/dropdown";
//@import "node_modules/bootstrap/scss/button-group";
//@import "node_modules/bootstrap/scss/input-group";
//@import "node_modules/bootstrap/scss/custom-forms";
@import "node_modules/bootstrap/scss/nav";
@import "node_modules/bootstrap/scss/navbar";
//@import "node_modules/bootstrap/scss/card";
//@import "node_modules/bootstrap/scss/breadcrumb";
@import "node_modules/bootstrap/scss/pagination";
//@import "node_modules/bootstrap/scss/badge";
//@import "node_modules/bootstrap/scss/jumbotron";
//@import "node_modules/bootstrap/scss/alert";
//@import "node_modules/bootstrap/scss/progress";
//@import "node_modules/bootstrap/scss/media";
//@import "node_modules/bootstrap/scss/list-group";
//@import "node_modules/bootstrap/scss/close";
//@import "node_modules/bootstrap/scss/toasts";
//@import "node_modules/bootstrap/scss/modal";
//@import "node_modules/bootstrap/scss/tooltip";
//@import "node_modules/bootstrap/scss/popover";
//@import "node_modules/bootstrap/scss/carousel";
//@import "node_modules/bootstrap/scss/spinners";
@import "node_modules/bootstrap/scss/utilities";
@import "node_modules/bootstrap/scss/print";
@import "../../node_modules/bootstrap/scss/functions";
@import "../../node_modules/bootstrap/scss/variables";
@import "../../node_modules/bootstrap/scss/mixins";
@import "../../node_modules/bootstrap/scss/root";
@import "../../node_modules/bootstrap/scss/reboot";
@import "../../node_modules/bootstrap/scss/type";
@import "../../node_modules/bootstrap/scss/images";
@import "../../node_modules/bootstrap/scss/code";
@import "../../node_modules/bootstrap/scss/grid";
@import "../../node_modules/bootstrap/scss/tables";
@import "../../node_modules/bootstrap/scss/forms";
@import "../../node_modules/bootstrap/scss/buttons";
//@import "../../node_modules/bootstrap/scss/transitions";
//@import "../../node_modules/bootstrap/scss/dropdown";
//@import "../../node_modules/bootstrap/scss/button-group";
//@import "../../node_modules/bootstrap/scss/input-group";
//@import "../../node_modules/bootstrap/scss/custom-forms";
@import "../../node_modules/bootstrap/scss/nav";
@import "../../node_modules/bootstrap/scss/navbar";
//@import "../../node_modules/bootstrap/scss/card";
//@import "../../node_modules/bootstrap/scss/breadcrumb";
@import "../../node_modules/bootstrap/scss/pagination";
//@import "../../node_modules/bootstrap/scss/badge";
//@import "../../node_modules/bootstrap/scss/jumbotron";
//@import "../../node_modules/bootstrap/scss/alert";
//@import "../../node_modules/bootstrap/scss/progress";
//@import "../../node_modules/bootstrap/scss/media";
//@import "../../node_modules/bootstrap/scss/list-group";
//@import "../../node_modules/bootstrap/scss/close";
//@import "../../node_modules/bootstrap/scss/toasts";
//@import "../../node_modules/bootstrap/scss/modal";
//@import "../../node_modules/bootstrap/scss/tooltip";
//@import "../../node_modules/bootstrap/scss/popover";
//@import "../../node_modules/bootstrap/scss/carousel";
//@import "../../node_modules/bootstrap/scss/spinners";
@import "../../node_modules/bootstrap/scss/utilities";
@import "../../node_modules/bootstrap/scss/print";

View File

@ -1,6 +1,6 @@
// selectively import components we need from bootstrap
// see: node_modules/bootstrap/scss/bootstrap.scss
@import 'source/scss/bootstrap';
@import 'bootstrap';
// local style overrides
@import 'source/scss/main';
@import 'main';

View File

@ -3,6 +3,7 @@ license = "CC-BY-3.0"
licenselink = "https://github.com/alanorth/hugo-theme-bootstrap4-blog/blob/master/LICENSE.txt"
description = "A simple Hugo theme based on the Bootstrap v4 blog example."
homepage = "https://github.com/alanorth/hugo-theme-bootstrap4-blog"
demosite = "https://picturingjordan.com"
tags = ["bootstrap", "blog", "font awesome"]
features = ["responsive", "blog"]
min_version = 0.55