| 
									
										
										
										
											2025-08-15 03:09:58 +02:00
										 |  |  | {{- /* | 
					
						
							|  |  |  | Render Jupyter Notebook | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @param {string} 0 The path of the Jupyter Notebook. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @example {{% jupyter "notebook.ipynb" %}} | 
					
						
							|  |  |  | */ -}} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-14 14:29:55 +01:00
										 |  |  | {{- $path := .Get 0 -}} | 
					
						
							|  |  |  | {{- $data := "" -}} | 
					
						
							|  |  |  | {{- $page := .Page -}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {{- $isLocal := not (urls.Parse $path).Scheme -}} | 
					
						
							|  |  |  | {{- $isPage := and (eq .Page.Kind "page") (not .Page.BundleType) -}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {{/* https://gohugo.io/functions/transform/unmarshal/ */}} | 
					
						
							|  |  |  | {{- if (not $isLocal) -}} | 
					
						
							|  |  |  |   {{- with resources.GetRemote $path -}} | 
					
						
							|  |  |  |     {{- with unmarshal .Content -}}{{- $data = . -}}{{- end -}} | 
					
						
							|  |  |  |   {{- else -}} | 
					
						
							|  |  |  |     {{- errorf "Remote resource not found: %s" $path -}} | 
					
						
							|  |  |  |   {{- end -}} | 
					
						
							|  |  |  | {{- else if (not $isPage) -}} | 
					
						
							|  |  |  |   {{- with .Page.Resources.Get $path -}} | 
					
						
							|  |  |  |     {{- with unmarshal .Content -}}{{- $data = . -}}{{- end -}} | 
					
						
							|  |  |  |   {{- else -}} | 
					
						
							|  |  |  |     {{- errorf "Local resource not found: %s" $path -}} | 
					
						
							|  |  |  |   {{- end -}} | 
					
						
							|  |  |  | {{- else -}} | 
					
						
							|  |  |  |   {{- with resources.Get $path -}} | 
					
						
							|  |  |  |     {{- with unmarshal .Content -}}{{- $data = . -}}{{- end -}} | 
					
						
							|  |  |  |   {{- else -}} | 
					
						
							|  |  |  |     {{- errorf "Local resource not found: %s" $path -}} | 
					
						
							|  |  |  |   {{- end -}} | 
					
						
							|  |  |  | {{- end -}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {{- $language := index $data "metadata" "language_info" "name" | default "python" -}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {{- with index $data "cells" -}} | 
					
						
							|  |  |  |   {{- range $cell := . -}} | 
					
						
							|  |  |  |     {{- if eq (index $cell "cell_type") "code" -}} | 
					
						
							|  |  |  |       {{- $source := index $cell "source" -}} | 
					
						
							|  |  |  |       {{- $sourceContent := (cond (reflect.IsSlice $source) (delimit $source "") $source) -}} | 
					
						
							|  |  |  | {{- with ($sourceContent | strings.Chomp) -}} | 
					
						
							|  |  |  | {{ (printf "\n\n```%s\n%s\n```\n" $language .) | safeHTML -}} | 
					
						
							|  |  |  | {{- end -}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <div class="hextra-jupyter-code-cell hextra-scrollbar"> | 
					
						
							|  |  |  |         {{- $outputs := index $cell "outputs" -}} | 
					
						
							|  |  |  |         {{- with $outputs -}} | 
					
						
							|  |  |  |           <div class="hextra-jupyter-code-cell-outputs-container"> | 
					
						
							|  |  |  |             <div class="hextra-jupyter-code-cell-outputs"> | 
					
						
							|  |  |  |               {{- range $output := . -}} | 
					
						
							|  |  |  |                 {{- if eq (index $output "output_type") "display_data" -}} | 
					
						
							|  |  |  |                   {{- $data := index $output "data" -}} | 
					
						
							|  |  |  |                   {{- $image := index $data "image/png" -}} | 
					
						
							|  |  |  |                   {{- if $image -}} | 
					
						
							|  |  |  |                     <img src="data:image/png;base64,{{- $image -}}" alt="image" /> | 
					
						
							|  |  |  |                   {{- end -}} | 
					
						
							|  |  |  |                 {{- else if eq (index $output "output_type") "stream" -}} | 
					
						
							|  |  |  |                   {{- $text := index $output "text" -}} | 
					
						
							|  |  |  |                   {{- $textContent := (cond (reflect.IsSlice $text) (delimit $text "") $text) -}} | 
					
						
							| 
									
										
										
										
											2024-09-14 23:53:43 +01:00
										 |  |  |                   <pre class="not-prose">{{- $textContent -}}</pre> | 
					
						
							| 
									
										
										
										
											2024-09-14 14:29:55 +01:00
										 |  |  |                 {{- else if eq (index $output "output_type") "execute_result" -}} | 
					
						
							|  |  |  |                   {{- $data := index $output "data" -}} | 
					
						
							|  |  |  |                   {{- $text := index $data "text/plain" -}} | 
					
						
							|  |  |  |                   {{- $textContent := (cond (reflect.IsSlice $text) (delimit $text "") $text) -}} | 
					
						
							| 
									
										
										
										
											2024-09-14 23:53:43 +01:00
										 |  |  |                   <pre class="not-prose">{{- $textContent -}}</pre> | 
					
						
							| 
									
										
										
										
											2024-09-14 14:29:55 +01:00
										 |  |  |                   {{- $html := index $data "text/html" -}} | 
					
						
							|  |  |  |                   {{- if $html -}} | 
					
						
							|  |  |  |                     {{- $htmlText := delimit $html "" -}} | 
					
						
							|  |  |  |                     <div> | 
					
						
							|  |  |  |                       {{- $htmlText | safeHTML -}} | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                   {{- end -}} | 
					
						
							|  |  |  |                 {{- end -}} | 
					
						
							|  |  |  |               {{- end -}} | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         {{- end -}} | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     {{- else if eq (index $cell "cell_type") "markdown" -}} | 
					
						
							|  |  |  |         {{- $source := index $cell "source" }} | 
					
						
							|  |  |  |         {{- $sourceContent := (cond (reflect.IsSlice $source) (delimit $source "") $source) }} | 
					
						
							|  |  |  | {{ (printf "\n%s\n" $sourceContent) | safeHTML }} | 
					
						
							|  |  |  |     {{- end -}} | 
					
						
							|  |  |  |   {{- end -}} | 
					
						
							|  |  |  | {{- end -}} |