mirror of
https://github.com/tiennm99/HugoBlox-kit.git
synced 2026-10-13 14:15:47 +00:00
feat: port Markdown Slides template from Wowchemy/Bootstrap
This commit is contained in:
1 parent
c792830419
commit
bfdcb6603c
53 files changed
+6587
-209
No files matched your search
@@ -100,7 +100,6 @@
|
||||
{{ range $query }}
|
||||
{{ if isset .Params "author_notes" }}
|
||||
{{ $page.Store.Set "has_alpine" true }}
|
||||
<script>console.log('Author notes found in collection - Alpine.js enabled');</script>
|
||||
{{ break }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
@@ -293,3 +293,351 @@
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: সমস্ত প্রকল্প দেখুন
|
||||
|
||||
# Additional translations
|
||||
|
||||
- id: about_me
|
||||
translation: পেশাগত সারসংক্ষেপ
|
||||
|
||||
- id: ai_insight
|
||||
translation: এআই অন্তর্দৃষ্টি
|
||||
|
||||
- id: content_type
|
||||
translation: বিষয়ের ধরন
|
||||
|
||||
- id: difficulty
|
||||
translation: কঠিনতা
|
||||
|
||||
- id: prerequisites
|
||||
translation: পূর্বশর্ত
|
||||
|
||||
- id: trending
|
||||
translation: ট্রেন্ডিং
|
||||
|
||||
- id: article
|
||||
translation: প্রবন্ধ
|
||||
|
||||
- id: articles
|
||||
translation: প্রবন্ধসমূহ
|
||||
|
||||
- id: all
|
||||
translation: সব
|
||||
|
||||
- id: helpful
|
||||
translation: সহায়ক
|
||||
|
||||
|
||||
# Buttons and links
|
||||
|
||||
- id: btn_site
|
||||
translation: সাইট
|
||||
|
||||
- id: btn_canonical
|
||||
translation: ক্যানোনিকাল
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: ক্রসপোস্ট
|
||||
|
||||
- id: btn_discussion
|
||||
translation: আলোচনা
|
||||
|
||||
- id: btn_event
|
||||
translation: ইভেন্ট
|
||||
|
||||
- id: btn_calendar
|
||||
translation: ক্যালেন্ডার
|
||||
|
||||
- id: btn_registration
|
||||
translation: নিবন্ধন
|
||||
|
||||
- id: btn_demo
|
||||
translation: ডেমো
|
||||
|
||||
- id: btn_model
|
||||
translation: মডেল
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_note
|
||||
translation: নোট
|
||||
|
||||
- id: callout_abstract
|
||||
translation: সারাংশ
|
||||
|
||||
- id: callout_summary
|
||||
translation: সারসংক্ষেপ
|
||||
|
||||
- id: callout_info
|
||||
translation: তথ্য
|
||||
|
||||
- id: callout_todo
|
||||
translation: করনীয়
|
||||
|
||||
- id: callout_tip
|
||||
translation: টিপস
|
||||
|
||||
- id: callout_question
|
||||
translation: প্রশ্ন
|
||||
|
||||
- id: callout_quote
|
||||
translation: উদ্ধৃতি
|
||||
|
||||
- id: callout_warning
|
||||
translation: সতর্কতা
|
||||
|
||||
- id: callout_caution
|
||||
translation: সতর্কতা
|
||||
|
||||
- id: callout_danger
|
||||
translation: বিপদ
|
||||
|
||||
- id: callout_bug
|
||||
translation: বাগ
|
||||
|
||||
- id: callout_example
|
||||
translation: উদাহরণ
|
||||
|
||||
- id: callout_failure
|
||||
translation: ব্যর্থতা
|
||||
|
||||
- id: callout_success
|
||||
translation: সাফল্য
|
||||
|
||||
- id: callout_important
|
||||
translation: গুরুত্বপূর্ণ
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: স্লাইডে ফিরে যান
|
||||
|
||||
- id: present_slides
|
||||
translation: প্রেজেন্ট
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: প্রেজেন্ট (পূর্ণস্ক্রিন)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: পিডিএফ রপ্তানি (প্রিন্ট)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: প্রিন্ট মোডে খোলে - ব্রাউজার প্রিন্ট > PDF হিসেবে সেভ করুন
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: শিরোনাম দিয়ে ডেক খুঁজুন...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: কোন স্লাইড ডেক পাওয়া যায়নি
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: কোন ডেক ফিল্টারের সাথে মেলে না
|
||||
|
||||
- id: clear_filters
|
||||
translation: ফিল্টার মুছুন
|
||||
|
||||
- id: topics
|
||||
translation: বিষয়
|
||||
|
||||
- id: details
|
||||
translation: বিস্তারিত
|
||||
|
||||
- id: related_resources
|
||||
translation: সম্পর্কিত রিসোর্স
|
||||
|
||||
- id: copy_link
|
||||
translation: লিঙ্ক কপি করুন
|
||||
|
||||
- id: copy_citation
|
||||
translation: উদ্ধৃতি কপি করুন
|
||||
|
||||
- id: how_to_cite
|
||||
translation: কীভাবে উদ্ধৃতি দিবেন
|
||||
|
||||
- id: citation
|
||||
translation: উদ্ধৃতি
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: cite.bib ডাউনলোড করুন
|
||||
|
||||
- id: lecture
|
||||
translation: লেকচার
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: পূর্ণস্ক্রিনে যান
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: পূর্ণস্ক্রিন থেকে বের হন
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: বক্তার নোটের জন্য
|
||||
|
||||
- id: slides_not_found
|
||||
translation: স্লাইড পাওয়া যায়নি
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: প্রশ্নোত্তর
|
||||
|
||||
- id: question
|
||||
translation: প্রশ্ন
|
||||
|
||||
- id: answer
|
||||
translation: উত্তর
|
||||
|
||||
- id: accepted_answer
|
||||
translation: গৃহীত উত্তর
|
||||
|
||||
- id: other_answers
|
||||
translation: অন্যান্য উত্তর
|
||||
|
||||
- id: questions
|
||||
translation: প্রশ্নসমূহ
|
||||
|
||||
- id: questions_count
|
||||
translation: প্রশ্ন
|
||||
|
||||
- id: related_questions
|
||||
translation: সম্পর্কিত প্রশ্ন
|
||||
|
||||
- id: search_questions
|
||||
translation: প্রশ্ন অনুসন্ধান...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: এখনও কোনো প্রশ্ন নেই
|
||||
|
||||
- id: faq
|
||||
translation: FAQ
|
||||
|
||||
- id: faqs
|
||||
translation: FAQs
|
||||
|
||||
- id: browse_by_category
|
||||
translation: বিভাগ অনুযায়ী দেখুন
|
||||
|
||||
# General extras
|
||||
|
||||
- id: backlinks
|
||||
translation: ব্যাকলিঙ্কস
|
||||
|
||||
- id: blog
|
||||
translation: ব্লগ
|
||||
|
||||
- id: browse
|
||||
translation: ব্রাউজ
|
||||
|
||||
- id: days
|
||||
translation: দিন
|
||||
|
||||
- id: hours
|
||||
translation: ঘণ্টা
|
||||
|
||||
- id: minutes
|
||||
translation: মিনিট
|
||||
|
||||
- id: seconds
|
||||
translation: সেকেন্ড
|
||||
|
||||
- id: experience
|
||||
translation: অভিজ্ঞতা
|
||||
|
||||
- id: read_more
|
||||
translation: আরও পড়ুন
|
||||
|
||||
- id: docs
|
||||
translation: ডকুমেন্টেশন
|
||||
|
||||
- id: featured
|
||||
translation: বৈশিষ্ট্যযুক্ত
|
||||
|
||||
- id: events
|
||||
translation: ইভেন্ট
|
||||
|
||||
- id: poweredby_button
|
||||
translation: 'নিজেরটি বানান →'
|
||||
|
||||
- id: block_contact_title
|
||||
translation: যোগাযোগ করুন
|
||||
|
||||
- id: block_contact_visit_title
|
||||
translation: আমাদের দেখুন
|
||||
|
||||
- id: block_contact_office_hours
|
||||
translation: অফিস সময়
|
||||
|
||||
- id: block_contact_view_on_map
|
||||
translation: মানচিত্রে দেখুন
|
||||
|
||||
- id: block_contact_connect_title
|
||||
translation: সংযুক্ত হন
|
||||
|
||||
- id: block_contact_follow_us
|
||||
translation: আমাদের অনুসরণ করুন
|
||||
|
||||
- id: block_contact_prospective_title
|
||||
translation: সম্ভাব্য সদস্যরা
|
||||
|
||||
- id: block_contact_form_title
|
||||
translation: আমাদের বার্তা পাঠান
|
||||
|
||||
- id: block_contact_form_name
|
||||
translation: নাম
|
||||
|
||||
- id: block_contact_form_email
|
||||
translation: ইমেইল
|
||||
|
||||
- id: block_contact_form_subject
|
||||
translation: বিষয়
|
||||
|
||||
- id: block_contact_form_message
|
||||
translation: বার্তা
|
||||
|
||||
- id: block_contact_form_submit
|
||||
translation: বার্তা পাঠান
|
||||
|
||||
# Feedback widget
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: মতামত
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: এই পেজটি কি সহায়ক ছিল?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 হ্যাঁ
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 না
|
||||
@@ -387,3 +387,262 @@
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 Nein
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: KI-Einblick
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: Inhaltstyp
|
||||
|
||||
- id: difficulty
|
||||
translation: Schwierigkeitsgrad
|
||||
|
||||
- id: prerequisites
|
||||
translation: Voraussetzungen
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: Im Trend
|
||||
|
||||
- id: article
|
||||
translation: Artikel
|
||||
|
||||
- id: articles
|
||||
translation: Artikel
|
||||
|
||||
- id: browse
|
||||
translation: Durchsuchen
|
||||
|
||||
- id: all
|
||||
translation: Alle
|
||||
|
||||
- id: helpful
|
||||
translation: hilfreich
|
||||
|
||||
# Additional buttons
|
||||
|
||||
- id: btn_site
|
||||
translation: Website
|
||||
|
||||
- id: btn_canonical
|
||||
translation: Kanonisch
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: Crosspost
|
||||
|
||||
- id: btn_discussion
|
||||
translation: Diskussion
|
||||
|
||||
- id: btn_event
|
||||
translation: Event
|
||||
|
||||
- id: btn_calendar
|
||||
translation: Kalender
|
||||
|
||||
- id: btn_registration
|
||||
translation: Anmeldung
|
||||
|
||||
- id: btn_demo
|
||||
translation: Demo
|
||||
|
||||
- id: btn_model
|
||||
translation: Modell
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_abstract
|
||||
translation: Abstract
|
||||
|
||||
- id: callout_summary
|
||||
translation: Zusammenfassung
|
||||
|
||||
- id: callout_info
|
||||
translation: Info
|
||||
|
||||
- id: callout_todo
|
||||
translation: To-do
|
||||
|
||||
- id: callout_tip
|
||||
translation: Tipp
|
||||
|
||||
- id: callout_question
|
||||
translation: Frage
|
||||
|
||||
- id: callout_quote
|
||||
translation: Zitat
|
||||
|
||||
- id: callout_warning
|
||||
translation: Warnung
|
||||
|
||||
- id: callout_danger
|
||||
translation: Gefahr
|
||||
|
||||
- id: callout_bug
|
||||
translation: Bug
|
||||
|
||||
- id: callout_example
|
||||
translation: Beispiel
|
||||
|
||||
- id: callout_failure
|
||||
translation: Fehlschlag
|
||||
|
||||
- id: callout_success
|
||||
translation: Erfolg
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: Zurück zu Slides
|
||||
|
||||
- id: present_slides
|
||||
translation: Präsentieren
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: Präsentieren (Vollbild)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: PDF exportieren (Druck)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: Öffnet im Druckmodus – Browser Drucken > Als PDF speichern
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: Decks nach Titel suchen...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: Keine Foliensätze gefunden
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: Keine Sätze entsprechen deinen Filtern
|
||||
|
||||
- id: clear_filters
|
||||
translation: Filter zurücksetzen
|
||||
|
||||
- id: topics
|
||||
translation: Themen
|
||||
|
||||
- id: details
|
||||
translation: Details
|
||||
|
||||
- id: related_resources
|
||||
translation: Verwandte Ressourcen
|
||||
|
||||
- id: copy_link
|
||||
translation: Link kopieren
|
||||
|
||||
- id: copy_citation
|
||||
translation: Zitat kopieren
|
||||
|
||||
- id: how_to_cite
|
||||
translation: So zitieren
|
||||
|
||||
- id: citation
|
||||
translation: Zitat
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: cite.bib herunterladen
|
||||
|
||||
- id: lecture
|
||||
translation: Vorlesung
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: Vollbildmodus starten
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: Vollbildmodus beenden
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: für Sprechernotizen
|
||||
|
||||
- id: slides_not_found
|
||||
translation: Folien nicht gefunden
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: Q&A
|
||||
|
||||
- id: question
|
||||
translation: Frage
|
||||
|
||||
- id: answer
|
||||
translation: Antwort
|
||||
|
||||
- id: accepted_answer
|
||||
translation: Akzeptierte Antwort
|
||||
|
||||
- id: other_answers
|
||||
translation: Weitere Antworten
|
||||
|
||||
- id: questions
|
||||
translation: Fragen
|
||||
|
||||
- id: questions_count
|
||||
translation: Fragen
|
||||
|
||||
- id: related_questions
|
||||
translation: Ähnliche Fragen
|
||||
|
||||
- id: search_questions
|
||||
translation: Fragen durchsuchen...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: Noch keine Fragen vorhanden
|
||||
|
||||
- id: faq
|
||||
translation: FAQ
|
||||
|
||||
- id: faqs
|
||||
translation: FAQs
|
||||
|
||||
- id: browse_by_category
|
||||
translation: Nach Kategorie durchsuchen
|
||||
|
||||
# General extras
|
||||
|
||||
- id: about_me
|
||||
translation: Berufliches Profil
|
||||
|
||||
- id: docs
|
||||
translation: Dokumentation
|
||||
|
||||
- id: featured
|
||||
translation: Empfohlen
|
||||
@@ -421,6 +421,80 @@
|
||||
- id: questions_count
|
||||
translation: questions
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: Back to Slides
|
||||
|
||||
- id: featured
|
||||
translation: Featured
|
||||
|
||||
- id: details
|
||||
translation: Details
|
||||
|
||||
- id: present_slides
|
||||
translation: Present
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: Present (fullscreen)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: Export PDF (print)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: Opens in print mode - use browser Print > Save as PDF
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: Search decks by title...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: No slide decks found
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: No decks match your filters
|
||||
|
||||
- id: clear_filters
|
||||
translation: Clear filters
|
||||
|
||||
- id: topics
|
||||
translation: Topics
|
||||
|
||||
- id: related_resources
|
||||
translation: Related Resources
|
||||
|
||||
- id: copy_link
|
||||
translation: Copy Link
|
||||
|
||||
- id: copy_citation
|
||||
translation: Copy citation
|
||||
|
||||
- id: how_to_cite
|
||||
translation: How to cite
|
||||
|
||||
- id: citation
|
||||
translation: Citation
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: Download cite.bib
|
||||
|
||||
- id: lecture
|
||||
translation: Lecture
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: Enter fullscreen
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: Exit fullscreen
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: for speaker notes
|
||||
|
||||
- id: slides_not_found
|
||||
translation: Slides not found
|
||||
|
||||
# Search
|
||||
|
||||
- id: search
|
||||
|
||||
@@ -356,3 +356,319 @@
|
||||
|
||||
- id: poweredby_button
|
||||
translation: 'Crea el tuyo →'
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: Perspectiva de IA
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: Tipo de contenido
|
||||
|
||||
- id: difficulty
|
||||
translation: Dificultad
|
||||
|
||||
- id: prerequisites
|
||||
translation: Requisitos previos
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: Tendencia
|
||||
|
||||
- id: article
|
||||
translation: artículo
|
||||
|
||||
- id: articles
|
||||
translation: artículos
|
||||
|
||||
- id: browse
|
||||
translation: Explorar
|
||||
|
||||
- id: all
|
||||
translation: Todo
|
||||
|
||||
- id: helpful
|
||||
translation: útil
|
||||
|
||||
# Additional buttons
|
||||
|
||||
- id: btn_site
|
||||
translation: Sitio
|
||||
|
||||
- id: btn_canonical
|
||||
translation: Canónico
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: Crosspost
|
||||
|
||||
- id: btn_discussion
|
||||
translation: Discusión
|
||||
|
||||
- id: btn_event
|
||||
translation: Evento
|
||||
|
||||
- id: btn_calendar
|
||||
translation: Calendario
|
||||
|
||||
- id: btn_registration
|
||||
translation: Registro
|
||||
|
||||
- id: btn_demo
|
||||
translation: Demo
|
||||
|
||||
- id: btn_model
|
||||
translation: Modelo
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_abstract
|
||||
translation: Resumen
|
||||
|
||||
- id: callout_summary
|
||||
translation: Resumen
|
||||
|
||||
- id: callout_info
|
||||
translation: Info
|
||||
|
||||
- id: callout_todo
|
||||
translation: Tareas
|
||||
|
||||
- id: callout_tip
|
||||
translation: Consejo
|
||||
|
||||
- id: callout_question
|
||||
translation: Pregunta
|
||||
|
||||
- id: callout_quote
|
||||
translation: Cita
|
||||
|
||||
- id: callout_warning
|
||||
translation: Advertencia
|
||||
|
||||
- id: callout_danger
|
||||
translation: Peligro
|
||||
|
||||
- id: callout_bug
|
||||
translation: Error
|
||||
|
||||
- id: callout_example
|
||||
translation: Ejemplo
|
||||
|
||||
- id: callout_failure
|
||||
translation: Fallo
|
||||
|
||||
- id: callout_success
|
||||
translation: Éxito
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: Volver a diapositivas
|
||||
|
||||
- id: present_slides
|
||||
translation: Presentar
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: Presentar (pantalla completa)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: Exportar PDF (impresión)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: Se abre en modo impresión - usa Imprimir > Guardar como PDF
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: Busca mazos por título...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: No se encontraron diapositivas
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: Ningún mazo coincide con tus filtros
|
||||
|
||||
- id: clear_filters
|
||||
translation: Borrar filtros
|
||||
|
||||
- id: topics
|
||||
translation: Temas
|
||||
|
||||
- id: details
|
||||
translation: Detalles
|
||||
|
||||
- id: related_resources
|
||||
translation: Recursos relacionados
|
||||
|
||||
- id: copy_link
|
||||
translation: Copiar enlace
|
||||
|
||||
- id: copy_citation
|
||||
translation: Copiar cita
|
||||
|
||||
- id: how_to_cite
|
||||
translation: Cómo citar
|
||||
|
||||
- id: citation
|
||||
translation: Cita
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: Descargar cite.bib
|
||||
|
||||
- id: lecture
|
||||
translation: Clase
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: Entrar en pantalla completa
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: Salir de pantalla completa
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: para notas del presentador
|
||||
|
||||
- id: slides_not_found
|
||||
translation: Diapositivas no encontradas
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: Preguntas y respuestas
|
||||
|
||||
- id: question
|
||||
translation: Pregunta
|
||||
|
||||
- id: answer
|
||||
translation: Respuesta
|
||||
|
||||
- id: accepted_answer
|
||||
translation: Respuesta aceptada
|
||||
|
||||
- id: other_answers
|
||||
translation: Otras respuestas
|
||||
|
||||
- id: questions
|
||||
translation: Preguntas
|
||||
|
||||
- id: questions_count
|
||||
translation: preguntas
|
||||
|
||||
- id: related_questions
|
||||
translation: Preguntas relacionadas
|
||||
|
||||
- id: search_questions
|
||||
translation: Buscar preguntas...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: Aún no hay preguntas
|
||||
|
||||
- id: faq
|
||||
translation: FAQ
|
||||
|
||||
- id: faqs
|
||||
translation: FAQs
|
||||
|
||||
- id: browse_by_category
|
||||
translation: Navegar por categoría
|
||||
|
||||
# General extras
|
||||
|
||||
- id: about_me
|
||||
translation: Resumen profesional
|
||||
|
||||
- id: backlinks
|
||||
translation: Enlaces de retorno
|
||||
|
||||
- id: days
|
||||
translation: Días
|
||||
|
||||
- id: hours
|
||||
translation: Horas
|
||||
|
||||
- id: minutes
|
||||
translation: Minutos
|
||||
|
||||
- id: seconds
|
||||
translation: Segundos
|
||||
|
||||
- id: developer
|
||||
translation: Desarrollador
|
||||
|
||||
- id: docs
|
||||
translation: Documentación
|
||||
|
||||
- id: experience
|
||||
translation: Experiencia
|
||||
|
||||
- id: read_more
|
||||
translation: Leer más
|
||||
|
||||
- id: featured
|
||||
translation: Destacado
|
||||
|
||||
- id: block_contact_follow_me
|
||||
translation: Encuéntrame en
|
||||
|
||||
- id: portfolio_link_code
|
||||
translation: Código
|
||||
|
||||
- id: portfolio_link_live
|
||||
translation: En vivo
|
||||
|
||||
- id: portfolio_link_demo
|
||||
translation: Demo
|
||||
|
||||
- id: portfolio_link_default
|
||||
translation: Enlace
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: Ver todos los proyectos
|
||||
|
||||
- id: scroll_to_content
|
||||
translation: Ir al contenido
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: Comentarios
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: ¿Esta página fue útil?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 Sí
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 No
|
||||
@@ -0,0 +1,638 @@
|
||||
# Navigation
|
||||
|
||||
- id: toggle_navigation
|
||||
translation: नेविगेशन टॉगल करें
|
||||
|
||||
- id: table_of_contents
|
||||
translation: सामग्री तालिका
|
||||
|
||||
- id: on_this_page
|
||||
translation: इस पेज पर
|
||||
|
||||
- id: back_to_top
|
||||
translation: ऊपर वापस जाएँ
|
||||
|
||||
- id: home
|
||||
translation: होम
|
||||
|
||||
- id: close
|
||||
translation: बंद करें
|
||||
|
||||
- id: languages
|
||||
translation: भाषाएँ
|
||||
|
||||
# General
|
||||
|
||||
- id: related
|
||||
translation: संबंधित
|
||||
|
||||
- id: backlinks
|
||||
translation: बैकलिंक्स
|
||||
|
||||
# Callouts - All Obsidian-compatible types
|
||||
|
||||
- id: callout_note
|
||||
translation: नोट
|
||||
|
||||
- id: callout_abstract
|
||||
translation: सार
|
||||
|
||||
- id: callout_summary
|
||||
translation: सारांश
|
||||
|
||||
- id: callout_info
|
||||
translation: जानकारी
|
||||
|
||||
- id: callout_todo
|
||||
translation: करना है
|
||||
|
||||
- id: callout_tip
|
||||
translation: सुझाव
|
||||
|
||||
- id: callout_success
|
||||
translation: सफलता
|
||||
|
||||
- id: callout_question
|
||||
translation: प्रश्न
|
||||
|
||||
- id: callout_warning
|
||||
translation: चेतावनी
|
||||
|
||||
- id: callout_failure
|
||||
translation: विफलता
|
||||
|
||||
- id: callout_danger
|
||||
translation: खतरा
|
||||
|
||||
- id: callout_bug
|
||||
translation: बग
|
||||
|
||||
- id: callout_example
|
||||
translation: उदाहरण
|
||||
|
||||
- id: callout_quote
|
||||
translation: उद्धरण
|
||||
|
||||
- id: callout_important
|
||||
translation: महत्वपूर्ण
|
||||
|
||||
- id: callout_caution
|
||||
translation: सावधानी
|
||||
|
||||
- id: minute_read
|
||||
translation: मिनट पढ़ें
|
||||
|
||||
- id: previous
|
||||
translation: पिछला
|
||||
|
||||
- id: next
|
||||
translation: अगला
|
||||
|
||||
- id: figure
|
||||
translation: 'चित्र %d:'
|
||||
|
||||
- id: edit_page
|
||||
translation: इस पेज को संपादित करें
|
||||
|
||||
# Themes
|
||||
|
||||
- id: theme_selector
|
||||
translation: प्रदर्शन प्राथमिकताएँ
|
||||
|
||||
- id: theme_light
|
||||
translation: लाइट
|
||||
|
||||
- id: theme_dark
|
||||
translation: डार्क
|
||||
|
||||
- id: theme_auto
|
||||
translation: स्वचालित
|
||||
|
||||
# Buttons
|
||||
|
||||
- id: btn_preprint
|
||||
translation: प्रीप्रिंट
|
||||
|
||||
- id: btn_pdf
|
||||
translation: पीडीएफ
|
||||
|
||||
- id: btn_cite
|
||||
translation: उद्धृत करें
|
||||
|
||||
- id: btn_slides
|
||||
translation: स्लाइड्स
|
||||
|
||||
- id: btn_video
|
||||
translation: वीडियो
|
||||
|
||||
- id: btn_code
|
||||
translation: कोड
|
||||
|
||||
- id: btn_dataset
|
||||
translation: डेटासेट
|
||||
|
||||
- id: btn_project
|
||||
translation: प्रोजेक्ट
|
||||
|
||||
- id: btn_poster
|
||||
translation: पोस्टर
|
||||
|
||||
- id: btn_source
|
||||
translation: स्रोत दस्तावेज़
|
||||
|
||||
# New link types
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_site
|
||||
translation: साइट
|
||||
|
||||
- id: btn_canonical
|
||||
translation: कैनोनिकल
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: क्रॉसपोस्ट
|
||||
|
||||
- id: btn_discussion
|
||||
translation: चर्चा
|
||||
|
||||
- id: btn_event
|
||||
translation: इवेंट
|
||||
|
||||
- id: btn_calendar
|
||||
translation: कैलेंडर
|
||||
|
||||
- id: btn_registration
|
||||
translation: पंजीकरण
|
||||
|
||||
- id: btn_demo
|
||||
translation: डेमो
|
||||
|
||||
- id: btn_model
|
||||
translation: मॉडल
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
- id: btn_copy
|
||||
translation: कॉपी करें
|
||||
|
||||
- id: btn_copied
|
||||
translation: कॉपी किया गया
|
||||
|
||||
- id: btn_download
|
||||
translation: डाउनलोड
|
||||
|
||||
# About widget
|
||||
|
||||
- id: interests
|
||||
translation: रुचियाँ
|
||||
|
||||
- id: education
|
||||
translation: शिक्षा
|
||||
|
||||
- id: about_me
|
||||
translation: व्यावसायिक सारांश
|
||||
|
||||
- id: user_profile_latest
|
||||
translation: नवीनतम
|
||||
|
||||
# Countdown widget
|
||||
|
||||
- id: days
|
||||
translation: दिन
|
||||
|
||||
- id: hours
|
||||
translation: घंटे
|
||||
|
||||
- id: minutes
|
||||
translation: मिनट
|
||||
|
||||
- id: seconds
|
||||
translation: सेकंड
|
||||
|
||||
# Accomplishments widget
|
||||
|
||||
- id: see_certificate
|
||||
translation: प्रमाणपत्र देखें
|
||||
|
||||
# Experience widget
|
||||
|
||||
- id: experience
|
||||
translation: अनुभव
|
||||
|
||||
- id: present
|
||||
translation: वर्तमान
|
||||
|
||||
# Pages widget
|
||||
|
||||
- id: read_more
|
||||
translation: और पढ़ें
|
||||
|
||||
- id: more_pages
|
||||
translation: सभी देखें
|
||||
|
||||
- id: more_posts
|
||||
translation: सभी पोस्ट देखें
|
||||
|
||||
- id: more_talks
|
||||
translation: सभी इवेंट देखें
|
||||
|
||||
- id: more_publications
|
||||
translation: सभी प्रकाशन देखें
|
||||
|
||||
# Contact widget
|
||||
|
||||
- id: contact_name
|
||||
translation: नाम
|
||||
|
||||
- id: contact_email
|
||||
translation: ईमेल
|
||||
|
||||
- id: contact_message
|
||||
translation: संदेश
|
||||
|
||||
- id: contact_attachment
|
||||
translation: फ़ाइल संलग्न करें
|
||||
|
||||
- id: contact_send
|
||||
translation: भेजें
|
||||
|
||||
- id: book_appointment
|
||||
translation: अपॉइंटमेंट बुक करें
|
||||
|
||||
# Contact info block
|
||||
|
||||
- id: block_contact_title
|
||||
translation: संपर्क करें
|
||||
|
||||
- id: block_contact_visit_title
|
||||
translation: हमसे मिलें
|
||||
|
||||
- id: block_contact_office_hours
|
||||
translation: ऑफिस समय
|
||||
|
||||
- id: block_contact_view_on_map
|
||||
translation: मैप पर देखें
|
||||
|
||||
- id: block_contact_connect_title
|
||||
translation: कनेक्ट करें
|
||||
|
||||
- id: block_contact_follow_us
|
||||
translation: हमें फॉलो करें
|
||||
|
||||
- id: block_contact_follow_me
|
||||
translation: मुझे यहाँ पाएँ
|
||||
|
||||
- id: block_contact_prospective_title
|
||||
translation: संभावित सदस्य
|
||||
|
||||
- id: block_contact_form_title
|
||||
translation: हमें संदेश भेजें
|
||||
|
||||
- id: block_contact_form_name
|
||||
translation: नाम
|
||||
|
||||
- id: block_contact_form_email
|
||||
translation: ईमेल
|
||||
|
||||
- id: block_contact_form_subject
|
||||
translation: विषय
|
||||
|
||||
- id: block_contact_form_message
|
||||
translation: संदेश
|
||||
|
||||
- id: block_contact_form_submit
|
||||
translation: संदेश भेजें
|
||||
|
||||
# Publication/Event details
|
||||
|
||||
- id: abstract
|
||||
translation: सार
|
||||
|
||||
- id: publication
|
||||
translation: प्रकाशन
|
||||
|
||||
- id: publication_type
|
||||
translation: प्रकार
|
||||
|
||||
- id: date
|
||||
translation: तारीख
|
||||
|
||||
- id: last_updated
|
||||
translation: अंतिम अपडेट
|
||||
|
||||
- id: event
|
||||
translation: इवेंट
|
||||
|
||||
- id: location
|
||||
translation: स्थान
|
||||
|
||||
- id: pub_paper_conference
|
||||
translation: सम्मेलन पेपर
|
||||
|
||||
- id: pub_article_journal
|
||||
translation: जर्नल लेख
|
||||
|
||||
- id: pub_article
|
||||
translation: प्रीप्रिंट
|
||||
|
||||
- id: pub_report
|
||||
translation: रिपोर्ट
|
||||
|
||||
- id: pub_book
|
||||
translation: पुस्तक
|
||||
|
||||
- id: pub_chapter
|
||||
translation: पुस्तक अनुभाग
|
||||
|
||||
- id: pub_thesis
|
||||
translation: थीसिस
|
||||
|
||||
- id: pub_patent
|
||||
translation: पेटेंट
|
||||
|
||||
# Project details
|
||||
|
||||
- id: open_project_site
|
||||
translation: प्रोजेक्ट साइट पर जाएँ
|
||||
|
||||
# Content types for default archive page titles and search results
|
||||
|
||||
- id: blog
|
||||
translation: ब्लॉग
|
||||
|
||||
- id: publications
|
||||
translation: प्रकाशन
|
||||
|
||||
- id: events
|
||||
translation: इवेंट
|
||||
|
||||
- id: projects
|
||||
translation: प्रोजेक्ट
|
||||
|
||||
- id: slides
|
||||
translation: स्लाइड्स
|
||||
|
||||
- id: authors
|
||||
translation: लेखक
|
||||
|
||||
- id: qa
|
||||
translation: प्रश्नोत्तर
|
||||
|
||||
- id: questions
|
||||
translation: प्रश्न
|
||||
|
||||
- id: faq
|
||||
translation: अक्सर पूछे जाने वाले प्रश्न
|
||||
|
||||
- id: faqs
|
||||
translation: FAQs
|
||||
|
||||
- id: docs
|
||||
translation: प्रलेखन
|
||||
|
||||
- id: question
|
||||
translation: प्रश्न
|
||||
|
||||
- id: answer
|
||||
translation: उत्तर
|
||||
|
||||
- id: accepted_answer
|
||||
translation: स्वीकृत उत्तर
|
||||
|
||||
- id: other_answers
|
||||
translation: अन्य उत्तर
|
||||
|
||||
- id: related_questions
|
||||
translation: संबंधित प्रश्न
|
||||
|
||||
- id: browse_by_category
|
||||
translation: श्रेणी के अनुसार ब्राउज़ करें
|
||||
|
||||
- id: search_questions
|
||||
translation: प्रश्न खोजें...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: अभी तक कोई प्रश्न नहीं
|
||||
|
||||
- id: questions_count
|
||||
translation: प्रश्न
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: स्लाइड्स पर वापस जाएँ
|
||||
|
||||
- id: featured
|
||||
translation: विशेष
|
||||
|
||||
- id: details
|
||||
translation: विवरण
|
||||
|
||||
- id: present_slides
|
||||
translation: प्रस्तुति करें
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: प्रस्तुति (फुलस्क्रीन)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: पीडीएफ निर्यात (प्रिंट)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: प्रिंट मोड में खुलेगा - ब्राउज़र प्रिंट > PDF के रूप में सहेजें
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: शीर्षक से डेक खोजें...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: कोई स्लाइड डेक नहीं मिला
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: कोई डेक आपके फ़िल्टर से मेल नहीं खाता
|
||||
|
||||
- id: clear_filters
|
||||
translation: फ़िल्टर साफ़ करें
|
||||
|
||||
- id: topics
|
||||
translation: विषय
|
||||
|
||||
- id: related_resources
|
||||
translation: संबंधित संसाधन
|
||||
|
||||
- id: copy_link
|
||||
translation: लिंक कॉपी करें
|
||||
|
||||
- id: copy_citation
|
||||
translation: उद्धरण कॉपी करें
|
||||
|
||||
- id: how_to_cite
|
||||
translation: कैसे उद्धृत करें
|
||||
|
||||
- id: citation
|
||||
translation: उद्धरण
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: cite.bib डाउनलोड करें
|
||||
|
||||
- id: lecture
|
||||
translation: व्याख्यान
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: फुलस्क्रीन में जाएँ
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: फुलस्क्रीन से बाहर निकलें
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: वक्ता नोट्स के लिए
|
||||
|
||||
- id: slides_not_found
|
||||
translation: स्लाइड्स नहीं मिलीं
|
||||
|
||||
# Search
|
||||
|
||||
- id: search
|
||||
translation: खोज
|
||||
|
||||
- id: search_placeholder
|
||||
translation: खोजें...
|
||||
|
||||
- id: search_results
|
||||
translation: परिणाम मिले
|
||||
|
||||
- id: search_no_results
|
||||
translation: कोई परिणाम नहीं मिला
|
||||
|
||||
- id: search_common_queries
|
||||
translation: सामान्य खोजें
|
||||
|
||||
# Error 404
|
||||
|
||||
- id: page_not_found
|
||||
translation: पेज नहीं मिला
|
||||
|
||||
- id: 404_recommendations
|
||||
translation: शायद आप इनमें से किसी को ढूँढ रहे थे?
|
||||
|
||||
# Cookie consent
|
||||
|
||||
- id: cookie_message
|
||||
translation: यह वेबसाइट सर्वोत्तम अनुभव देने के लिए कुकीज़ का उपयोग करती है।
|
||||
|
||||
- id: cookie_dismiss
|
||||
translation: समझ गया!
|
||||
|
||||
- id: cookie_learn
|
||||
translation: और जानें
|
||||
|
||||
# Published with
|
||||
|
||||
- id: published_with
|
||||
translation: '{hugoblox} के साथ बनाया गया — मुफ़्त {repo_link}ओपन सोर्स{/repo_link} वेबसाइट बिल्डर जो क्रिएटर्स को सशक्त करता है।'
|
||||
|
||||
- id: poweredby_button
|
||||
translation: 'अपनी बनाएँ →'
|
||||
|
||||
# Dev Hero block
|
||||
|
||||
- id: scroll_to_content
|
||||
translation: सामग्री पर स्क्रॉल करें
|
||||
|
||||
- id: developer
|
||||
translation: डेवलपर
|
||||
|
||||
# Portfolio block
|
||||
|
||||
- id: portfolio_link_code
|
||||
translation: कोड
|
||||
|
||||
- id: portfolio_link_live
|
||||
translation: लाइव
|
||||
|
||||
- id: portfolio_link_demo
|
||||
translation: डेमो
|
||||
|
||||
- id: portfolio_link_default
|
||||
translation: लिंक
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: सभी प्रोजेक्ट देखें
|
||||
|
||||
# Feedback widget
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: प्रतिपुष्टि
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: क्या यह पेज सहायक था?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 हाँ
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 नहीं
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: एआई अंतर्दृष्टि
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: सामग्री प्रकार
|
||||
|
||||
- id: difficulty
|
||||
translation: कठिनाई
|
||||
|
||||
- id: prerequisites
|
||||
translation: पूर्वापेक्षाएँ
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: ट्रेंडिंग
|
||||
|
||||
- id: article
|
||||
translation: लेख
|
||||
|
||||
- id: articles
|
||||
translation: लेख
|
||||
|
||||
- id: browse
|
||||
translation: ब्राउज़
|
||||
|
||||
- id: all
|
||||
translation: सब
|
||||
|
||||
- id: helpful
|
||||
translation: सहायक
|
||||
@@ -263,3 +263,384 @@
|
||||
|
||||
- id: published_with
|
||||
translation: Diterbitkan dengan {hugoblox} — Secara gratis, {repo_link}sumber terbuka{/repo_link} pembuat situs web yang memberdayakan para pembuat konten.
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: Wawasan AI
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: Jenis konten
|
||||
|
||||
- id: difficulty
|
||||
translation: Tingkat kesulitan
|
||||
|
||||
- id: prerequisites
|
||||
translation: Prasyarat
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: Sedang tren
|
||||
|
||||
- id: article
|
||||
translation: artikel
|
||||
|
||||
- id: articles
|
||||
translation: artikel
|
||||
|
||||
- id: browse
|
||||
translation: Jelajahi
|
||||
|
||||
- id: all
|
||||
translation: Semua
|
||||
|
||||
- id: helpful
|
||||
translation: bermanfaat
|
||||
|
||||
# Additional buttons
|
||||
|
||||
- id: btn_site
|
||||
translation: Situs
|
||||
|
||||
- id: btn_canonical
|
||||
translation: Kanonikal
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: Crosspost
|
||||
|
||||
- id: btn_discussion
|
||||
translation: Diskusi
|
||||
|
||||
- id: btn_event
|
||||
translation: Acara
|
||||
|
||||
- id: btn_calendar
|
||||
translation: Kalender
|
||||
|
||||
- id: btn_registration
|
||||
translation: Registrasi
|
||||
|
||||
- id: btn_demo
|
||||
translation: Demo
|
||||
|
||||
- id: btn_model
|
||||
translation: Model
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_note
|
||||
translation: Catatan
|
||||
|
||||
- id: callout_abstract
|
||||
translation: Abstrak
|
||||
|
||||
- id: callout_summary
|
||||
translation: Ringkasan
|
||||
|
||||
- id: callout_info
|
||||
translation: Info
|
||||
|
||||
- id: callout_todo
|
||||
translation: To-do
|
||||
|
||||
- id: callout_tip
|
||||
translation: Tip
|
||||
|
||||
- id: callout_question
|
||||
translation: Pertanyaan
|
||||
|
||||
- id: callout_quote
|
||||
translation: Kutipan
|
||||
|
||||
- id: callout_warning
|
||||
translation: Peringatan
|
||||
|
||||
- id: callout_caution
|
||||
translation: Perhatian
|
||||
|
||||
- id: callout_danger
|
||||
translation: Bahaya
|
||||
|
||||
- id: callout_bug
|
||||
translation: Bug
|
||||
|
||||
- id: callout_example
|
||||
translation: Contoh
|
||||
|
||||
- id: callout_failure
|
||||
translation: Gagal
|
||||
|
||||
- id: callout_success
|
||||
translation: Sukses
|
||||
|
||||
- id: callout_important
|
||||
translation: Penting
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: Kembali ke slides
|
||||
|
||||
- id: present_slides
|
||||
translation: Presentasi
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: Presentasi (layar penuh)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: Ekspor PDF (cetak)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: Membuka mode cetak - gunakan Cetak > Simpan sebagai PDF
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: Cari deck berdasarkan judul...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: Tidak ada deck ditemukan
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: Tidak ada deck sesuai filter
|
||||
|
||||
- id: clear_filters
|
||||
translation: Hapus filter
|
||||
|
||||
- id: topics
|
||||
translation: Topik
|
||||
|
||||
- id: details
|
||||
translation: Detail
|
||||
|
||||
- id: related_resources
|
||||
translation: Sumber terkait
|
||||
|
||||
- id: copy_link
|
||||
translation: Salin tautan
|
||||
|
||||
- id: copy_citation
|
||||
translation: Salin sitasi
|
||||
|
||||
- id: how_to_cite
|
||||
translation: Cara mengutip
|
||||
|
||||
- id: citation
|
||||
translation: Sitasi
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: Unduh cite.bib
|
||||
|
||||
- id: lecture
|
||||
translation: Kuliah
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: Masuk layar penuh
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: Keluar layar penuh
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: untuk catatan pembicara
|
||||
|
||||
- id: slides_not_found
|
||||
translation: Slide tidak ditemukan
|
||||
|
||||
- id: related
|
||||
translation: Terkait
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: Tanya Jawab
|
||||
|
||||
- id: question
|
||||
translation: Pertanyaan
|
||||
|
||||
- id: answer
|
||||
translation: Jawaban
|
||||
|
||||
- id: accepted_answer
|
||||
translation: Jawaban diterima
|
||||
|
||||
- id: other_answers
|
||||
translation: Jawaban lainnya
|
||||
|
||||
- id: questions
|
||||
translation: Pertanyaan
|
||||
|
||||
- id: questions_count
|
||||
translation: pertanyaan
|
||||
|
||||
- id: related_questions
|
||||
translation: Pertanyaan terkait
|
||||
|
||||
- id: search_questions
|
||||
translation: Cari pertanyaan...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: Belum ada pertanyaan
|
||||
|
||||
- id: faq
|
||||
translation: FAQ
|
||||
|
||||
- id: faqs
|
||||
translation: FAQ
|
||||
|
||||
- id: browse_by_category
|
||||
translation: Telusuri per kategori
|
||||
|
||||
# General extras
|
||||
|
||||
- id: about_me
|
||||
translation: Ringkasan profesional
|
||||
|
||||
- id: backlinks
|
||||
translation: Tautan balik
|
||||
|
||||
- id: days
|
||||
translation: Hari
|
||||
|
||||
- id: hours
|
||||
translation: Jam
|
||||
|
||||
- id: minutes
|
||||
translation: Menit
|
||||
|
||||
- id: seconds
|
||||
translation: Detik
|
||||
|
||||
- id: experience
|
||||
translation: Pengalaman
|
||||
|
||||
- id: read_more
|
||||
translation: Baca selengkapnya
|
||||
|
||||
- id: docs
|
||||
translation: Dokumentasi
|
||||
|
||||
- id: featured
|
||||
translation: Unggulan
|
||||
|
||||
# Feedback widget
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: Masukan
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: Apakah halaman ini membantu?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 Ya
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 Tidak
|
||||
|
||||
- id: block_contact_title
|
||||
translation: Hubungi Kami
|
||||
|
||||
- id: block_contact_visit_title
|
||||
translation: Kunjungi Kami
|
||||
|
||||
- id: block_contact_office_hours
|
||||
translation: Jam kerja
|
||||
|
||||
- id: block_contact_view_on_map
|
||||
translation: Lihat di Peta
|
||||
|
||||
- id: block_contact_connect_title
|
||||
translation: Terhubung
|
||||
|
||||
- id: block_contact_follow_us
|
||||
translation: Ikuti kami
|
||||
|
||||
- id: block_contact_follow_me
|
||||
translation: Temukan saya di
|
||||
|
||||
- id: block_contact_prospective_title
|
||||
translation: Calon anggota
|
||||
|
||||
- id: block_contact_form_title
|
||||
translation: Kirim Pesan
|
||||
|
||||
- id: block_contact_form_name
|
||||
translation: Nama
|
||||
|
||||
- id: block_contact_form_email
|
||||
translation: Email
|
||||
|
||||
- id: block_contact_form_subject
|
||||
translation: Subjek
|
||||
|
||||
- id: block_contact_form_message
|
||||
translation: Pesan
|
||||
|
||||
- id: block_contact_form_submit
|
||||
translation: Kirim pesan
|
||||
|
||||
- id: blog
|
||||
translation: Blog
|
||||
|
||||
- id: events
|
||||
translation: Acara
|
||||
|
||||
- id: poweredby_button
|
||||
translation: 'Bangun punyamu →'
|
||||
|
||||
- id: developer
|
||||
translation: Pengembang
|
||||
|
||||
- id: scroll_to_content
|
||||
translation: Gulir ke konten
|
||||
|
||||
- id: portfolio_link_code
|
||||
translation: Kode
|
||||
|
||||
- id: portfolio_link_live
|
||||
translation: Langsung
|
||||
|
||||
- id: portfolio_link_demo
|
||||
translation: Demo
|
||||
|
||||
- id: portfolio_link_default
|
||||
translation: Tautan
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: Lihat semua proyek
|
||||
|
||||
- id: featured
|
||||
translation: Unggulan
|
||||
@@ -337,3 +337,304 @@
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: Bekijk alle projecten
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: AI-inzicht
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: Contenttype
|
||||
|
||||
- id: difficulty
|
||||
translation: Moeilijkheidsgraad
|
||||
|
||||
- id: prerequisites
|
||||
translation: Vereisten
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: Populair
|
||||
|
||||
- id: article
|
||||
translation: artikel
|
||||
|
||||
- id: articles
|
||||
translation: artikelen
|
||||
|
||||
- id: browse
|
||||
translation: Bladeren
|
||||
|
||||
- id: all
|
||||
translation: Alles
|
||||
|
||||
- id: helpful
|
||||
translation: nuttig
|
||||
|
||||
# Additional buttons
|
||||
|
||||
- id: btn_site
|
||||
translation: Site
|
||||
|
||||
- id: btn_canonical
|
||||
translation: Canoniek
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: Crosspost
|
||||
|
||||
- id: btn_discussion
|
||||
translation: Discussie
|
||||
|
||||
- id: btn_event
|
||||
translation: Evenement
|
||||
|
||||
- id: btn_calendar
|
||||
translation: Kalender
|
||||
|
||||
- id: btn_registration
|
||||
translation: Registratie
|
||||
|
||||
- id: btn_demo
|
||||
translation: Demo
|
||||
|
||||
- id: btn_model
|
||||
translation: Model
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_note
|
||||
translation: Notitie
|
||||
|
||||
- id: callout_abstract
|
||||
translation: Samenvatting
|
||||
|
||||
- id: callout_summary
|
||||
translation: Samenvatting
|
||||
|
||||
- id: callout_info
|
||||
translation: Info
|
||||
|
||||
- id: callout_todo
|
||||
translation: Te doen
|
||||
|
||||
- id: callout_tip
|
||||
translation: Tip
|
||||
|
||||
- id: callout_question
|
||||
translation: Vraag
|
||||
|
||||
- id: callout_quote
|
||||
translation: Citaat
|
||||
|
||||
- id: callout_warning
|
||||
translation: Waarschuwing
|
||||
|
||||
- id: callout_caution
|
||||
translation: Let op
|
||||
|
||||
- id: callout_danger
|
||||
translation: Gevaar
|
||||
|
||||
- id: callout_bug
|
||||
translation: Bug
|
||||
|
||||
- id: callout_example
|
||||
translation: Voorbeeld
|
||||
|
||||
- id: callout_failure
|
||||
translation: Mislukt
|
||||
|
||||
- id: callout_success
|
||||
translation: Succes
|
||||
|
||||
- id: callout_important
|
||||
translation: Belangrijk
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: Terug naar slides
|
||||
|
||||
- id: present_slides
|
||||
translation: Presenteren
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: Presenteren (volledig scherm)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: PDF exporteren (print)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: Opent in printmodus - browser Afdrukken > Opslaan als PDF
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: Zoek decks op titel...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: Geen decks gevonden
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: Geen decks voldoen aan je filters
|
||||
|
||||
- id: clear_filters
|
||||
translation: Filters wissen
|
||||
|
||||
- id: topics
|
||||
translation: Onderwerpen
|
||||
|
||||
- id: details
|
||||
translation: Details
|
||||
|
||||
- id: related_resources
|
||||
translation: Gerelateerde bronnen
|
||||
|
||||
- id: copy_link
|
||||
translation: Link kopiëren
|
||||
|
||||
- id: copy_citation
|
||||
translation: Citatie kopiëren
|
||||
|
||||
- id: how_to_cite
|
||||
translation: Hoe te citeren
|
||||
|
||||
- id: citation
|
||||
translation: Citatie
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: cite.bib downloaden
|
||||
|
||||
- id: lecture
|
||||
translation: College
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: Volledig scherm
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: Volledig scherm afsluiten
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: voor sprekersnotities
|
||||
|
||||
- id: slides_not_found
|
||||
translation: Slides niet gevonden
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: Q&A
|
||||
|
||||
- id: question
|
||||
translation: Vraag
|
||||
|
||||
- id: answer
|
||||
translation: Antwoord
|
||||
|
||||
- id: accepted_answer
|
||||
translation: Geaccepteerd antwoord
|
||||
|
||||
- id: other_answers
|
||||
translation: Andere antwoorden
|
||||
|
||||
- id: questions
|
||||
translation: Vragen
|
||||
|
||||
- id: questions_count
|
||||
translation: vragen
|
||||
|
||||
- id: related_questions
|
||||
translation: Gerelateerde vragen
|
||||
|
||||
- id: search_questions
|
||||
translation: Zoek vragen...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: Nog geen vragen
|
||||
|
||||
- id: faq
|
||||
translation: FAQ
|
||||
|
||||
- id: faqs
|
||||
translation: FAQs
|
||||
|
||||
- id: browse_by_category
|
||||
translation: Blader op categorie
|
||||
|
||||
# General extras
|
||||
|
||||
- id: about_me
|
||||
translation: Professionele samenvatting
|
||||
|
||||
- id: backlinks
|
||||
translation: Backlinks
|
||||
|
||||
- id: days
|
||||
translation: Dagen
|
||||
|
||||
- id: hours
|
||||
translation: Uren
|
||||
|
||||
- id: minutes
|
||||
translation: Minuten
|
||||
|
||||
- id: seconds
|
||||
translation: Seconden
|
||||
|
||||
- id: experience
|
||||
translation: Ervaring
|
||||
|
||||
- id: read_more
|
||||
translation: Lees meer
|
||||
|
||||
- id: docs
|
||||
translation: Documentatie
|
||||
|
||||
- id: featured
|
||||
translation: Uitgelicht
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: Feedback
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: Was deze pagina nuttig?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 Ja
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 Nee
|
||||
@@ -304,3 +304,331 @@
|
||||
|
||||
- id: published_with
|
||||
translation: Made with {hugoblox}.
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: Insight de IA
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: Tipo de conteúdo
|
||||
|
||||
- id: difficulty
|
||||
translation: Dificuldade
|
||||
|
||||
- id: prerequisites
|
||||
translation: Pré-requisitos
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: Em alta
|
||||
|
||||
- id: article
|
||||
translation: artigo
|
||||
|
||||
- id: articles
|
||||
translation: artigos
|
||||
|
||||
- id: browse
|
||||
translation: Navegar
|
||||
|
||||
- id: all
|
||||
translation: Todos
|
||||
|
||||
- id: helpful
|
||||
translation: útil
|
||||
|
||||
# Additional buttons
|
||||
|
||||
- id: btn_site
|
||||
translation: Site
|
||||
|
||||
- id: btn_canonical
|
||||
translation: Canônico
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: Crosspost
|
||||
|
||||
- id: btn_discussion
|
||||
translation: Discussão
|
||||
|
||||
- id: btn_event
|
||||
translation: Evento
|
||||
|
||||
- id: btn_calendar
|
||||
translation: Calendário
|
||||
|
||||
- id: btn_registration
|
||||
translation: Inscrição
|
||||
|
||||
- id: btn_demo
|
||||
translation: Demo
|
||||
|
||||
- id: btn_model
|
||||
translation: Modelo
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_note
|
||||
translation: Nota
|
||||
|
||||
- id: callout_abstract
|
||||
translation: Resumo
|
||||
|
||||
- id: callout_summary
|
||||
translation: Sumário
|
||||
|
||||
- id: callout_info
|
||||
translation: Informação
|
||||
|
||||
- id: callout_todo
|
||||
translation: Para fazer
|
||||
|
||||
- id: callout_tip
|
||||
translation: Dica
|
||||
|
||||
- id: callout_question
|
||||
translation: Pergunta
|
||||
|
||||
- id: callout_quote
|
||||
translation: Citação
|
||||
|
||||
- id: callout_warning
|
||||
translation: Aviso
|
||||
|
||||
- id: callout_caution
|
||||
translation: Cuidado
|
||||
|
||||
- id: callout_danger
|
||||
translation: Perigo
|
||||
|
||||
- id: callout_bug
|
||||
translation: Bug
|
||||
|
||||
- id: callout_example
|
||||
translation: Exemplo
|
||||
|
||||
- id: callout_failure
|
||||
translation: Falha
|
||||
|
||||
- id: callout_success
|
||||
translation: Sucesso
|
||||
|
||||
- id: callout_important
|
||||
translation: Importante
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: Voltar para slides
|
||||
|
||||
- id: present_slides
|
||||
translation: Apresentar
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: Apresentar (tela cheia)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: Exportar PDF (impressão)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: Abre em modo de impressão - use Imprimir > Salvar como PDF
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: Buscar decks por título...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: Nenhum conjunto de slides encontrado
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: Nenhum deck corresponde aos filtros
|
||||
|
||||
- id: clear_filters
|
||||
translation: Limpar filtros
|
||||
|
||||
- id: topics
|
||||
translation: Tópicos
|
||||
|
||||
- id: details
|
||||
translation: Detalhes
|
||||
|
||||
- id: related_resources
|
||||
translation: Recursos relacionados
|
||||
|
||||
- id: copy_link
|
||||
translation: Copiar link
|
||||
|
||||
- id: copy_citation
|
||||
translation: Copiar citação
|
||||
|
||||
- id: how_to_cite
|
||||
translation: Como citar
|
||||
|
||||
- id: citation
|
||||
translation: Citação
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: Baixar cite.bib
|
||||
|
||||
- id: lecture
|
||||
translation: Aula
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: Entrar em tela cheia
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: Sair da tela cheia
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: para notas do apresentador
|
||||
|
||||
- id: slides_not_found
|
||||
translation: Slides não encontrados
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: Q&A
|
||||
|
||||
- id: question
|
||||
translation: Pergunta
|
||||
|
||||
- id: answer
|
||||
translation: Resposta
|
||||
|
||||
- id: accepted_answer
|
||||
translation: Resposta aceita
|
||||
|
||||
- id: other_answers
|
||||
translation: Outras respostas
|
||||
|
||||
- id: questions
|
||||
translation: Perguntas
|
||||
|
||||
- id: questions_count
|
||||
translation: perguntas
|
||||
|
||||
- id: related_questions
|
||||
translation: Perguntas relacionadas
|
||||
|
||||
- id: search_questions
|
||||
translation: Buscar perguntas...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: Ainda não há perguntas
|
||||
|
||||
- id: faq
|
||||
translation: FAQ
|
||||
|
||||
- id: faqs
|
||||
translation: FAQs
|
||||
|
||||
- id: browse_by_category
|
||||
translation: Navegar por categoria
|
||||
|
||||
# General extras
|
||||
|
||||
- id: about_me
|
||||
translation: Resumo profissional
|
||||
|
||||
- id: backlinks
|
||||
translation: Backlinks
|
||||
|
||||
- id: days
|
||||
translation: Dias
|
||||
|
||||
- id: hours
|
||||
translation: Horas
|
||||
|
||||
- id: minutes
|
||||
translation: Minutos
|
||||
|
||||
- id: seconds
|
||||
translation: Segundos
|
||||
|
||||
- id: developer
|
||||
translation: Desenvolvedor
|
||||
|
||||
- id: docs
|
||||
translation: Documentação
|
||||
|
||||
- id: experience
|
||||
translation: Experiência
|
||||
|
||||
- id: read_more
|
||||
translation: Leia mais
|
||||
|
||||
- id: featured
|
||||
translation: Em destaque
|
||||
|
||||
- id: block_contact_follow_me
|
||||
translation: Encontre-me em
|
||||
|
||||
- id: portfolio_link_code
|
||||
translation: Código
|
||||
|
||||
- id: portfolio_link_live
|
||||
translation: Ao vivo
|
||||
|
||||
- id: portfolio_link_demo
|
||||
translation: Demo
|
||||
|
||||
- id: portfolio_link_default
|
||||
translation: Link
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: Ver todos os projetos
|
||||
|
||||
- id: scroll_to_content
|
||||
translation: Rolar para o conteúdo
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: Feedback
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: Esta página foi útil?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 Sim
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 Não
|
||||
|
||||
- id: poweredby_button
|
||||
translation: 'Construa a sua →'
|
||||
@@ -307,3 +307,328 @@
|
||||
|
||||
- id: poweredby_button
|
||||
translation: '構建您的 →'
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: AI 洞察
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: 內容類型
|
||||
|
||||
- id: difficulty
|
||||
translation: 難度
|
||||
|
||||
- id: prerequisites
|
||||
translation: 先決條件
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: 熱門
|
||||
|
||||
- id: article
|
||||
translation: 文章
|
||||
|
||||
- id: articles
|
||||
translation: 文章
|
||||
|
||||
- id: browse
|
||||
translation: 瀏覽
|
||||
|
||||
- id: all
|
||||
translation: 全部
|
||||
|
||||
- id: helpful
|
||||
translation: 有幫助
|
||||
|
||||
# Additional buttons
|
||||
|
||||
- id: btn_site
|
||||
translation: 網站
|
||||
|
||||
- id: btn_canonical
|
||||
translation: 正規連結
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: 交叉發布
|
||||
|
||||
- id: btn_discussion
|
||||
translation: 討論
|
||||
|
||||
- id: btn_event
|
||||
translation: 活動
|
||||
|
||||
- id: btn_calendar
|
||||
translation: 行事曆
|
||||
|
||||
- id: btn_registration
|
||||
translation: 註冊
|
||||
|
||||
- id: btn_demo
|
||||
translation: 示範
|
||||
|
||||
- id: btn_model
|
||||
translation: 模型
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_note
|
||||
translation: 備註
|
||||
|
||||
- id: callout_abstract
|
||||
translation: 摘要
|
||||
|
||||
- id: callout_summary
|
||||
translation: 摘要
|
||||
|
||||
- id: callout_info
|
||||
translation: 資訊
|
||||
|
||||
- id: callout_todo
|
||||
translation: 待辦
|
||||
|
||||
- id: callout_tip
|
||||
translation: 提示
|
||||
|
||||
- id: callout_question
|
||||
translation: 問題
|
||||
|
||||
- id: callout_quote
|
||||
translation: 引用
|
||||
|
||||
- id: callout_warning
|
||||
translation: 警告
|
||||
|
||||
- id: callout_caution
|
||||
translation: 注意
|
||||
|
||||
- id: callout_danger
|
||||
translation: 危險
|
||||
|
||||
- id: callout_bug
|
||||
translation: 錯誤
|
||||
|
||||
- id: callout_example
|
||||
translation: 範例
|
||||
|
||||
- id: callout_failure
|
||||
translation: 失敗
|
||||
|
||||
- id: callout_success
|
||||
translation: 成功
|
||||
|
||||
- id: callout_important
|
||||
translation: 重要
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: 返回投影片
|
||||
|
||||
- id: present_slides
|
||||
translation: 播放
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: 播放(全螢幕)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: 匯出 PDF(列印)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: 以列印模式開啟 - 瀏覽器列印 > 另存為 PDF
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: 依標題搜尋投影片...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: 未找到投影片集
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: 沒有符合篩選的投影片
|
||||
|
||||
- id: clear_filters
|
||||
translation: 清除篩選
|
||||
|
||||
- id: topics
|
||||
translation: 主題
|
||||
|
||||
- id: details
|
||||
translation: 詳細資訊
|
||||
|
||||
- id: related_resources
|
||||
translation: 相關資源
|
||||
|
||||
- id: copy_link
|
||||
translation: 複製連結
|
||||
|
||||
- id: copy_citation
|
||||
translation: 複製引用
|
||||
|
||||
- id: how_to_cite
|
||||
translation: 如何引用
|
||||
|
||||
- id: citation
|
||||
translation: 引用
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: 下載 cite.bib
|
||||
|
||||
- id: lecture
|
||||
translation: 講座
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: 進入全螢幕
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: 離開全螢幕
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: 用於講者備註
|
||||
|
||||
- id: slides_not_found
|
||||
translation: 找不到投影片
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: 問答
|
||||
|
||||
- id: question
|
||||
translation: 問題
|
||||
|
||||
- id: answer
|
||||
translation: 回答
|
||||
|
||||
- id: accepted_answer
|
||||
translation: 已接受的回答
|
||||
|
||||
- id: other_answers
|
||||
translation: 其他回答
|
||||
|
||||
- id: questions
|
||||
translation: 問題
|
||||
|
||||
- id: questions_count
|
||||
translation: 個問題
|
||||
|
||||
- id: related_questions
|
||||
translation: 相關問題
|
||||
|
||||
- id: search_questions
|
||||
translation: 搜尋問題...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: 尚無問題
|
||||
|
||||
- id: faq
|
||||
translation: 常見問題
|
||||
|
||||
- id: faqs
|
||||
translation: 常見問題
|
||||
|
||||
- id: browse_by_category
|
||||
translation: 依分類瀏覽
|
||||
|
||||
# General extras
|
||||
|
||||
- id: about_me
|
||||
translation: 職業簡介
|
||||
|
||||
- id: backlinks
|
||||
translation: 反向連結
|
||||
|
||||
- id: days
|
||||
translation: 天
|
||||
|
||||
- id: hours
|
||||
translation: 小時
|
||||
|
||||
- id: minutes
|
||||
translation: 分鐘
|
||||
|
||||
- id: seconds
|
||||
translation: 秒
|
||||
|
||||
- id: developer
|
||||
translation: 開發者
|
||||
|
||||
- id: docs
|
||||
translation: 文件
|
||||
|
||||
- id: experience
|
||||
translation: 經驗
|
||||
|
||||
- id: read_more
|
||||
translation: 閱讀更多
|
||||
|
||||
- id: featured
|
||||
translation: 精選
|
||||
|
||||
- id: block_contact_follow_me
|
||||
translation: 在這裡找到我
|
||||
|
||||
- id: portfolio_link_code
|
||||
translation: 程式碼
|
||||
|
||||
- id: portfolio_link_live
|
||||
translation: 線上
|
||||
|
||||
- id: portfolio_link_demo
|
||||
translation: 示範
|
||||
|
||||
- id: portfolio_link_default
|
||||
translation: 連結
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: 查看所有專案
|
||||
|
||||
- id: scroll_to_content
|
||||
translation: 捲動至內容
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: 回饋
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: 此頁面有幫助嗎?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 是
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 否
|
||||
@@ -359,3 +359,292 @@
|
||||
|
||||
- id: portfolio_view_all
|
||||
translation: 查看所有项目
|
||||
|
||||
# AI Features
|
||||
|
||||
- id: ai_insight
|
||||
translation: AI 洞察
|
||||
|
||||
# Content Metadata
|
||||
|
||||
- id: content_type
|
||||
translation: 内容类型
|
||||
|
||||
- id: difficulty
|
||||
translation: 难度
|
||||
|
||||
- id: prerequisites
|
||||
translation: 先决条件
|
||||
|
||||
# Card metadata
|
||||
|
||||
- id: trending
|
||||
translation: 热门
|
||||
|
||||
- id: article
|
||||
translation: 文章
|
||||
|
||||
- id: articles
|
||||
translation: 文章
|
||||
|
||||
- id: browse
|
||||
translation: 浏览
|
||||
|
||||
- id: all
|
||||
translation: 全部
|
||||
|
||||
- id: helpful
|
||||
translation: 有帮助
|
||||
|
||||
# Additional buttons
|
||||
|
||||
- id: btn_site
|
||||
translation: 网站
|
||||
|
||||
- id: btn_canonical
|
||||
translation: 规范链接
|
||||
|
||||
- id: btn_crosspost
|
||||
translation: 交叉发布
|
||||
|
||||
- id: btn_discussion
|
||||
translation: 讨论
|
||||
|
||||
- id: btn_event
|
||||
translation: 活动
|
||||
|
||||
- id: btn_calendar
|
||||
translation: 日历
|
||||
|
||||
- id: btn_registration
|
||||
translation: 注册
|
||||
|
||||
- id: btn_demo
|
||||
translation: 演示
|
||||
|
||||
- id: btn_model
|
||||
translation: 模型
|
||||
|
||||
- id: btn_doi
|
||||
translation: DOI
|
||||
|
||||
- id: btn_hal
|
||||
translation: HAL
|
||||
|
||||
- id: btn_dblp
|
||||
translation: DBLP
|
||||
|
||||
- id: btn_isbn
|
||||
translation: ISBN
|
||||
|
||||
- id: btn_osf
|
||||
translation: OSF
|
||||
|
||||
- id: btn_zenodo
|
||||
translation: Zenodo
|
||||
|
||||
- id: btn_kaggle
|
||||
translation: Kaggle
|
||||
|
||||
- id: btn_openalex
|
||||
translation: OpenAlex
|
||||
|
||||
- id: btn_semanticscholar
|
||||
translation: Semantic Scholar
|
||||
|
||||
- id: btn_pwc
|
||||
translation: Papers With Code
|
||||
|
||||
# Callouts
|
||||
|
||||
- id: callout_abstract
|
||||
translation: 摘要
|
||||
|
||||
- id: callout_summary
|
||||
translation: 总结
|
||||
|
||||
- id: callout_info
|
||||
translation: 信息
|
||||
|
||||
- id: callout_todo
|
||||
translation: 待办
|
||||
|
||||
- id: callout_question
|
||||
translation: 问题
|
||||
|
||||
- id: callout_quote
|
||||
translation: 引用
|
||||
|
||||
- id: callout_warning
|
||||
translation: 警告
|
||||
|
||||
- id: callout_danger
|
||||
translation: 危险
|
||||
|
||||
- id: callout_bug
|
||||
translation: 缺陷
|
||||
|
||||
- id: callout_example
|
||||
translation: 示例
|
||||
|
||||
- id: callout_failure
|
||||
translation: 失败
|
||||
|
||||
- id: callout_success
|
||||
translation: 成功
|
||||
|
||||
# Slides
|
||||
|
||||
- id: back_to_slides
|
||||
translation: 返回幻灯
|
||||
|
||||
- id: present_slides
|
||||
translation: 演示
|
||||
|
||||
- id: present_fullscreen
|
||||
translation: 演示(全屏)
|
||||
|
||||
- id: export_pdf_print
|
||||
translation: 导出 PDF(打印)
|
||||
|
||||
- id: slides_print_hint
|
||||
translation: 在打印模式打开 - 浏览器打印 > 另存为 PDF
|
||||
|
||||
- id: slides_search_placeholder
|
||||
translation: 按标题搜索幻灯集...
|
||||
|
||||
- id: slides_no_decks
|
||||
translation: 未找到幻灯集
|
||||
|
||||
- id: slides_no_matches
|
||||
translation: 没有符合筛选的幻灯集
|
||||
|
||||
- id: clear_filters
|
||||
translation: 清除过滤
|
||||
|
||||
- id: topics
|
||||
translation: 主题
|
||||
|
||||
- id: details
|
||||
translation: 详情
|
||||
|
||||
- id: related_resources
|
||||
translation: 相关资源
|
||||
|
||||
- id: copy_link
|
||||
translation: 复制链接
|
||||
|
||||
- id: copy_citation
|
||||
translation: 复制引用
|
||||
|
||||
|
||||
- id: citation
|
||||
translation: 引用
|
||||
|
||||
- id: bibtex
|
||||
translation: BibTeX
|
||||
|
||||
- id: download_cite_bib
|
||||
translation: 下载 cite.bib
|
||||
|
||||
- id: lecture
|
||||
translation: 讲座
|
||||
|
||||
- id: enter_fullscreen
|
||||
translation: 进入全屏
|
||||
|
||||
- id: exit_fullscreen
|
||||
translation: 退出全屏
|
||||
|
||||
- id: speaker_notes_hint
|
||||
translation: 用于演讲者备注
|
||||
|
||||
- id: slides_not_found
|
||||
translation: 未找到幻灯
|
||||
|
||||
# Q&A
|
||||
|
||||
- id: qa
|
||||
translation: 问答
|
||||
|
||||
- id: question
|
||||
translation: 问题
|
||||
|
||||
- id: answer
|
||||
translation: 答案
|
||||
|
||||
- id: accepted_answer
|
||||
translation: 已采纳的回答
|
||||
|
||||
- id: other_answers
|
||||
translation: 其他回答
|
||||
|
||||
- id: questions
|
||||
translation: 问题
|
||||
|
||||
- id: questions_count
|
||||
translation: 个问题
|
||||
|
||||
- id: related_questions
|
||||
translation: 相关问题
|
||||
|
||||
- id: search_questions
|
||||
translation: 搜索问题...
|
||||
|
||||
- id: no_questions_yet
|
||||
translation: 尚无问题
|
||||
|
||||
- id: faq
|
||||
translation: 常见问题
|
||||
|
||||
- id: faqs
|
||||
translation: 常见问题
|
||||
|
||||
- id: browse_by_category
|
||||
translation: 按类别浏览
|
||||
|
||||
# General extras
|
||||
|
||||
- id: about_me
|
||||
translation: 职业简介
|
||||
|
||||
- id: backlinks
|
||||
translation: 反向链接
|
||||
|
||||
- id: days
|
||||
translation: 天
|
||||
|
||||
- id: hours
|
||||
translation: 小时
|
||||
|
||||
- id: minutes
|
||||
translation: 分钟
|
||||
|
||||
- id: seconds
|
||||
translation: 秒
|
||||
|
||||
- id: docs
|
||||
translation: 文档
|
||||
|
||||
- id: featured
|
||||
translation: 精选
|
||||
|
||||
- id: read_more
|
||||
translation: 阅读更多
|
||||
|
||||
# Feedback widget
|
||||
|
||||
- id: feedback_widget_title
|
||||
translation: 反馈
|
||||
|
||||
- id: feedback_widget_question
|
||||
translation: 此页面有帮助吗?
|
||||
|
||||
- id: feedback_widget_answer_positive
|
||||
translation: 😍 是
|
||||
|
||||
- id: feedback_widget_answer_negative
|
||||
translation: 😡 否
|
||||
|
||||
- id: how_to_cite
|
||||
translation: 如何引用
|
||||
@@ -0,0 +1,155 @@
|
||||
{{/*
|
||||
Hugo Blox Slides Embed Component - Reusable iframe embed with fullscreen support
|
||||
Usage: {{ partial "components/slides-embed.html" (dict "page" . "slides_slug" .Params.slides) }}
|
||||
|
||||
Params:
|
||||
- page: current page context
|
||||
- slides_slug: slug of slides to embed (e.g., "example")
|
||||
- show_actions: (optional) show open/speaker notes links, default true
|
||||
- title: (optional) title for iframe, defaults to page title
|
||||
*/}}
|
||||
|
||||
{{ $page := .page }}
|
||||
{{ $slides_slug := .slides_slug }}
|
||||
{{ $show_actions := .show_actions | default true }}
|
||||
{{ $slides_label := i18n "slides" | default "Slides" }}
|
||||
{{ $present_fullscreen_label := i18n "present_fullscreen" | default "Present (fullscreen)" }}
|
||||
{{ $enter_fullscreen_label := i18n "enter_fullscreen" | default "Enter fullscreen" }}
|
||||
{{ $exit_fullscreen_label := i18n "exit_fullscreen" | default "Exit fullscreen" }}
|
||||
{{ $speaker_notes_hint := i18n "speaker_notes_hint" | default "for speaker notes" }}
|
||||
{{ $slides_not_found_label := i18n "slides_not_found" | default "Slides not found" }}
|
||||
{{ $embed_title := .title | default (printf "%s - %s" $page.Title $slides_label) }}
|
||||
|
||||
{{/* Enable Alpine.js for fullscreen functionality */}}
|
||||
{{ $page.Store.Set "has_alpine" true }}
|
||||
|
||||
{{/* Get slides page */}}
|
||||
{{ $slides_page := site.GetPage (printf "/slides/%s" $slides_slug) }}
|
||||
{{ $scr := newScratch }}
|
||||
{{ if $slides_page }}
|
||||
{{ $scr.Set "slides_url" $slides_page.RelPermalink }}
|
||||
{{ $scr.Set "present_url" $slides_page.RelPermalink }}
|
||||
{{ $scr.Set "embed_url" $slides_page.RelPermalink }}
|
||||
{{ $present_format := $slides_page.OutputFormats.Get "present" }}
|
||||
{{ if not $present_format }}
|
||||
{{ $present_format = $slides_page.OutputFormats.Get "Present" }}
|
||||
{{ end }}
|
||||
{{ with $present_format }}
|
||||
{{ $scr.Set "present_url" .RelPermalink }}
|
||||
{{ $scr.Set "embed_url" (printf "%s?embed=1" .RelPermalink) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $slides_url := $scr.Get "slides_url" }}
|
||||
{{ $present_url := $scr.Get "present_url" | default $slides_url }}
|
||||
{{ $embed_url := $scr.Get "embed_url" | default $slides_url }}
|
||||
|
||||
{{ if $slides_page }}
|
||||
<div
|
||||
x-data="{
|
||||
isFullscreen: false,
|
||||
toggleFullscreen() {
|
||||
const container = this.$refs.slideContainer;
|
||||
if (!this.isFullscreen) {
|
||||
if (container.requestFullscreen) {
|
||||
container.requestFullscreen();
|
||||
} else if (container.webkitRequestFullscreen) {
|
||||
container.webkitRequestFullscreen();
|
||||
} else if (container.msRequestFullscreen) {
|
||||
container.msRequestFullscreen();
|
||||
}
|
||||
} else {
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.webkitExitFullscreen) {
|
||||
document.webkitExitFullscreen();
|
||||
} else if (document.msExitFullscreen) {
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
}"
|
||||
@fullscreenchange.window="isFullscreen = document.fullscreenElement === $refs.slideContainer"
|
||||
@webkitfullscreenchange.window="isFullscreen = document.webkitFullscreenElement === $refs.slideContainer"
|
||||
class="mb-12"
|
||||
>
|
||||
{{/* Slides iframe container - wrapper for fullscreen API */}}
|
||||
<div
|
||||
x-ref="slideContainer"
|
||||
class="relative w-full bg-black rounded-lg shadow-2xl overflow-visible"
|
||||
style="aspect-ratio: 16 / 9;"
|
||||
:class="isFullscreen ? 'h-screen' : ''"
|
||||
>
|
||||
<iframe
|
||||
src="{{ $embed_url }}"
|
||||
class="w-full h-full border-0 rounded-lg"
|
||||
allowfullscreen
|
||||
allow="autoplay"
|
||||
title="{{ $embed_title }}"
|
||||
loading="lazy"
|
||||
></iframe>
|
||||
|
||||
{{/* Fullscreen toggle button - inside container for fullscreen visibility */}}
|
||||
<button
|
||||
@click="toggleFullscreen()"
|
||||
class="absolute top-4 right-4 p-3 bg-white/95 dark:bg-gray-800/95 hover:bg-white dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 rounded-lg shadow-xl border border-gray-200 dark:border-gray-700 transition-all duration-200 hover:scale-110 focus:outline-none focus:ring-2 focus:ring-primary-500 backdrop-blur-sm"
|
||||
:aria-label="isFullscreen ? {{ $exit_fullscreen_label | jsonify }} : {{ $enter_fullscreen_label | jsonify }}"
|
||||
type="button"
|
||||
style="z-index: 9999;"
|
||||
>
|
||||
{{/* Expand icon (when not fullscreen) */}}
|
||||
<svg
|
||||
x-show="!isFullscreen"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4" />
|
||||
</svg>
|
||||
{{/* Compress icon (when fullscreen) */}}
|
||||
<svg
|
||||
x-show="isFullscreen"
|
||||
x-cloak
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{ if $show_actions }}
|
||||
{{/* Action links below embed */}}
|
||||
<div class="mt-4 flex items-center justify-between text-sm text-gray-600 dark:text-gray-400">
|
||||
<div class="flex items-center gap-4">
|
||||
{{/* Open in new tab */}}
|
||||
<a
|
||||
href="{{ $present_url }}"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
class="inline-flex items-center gap-1 hover:text-primary-600 dark:hover:text-primary-400 transition-colors"
|
||||
>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" />
|
||||
</svg>
|
||||
<span>{{ $present_fullscreen_label }}</span>
|
||||
</a>
|
||||
|
||||
{{/* Presentation mode hint */}}
|
||||
<span class="text-xs">
|
||||
<kbd class="px-2 py-1 text-xs font-semibold text-gray-800 bg-gray-100 border border-gray-200 rounded dark:bg-gray-600 dark:text-gray-100 dark:border-gray-500">S</kbd>
|
||||
{{ $speaker_notes_hint }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ else }}
|
||||
<p class="text-sm text-red-600 dark:text-red-400">{{ $slides_not_found_label }}: {{ $slides_slug }}</p>
|
||||
{{ end }}
|
||||
@@ -89,22 +89,46 @@
|
||||
|
||||
{{/* 2b) Slides relation parameter (legacy but common) */}}
|
||||
{{ with $page.Params.slides }}
|
||||
{{ with (site.GetPage (printf "slides/%s" .)) }}
|
||||
{{ $typeF := "slides" }}
|
||||
{{ $urlF := .RelPermalink }}
|
||||
{{ $keyF := printf "%s::%s" $typeF $urlF }}
|
||||
{{ if not ($seen.Get (printf "set.%s" $keyF)) }}
|
||||
{{ $seen.SetInMap "set" $keyF true }}
|
||||
{{ $links = $links | append (dict
|
||||
"type" $typeF
|
||||
"url" $urlF
|
||||
"icon" (index (index $types $typeF) "icon")
|
||||
"labelKey" (index (index $types $typeF) "label_i18n")
|
||||
"contexts" (slice "list" "page")
|
||||
) }}
|
||||
{{ if reflect.IsMap . }}
|
||||
{{/* Skip: slides map is Reveal.js config for slide decks. */}}
|
||||
{{ else if reflect.IsSlice . }}
|
||||
{{ range . }}
|
||||
{{ with (site.GetPage (printf "slides/%s" .)) }}
|
||||
{{ $typeF := "slides" }}
|
||||
{{ $urlF := .RelPermalink }}
|
||||
{{ $keyF := printf "%s::%s" $typeF $urlF }}
|
||||
{{ if not ($seen.Get (printf "set.%s" $keyF)) }}
|
||||
{{ $seen.SetInMap "set" $keyF true }}
|
||||
{{ $links = $links | append (dict
|
||||
"type" $typeF
|
||||
"url" $urlF
|
||||
"icon" (index (index $types $typeF) "icon")
|
||||
"labelKey" (index (index $types $typeF) "label_i18n")
|
||||
"contexts" (slice "list" "page")
|
||||
) }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ warnf "`slides` relation could not resolve to a page for %s" $page.File.Path }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ warnf "`slides` relation could not resolve to a page for %s" $page.File.Path }}
|
||||
{{ with (site.GetPage (printf "slides/%s" .)) }}
|
||||
{{ $typeF := "slides" }}
|
||||
{{ $urlF := .RelPermalink }}
|
||||
{{ $keyF := printf "%s::%s" $typeF $urlF }}
|
||||
{{ if not ($seen.Get (printf "set.%s" $keyF)) }}
|
||||
{{ $seen.SetInMap "set" $keyF true }}
|
||||
{{ $links = $links | append (dict
|
||||
"type" $typeF
|
||||
"url" $urlF
|
||||
"icon" (index (index $types $typeF) "icon")
|
||||
"labelKey" (index (index $types $typeF) "label_i18n")
|
||||
"contexts" (slice "list" "page")
|
||||
) }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ warnf "`slides` relation could not resolve to a page for %s" $page.File.Path }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,5 @@
|
||||
{{ $columns := .config.columns | default 2 }}
|
||||
{{ $len := .config.len | default 1 }}
|
||||
{{/* Grid layout optimized for slide deck previews - 16:9 aspect ratio cards */}}
|
||||
<div class="container px-4 sm:px-6 mx-auto max-w-6xl py-8">
|
||||
<div class="grid gap-6 sm:gap-8 {{ if eq $columns 1 }}max-w-xl mx-auto{{ else if eq $columns 2 }}grid-cols-1 md:grid-cols-2{{ else }}grid-cols-1 md:grid-cols-2 lg:grid-cols-3{{ end }}">
|
||||
@@ -0,0 +1,203 @@
|
||||
{{/* Hugo Blox Slides Gallery View - Optimized for slide deck presentations */}}
|
||||
{{/* Features: 16:9 aspect ratio, play button overlay, slide count, tags, featured badge */}}
|
||||
|
||||
{{ $item := .item }}
|
||||
{{ $link := $item.RelPermalink }}
|
||||
{{ $html_format := $item.OutputFormats.Get "HTML" }}
|
||||
{{ if not $html_format }}
|
||||
{{ $html_format = $item.OutputFormats.Get "html" }}
|
||||
{{ end }}
|
||||
{{ with $html_format }}
|
||||
{{ $link = .RelPermalink }}
|
||||
{{ end }}
|
||||
{{ $present_link := $link }}
|
||||
{{ $present_format := $item.OutputFormats.Get "present" }}
|
||||
{{ if not $present_format }}
|
||||
{{ $present_format = $item.OutputFormats.Get "Present" }}
|
||||
{{ end }}
|
||||
{{ with $present_format }}
|
||||
{{ $present_link = .RelPermalink }}
|
||||
{{ end }}
|
||||
{{ $resource := partial "functions/get_featured_image.html" $item }}
|
||||
{{ $index := .index }}
|
||||
{{ $featured_label := i18n "featured" | default "Featured" }}
|
||||
{{ $details_label := i18n "details" | default "Details" }}
|
||||
{{ $present_label := i18n "present_slides" | default "Present" }}
|
||||
{{ $present_fullscreen_label := i18n "present_fullscreen" | default "Present (fullscreen)" }}
|
||||
{{ $slides_label := i18n "slides" | default "Slides" }}
|
||||
|
||||
{{/* Check if featured/pinned */}}
|
||||
{{ $isFeatured := or $item.Params.featured $item.Params.pinned }}
|
||||
|
||||
{{/* Calculate slide count by counting "---" separators in content */}}
|
||||
{{ $content := $item.RawContent }}
|
||||
{{ $slideCount := 1 }}
|
||||
{{ $separators := findRE "(?m)^---$" $content }}
|
||||
{{ if $separators }}
|
||||
{{ $slideCount = add (len $separators) 1 }}
|
||||
{{/* Subtract 1 for front matter separator if content starts with --- */}}
|
||||
{{ if hasPrefix $content "---" }}
|
||||
{{ $slideCount = sub $slideCount 1 }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{/* Get summary - use description from front matter or truncate content */}}
|
||||
{{ $summary := $item.Description | default $item.Summary | default "" }}
|
||||
{{ $summary = $summary | plainify | truncate 160 }}
|
||||
|
||||
<article class="group relative flex flex-col bg-white dark:bg-zinc-900 rounded-xl shadow-sm ring-1 ring-zinc-900/5 dark:ring-white/10 overflow-hidden transition-all duration-300 hover:shadow-lg hover:shadow-primary-500/10 hover:-translate-y-1{{ if $isFeatured }} ring-2 ring-primary-500/50{{ end }}">
|
||||
{{/* Featured Badge */}}
|
||||
{{ if $isFeatured }}
|
||||
<div class="absolute top-3 left-3 z-10 px-2.5 py-1 rounded-full text-xs font-semibold bg-primary-500 text-white flex items-center gap-1.5 shadow-lg">
|
||||
<svg class="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
|
||||
</svg>
|
||||
{{ $featured_label }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* Slide Preview Image - 16:9 aspect ratio */}}
|
||||
<a href="{{ $present_link }}" target="_blank" rel="noopener" class="block relative aspect-video bg-gradient-to-br from-zinc-100 to-zinc-200 dark:from-zinc-800 dark:to-zinc-900 overflow-hidden" aria-label="{{ printf "%s %s" $present_fullscreen_label ($item.Title | plainify) }}">
|
||||
{{ with $resource }}
|
||||
{{ if strings.Contains .MediaType.SubType "svg" }}
|
||||
<img
|
||||
class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"
|
||||
src="{{ .RelPermalink }}"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
alt="{{ $item.Title | plainify }}">
|
||||
{{ else if ne .MediaType.SubType "gif" }}
|
||||
{{ $image := .Fill "800x450 Center" }}
|
||||
{{ $responsive := partial "functions/process_responsive_image.html" (dict
|
||||
"image" $image
|
||||
"mode" "responsive"
|
||||
"sizes" (slice 400 600 800)
|
||||
"formats" (slice "avif" "webp" "jpg")
|
||||
) }}
|
||||
<img
|
||||
class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"
|
||||
srcset="{{ $responsive.srcset }}"
|
||||
sizes="(max-width: 768px) 100vw, 50vw"
|
||||
src="{{ $responsive.fallback.RelPermalink }}"
|
||||
width="{{ $image.Width }}"
|
||||
height="{{ $image.Height }}"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
{{ if eq $index 0 }}fetchpriority="high"{{ end }}
|
||||
alt="{{ $item.Title | plainify }}">
|
||||
{{ else }}
|
||||
<img
|
||||
class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"
|
||||
src="{{ .RelPermalink }}"
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
alt="{{ $item.Title | plainify }}">
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{/* Fallback: Decorative gradient with slide icon - smaller, cleaner */}}
|
||||
<div class="w-full h-full bg-gradient-to-br from-primary-500/10 via-secondary-500/10 to-primary-700/15 dark:from-primary-600/20 dark:via-secondary-600/15 dark:to-primary-800/25 flex items-center justify-center">
|
||||
<div class="text-center px-4">
|
||||
<svg class="w-8 h-8 mx-auto text-primary-500/40 dark:text-primary-400/40" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5m.75-9l3-3 2.148 2.148A12.061 12.061 0 0116.5 7.605" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* Play button overlay on hover */}}
|
||||
<div class="absolute inset-0 flex items-center justify-center bg-black/0 group-hover:bg-black/30 transition-all duration-300">
|
||||
<div class="w-14 h-14 rounded-full bg-white/90 dark:bg-zinc-900/90 flex items-center justify-center opacity-0 group-hover:opacity-100 transform scale-75 group-hover:scale-100 transition-all duration-300 shadow-lg">
|
||||
<svg class="w-6 h-6 text-primary-600 dark:text-primary-400 ml-1" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M8 5v14l11-7z"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{/* Slide count badge */}}
|
||||
{{ if gt $slideCount 1 }}
|
||||
<div class="absolute bottom-3 right-3 px-2.5 py-1 rounded-full text-xs font-medium bg-black/60 backdrop-blur-sm text-white">
|
||||
{{ $slideCount }} {{ $slides_label | lower }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</a>
|
||||
|
||||
{{/* Content Section */}}
|
||||
<div class="flex flex-col flex-1 p-5">
|
||||
{{/* Tags */}}
|
||||
{{ if $item.Params.tags }}
|
||||
<div class="flex flex-wrap gap-2 mb-3">
|
||||
{{ range first 3 $item.Params.tags }}
|
||||
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900/40 dark:text-primary-300">
|
||||
{{ . }}
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ if gt (len $item.Params.tags) 3 }}
|
||||
<span class="text-xs text-zinc-500 dark:text-zinc-400">+{{ sub (len $item.Params.tags) 3 }}</span>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ $authors := slice }}
|
||||
{{ with $item.Params.authors }}
|
||||
{{ if reflect.IsSlice . }}
|
||||
{{ $authors = . }}
|
||||
{{ else }}
|
||||
{{ $authors = slice . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ if gt (len $authors) 0 }}
|
||||
{{ $author := index $authors 0 }}
|
||||
{{ $profile := partial "functions/get_author_profile" $author }}
|
||||
{{ $avatar := $profile.avatar }}
|
||||
{{ $authorName := $author }}
|
||||
{{ if $profile.has_data }}
|
||||
{{ $authorName = $profile.title }}
|
||||
{{ end }}
|
||||
<div class="flex items-center gap-2 mb-2 text-xs text-zinc-500 dark:text-zinc-400">
|
||||
<div class="relative h-6 w-6 flex-shrink-0">
|
||||
{{ if $avatar }}
|
||||
{{ $avatar_48 := $avatar.Process "Fill 48x48 Center webp" }}
|
||||
<img alt="{{ $authorName }}" class="rounded-full object-cover" src="{{ $avatar_48.RelPermalink }}" width="24" height="24" loading="lazy" decoding="async" />
|
||||
{{ else }}
|
||||
<div class="w-6 h-6 bg-zinc-100 dark:bg-zinc-800 rounded-full flex items-center justify-center">
|
||||
{{ partial "functions/get_icon" (dict "name" "hero/user" "attributes" "class=\"w-4 h-4 text-zinc-500 dark:text-zinc-400\"") }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
<span class="truncate max-w-[10rem]">{{ $authorName }}</span>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* Title */}}
|
||||
<h3 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 group-hover:text-primary-600 dark:group-hover:text-primary-400 transition-colors line-clamp-2 mb-2">
|
||||
<a href="{{ $link }}">{{ $item.Title }}</a>
|
||||
</h3>
|
||||
|
||||
{{/* Summary */}}
|
||||
<p class="text-sm text-zinc-600 dark:text-zinc-400 line-clamp-3 min-h-[3.75rem] mb-3 flex-1">{{ if $summary }}{{ $summary }}{{ else }} {{ end }}</p>
|
||||
|
||||
{{/* Footer: Venue, Year, Details + Present Links */}}
|
||||
<div class="flex items-center justify-between pt-3 border-t border-zinc-100 dark:border-zinc-800 mt-auto">
|
||||
<div class="flex items-center gap-2 text-xs text-zinc-500 dark:text-zinc-500">
|
||||
{{ with $item.Params.venue }}
|
||||
<span class="truncate max-w-[120px]" title="{{ . }}">{{ . }}</span>
|
||||
<span class="text-zinc-300 dark:text-zinc-600">·</span>
|
||||
{{ end }}
|
||||
<time datetime="{{ $item.Date.Format "2006-01-02" }}">
|
||||
{{ $item.Date.Format "2006" }}
|
||||
</time>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<a href="{{ $link }}" class="inline-flex items-center gap-1 text-xs font-medium text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100 transition-colors">
|
||||
<span>{{ $details_label }}</span>
|
||||
</a>
|
||||
<a href="{{ $present_link }}" target="_blank" rel="noopener" class="inline-flex items-center gap-1 text-xs font-medium text-primary-600 dark:text-primary-400 hover:text-primary-700 dark:hover:text-primary-300 transition-colors">
|
||||
<span>{{ $present_label }}</span>
|
||||
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
@@ -67,7 +67,6 @@
|
||||
{{/* Set Alpine.js flag if author notes exist */}}
|
||||
{{ if isset .Params "author_notes" }}
|
||||
{{ .Store.Set "has_alpine" true }}
|
||||
<script>console.log('Author notes detected in events/single.html, Alpine.js should load');</script>
|
||||
{{ end }}
|
||||
|
||||
{{ range $i, $slug := .Params.authors }}
|
||||
@@ -138,117 +137,7 @@
|
||||
|
||||
{{/* EMBEDDED SLIDES SECTION - Replaces featured image for events with slides */}}
|
||||
{{ if .Params.slides }}
|
||||
{{/* Enable Alpine.js for fullscreen functionality */}}
|
||||
{{ .Store.Set "has_alpine" true }}
|
||||
|
||||
{{/* Construct slides URL */}}
|
||||
{{ $slides_page := site.GetPage (printf "/slides/%s" .Params.slides) }}
|
||||
|
||||
{{ if $slides_page }}
|
||||
<div
|
||||
x-data="{
|
||||
isFullscreen: false,
|
||||
toggleFullscreen() {
|
||||
const container = this.$refs.slideContainer;
|
||||
if (!this.isFullscreen) {
|
||||
if (container.requestFullscreen) {
|
||||
container.requestFullscreen();
|
||||
} else if (container.webkitRequestFullscreen) {
|
||||
container.webkitRequestFullscreen();
|
||||
} else if (container.msRequestFullscreen) {
|
||||
container.msRequestFullscreen();
|
||||
}
|
||||
} else {
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.webkitExitFullscreen) {
|
||||
document.webkitExitFullscreen();
|
||||
} else if (document.msExitFullscreen) {
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
}"
|
||||
@fullscreenchange.window="isFullscreen = document.fullscreenElement === $refs.slideContainer"
|
||||
@webkitfullscreenchange.window="isFullscreen = document.webkitFullscreenElement === $refs.slideContainer"
|
||||
class="mb-12"
|
||||
>
|
||||
{{/* Slides iframe container - must contain button for fullscreen visibility */}}
|
||||
<div
|
||||
x-ref="slideContainer"
|
||||
class="relative w-full bg-black rounded-lg shadow-2xl overflow-visible"
|
||||
style="aspect-ratio: 16 / 9;"
|
||||
:class="isFullscreen ? 'h-screen' : ''"
|
||||
>
|
||||
<iframe
|
||||
src="{{ $slides_page.RelPermalink }}"
|
||||
class="w-full h-full border-0 rounded-lg"
|
||||
allowfullscreen
|
||||
allow="autoplay"
|
||||
title="{{ $.Title }} - Slides"
|
||||
loading="lazy"
|
||||
></iframe>
|
||||
|
||||
{{/* Fullscreen toggle button - must be inside fullscreen container */}}
|
||||
<button
|
||||
@click="toggleFullscreen()"
|
||||
class="absolute top-4 right-4 p-3 bg-white/95 dark:bg-gray-800/95 hover:bg-white dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 rounded-lg shadow-xl border border-gray-200 dark:border-gray-700 transition-all duration-200 hover:scale-110 focus:outline-none focus:ring-2 focus:ring-primary-500 backdrop-blur-sm"
|
||||
:aria-label="isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'"
|
||||
type="button"
|
||||
style="z-index: 9999;"
|
||||
>
|
||||
{{/* Expand icon (when not fullscreen) */}}
|
||||
<svg
|
||||
x-show="!isFullscreen"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4" />
|
||||
</svg>
|
||||
{{/* Compress icon (when fullscreen) */}}
|
||||
<svg
|
||||
x-show="isFullscreen"
|
||||
x-cloak
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M9 9V4.5M9 9H4.5M9 9L3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5l5.25 5.25" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{/* Slides metadata */}}
|
||||
<div class="mt-4 flex items-center justify-between text-sm text-gray-600 dark:text-gray-400">
|
||||
<div class="flex items-center gap-4">
|
||||
{{/* Direct link to slides */}}
|
||||
<a
|
||||
href="{{ $slides_page.RelPermalink }}"
|
||||
target="_blank"
|
||||
class="inline-flex items-center gap-1 hover:text-primary-600 dark:hover:text-primary-400 transition-colors"
|
||||
>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" />
|
||||
</svg>
|
||||
<span>View slides in new tab</span>
|
||||
</a>
|
||||
|
||||
{{/* Presentation mode hint */}}
|
||||
<span class="text-xs">
|
||||
<kbd class="px-2 py-1 text-xs font-semibold text-gray-800 bg-gray-100 border border-gray-200 rounded dark:bg-gray-600 dark:text-gray-100 dark:border-gray-500">S</kbd>
|
||||
for speaker notes
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ partial "components/slides-embed.html" (dict "page" . "slides_slug" .Params.slides) }}
|
||||
{{ else }}
|
||||
{{/* Fallback to featured image if no slides */}}
|
||||
{{ $featured := partial "functions/get_featured_image.html" . }}
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
{{ range .Pages }}
|
||||
{{ if isset .Params "author_notes" }}
|
||||
{{ $.Store.Set "has_alpine" true }}
|
||||
<script>console.log('Author notes found in list - Alpine.js enabled');</script>
|
||||
{{ break }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
{{/* Set Alpine.js flag if author notes exist */}}
|
||||
{{ if isset .Params "author_notes" }}
|
||||
{{ .Store.Set "has_alpine" true }}
|
||||
<script>console.log('Author notes detected in single.html, Alpine.js should load');</script>
|
||||
{{ end }}
|
||||
|
||||
{{ range $i, $slug := .Params.authors }}
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
|
||||
import * as params from "@params";
|
||||
|
||||
// Guard against null/undefined slides params - ensures decks render with sensible defaults
|
||||
const slides = params.slides || {};
|
||||
|
||||
// Enable core slide features.
|
||||
var enabledPlugins = [RevealMarkdown, RevealSearch, RevealNotes, RevealMath.KaTeX, RevealZoom];
|
||||
|
||||
@@ -38,15 +41,17 @@ const keysToCamelCase = (o) => {
|
||||
|
||||
// reveal configurations can be included in front matter under slides.reveal
|
||||
var pluginOptions = {};
|
||||
if (typeof params.slides.reveal_options !== "undefined") {
|
||||
pluginOptions = params.slides.reveal_options;
|
||||
if (typeof slides.reveal_options !== "undefined") {
|
||||
pluginOptions = slides.reveal_options;
|
||||
}
|
||||
|
||||
pluginOptions = keysToCamelCase(pluginOptions);
|
||||
|
||||
//enable menu by default if not set
|
||||
// Menu disabled by default (reveal.js-menu@2.1.0 has ESM compatibility issues)
|
||||
// Menu plugin no longer maintained as of 2026-01 (last updated 6 years ago).
|
||||
// TODO: consider removing this plugin as it's unlikely to work with modern browsers.
|
||||
if (typeof pluginOptions.menu_enabled === "undefined") {
|
||||
pluginOptions.menu_enabled = true;
|
||||
pluginOptions.menu_enabled = false;
|
||||
}
|
||||
|
||||
// configure menu if enabled
|
||||
@@ -59,18 +64,18 @@ pluginOptions.plugins = enabledPlugins;
|
||||
Reveal.initialize(pluginOptions);
|
||||
|
||||
// Disable Mermaid by default.
|
||||
if (typeof params.slides.diagram === "undefined") {
|
||||
params.slides.diagram = false;
|
||||
if (typeof slides.diagram === "undefined") {
|
||||
slides.diagram = false;
|
||||
}
|
||||
|
||||
// Configure Mermaid only if diagrams are enabled.
|
||||
if (params.slides.diagram) {
|
||||
if (slides.diagram) {
|
||||
//mermaid options
|
||||
// mermaid: front matter configuration can be used to set mermaid options
|
||||
// You can also use directives (see mermaid documentation)
|
||||
let mermaidOptions = {};
|
||||
if (typeof params.slides.diagram_options !== "undefined") {
|
||||
mermaidOptions = params.slides.diagram_options;
|
||||
if (typeof slides.diagram_options !== "undefined") {
|
||||
mermaidOptions = slides.diagram_options;
|
||||
}
|
||||
|
||||
// `startOnLoad` must be false since diagrams are lazily rendered.
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
outputFormats:
|
||||
Present:
|
||||
mediaType: text/html
|
||||
baseName: index
|
||||
isHTML: true
|
||||
permalinkable: true
|
||||
path: present
|
||||
|
||||
cascade:
|
||||
- _target:
|
||||
path: "/slides/**"
|
||||
kind: "page"
|
||||
outputs:
|
||||
- HTML
|
||||
- Present
|
||||
@@ -1,78 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ site.LanguageCode | default "en-us" }}">
|
||||
{{/*
|
||||
Slides Baseof - Landing page chrome only
|
||||
Presentation output lives in baseof.present.html
|
||||
*/}}
|
||||
|
||||
<!doctype html>
|
||||
{{- $language_code := site.LanguageCode | default "en-us" -}}
|
||||
<html lang="{{$language_code}}" {{ if in site.Data.i18n.rtl.rtl $language_code }}dir="rtl"{{else}}dir="ltr"{{end}}
|
||||
data-wc-theme-default="{{ (lower site.Params.hugoblox.theme.mode) | default "system" }}"
|
||||
data-hbb-relurl="{{ "" | relURL }}">
|
||||
|
||||
<head>
|
||||
|
||||
{{/* Asset versions */}}
|
||||
{{ $cdn_url_reveal := "https://cdn.jsdelivr.net/npm/reveal.js@5.0.4" }}
|
||||
{{ $mermaid_version := "9.1.3" }}
|
||||
{{ $mermaid_sri := "sha256-TIYL00Rhw/8WaoUhYTLX9SKIEFdXxg+yMWSLVUbhiLg=" }}
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="generator" content="HugoBlox Kit {{with site.Data.hugoblox.version}}{{.}}{{end}}">
|
||||
|
||||
{{ with site.Home.OutputFormats.Get "WebAppManifest" }}
|
||||
<link rel="manifest" href="{{ .RelPermalink }}">
|
||||
{{ end }}
|
||||
|
||||
<link rel="icon" type="image/png" href="{{ "media/icon.png" | relURL }}">
|
||||
<link rel="apple-touch-icon" type="image/png" href="{{ "media/icon.png" | relURL }}">
|
||||
|
||||
<link rel="canonical" href="{{ .Permalink }}">
|
||||
|
||||
<title>{{ .Title }} | {{ site.Title }}</title>
|
||||
|
||||
{{/* Load Reveal CSS */}}
|
||||
<link rel="stylesheet" href="{{ $cdn_url_reveal }}/dist/reveal.min.css">
|
||||
{{- $theme := $.Param "slides.theme" | default "black" -}}
|
||||
<link rel="stylesheet" href="{{ $cdn_url_reveal }}/dist/theme/{{ $theme }}.min.css">
|
||||
|
||||
{{/* Hugo Chroma Syntax Highlighter Initialization */}}
|
||||
{{ $hl_theme := $.Param "slides.highlight_style" | default "dracula" }}
|
||||
{{ $hl_theme_path := printf "css/libs/chroma/%s.css" $hl_theme }}
|
||||
{{ if not (fileExists (printf "assets/%s" $hl_theme_path)) }}
|
||||
{{ errorf "Hugo Chroma themes %s.css not found in `css/libs/chroma/`. See https://gohugo.io/commands/hugo_gen_chromastyles/" $hl_theme }}
|
||||
{{ else }}
|
||||
{{ $hl_theme_css := resources.Get $hl_theme_path | minify }}
|
||||
<link rel="stylesheet" href="{{ $hl_theme_css.RelPermalink }}">
|
||||
{{ end }}
|
||||
|
||||
{{/* Load any Reveal CSS customizations */}}
|
||||
{{ $custom_reveal_css := printf "css/reveal_custom.css" }}
|
||||
{{ if (fileExists (printf "assets/%s" $custom_reveal_css)) }}
|
||||
{{ $css_custom := resources.Get "css/reveal_custom.css" }}
|
||||
{{ $style := slice $css_custom | resources.Concat "css/reveal_custom.css" | resources.Minify }}
|
||||
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
|
||||
{{ end }}
|
||||
<title>{{ .Title }} | {{ site.Params.hugoblox.identity.name | default site.Title }}</title>
|
||||
|
||||
{{ partial "site_head" . }}
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{{ block "main" . }}{{ end }}
|
||||
|
||||
{{/* Load Reveal and built-in plugins. */}}
|
||||
<script src="{{ $cdn_url_reveal }}/dist/reveal.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/markdown/markdown.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/notes/notes.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/search/search.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/math/math.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/zoom/zoom.min.js" crossorigin="anonymous"></script>
|
||||
|
||||
{{/* Load third-party Reveal plugins. */}}
|
||||
{{ if $.Param "slides.reveal_options.menu_enabled" | default true}}
|
||||
<script src="https://cdn.jsdelivr.net/npm/reveal.js-menu@2.1.0/plugin.js" integrity="sha256-M6JwAjnRAWmi+sbXURR/yAhWZKYhAw7YXnnLvIxrdGs=" crossorigin="anonymous"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/reveal.js-menu@2.1.0/menu.js" integrity="sha256-l14dklFcW5mWar6w/9KaW0fWVerf3mYr7Wt0+rXzFAA=" crossorigin="anonymous"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js-menu@2.1.0/menu.css" integrity="sha256-0fU8HKLaTjgzfaV9CgSqbsN8ilA3zo6zK1M6rlgULd8=" crossorigin="anonymous">
|
||||
{{ end }}
|
||||
|
||||
{{/* Load Mermaid. */}}
|
||||
{{ if $.Param "slides.diagram" | default false}}
|
||||
{{ printf "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\" title=\"mermaid\"></script>" (printf "https://cdn.jsdelivr.net/npm/mermaid@%s/dist/mermaid.min.js" $mermaid_version) $mermaid_sri | safeHTML }}
|
||||
{{ end }}
|
||||
|
||||
{{/* Initialize slides. */}}
|
||||
{{ $slidejs := resources.Get "js/hugoblox-slides.js" | js.Build (dict "params" (dict "slides" $.Params.slides )) }}
|
||||
<script src="{{ $slidejs.RelPermalink }}"></script>
|
||||
<body class="bg-[var(--color-background)] text-[var(--color-foreground)] page-wrapper" id="top">
|
||||
{{/* Landing page chrome */}}
|
||||
<div id="page-bg"></div>
|
||||
<div class="page-header {{ if site.Params.hugoblox.header.sticky }}sticky top-0 z-30{{ end }}">
|
||||
{{ $show_navbar := ((site.Params.hugoblox.header.enable | default true) | and (ne .Params.header.navbar.enable false)) | or .Params.header.navbar.enable }}
|
||||
{{ if $show_navbar }}
|
||||
{{- $header_config := .Params.header.navbar | default site.Params.hugoblox.header | default dict -}}
|
||||
{{- $block_name := partial "hbx/resolve-block-param" (dict "config" $header_config "context" "header") | default "navbar" -}}
|
||||
{{ $block_path := printf "components/headers/%s.html" $block_name }}
|
||||
{{ if templates.Exists (printf "_partials/%s" $block_path) }}
|
||||
{{ partial $block_path . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="page-body my-10">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
{{ partial "site_footer" . }}
|
||||
</div>
|
||||
|
||||
{{ partial "notification-container" . }}
|
||||
{{ partial "functions/get_hook" (dict "hook" "body-end" "context" .) }}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,86 @@
|
||||
{{/*
|
||||
Present Baseof - Presentation output only
|
||||
*/}}
|
||||
|
||||
<!doctype html>
|
||||
{{- $language_code := site.LanguageCode | default "en-us" -}}
|
||||
<html lang="{{$language_code}}" {{ if in site.Data.i18n.rtl.rtl $language_code }}dir="rtl"{{else}}dir="ltr"{{end}}>
|
||||
<head>
|
||||
|
||||
{{/* Asset versions */}}
|
||||
{{ $cdn_url_reveal := "https://cdn.jsdelivr.net/npm/reveal.js@5.0.4" }}
|
||||
{{ $mermaid_version := "9.1.3" }}
|
||||
{{ $mermaid_sri := "sha256-TIYL00Rhw/8WaoUhYTLX9SKIEFdXxg+yMWSLVUbhiLg=" }}
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="generator" content="HugoBlox Kit {{with site.Data.hugoblox.version}}{{.}}{{end}}">
|
||||
|
||||
{{ with site.Home.OutputFormats.Get "WebAppManifest" }}
|
||||
<link rel="manifest" href="{{ .RelPermalink }}">
|
||||
{{ end }}
|
||||
|
||||
<link rel="icon" type="image/png" href="{{ "media/icon.png" | relURL }}">
|
||||
<link rel="apple-touch-icon" type="image/png" href="{{ "media/icon.png" | relURL }}">
|
||||
|
||||
{{ $landing_url := .Permalink }}
|
||||
{{ with .OutputFormats.Get "HTML" }}
|
||||
{{ $landing_url = .Permalink }}
|
||||
{{ end }}
|
||||
<link rel="canonical" href="{{ $landing_url }}">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
|
||||
<title>{{ .Title }} | {{ site.Params.hugoblox.identity.name | default site.Title }}</title>
|
||||
|
||||
{{/* Load Reveal CSS */}}
|
||||
<link rel="stylesheet" href="{{ $cdn_url_reveal }}/dist/reveal.min.css">
|
||||
{{- $theme := $.Param "slides.theme" | default "black" -}}
|
||||
<link rel="stylesheet" href="{{ $cdn_url_reveal }}/dist/theme/{{ $theme }}.min.css">
|
||||
|
||||
{{/* Hugo Chroma Syntax Highlighter */}}
|
||||
{{ $hl_theme := $.Param "slides.highlight_style" | default "dracula" }}
|
||||
{{ $hl_theme_path := printf "css/libs/chroma/%s.css" $hl_theme }}
|
||||
{{ if fileExists (printf "assets/%s" $hl_theme_path) }}
|
||||
{{ $hl_theme_css := resources.Get $hl_theme_path | minify }}
|
||||
<link rel="stylesheet" href="{{ $hl_theme_css.RelPermalink }}">
|
||||
{{ end }}
|
||||
|
||||
{{/* Reveal print styles (paper or PDF) */}}
|
||||
<script>
|
||||
(function() {
|
||||
const link = document.createElement("link");
|
||||
link.rel = "stylesheet";
|
||||
link.type = "text/css";
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const mode = params.has("print-pdf") ? "pdf" : "paper";
|
||||
link.href = "{{ $cdn_url_reveal }}/dist/print/" + mode + ".css";
|
||||
document.head.appendChild(link);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{{ block "main" . }}{{ end }}
|
||||
|
||||
{{/* Load Reveal and plugins */}}
|
||||
<script src="{{ $cdn_url_reveal }}/dist/reveal.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/markdown/markdown.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/notes/notes.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/search/search.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/math/math.min.js" crossorigin="anonymous"></script>
|
||||
<script src="{{ $cdn_url_reveal }}/plugin/zoom/zoom.min.js" crossorigin="anonymous"></script>
|
||||
|
||||
{{/* Load Mermaid if enabled */}}
|
||||
{{ if $.Param "slides.diagram" | default false}}
|
||||
{{ printf "<script src=\"%s\" integrity=\"%s\" crossorigin=\"anonymous\" title=\"mermaid\"></script>" (printf "https://cdn.jsdelivr.net/npm/mermaid@%s/dist/mermaid.min.js" $mermaid_version) $mermaid_sri | safeHTML }}
|
||||
{{ end }}
|
||||
|
||||
{{/* Initialize Reveal */}}
|
||||
{{ $slidejs := resources.Get "js/hugoblox-slides.js" | js.Build (dict "params" (dict "slides" $.Params.slides )) | fingerprint }}
|
||||
<script src="{{ $slidejs.RelPermalink }}"></script>
|
||||
|
||||
{{ partial "functions/get_hook" (dict "hook" "body-end" "context" .) }}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,212 @@
|
||||
{{ define "main" }}
|
||||
|
||||
{{/* Enable Alpine.js for tag filtering */}}
|
||||
{{ .Store.Set "has_alpine" true }}
|
||||
|
||||
{{/* Collect all unique tags from slides */}}
|
||||
{{ $allTags := slice }}
|
||||
{{ $featuredPages := slice }}
|
||||
{{ $regularPages := slice }}
|
||||
{{ $search_placeholder := i18n "slides_search_placeholder" | default "Search decks by title..." }}
|
||||
{{ $all_label := i18n "all" | default "All" }}
|
||||
{{ $no_decks_label := i18n "slides_no_decks" | default "No slide decks found" }}
|
||||
{{ $no_matches_label := i18n "slides_no_matches" | default "No decks match your filters" }}
|
||||
{{ $clear_filters_label := i18n "clear_filters" | default "Clear filters" }}
|
||||
|
||||
{{ range .Pages }}
|
||||
{{ if .Params.tags }}
|
||||
{{ range .Params.tags }}
|
||||
{{ $allTags = $allTags | append . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ if or .Params.featured .Params.pinned }}
|
||||
{{ $featuredPages = $featuredPages | append . }}
|
||||
{{ else }}
|
||||
{{ $regularPages = $regularPages | append . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $allTags = $allTags | uniq | sort }}
|
||||
|
||||
{{/* Sort featured by date descending, then regular by date descending */}}
|
||||
{{ $featuredPages = sort $featuredPages ".Date" "desc" }}
|
||||
{{ $regularPages = sort $regularPages ".Date" "desc" }}
|
||||
{{ $sortedPages := $featuredPages | append $regularPages }}
|
||||
|
||||
<div class="container mx-auto px-4 sm:px-6 max-w-6xl py-8" x-data="slidesFilter()">
|
||||
|
||||
{{/* Page Header */}}
|
||||
<div class="mb-8">
|
||||
<h1 class="text-3xl md:text-4xl font-bold text-zinc-900 dark:text-zinc-100 mb-2">{{ .Title }}</h1>
|
||||
{{ with .Content }}
|
||||
<div class="prose prose-zinc dark:prose-invert max-w-none">
|
||||
{{ . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{/* Search and Filter Bar */}}
|
||||
<div class="mb-8 space-y-4">
|
||||
{{/* Search input */}}
|
||||
<div class="relative max-w-md">
|
||||
<input
|
||||
type="text"
|
||||
x-model="searchQuery"
|
||||
@input="filterDecks()"
|
||||
placeholder="{{ $search_placeholder }}"
|
||||
class="w-full pl-10 pr-4 py-2.5 rounded-lg border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800 text-zinc-900 dark:text-zinc-100 placeholder-zinc-400 dark:placeholder-zinc-500 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-shadow"
|
||||
>
|
||||
<svg class="absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-zinc-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
{{/* Tag Filter Chips */}}
|
||||
{{ if $allTags }}
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<button
|
||||
@click="setTag('all')"
|
||||
:class="activeTag === 'all' ? 'bg-primary-600 text-white' : 'bg-zinc-100 dark:bg-zinc-800 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200 dark:hover:bg-zinc-700'"
|
||||
class="px-3 py-1.5 rounded-full text-sm font-medium transition-colors"
|
||||
>
|
||||
{{ $all_label }}
|
||||
</button>
|
||||
{{ range $allTags }}
|
||||
<button
|
||||
@click="setTag({{ . | jsonify }})"
|
||||
:class="activeTag === {{ . | jsonify }} ? 'bg-primary-600 text-white' : 'bg-zinc-100 dark:bg-zinc-800 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200 dark:hover:bg-zinc-700'"
|
||||
class="px-3 py-1.5 rounded-full text-sm font-medium transition-colors"
|
||||
>
|
||||
{{ . }}
|
||||
</button>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{/* Decks Grid */}}
|
||||
{{ $view := .Params.view | default "slides-gallery" }}
|
||||
{{ $config := dict
|
||||
"columns" (.Params.columns | default 2)
|
||||
"len" (len $sortedPages)
|
||||
"fill_image" (.Params.fill_image | default true)
|
||||
"show_date" (.Params.show_date | default true)
|
||||
}}
|
||||
|
||||
{{ partial "functions/render_view" (dict "fragment" "start" "page" . "item" . "view" $view "config" $config) }}
|
||||
|
||||
{{ range $index, $item := $sortedPages }}
|
||||
{{ $tags := $item.Params.tags | default (slice) }}
|
||||
{{ $tagsJson := $tags | jsonify }}
|
||||
{{ $authorList := slice }}
|
||||
{{ with $item.Params.authors }}
|
||||
{{ if reflect.IsSlice . }}
|
||||
{{ $authorList = . }}
|
||||
{{ else }}
|
||||
{{ $authorList = slice . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $authorNames := slice }}
|
||||
{{ range $authorList }}
|
||||
{{ $profile := partial "functions/get_author_profile" . }}
|
||||
{{ $authorName := . }}
|
||||
{{ if $profile.has_data }}
|
||||
{{ $authorName = $profile.title }}
|
||||
{{ end }}
|
||||
{{ $authorNames = $authorNames | append $authorName }}
|
||||
{{ end }}
|
||||
{{ $searchParts := slice $item.Title }}
|
||||
{{ with $item.Params.venue }}
|
||||
{{ $searchParts = $searchParts | append . }}
|
||||
{{ end }}
|
||||
{{ if gt (len $authorNames) 0 }}
|
||||
{{ $searchParts = $searchParts | append (delimit $authorNames " ") }}
|
||||
{{ end }}
|
||||
{{ if gt (len $tags) 0 }}
|
||||
{{ $searchParts = $searchParts | append (delimit $tags " ") }}
|
||||
{{ end }}
|
||||
{{ $searchText := (delimit $searchParts " ") | lower }}
|
||||
|
||||
<div
|
||||
class="deck-card"
|
||||
data-tags="{{ $tagsJson }}"
|
||||
data-search="{{ $searchText }}"
|
||||
>
|
||||
{{ partial "functions/render_view" (dict "page" $ "item" $item "view" $view "index" $index "config" $config) }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ partial "functions/render_view" (dict "fragment" "end" "page" . "item" . "view" $view) }}
|
||||
|
||||
{{/* Empty state */}}
|
||||
{{ if eq (len $sortedPages) 0 }}
|
||||
<div class="text-center py-12">
|
||||
<svg class="mx-auto h-12 w-12 text-zinc-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.172 16.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
</svg>
|
||||
<p class="mt-4 text-zinc-600 dark:text-zinc-400">{{ $no_decks_label }}</p>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* No matches empty state */}}
|
||||
<div
|
||||
x-show="noMatches"
|
||||
x-cloak
|
||||
class="text-center py-12"
|
||||
>
|
||||
<svg class="mx-auto h-12 w-12 text-zinc-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.172 16.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
||||
</svg>
|
||||
<p class="mt-4 text-zinc-600 dark:text-zinc-400">{{ $no_matches_label }}</p>
|
||||
<button @click="clearFilters()" class="mt-2 text-primary-600 dark:text-primary-400 hover:underline">
|
||||
{{ $clear_filters_label }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function slidesFilter() {
|
||||
return {
|
||||
activeTag: 'all',
|
||||
searchQuery: '',
|
||||
noMatches: false,
|
||||
|
||||
setTag(tag) {
|
||||
this.activeTag = tag;
|
||||
this.filterDecks();
|
||||
},
|
||||
|
||||
clearFilters() {
|
||||
this.activeTag = 'all';
|
||||
this.searchQuery = '';
|
||||
this.filterDecks();
|
||||
},
|
||||
|
||||
filterDecks() {
|
||||
const cards = document.querySelectorAll('.deck-card');
|
||||
let visibleCount = 0;
|
||||
const query = this.searchQuery.toLowerCase().trim();
|
||||
|
||||
cards.forEach(card => {
|
||||
const tags = JSON.parse(card.dataset.tags || '[]');
|
||||
const searchText = card.dataset.search || '';
|
||||
|
||||
const matchesTag = this.activeTag === 'all' || tags.includes(this.activeTag);
|
||||
const matchesSearch = query === '' || searchText.includes(query);
|
||||
|
||||
if (matchesTag && matchesSearch) {
|
||||
card.style.display = '';
|
||||
visibleCount++;
|
||||
} else {
|
||||
card.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
this.noMatches = visibleCount === 0 && cards.length > 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
{{ end }}
|
||||
@@ -0,0 +1,14 @@
|
||||
{{/*
|
||||
Presenter Layout - Full-screen Reveal.js presentation
|
||||
Uses parent page's slide content
|
||||
Route: /slides/<deck>/present/
|
||||
*/}}
|
||||
|
||||
{{/* Get parent deck page (the actual slides content) */}}
|
||||
{{ $deckPage := .Parent }}
|
||||
{{ if not $deckPage }}
|
||||
{{ $deckPage = . }}
|
||||
{{ end }}
|
||||
|
||||
{{/* Render using modules/slides presentation layout */}}
|
||||
{{ partial "slides" (union (slice $deckPage) $deckPage.Pages) }}
|
||||
@@ -1,3 +1,335 @@
|
||||
{{/*
|
||||
Smart Slides Single Layout
|
||||
Landing page for slide decks.
|
||||
Presentation output is rendered via the present output format.
|
||||
*/}}
|
||||
|
||||
{{ define "main" }}
|
||||
{{ partial "slides" (union (slice .Page) .Pages) }}
|
||||
|
||||
{{ $present_format := .OutputFormats.Get "present" }}
|
||||
{{ $back_to_slides_label := i18n "back_to_slides" | default "Back to Slides" }}
|
||||
{{ $featured_label := i18n "featured" | default "Featured" }}
|
||||
{{ $slides_label := i18n "slides" | default "Slides" }}
|
||||
{{ $abstract_label := i18n "callout_abstract" | default "Abstract" }}
|
||||
{{ $topics_label := i18n "topics" | default "Topics" }}
|
||||
{{ $related_resources_label := i18n "related_resources" | default "Related Resources" }}
|
||||
{{ $present_fullscreen_label := i18n "present_fullscreen" | default "Present (fullscreen)" }}
|
||||
{{ $copy_link_label := i18n "copy_link" | default "Copy Link" }}
|
||||
{{ $copy_citation_label := i18n "copy_citation" | default "Copy citation" }}
|
||||
{{ $copied_label := i18n "btn_copied" | default "Copied" }}
|
||||
{{ $export_pdf_label := i18n "export_pdf_print" | default "Export PDF (print)" }}
|
||||
{{ $print_hint := i18n "slides_print_hint" | default "Opens in print mode - use browser Print > Save as PDF" }}
|
||||
{{ $how_to_cite_label := i18n "how_to_cite" | default "How to cite" }}
|
||||
{{ $citation_label := i18n "citation" | default "Citation" }}
|
||||
{{ $doi_label := i18n "btn_doi" | default "DOI" }}
|
||||
{{ $bibtex_label := i18n "bibtex" | default "BibTeX" }}
|
||||
{{ $download_cite_bib_label := i18n "download_cite_bib" | default "Download cite.bib" }}
|
||||
{{ $lecture_label := i18n "lecture" | default "Lecture" }}
|
||||
|
||||
{{/* LANDING PAGE CONTENT */}}
|
||||
<div id="deck-landing">
|
||||
|
||||
{{/* Get slide metadata */}}
|
||||
{{ $authors := .Params.authors | default (slice) }}
|
||||
{{ $venue := .Params.venue }}
|
||||
{{ $event := .Params.event }}
|
||||
{{ $course := .Params.course }}
|
||||
{{ $lecture := .Params.lecture_number }}
|
||||
{{ $tags := .Params.tags | default (slice) }}
|
||||
{{ $topics := .Params.topics | default $tags }}
|
||||
{{ $description := .Params.abstract | default .Params.summary | default .Description }}
|
||||
{{ $citation := .Params.citation }}
|
||||
|
||||
{{ $authorNames := slice }}
|
||||
{{ $authorList := slice }}
|
||||
{{ with $authors }}
|
||||
{{ if reflect.IsSlice . }}
|
||||
{{ $authorList = . }}
|
||||
{{ else }}
|
||||
{{ $authorList = slice . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ range $authorList }}
|
||||
{{ $profile := partial "functions/get_author_profile" . }}
|
||||
{{ $authorName := . }}
|
||||
{{ if $profile.has_data }}
|
||||
{{ $authorName = $profile.title }}
|
||||
{{ end }}
|
||||
{{ $authorNames = $authorNames | append $authorName }}
|
||||
{{ end }}
|
||||
|
||||
{{/* Build links using HugoBlox standard structure */}}
|
||||
{{ $builtLinks := partial "functions/build_links.html" (dict "page" . "is_list" false) }}
|
||||
|
||||
{{/* Filter links by type for Related Resources section */}}
|
||||
{{ $resourceLinks := slice }}
|
||||
{{ $citationLinks := slice }}
|
||||
{{ range $builtLinks }}
|
||||
{{ if in (slice "pdf" "preprint" "code" "video" "dataset" "demo" "site") .type }}
|
||||
{{ $resourceLinks = $resourceLinks | append . }}
|
||||
{{ else if in (slice "doi" "bibtex") .type }}
|
||||
{{ $citationLinks = $citationLinks | append . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $citation_copy := "" }}
|
||||
{{ if $citation }}
|
||||
{{ $citation_copy = $citation }}
|
||||
{{ else }}
|
||||
{{ range $citationLinks }}
|
||||
{{ if and (eq $citation_copy "") (eq .type "doi") }}
|
||||
{{ $citation_copy = .url }}
|
||||
{{ else if and (eq $citation_copy "") (eq .type "bibtex") }}
|
||||
{{ $citation_copy = .url }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $has_citation_copy := ne $citation_copy "" }}
|
||||
|
||||
{{/* Calculate slide count */}}
|
||||
{{ $content := .RawContent }}
|
||||
{{ $slideCount := 1 }}
|
||||
{{ $separators := findRE "(?m)^---$" $content }}
|
||||
{{ if $separators }}
|
||||
{{ $slideCount = add (len $separators) 1 }}
|
||||
{{ if hasPrefix $content "---" }}
|
||||
{{ $slideCount = sub $slideCount 1 }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<div class="container mx-auto px-4 sm:px-6 max-w-5xl py-12" x-data="{ copied: false, showCitation: false, copyText: {{ $copy_link_label | jsonify }}, citationCopied: false, citationCopyText: {{ $copy_citation_label | jsonify }}, citationValue: {{ $citation_copy | jsonify }} }">
|
||||
|
||||
{{/* Back to library link */}}
|
||||
<a href="{{ "/slides/" | relURL }}" class="inline-flex items-center gap-2 text-sm text-zinc-600 dark:text-zinc-400 hover:text-primary-600 dark:hover:text-primary-400 mb-6 transition-colors">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"/>
|
||||
</svg>
|
||||
{{ $back_to_slides_label }}
|
||||
</a>
|
||||
|
||||
{{/* Main content card */}}
|
||||
<div class="bg-white dark:bg-zinc-900 rounded-2xl shadow-lg ring-1 ring-zinc-900/5 dark:ring-white/10 overflow-hidden mb-8">
|
||||
|
||||
{{/* Hero section with gradient */}}
|
||||
<div class="relative px-8 py-12 bg-gradient-to-br from-primary-600 to-primary-800 dark:from-primary-700 dark:to-primary-900 text-white">
|
||||
{{/* Featured badge */}}
|
||||
{{ if or .Params.featured .Params.pinned }}
|
||||
<div class="absolute top-4 right-4 px-3 py-1 rounded-full text-xs font-semibold bg-white/20 backdrop-blur-sm flex items-center gap-1.5">
|
||||
<svg class="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
|
||||
</svg>
|
||||
{{ $featured_label }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<h1 class="text-3xl md:text-4xl font-bold mb-4">{{ .Title }}</h1>
|
||||
|
||||
{{/* Meta info */}}
|
||||
<div class="flex flex-wrap items-center gap-x-4 gap-y-2 text-sm text-white/80">
|
||||
{{ if gt (len $authorNames) 0 }}
|
||||
<div class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/>
|
||||
</svg>
|
||||
{{ delimit $authorNames ", " }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ with $venue }}
|
||||
<div class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"/>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"/>
|
||||
</svg>
|
||||
{{ . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ with $event }}
|
||||
<div class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 5v2m0 4v2m0 4v2M5 5a2 2 0 00-2 2v3a2 2 0 110 4v3a2 2 0 002 2h14a2 2 0 002-2v-3a2 2 0 110-4V7a2 2 0 00-2-2H5z"/>
|
||||
</svg>
|
||||
{{ . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ if $course }}
|
||||
<div class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/>
|
||||
</svg>
|
||||
{{ $course }}{{ with $lecture }} - {{ $lecture_label }} {{ . }}{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<div class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
{{ .Date | time.Format "January 2006" }}
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
{{ $slideCount }} {{ $slides_label | lower }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{/* Content section */}}
|
||||
<div class="px-8 py-8">
|
||||
{{/* Description/Abstract */}}
|
||||
{{ with $description }}
|
||||
<div class="mb-6">
|
||||
<h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-2">{{ $abstract_label }}</h2>
|
||||
<p class="text-zinc-600 dark:text-zinc-400 leading-relaxed">{{ . }}</p>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* Topics/Tags */}}
|
||||
{{ if $topics }}
|
||||
<div class="mb-6">
|
||||
<h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-2">{{ $topics_label }}</h2>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
{{ range $topics }}
|
||||
<a href="{{ "/slides/" | relURL }}" class="px-3 py-1 rounded-full text-sm font-medium bg-zinc-100 dark:bg-zinc-800 text-zinc-700 dark:text-zinc-300 hover:bg-primary-100 dark:hover:bg-primary-900/40 hover:text-primary-700 dark:hover:text-primary-300 transition-colors">
|
||||
{{ . }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* Related Resources - Use HugoBlox standard links */}}
|
||||
{{ if $resourceLinks }}
|
||||
<div class="mb-6">
|
||||
<h2 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-2">{{ $related_resources_label }}</h2>
|
||||
<div class="flex flex-wrap gap-3">
|
||||
{{ range $resourceLinks }}
|
||||
{{ $linkLabel := .label }}
|
||||
{{ with .labelKey }}
|
||||
{{ $linkLabel = i18n . | default $linkLabel }}
|
||||
{{ end }}
|
||||
{{ $target := "" }}
|
||||
{{ $rel := "" }}
|
||||
{{ $scheme := (urls.Parse .url).Scheme }}
|
||||
{{ if in (slice "http" "https") $scheme }}
|
||||
{{ $target = "_blank" }}
|
||||
{{ $rel = "noopener" }}
|
||||
{{ end }}
|
||||
|
||||
<a href="{{ .url }}" {{ with $target }}target="{{ . }}"{{ end }} {{ with $rel }}rel="{{ . }}"{{ end }} class="inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-zinc-100 dark:bg-zinc-800 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors">
|
||||
{{ partial "functions/get_icon" (dict "name" (.icon | default "hero/link") "attributes" "class='w-4 h-4'") }}
|
||||
{{ $linkLabel }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* Share Panel */}}
|
||||
<div class="flex flex-wrap gap-3 pt-6 border-t border-zinc-100 dark:border-zinc-800 mb-6">
|
||||
{{/* Open Presenter */}}
|
||||
{{ with $present_format }}
|
||||
<a href="{{ .RelPermalink }}" target="_blank" rel="noopener" class="inline-flex items-center gap-2 px-6 py-3 rounded-lg bg-primary-600 hover:bg-primary-700 text-white font-semibold transition-colors shadow-lg shadow-primary-500/25 cursor-pointer">
|
||||
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M8 5v14l11-7z"/>
|
||||
</svg>
|
||||
{{ $present_fullscreen_label }}
|
||||
</a>
|
||||
{{ end }}
|
||||
|
||||
{{/* Copy Link */}}
|
||||
<button
|
||||
@click="navigator.clipboard.writeText('{{ .Permalink }}'); copied = true; copyText = {{ $copied_label | jsonify }}; setTimeout(() => { copied = false; copyText = {{ $copy_link_label | jsonify }}; }, 2000)"
|
||||
class="inline-flex items-center gap-2 px-4 py-3 rounded-lg bg-zinc-100 dark:bg-zinc-800 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors"
|
||||
>
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" x-show="!copied">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
<svg class="w-5 h-5 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24" x-show="copied" x-cloak>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span x-text="copyText">{{ $copy_link_label }}</span>
|
||||
</button>
|
||||
|
||||
{{/* Copy Citation */}}
|
||||
{{ if $has_citation_copy }}
|
||||
<button
|
||||
@click="navigator.clipboard.writeText(citationValue); citationCopied = true; citationCopyText = {{ $copied_label | jsonify }}; setTimeout(() => { citationCopied = false; citationCopyText = {{ $copy_citation_label | jsonify }}; }, 2000)"
|
||||
class="inline-flex items-center gap-2 px-4 py-3 rounded-lg bg-zinc-100 dark:bg-zinc-800 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors"
|
||||
>
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" x-show="!citationCopied">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
<svg class="w-5 h-5 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24" x-show="citationCopied" x-cloak>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
<span x-text="citationCopyText">{{ $copy_citation_label }}</span>
|
||||
</button>
|
||||
{{ end }}
|
||||
|
||||
{{/* Print PDF */}}
|
||||
{{ with $present_format }}
|
||||
<a href="{{ .RelPermalink }}?print-pdf" target="_blank" rel="noopener" class="inline-flex items-center gap-2 px-4 py-3 rounded-lg bg-zinc-100 dark:bg-zinc-800 text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200 dark:hover:bg-zinc-700 transition-colors" title="{{ $print_hint }}">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
||||
</svg>
|
||||
{{ $export_pdf_label }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{/* Citation Section - Use HugoBlox standard links + citation field */}}
|
||||
{{ if or $citation $citationLinks }}
|
||||
<div class="pt-6 border-t border-zinc-100 dark:border-zinc-800">
|
||||
<button
|
||||
@click="showCitation = !showCitation"
|
||||
class="flex items-center gap-2 text-sm font-medium text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100 transition-colors"
|
||||
>
|
||||
<svg class="w-4 h-4 transition-transform" :class="showCitation && 'rotate-90'" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
|
||||
</svg>
|
||||
{{ $how_to_cite_label }}
|
||||
</button>
|
||||
<div x-show="showCitation" x-transition class="mt-3 space-y-3">
|
||||
{{ with $citation }}
|
||||
<div>
|
||||
<h4 class="text-xs font-semibold text-zinc-500 dark:text-zinc-400 mb-1">{{ $citation_label }}</h4>
|
||||
<pre class="p-4 bg-zinc-50 dark:bg-zinc-800/50 rounded-lg text-sm text-zinc-700 dark:text-zinc-300 overflow-x-auto"><code>{{ . }}</code></pre>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{/* DOI and BibTeX from standard links structure */}}
|
||||
{{ range $citationLinks }}
|
||||
{{ if eq .type "doi" }}
|
||||
<div>
|
||||
<h4 class="text-xs font-semibold text-zinc-500 dark:text-zinc-400 mb-1">{{ $doi_label }}</h4>
|
||||
<a href="{{ .url }}" target="_blank" rel="noopener" class="text-sm text-primary-600 dark:text-primary-400 hover:underline">
|
||||
{{ .url | replaceRE "^https://doi.org/" "" }}
|
||||
</a>
|
||||
</div>
|
||||
{{ else if eq .type "bibtex" }}
|
||||
<div>
|
||||
<h4 class="text-xs font-semibold text-zinc-500 dark:text-zinc-400 mb-1">{{ $bibtex_label }}</h4>
|
||||
<a href="{{ .url }}" class="text-sm text-primary-600 dark:text-primary-400 hover:underline">
|
||||
{{ $download_cite_bib_label }}
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{ end }}
|
||||
@@ -0,0 +1,3 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "slides" (union (slice .Page) .Pages) }}
|
||||
{{ end }}
|
||||
Reference in new issue
Block a user