mirror of
				https://github.com/alanorth/hugo-theme-bootstrap4-blog.git
				synced 2025-11-03 20:59:08 +01:00 
			
		
		
		
	Compare commits
	
		
			21 Commits
		
	
	
		
			v1.5.1
			...
			d24e709cd3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						d24e709cd3
	
				 | 
					
					
						|||
| 
						
						
							
						
						6c30836cc9
	
				 | 
					
					
						|||
| 
						
						
							
						
						ddd2836905
	
				 | 
					
					
						|||
| 
						
						
							
						
						f3a5cf6630
	
				 | 
					
					
						|||
| 
						
						
							
						
						1876747063
	
				 | 
					
					
						|||
| 
						
						
							
						
						96d6304f09
	
				 | 
					
					
						|||
| 
						
						
							
						
						e0c8b5a057
	
				 | 
					
					
						|||
| 
						
						
							
						
						d6ab3cda0a
	
				 | 
					
					
						|||
| 
						
						
							
						
						e1dfe242a6
	
				 | 
					
					
						|||
| 
						
						
							
						
						bfac136c3e
	
				 | 
					
					
						|||
| 
						
						
							
						
						4a922d8657
	
				 | 
					
					
						|||
| 
						
						
							
						
						94269648d6
	
				 | 
					
					
						|||
| 
						
						
							
						
						3fc531eb66
	
				 | 
					
					
						|||
| 
						
						
							
						
						82362818a1
	
				 | 
					
					
						|||
| 
						
						
							
						
						54f85c3beb
	
				 | 
					
					
						|||
| 
						
						
							
						
						c6498a4bfb
	
				 | 
					
					
						|||
| 
						
						
							
						
						147ee8cf76
	
				 | 
					
					
						|||
| 
						
						
							
						
						cb81c7818d
	
				 | 
					
					
						|||
| 
						
						
							
						
						37e48b1e28
	
				 | 
					
					
						|||
| 
						
						
							
						
						39a9a8fd2a
	
				 | 
					
					
						|||
| 
						
						
							
						
						64d62a9179
	
				 | 
					
					
						
							
								
								
									
										34
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					kind: pipeline
 | 
				
			||||||
 | 
					type: docker
 | 
				
			||||||
 | 
					name: node10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					steps:
 | 
				
			||||||
 | 
					- name: build
 | 
				
			||||||
 | 
					  image: node:10-alpine
 | 
				
			||||||
 | 
					  commands:
 | 
				
			||||||
 | 
					  - npm install
 | 
				
			||||||
 | 
					  - npm run build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					kind: pipeline
 | 
				
			||||||
 | 
					type: docker
 | 
				
			||||||
 | 
					name: node12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					steps:
 | 
				
			||||||
 | 
					- name: build
 | 
				
			||||||
 | 
					  image: node:12-alpine
 | 
				
			||||||
 | 
					  commands:
 | 
				
			||||||
 | 
					  - npm install
 | 
				
			||||||
 | 
					  - npm run build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					kind: pipeline
 | 
				
			||||||
 | 
					type: docker
 | 
				
			||||||
 | 
					name: node14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					steps:
 | 
				
			||||||
 | 
					- name: build
 | 
				
			||||||
 | 
					  image: node:14-alpine
 | 
				
			||||||
 | 
					  commands:
 | 
				
			||||||
 | 
					  - npm install
 | 
				
			||||||
 | 
					  - npm run build
 | 
				
			||||||
							
								
								
									
										10
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -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
 | 
					 | 
				
			||||||
