Refactor all the figures
There are two main sizes of figures: fullwidth and small. Full width figures take the full content width. Usually they spread into the "wide" content area too. Main size figures are also full width figures, but they stop at the edges of the main content area. Small figures shrink to fit and are generally 480pts wide. Break all these different types of figures down into separate templates for each variant. Add the ability for resources to specify a "source" with a link and title.
This commit is contained in:
		
							parent
							
								
									d81f2a107c
								
							
						
					
					
						commit
						502aa408d9
					
				
					 10 changed files with 153 additions and 12 deletions
				
			
		|  | @ -106,7 +106,7 @@ body { | |||
|   grid-column: main-start / main-end; | ||||
| } | ||||
| 
 | ||||
| .content > :is(.figure--image, .codeblock) { | ||||
| .content > .codeblock) { | ||||
|   grid-column: wide-gutter-start / wide-gutter-end; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,16 +12,7 @@ | |||
|   display: grid; | ||||
|   grid-template-columns: subgrid; | ||||
| 
 | ||||
|   .figure__container { | ||||
|     align-items: center; | ||||
|     display: flex; | ||||
|     gap: var(--body-item-spacing); | ||||
|     grid-column: wide-gutter-start / wide-gutter-end; | ||||
|     justify-content: center; | ||||
|     min-width: fit-content; | ||||
|   } | ||||
| 
 | ||||
|   &:has(> img:only-child, .figure__container > img:only-child) { | ||||
|   &:has(> img:only-child, .figure__container:only-child > img:only-child) { | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|   } | ||||
|  | @ -46,6 +37,26 @@ | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| .figure--image img, | ||||
| .figure--video video | ||||
| { | ||||
|   grid-column: wide-gutter-start / wide-gutter-end; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| .figure--small { | ||||
|   align-items: center; | ||||
|   display: flex; | ||||
|   grid-column: main-start / main-end; | ||||
|   justify-content: center; | ||||
|   min-width: fit-content; | ||||
| 
 | ||||
|   img { | ||||
|     width: 480px; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| .figure--main-column { | ||||
|   grid-column: main-start / main-end; | ||||
| } | ||||
|  | @ -56,6 +67,11 @@ | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| .figure--video video { | ||||
|   width: 100%; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| .figure--youtube { | ||||
|   grid-column: wide-gutter-start / wide-gutter-end; | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,10 +5,15 @@ draftYes: "YES" | |||
| draftNo: "NO" | ||||
| 
 | ||||
| home: Home | ||||
| tableOfContents: Table of Contents | ||||
| 
 | ||||
| instagram: Instagram | ||||
| 
 | ||||
| # Title of section of a list page where years older than | ||||
| # .Site.Params.blog.yearLimit are collapsed into a bulleted list. | ||||
| olderPagesSectionTitle: Older | ||||
| 
 | ||||
| source: Source | ||||
| 
 | ||||
| tableOfContents: Table of Contents | ||||
| 
 | ||||
| yearsTagTitle: Years | ||||
|  |  | |||
							
								
								
									
										6
									
								
								layouts/partials/page/figures/caption.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								layouts/partials/page/figures/caption.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| <figcaption> | ||||
|   {{ .resource.Title | markdownify }} | ||||
|   {{ with .resource.Params.source -}} | ||||
|     {{ partial "page/figures/resource-source.html" . }} | ||||
|   {{- end -}} | ||||
| </figcaption> | ||||
							
								
								
									
										30
									
								
								layouts/partials/page/figures/fullwidth-image.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								layouts/partials/page/figures/fullwidth-image.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| {{- $image := .resource -}} | ||||
| 
 | ||||
| {{- | ||||
|   $resizedImages := dict | ||||
|     "full"    ($image.Fit "2560x2560") | ||||
|     "half"    ($image.Fit "1280x1280") | ||||
|     "quarter" ($image.Fit "640x640") | ||||
| -}} | ||||
| 
 | ||||
| <figure class="figure  figure--image | ||||
|   {{- if eq .size "main" }}figure--main-column{{ end }}"> | ||||
|   {{ if .linksToFullSizeImage -}} | ||||
|     <a href="{{ $image.RelPermalink }}"> | ||||
|   {{- end -}} | ||||
|     <img | ||||
|       src="{{ (index $resizedImages "full").RelPermalink }}" | ||||
|       srcset=" | ||||
|         {{ (index $resizedImages "full").RelPermalink }} 2560w, | ||||
|         {{ (index $resizedImages "half").RelPermalink }} 1280w, | ||||
|         {{ (index $resizedImages "quarter").RelPermalink }} 640w, | ||||
|       " | ||||
|       {{ with $image.Params.alt | default $image.Title }} alt="{{ . }}"{{ end }} | ||||
|       {{ with $image.Title }} title="{{ . }}"{{ end }}> | ||||
|   {{ if .linksToFullSizeImage -}} | ||||
|     </a> | ||||
|   {{- end -}} | ||||
|   {{ if .shouldShowTitle }} | ||||
|     {{ partial "page/figures/caption.html" . }} | ||||
|   {{ end }} | ||||
| </figure> | ||||
							
								
								
									
										10
									
								
								layouts/partials/page/figures/fullwidth-video.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								layouts/partials/page/figures/fullwidth-video.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| {{- $video := .resource -}} | ||||
| 
 | ||||
| <figure class="figure  figure--video"> | ||||
|   <video controls> | ||||
|     <source src="{{ $video.RelPermalink }}" type="{{ $video.MediaType.Type }}"> | ||||
|   </video> | ||||
|   {{ if .shouldShowTitle }} | ||||
|     {{ partial "page/figures/caption.html" . }} | ||||
|   {{ end }} | ||||
| </figure> | ||||
							
								
								
									
										14
									
								
								layouts/partials/page/figures/fullwidth.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								layouts/partials/page/figures/fullwidth.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| {{- $page := .page -}} | ||||
| 
 | ||||
| {{- $shouldShowTitle := .shouldShowTitle -}} | ||||
| 
 | ||||
| {{- $resource := $page.Resources.GetMatch .name -}} | ||||
| {{- if not $resource }} | ||||
|   {{ errorf "No resource named '%s'. %s" .name .page.Permalink }} | ||||
| {{ end -}} | ||||
| 
 | ||||
| {{- if eq $resource.ResourceType "image" -}} | ||||
|   {{ partial "page/figures/fullwidth-image.html" (merge . (dict "resource" $resource))  }} | ||||
| {{- else if eq $resource.ResourceType "video" -}} | ||||
|   {{ partial "page/figures/fullwidth-video.html" (merge . (dict "resource" $resource)) }} | ||||
| {{- end -}} | ||||
							
								
								
									
										19
									
								
								layouts/partials/page/figures/resource-source.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								layouts/partials/page/figures/resource-source.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| <span class="figure__source"> | ||||
|   {{ if and .title .url }} | ||||
|     {{ i18n "source" }}: <a href="{{ .url }}">{{ .title }}</a>. | ||||
|   {{ else if .title }} | ||||
|     {{ .title }} | ||||
|   {{ else }} | ||||
|     {{ $sourceTitle := "" }} | ||||
|     {{ $parsedURL := urls.Parse .url }} | ||||
|     {{ if strings.Contains $parsedURL.Hostname "instagram.com" }} | ||||
|       {{ $sourceTitle = i18n "instagram" }} | ||||
|     {{ end }} | ||||
| 
 | ||||
|     {{ if gt (len $sourceTitle) 0 }} | ||||
|       {{ i18n "source" }}: <a href="{{ .url }}">{{ $sourceTitle }}</a> | ||||
|     {{ else }} | ||||
|       <a href="{{ .url }}">{{ i18n "source" }}</a> | ||||
|     {{ end }} | ||||
|   {{ end }} | ||||
| </span> | ||||
							
								
								
									
										29
									
								
								layouts/partials/page/figures/small-image.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								layouts/partials/page/figures/small-image.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| {{- $image := .resource -}} | ||||
| 
 | ||||
| {{- | ||||
|   $resizedImages := dict | ||||
|     "2x" ($image.Fit "960x960") | ||||
|     "1x" ($image.Fit "480x480") | ||||
| -}} | ||||
| 
 | ||||
| <figure class="figure  figure--image  figure--small"> | ||||
|   <div class="figure__container"> | ||||
|     {{ if .linksToFullSizeImage -}} | ||||
|       <a href="{{ $image.RelPermalink }}"> | ||||
|     {{- end -}} | ||||
|       <img | ||||
|         src="{{ (index $resizedImages "2x").RelPermalink }}" | ||||
|         srcset=" | ||||
|           {{ (index $resizedImages "2x").RelPermalink }} 960w, | ||||
|           {{ (index $resizedImages "1x").RelPermalink }} 480w, | ||||
|         " | ||||
|         {{ with $image.Params.alt | default $image.Title }} alt="{{ . }}"{{ end }} | ||||
|         {{ with $image.Title }} title="{{ . }}"{{ end }}> | ||||
|     {{ if .linksToFullSizeImage -}} | ||||
|       </a> | ||||
|     {{- end -}} | ||||
|     {{ if .shouldShowTitle }} | ||||
|       {{ partial "page/figures/caption.html" . }} | ||||
|     {{ end }} | ||||
|   </div> | ||||
| </figure> | ||||
							
								
								
									
										12
									
								
								layouts/partials/page/figures/small.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								layouts/partials/page/figures/small.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| {{- $page := .page -}} | ||||
| 
 | ||||
| {{- $shouldShowTitle := .shouldShowTitle -}} | ||||
| 
 | ||||
| {{- $resource := $page.Resources.GetMatch .name -}} | ||||
| {{- if not $resource }} | ||||
|   {{ errorf "No resource named '%s'. %s" .name .page.Permalink }} | ||||
| {{ end -}} | ||||
| 
 | ||||
| {{- if eq $resource.ResourceType "image" -}} | ||||
|   {{ partial "page/figures/small-image.html" (merge . (dict "resource" $resource))  }} | ||||
| {{- end -}} | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue