mirror of
				https://github.com/Wonderfall/hugo-WonderMod.git
				synced 2025-10-30 11:25:26 +01:00 
			
		
		
		
	toc: add toc partial [newer impl]
* gets toc fixed Signed-off-by: Aditya Telange <21258296+adityatelange@users.noreply.github.com>
This commit is contained in:
		 Allan Chain
					Allan Chain
				
			
				
					committed by
					
						 Aditya Telange
						Aditya Telange
					
				
			
			
				
	
			
			
			 Aditya Telange
						Aditya Telange
					
				
			
						parent
						
							7820730b04
						
					
				
				
					commit
					43d1c68ef4
				
			
							
								
								
									
										84
									
								
								layouts/partials/toc.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								layouts/partials/toc.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | |||||||
|  | {{- $headers := findRE "<h[1-4].*?>(.|\n])+?</h[1-4]>" .Content -}} | ||||||
|  | {{- $has_headers := ge (len $headers) 1 -}} | ||||||
|  | {{- if $has_headers -}} | ||||||
|  |  | ||||||
|  | {{- $largest := 6 -}} | ||||||
|  | {{- range $headers -}} | ||||||
|  | {{- $headerLevel := index (findRE "[1-4]" . 1) 0 -}} | ||||||
|  | {{- $headerLevel := len (seq $headerLevel) -}} | ||||||
|  | {{- if lt $headerLevel $largest -}} | ||||||
|  | {{- $largest = $headerLevel -}} | ||||||
|  | {{- end -}} | ||||||
|  | {{- end -}} | ||||||
|  |  | ||||||
|  | {{- $firstHeaderLevel := len (seq (index (findRE "[1-4]" (index $headers 0) 1) 0)) -}} | ||||||
|  |  | ||||||
|  | {{- $.Scratch.Set "bareul" slice -}} | ||||||
|  | <ul> | ||||||
|  |     {{- range seq (sub $firstHeaderLevel $largest) -}} | ||||||
|  |     <ul> | ||||||
|  |         {{- $.Scratch.Add "bareul" (sub (add $largest .) 1) -}} | ||||||
|  |         {{- end -}} | ||||||
|  |         {{- range $i, $header := $headers -}} | ||||||
|  |         {{- $headerLevel := index (findRE "[1-4]" . 1) 0 -}} | ||||||
|  |         {{- $headerLevel := len (seq $headerLevel) -}} | ||||||
|  |  | ||||||
|  |         {{/* get id="xyz" */}} | ||||||
|  |         {{ $id := index (findRE "(id=\"(.*?)\")" $header 9) 0 }} | ||||||
|  |  | ||||||
|  |         {{/* strip id="" to leave xyz (no way to get regex capturing groups in hugo :( */}} | ||||||
|  |         {{ $cleanedID := replace (replace $id "id=\"" "") "\"" "" }} | ||||||
|  |         {{- $header := replaceRE "<h[1-4].*?>((.|\n])+?)</h[1-4]>" "$1" $header -}} | ||||||
|  |  | ||||||
|  |         {{- if ne $i 0 -}} | ||||||
|  |         {{- $prevHeaderLevel := index (findRE "[1-4]" (index $headers (sub $i 1)) 1) 0 -}} | ||||||
|  |         {{- $prevHeaderLevel := len (seq $prevHeaderLevel) -}} | ||||||
|  |         {{- if gt $headerLevel $prevHeaderLevel -}} | ||||||
|  |         {{- range seq $prevHeaderLevel (sub $headerLevel 1) -}} | ||||||
|  |         <ul> | ||||||
|  |             {{/* the first should not be recorded */}} | ||||||
|  |             {{- if ne $prevHeaderLevel . -}} | ||||||
|  |             {{- $.Scratch.Add "bareul" . -}} | ||||||
|  |             {{- end -}} | ||||||
|  |             {{- end -}} | ||||||
|  |             {{- else -}} | ||||||
|  |             </li> | ||||||
|  |             {{- if lt $headerLevel $prevHeaderLevel -}} | ||||||
|  |             {{- range seq (sub $prevHeaderLevel 1) -1 $headerLevel -}} | ||||||
|  |             {{- if in ($.Scratch.Get "bareul") . -}} | ||||||
|  |         </ul> | ||||||
|  |         {{/* manually do pop item */}} | ||||||
|  |         {{- $tmp := $.Scratch.Get "bareul" -}} | ||||||
|  |         {{- $.Scratch.Delete "bareul" -}} | ||||||
|  |         {{- $.Scratch.Set "bareul" slice}} | ||||||
|  |         {{- range seq (sub (len $tmp) 1) -}} | ||||||
|  |         {{- $.Scratch.Add "bareul" (index $tmp (sub . 1)) -}} | ||||||
|  |         {{- end -}} | ||||||
|  |         {{- else -}} | ||||||
|  |     </ul> | ||||||
|  |     </li> | ||||||
|  |     {{- end -}} | ||||||
|  |     {{- end -}} | ||||||
|  |     {{- end -}} | ||||||
|  |     {{- end -}} | ||||||
|  |     <li> | ||||||
|  |         <a href="#{{- $cleanedID  -}}">{{- $header | safeHTML -}}</a> | ||||||
|  |         {{- else -}} | ||||||
|  |     <li> | ||||||
|  |         <a href="#{{- $cleanedID -}}">{{- $header | safeHTML -}}</a> | ||||||
|  |         {{- end -}} | ||||||
|  |         {{- end -}} | ||||||
|  |         <!-- {{- $firstHeaderLevel := len (seq (index (findRE "[1-4]" (index $headers 0) 1) 0)) -}} --> | ||||||
|  |         {{ $firstHeaderLevel := $largest }} | ||||||
|  |         {{- $lastHeaderLevel := len (seq (index (findRE "[1-4]" (index $headers (sub (len $headers) 1)) 1) 0)) -}} | ||||||
|  |     </li> | ||||||
|  |     {{- range seq (sub $lastHeaderLevel $firstHeaderLevel) -}} | ||||||
|  |     {{- if in ($.Scratch.Get "bareul") (add . $firstHeaderLevel) -}} | ||||||
|  | </ul> | ||||||
|  | {{- else -}} | ||||||
|  | </ul> | ||||||
|  | </li> | ||||||
|  | {{- end -}} | ||||||
|  | {{- end -}} | ||||||
|  | </ul> | ||||||
|  | {{- end -}} | ||||||
		Reference in New Issue
	
	Block a user