@@ -4,6 +4,15 @@ 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/),
 | 
					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).
 | 
					and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Unreleased Changes
 | 
				
			||||||
 | 
					### Updated
 | 
				
			||||||
 | 
					- Bootstrap v4.6.0, webpack v5.16.0, haven 0.6.2, etc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [[ 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
 | 
					## [[1.5.1]] - 2020-11-15
 | 
				
			||||||
### Updated
 | 
					### Updated
 | 
				
			||||||
- Minor version bump for bootstrap, node-sass, and fontawesome
 | 
					- Minor version bump for bootstrap, node-sass, and fontawesome
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
# Hugo Bootstrap v4 Blog [](https://travis-ci.org/alanorth/hugo-theme-bootstrap4-blog) [](https://builds.sr.ht/~alanorth/hugo-theme-bootstrap4-blog?)
 | 
					# Hugo Bootstrap v4 Blog [](https://ci.mjanja.ch/alanorth/hugo-theme-bootstrap4-blog) [](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/).
 | 
					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/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
@@ -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))
 | 
					- 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 display of summaries of content in list templates.
 | 
				
			||||||
- Configurable keywords for every post
 | 
					- 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
 | 
					## 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.
 | 
					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.
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								assets/js/fontawesome.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								assets/js/fontawesome.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										6
									
								
								assets/js/haven.umd.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								assets/js/haven.umd.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -7,16 +7,26 @@
 | 
				
			|||||||
  "@type": "BlogPosting",
 | 
					  "@type": "BlogPosting",
 | 
				
			||||||
  {{- /* Google recommends the headline be no more than 110 characters */}}
 | 
					  {{- /* Google recommends the headline be no more than 110 characters */}}
 | 
				
			||||||
  "headline": {{ substr .Title 0 110 }},
 | 
					  "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": {
 | 
					  "image": {
 | 
				
			||||||
    "@type": "ImageObject",
 | 
					    "@type": "ImageObject",
 | 
				
			||||||
    "url": {{ . | absURL }}
 | 
					    "url": {{ .Permalink }},
 | 
				
			||||||
    {{- /* Don't try to get imageConfig if image param is not local */ -}}
 | 
					 | 
				
			||||||
    {{- if not (or (hasPrefix . "http://") (hasPrefix . "https://")) -}}
 | 
					 | 
				
			||||||
    {{- with (imageConfig (printf "/static/%s" .)) -}}
 | 
					 | 
				
			||||||
    ,
 | 
					 | 
				
			||||||
    "height": "{{ .Height }}",
 | 
					    "height": "{{ .Height }}",
 | 
				
			||||||
    "width": "{{ .Width }}"
 | 
					    "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" .)) }}
 | 
				
			||||||
 | 
					    "url": {{ $image | absURL }},
 | 
				
			||||||
 | 
					    "height": "{{ .Height }}",
 | 
				
			||||||
 | 
					    "width": "{{ .Width }}"
 | 
				
			||||||
 | 
					    {{- end -}}
 | 
				
			||||||
    {{- end -}}
 | 
					    {{- end -}}
 | 
				
			||||||
  {{ end }}
 | 
					  {{ end }}
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
<meta charset="utf-8">
 | 
					<meta charset="utf-8">
 | 
				
			||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 | 
					<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{ template "_internal/opengraph.html" . }}
 | 
					{{ partial "opengraph.html" . }}
 | 
				
			||||||
{{ template "_internal/twitter_cards.html" . }}
 | 
					{{ partial "twitter_cards.html" . }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{- with .Site.Params.google_verify_meta -}}
 | 
					{{- with .Site.Params.google_verify_meta -}}
 | 
				
			||||||
<meta name="google-site-verification" content="{{ . }}" />
 | 
					<meta name="google-site-verification" content="{{ . }}" />
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										73
									
								
								layouts/partials/opengraph.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								layouts/partials/opengraph.html
									
									
									
									
									
										Normal 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 }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										42
									
								
								layouts/partials/twitter_cards.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								layouts/partials/twitter_cards.html
									
									
									
									
									
										Normal 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 -}}
 | 
				
			||||||
							
								
								
									
										92
									
								
								layouts/shortcodes/figure.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								layouts/shortcodes/figure.html
									
									
									
									
									
										Normal 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>
 | 
				
			||||||
							
								
								
									
										1770
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1770
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										22
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								package.json
									
									
									
									
									
								
							@@ -1,32 +1,32 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "hugo-theme-bootstrap4-blog",
 | 
					  "name": "hugo-theme-bootstrap4-blog",
 | 
				
			||||||
  "version": "1.5.1",
 | 
					  "version": "1.6.0",
 | 
				
			||||||
  "description": "A Bootstrap v4 theme for the Hugo static site generator.",
 | 
					  "description": "A Bootstrap v4 theme for the Hugo static site generator.",
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
    "type": "git",
 | 
					    "type": "git",
 | 
				
			||||||
    "url": "https://github.com/alanorth/hugo-theme-bootstrap4-blog.git"
 | 
					    "url": "https://github.com/alanorth/hugo-theme-bootstrap4-blog.git"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "scripts": {
 | 
					  "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:css": "sass --style expanded 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: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:cookieconsent": "cp node_modules/@chiiya/haven/dist/haven.umd.min.js assets/js",
 | 
					    "build:cookieconsent": "cp node_modules/@chiiya/haven/dist/haven.umd.min.js assets/js",
 | 
				
			||||||
    "build:js": "webpack",
 | 
					    "build:js": "webpack",
 | 
				
			||||||
    "build": "npm run build:css && npm run build:rtlcss && npm run build:js && npm run build:cookieconsent && npm run clean",
 | 
					    "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",
 | 
					  "keywords": "hugo",
 | 
				
			||||||
  "author": "Alan Orth",
 | 
					  "author": "Alan Orth",
 | 
				
			||||||
  "license": "CC-BY-3.0",
 | 
					  "license": "CC-BY-3.0",
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@chiiya/haven": "^0.6.0",
 | 
					    "@chiiya/haven": "^0.6.2",
 | 
				
			||||||
    "@fortawesome/fontawesome-svg-core": "^1.2.32",
 | 
					    "@fortawesome/fontawesome-svg-core": "^1.2.34",
 | 
				
			||||||
    "@fortawesome/free-brands-svg-icons": "^5.15.1",
 | 
					    "@fortawesome/free-brands-svg-icons": "^5.15.2",
 | 
				
			||||||
    "@fortawesome/free-solid-svg-icons": "^5.15.1",
 | 
					    "@fortawesome/free-solid-svg-icons": "^5.15.2",
 | 
				
			||||||
    "bootstrap": "^4.5.3",
 | 
					    "bootstrap": "^4.6.0",
 | 
				
			||||||
    "clean-css-cli": "^4.3.0",
 | 
					    "clean-css-cli": "^4.3.0",
 | 
				
			||||||
    "node-sass": "^5.0.0",
 | 
					    "rtlcss": "^2.6.2",
 | 
				
			||||||
    "rtlcss": "^2.6.1",
 | 
					    "sass": "^1.32.4",
 | 
				
			||||||
    "webpack": "^5.4.0",
 | 
					    "webpack": "^5.16.0",
 | 
				
			||||||
    "webpack-cli": "^3.3.12"
 | 
					    "webpack-cli": "^3.3.12"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										82
									
								
								source/scss/bootstrap.scss
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										82
									
								
								source/scss/bootstrap.scss
									
									
									
									
										vendored
									
									
								
							@@ -1,44 +1,44 @@
 | 
				
			|||||||
/*!
 | 
					/*!
 | 
				
			||||||
 * Bootstrap v4.5.3 (https://getbootstrap.com/)
 | 
					 * Bootstrap v4.6.0 (https://getbootstrap.com/)
 | 
				
			||||||
 * Copyright 2011-2020 The Bootstrap Authors
 | 
					 * Copyright 2011-2021 The Bootstrap Authors
 | 
				
			||||||
 * Copyright 2011-2020 Twitter, Inc.
 | 
					 * Copyright 2011-2021 Twitter, Inc.
 | 
				
			||||||
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 | 
					 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@import "node_modules/bootstrap/scss/functions";
 | 
					@import "../../node_modules/bootstrap/scss/functions";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/variables";
 | 
					@import "../../node_modules/bootstrap/scss/variables";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/mixins";
 | 
					@import "../../node_modules/bootstrap/scss/mixins";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/root";
 | 
					@import "../../node_modules/bootstrap/scss/root";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/reboot";
 | 
					@import "../../node_modules/bootstrap/scss/reboot";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/type";
 | 
					@import "../../node_modules/bootstrap/scss/type";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/images";
 | 
					@import "../../node_modules/bootstrap/scss/images";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/code";
 | 
					@import "../../node_modules/bootstrap/scss/code";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/grid";
 | 
					@import "../../node_modules/bootstrap/scss/grid";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/tables";
 | 
					//@import "../../node_modules/bootstrap/scss/tables";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/forms";
 | 
					@import "../../node_modules/bootstrap/scss/forms";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/buttons";
 | 
					@import "../../node_modules/bootstrap/scss/buttons";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/transitions";
 | 
					//@import "../../node_modules/bootstrap/scss/transitions";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/dropdown";
 | 
					//@import "../../node_modules/bootstrap/scss/dropdown";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/button-group";
 | 
					//@import "../../node_modules/bootstrap/scss/button-group";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/input-group";
 | 
					//@import "../../node_modules/bootstrap/scss/input-group";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/custom-forms";
 | 
					//@import "../../node_modules/bootstrap/scss/custom-forms";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/nav";
 | 
					@import "../../node_modules/bootstrap/scss/nav";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/navbar";
 | 
					@import "../../node_modules/bootstrap/scss/navbar";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/card";
 | 
					//@import "../../node_modules/bootstrap/scss/card";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/breadcrumb";
 | 
					//@import "../../node_modules/bootstrap/scss/breadcrumb";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/pagination";
 | 
					@import "../../node_modules/bootstrap/scss/pagination";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/badge";
 | 
					//@import "../../node_modules/bootstrap/scss/badge";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/jumbotron";
 | 
					//@import "../../node_modules/bootstrap/scss/jumbotron";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/alert";
 | 
					//@import "../../node_modules/bootstrap/scss/alert";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/progress";
 | 
					//@import "../../node_modules/bootstrap/scss/progress";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/media";
 | 
					//@import "../../node_modules/bootstrap/scss/media";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/list-group";
 | 
					//@import "../../node_modules/bootstrap/scss/list-group";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/close";
 | 
					//@import "../../node_modules/bootstrap/scss/close";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/toasts";
 | 
					//@import "../../node_modules/bootstrap/scss/toasts";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/modal";
 | 
					//@import "../../node_modules/bootstrap/scss/modal";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/tooltip";
 | 
					//@import "../../node_modules/bootstrap/scss/tooltip";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/popover";
 | 
					//@import "../../node_modules/bootstrap/scss/popover";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/carousel";
 | 
					//@import "../../node_modules/bootstrap/scss/carousel";
 | 
				
			||||||
//@import "node_modules/bootstrap/scss/spinners";
 | 
					//@import "../../node_modules/bootstrap/scss/spinners";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/utilities";
 | 
					@import "../../node_modules/bootstrap/scss/utilities";
 | 
				
			||||||
@import "node_modules/bootstrap/scss/print";
 | 
					@import "../../node_modules/bootstrap/scss/print";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
// selectively import components we need from bootstrap
 | 
					// selectively import components we need from bootstrap
 | 
				
			||||||
// see: node_modules/bootstrap/scss/bootstrap.scss
 | 
					// see: node_modules/bootstrap/scss/bootstrap.scss
 | 
				
			||||||
@import 'source/scss/bootstrap';
 | 
					@import 'bootstrap';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// local style overrides
 | 
					// local style overrides
 | 
				
			||||||
@import 'source/scss/main';
 | 
					@import 'main';
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user