jekyll-theme-modootoday 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +182 -0
- data/LICENSE +21 -0
- data/README.ko.md +115 -0
- data/README.md +112 -0
- data/RULES.md +120 -0
- data/_includes/footer-custom.html +5 -0
- data/_includes/head-custom.html +1 -0
- data/_includes/modootoday/actions.html +17 -0
- data/_includes/modootoday/archive-years.html +30 -0
- data/_includes/modootoday/archive.html +44 -0
- data/_includes/modootoday/blog/card.html +23 -0
- data/_includes/modootoday/blog/config.html +17 -0
- data/_includes/modootoday/blog/list.html +13 -0
- data/_includes/modootoday/blog/pager.html +15 -0
- data/_includes/modootoday/blog/reading-time.html +10 -0
- data/_includes/modootoday/blog/select.html +18 -0
- data/_includes/modootoday/brand/icon.html +39 -0
- data/_includes/modootoday/brand/logo.html +7 -0
- data/_includes/modootoday/breadcrumb.html +22 -0
- data/_includes/modootoday/config.html +41 -0
- data/_includes/modootoday/detail/cover.html +5 -0
- data/_includes/modootoday/detail/cta.html +13 -0
- data/_includes/modootoday/detail/facts.html +31 -0
- data/_includes/modootoday/detail/jsonld.html +34 -0
- data/_includes/modootoday/directory/date-tile.html +2 -0
- data/_includes/modootoday/directory/filter.html +7 -0
- data/_includes/modootoday/directory/ics.html +17 -0
- data/_includes/modootoday/directory/item.html +18 -0
- data/_includes/modootoday/directory/items.html +4 -0
- data/_includes/modootoday/directory/jsonld.html +5 -0
- data/_includes/modootoday/directory/list.html +16 -0
- data/_includes/modootoday/directory/values.html +6 -0
- data/_includes/modootoday/doc/page-actions.html +15 -0
- data/_includes/modootoday/doc/pagination.html +24 -0
- data/_includes/modootoday/doc/sidebar-item.html +11 -0
- data/_includes/modootoday/doc/sidebar.html +28 -0
- data/_includes/modootoday/doc/twin.html +8 -0
- data/_includes/modootoday/docs-extra/head.html +7 -0
- data/_includes/modootoday/docs-extra/jsonld.html +19 -0
- data/_includes/modootoday/head-meta.html +90 -0
- data/_includes/modootoday/home-url.html +4 -0
- data/_includes/modootoday/i18n/ar.html +2 -0
- data/_includes/modootoday/i18n/de.html +2 -0
- data/_includes/modootoday/i18n/el.html +2 -0
- data/_includes/modootoday/i18n/es.html +2 -0
- data/_includes/modootoday/i18n/fa.html +2 -0
- data/_includes/modootoday/i18n/fr.html +2 -0
- data/_includes/modootoday/i18n/id.html +2 -0
- data/_includes/modootoday/i18n/it.html +2 -0
- data/_includes/modootoday/i18n/ja.html +2 -0
- data/_includes/modootoday/i18n/ko.html +2 -0
- data/_includes/modootoday/i18n/ml.html +2 -0
- data/_includes/modootoday/i18n/name.html +2 -0
- data/_includes/modootoday/i18n/pl.html +2 -0
- data/_includes/modootoday/i18n/pt-BR.html +2 -0
- data/_includes/modootoday/i18n/ro.html +2 -0
- data/_includes/modootoday/i18n/ru.html +2 -0
- data/_includes/modootoday/i18n/th.html +2 -0
- data/_includes/modootoday/i18n/tr.html +2 -0
- data/_includes/modootoday/i18n/uk.html +2 -0
- data/_includes/modootoday/i18n/ur-Latn.html +2 -0
- data/_includes/modootoday/i18n/vi.html +2 -0
- data/_includes/modootoday/i18n/zh-CN.html +2 -0
- data/_includes/modootoday/i18n/zh-TW.html +2 -0
- data/_includes/modootoday/i18n.html +163 -0
- data/_includes/modootoday/jsonld/article.html +15 -0
- data/_includes/modootoday/jsonld/author.html +8 -0
- data/_includes/modootoday/jsonld/breadcrumb.html +17 -0
- data/_includes/modootoday/jsonld/entity.html +16 -0
- data/_includes/modootoday/jsonld/graph.html +24 -0
- data/_includes/modootoday/jsonld/profile.html +20 -0
- data/_includes/modootoday/jsonld/props.html +13 -0
- data/_includes/modootoday/jsonld/publisher.html +11 -0
- data/_includes/modootoday/jsonld/type.html +29 -0
- data/_includes/modootoday/jsonld/webpage.html +17 -0
- data/_includes/modootoday/jsonld/website.html +9 -0
- data/_includes/modootoday/lang-switch.html +31 -0
- data/_includes/modootoday/link.html +3 -0
- data/_includes/modootoday/links/attrs.html +9 -0
- data/_includes/modootoday/links/content.html +16 -0
- data/_includes/modootoday/markdown/c/details.html +6 -0
- data/_includes/modootoday/markdown/c/faq.html +2 -0
- data/_includes/modootoday/markdown/c/filetree.html +3 -0
- data/_includes/modootoday/markdown/c/gallery.html +5 -0
- data/_includes/modootoday/markdown/c/linkcards.html +2 -0
- data/_includes/modootoday/markdown/c/params.html +3 -0
- data/_includes/modootoday/markdown/c/pricing.html +10 -0
- data/_includes/modootoday/markdown/c/quote.html +6 -0
- data/_includes/modootoday/markdown/c/subscribe.html +6 -0
- data/_includes/modootoday/markdown/components.html +114 -0
- data/_includes/modootoday/markdown/inline.html +46 -0
- data/_includes/modootoday/markdown/llms-pages.html +14 -0
- data/_includes/modootoday/markdown/raw-body.html +6 -0
- data/_includes/modootoday/markdown/sections.html +43 -0
- data/_includes/modootoday/marketing/head.html +6 -0
- data/_includes/modootoday/meta/byline.html +24 -0
- data/_includes/modootoday/meta/post-nav.html +16 -0
- data/_includes/modootoday/meta/related.html +20 -0
- data/_includes/modootoday/meta/series.html +11 -0
- data/_includes/modootoday/meta/share.html +4 -0
- data/_includes/modootoday/nav.html +19 -0
- data/_includes/modootoday/news/badge.html +4 -0
- data/_includes/modootoday/news/front.html +30 -0
- data/_includes/modootoday/news/notes.html +10 -0
- data/_includes/modootoday/page-meta.html +16 -0
- data/_includes/modootoday/pages/error.html +13 -0
- data/_includes/modootoday/pages/hero/scene.html +27 -0
- data/_includes/modootoday/pages/hero/sparks.html +6 -0
- data/_includes/modootoday/pages/hero.html +11 -0
- data/_includes/modootoday/pages/search-form.html +14 -0
- data/_includes/modootoday/search.json +11 -0
- data/_includes/modootoday/stylesheets.html +36 -0
- data/_includes/modootoday/t.html +7 -0
- data/_includes/modootoday/theme-color.html +19 -0
- data/_includes/modootoday/toc.html +17 -0
- data/_includes/modootoday/tokens.html +11 -0
- data/_includes/sections/showcase.html +18 -0
- data/_layouts/archive.html +6 -0
- data/_layouts/author.html +19 -0
- data/_layouts/blog.html +28 -0
- data/_layouts/book.html +21 -0
- data/_layouts/brand.html +21 -0
- data/_layouts/case-study.html +5 -0
- data/_layouts/changelog.html +24 -0
- data/_layouts/contact.html +27 -0
- data/_layouts/course.html +21 -0
- data/_layouts/default.html +87 -0
- data/_layouts/detail.html +31 -0
- data/_layouts/directory.html +12 -0
- data/_layouts/doc.html +27 -0
- data/_layouts/download.html +21 -0
- data/_layouts/episode.html +5 -0
- data/_layouts/error.html +7 -0
- data/_layouts/event.html +5 -0
- data/_layouts/events.html +6 -0
- data/_layouts/feature.html +18 -0
- data/_layouts/feed.html +35 -0
- data/_layouts/glossary.html +24 -0
- data/_layouts/home.html +7 -0
- data/_layouts/hub.html +16 -0
- data/_layouts/integrations.html +7 -0
- data/_layouts/job.html +5 -0
- data/_layouts/jobs.html +7 -0
- data/_layouts/legal.html +21 -0
- data/_layouts/links.html +18 -0
- data/_layouts/llms-full.html +8 -0
- data/_layouts/llms.html +32 -0
- data/_layouts/minimal.html +8 -0
- data/_layouts/news-article.html +6 -0
- data/_layouts/news.html +22 -0
- data/_layouts/portfolio.html +7 -0
- data/_layouts/post.html +54 -0
- data/_layouts/pricing.html +32 -0
- data/_layouts/project.html +5 -0
- data/_layouts/redirect.html +21 -0
- data/_layouts/reference.html +24 -0
- data/_layouts/resume.html +50 -0
- data/_layouts/roadmap.html +22 -0
- data/_layouts/search.html +8 -0
- data/_layouts/sponsors.html +7 -0
- data/_layouts/team.html +7 -0
- data/_layouts/twin.html +2 -0
- data/_layouts/wide.html +7 -0
- data/_sass/modootoday/_access.scss +12 -0
- data/_sass/modootoday/_core.scss +18 -0
- data/_sass/modootoday/_settings.scss +5 -0
- data/_sass/modootoday/_sheet.scss +6 -0
- data/_sass/modootoday/base/_bidi.scss +8 -0
- data/_sass/modootoday/base/_code.scss +18 -0
- data/_sass/modootoday/base/_interaction.scss +6 -0
- data/_sass/modootoday/base/_prose.scss +32 -0
- data/_sass/modootoday/base/_reset.scss +14 -0
- data/_sass/modootoday/base/_table.scss +8 -0
- data/_sass/modootoday/blog/_article.scss +27 -0
- data/_sass/modootoday/blog/_cards.scss +36 -0
- data/_sass/modootoday/blog/_index.scss +10 -0
- data/_sass/modootoday/blog/_news.scss +26 -0
- data/_sass/modootoday/blog/_post.scss +9 -0
- data/_sass/modootoday/components/core/chrome/_banner.scss +7 -0
- data/_sass/modootoday/components/core/chrome/_breadcrumb.scss +10 -0
- data/_sass/modootoday/components/core/chrome/_nav.scss +39 -0
- data/_sass/modootoday/components/core/chrome/_pagination.scss +10 -0
- data/_sass/modootoday/components/core/chrome/_theme-toggle.scss +16 -0
- data/_sass/modootoday/components/core/inline/_badge.scss +15 -0
- data/_sass/modootoday/components/core/inline/_callout.scss +14 -0
- data/_sass/modootoday/components/core/inline/_code-copy.scss +11 -0
- data/_sass/modootoday/components/core/inline/_code.scss +11 -0
- data/_sass/modootoday/components/core/inline/_cta.scss +11 -0
- data/_sass/modootoday/components/core/inline/_embed.scss +6 -0
- data/_sass/modootoday/components/core/inline/_figure.scss +9 -0
- data/_sass/modootoday/components/core/inline/_footnotes.scss +6 -0
- data/_sass/modootoday/components/core/inline/_hero.scss +8 -0
- data/_sass/modootoday/components/core/inline/_kbd.scss +6 -0
- data/_sass/modootoday/components/core/inline/_progress.scss +8 -0
- data/_sass/modootoday/components/doc/_page-actions.scss +10 -0
- data/_sass/modootoday/components/doc/_sidebar.scss +31 -0
- data/_sass/modootoday/components/doc/_toc.scss +19 -0
- data/_sass/modootoday/components/loading/_loading.scss +33 -0
- data/_sass/modootoday/components/search/_search.scss +36 -0
- data/_sass/modootoday/components/section/showcase/_card.scss +15 -0
- data/_sass/modootoday/components/section/showcase/_cta.scss +7 -0
- data/_sass/modootoday/components/section/showcase/_gallery.scss +15 -0
- data/_sass/modootoday/components/section/showcase/_linkcards.scss +12 -0
- data/_sass/modootoday/components/section/showcase/_pricing.scss +12 -0
- data/_sass/modootoday/components/section/showcase/_quote.scss +7 -0
- data/_sass/modootoday/components/section/showcase/_subscribe.scss +9 -0
- data/_sass/modootoday/components/section/structure/_accordion.scss +15 -0
- data/_sass/modootoday/components/section/structure/_details.scss +15 -0
- data/_sass/modootoday/components/section/structure/_faq.scss +5 -0
- data/_sass/modootoday/components/section/structure/_filetree.scss +13 -0
- data/_sass/modootoday/components/section/structure/_params.scss +8 -0
- data/_sass/modootoday/components/section/structure/_steps.scss +13 -0
- data/_sass/modootoday/components/section/structure/_tabs.scss +21 -0
- data/_sass/modootoday/components/section/structure/_timeline.scss +10 -0
- data/_sass/modootoday/detail/_index.scss +8 -0
- data/_sass/modootoday/detail/_page.scss +25 -0
- data/_sass/modootoday/directory/_filter.scss +12 -0
- data/_sass/modootoday/directory/_grid.scss +18 -0
- data/_sass/modootoday/directory/_index.scss +11 -0
- data/_sass/modootoday/directory/_presets.scss +16 -0
- data/_sass/modootoday/docs-extra/_index.scss +7 -0
- data/_sass/modootoday/docs-extra/_page.scss +37 -0
- data/_sass/modootoday/hero/_index.scss +6 -0
- data/_sass/modootoday/hero/_layout.scss +28 -0
- data/_sass/modootoday/hero/_scene.scss +20 -0
- data/_sass/modootoday/kit/_button.scss +8 -0
- data/_sass/modootoday/layout/_page-meta.scss +9 -0
- data/_sass/modootoday/layout/_safe-area.scss +9 -0
- data/_sass/modootoday/layout/_shell.scss +56 -0
- data/_sass/modootoday/marketing/_forms.scss +11 -0
- data/_sass/modootoday/marketing/_index.scss +10 -0
- data/_sass/modootoday/marketing/_page.scss +31 -0
- data/_sass/modootoday/marketing/_pricing.scss +15 -0
- data/_sass/modootoday/pages/_actions.scss +11 -0
- data/_sass/modootoday/pages/_error.scss +7 -0
- data/_sass/modootoday/pages/_index.scss +11 -0
- data/_sass/modootoday/pages/_legal.scss +17 -0
- data/_sass/modootoday/pages/_search.scss +9 -0
- data/_sass/modootoday/pages/_shells.scss +11 -0
- data/_sass/modootoday/resume/_index.scss +5 -0
- data/_sass/modootoday/resume/_page.scss +27 -0
- data/_sass/modootoday/tokens/_emit.scss +15 -0
- data/_sass/modootoday/tokens/_primitive.scss +18 -0
- data/_sass/modootoday/tokens/_semantic.scss +37 -0
- data/_sass/modootoday/tools/_functions.scss +2 -0
- data/_sass/modootoday/tools/_img-dark.scss +12 -0
- data/_sass/modootoday/tools/_mixins.scss +8 -0
- data/_sass/modootoday.scss +40 -0
- data/assets/css/modootoday/doc.scss +10 -0
- data/assets/css/modootoday/loading.scss +8 -0
- data/assets/css/modootoday/search.scss +8 -0
- data/assets/css/modootoday/showcase/card.scss +7 -0
- data/assets/css/modootoday/showcase/cta.scss +7 -0
- data/assets/css/modootoday/showcase/gallery.scss +7 -0
- data/assets/css/modootoday/showcase/linkcards.scss +7 -0
- data/assets/css/modootoday/showcase/pricing.scss +7 -0
- data/assets/css/modootoday/showcase/quote.scss +7 -0
- data/assets/css/modootoday/showcase/subscribe.scss +7 -0
- data/assets/css/modootoday/structure/accordion.scss +7 -0
- data/assets/css/modootoday/structure/details.scss +7 -0
- data/assets/css/modootoday/structure/faq.scss +7 -0
- data/assets/css/modootoday/structure/filetree.scss +7 -0
- data/assets/css/modootoday/structure/params.scss +7 -0
- data/assets/css/modootoday/structure/steps.scss +7 -0
- data/assets/css/modootoday/structure/tabs.scss +7 -0
- data/assets/css/modootoday/structure/timeline.scss +7 -0
- data/assets/css/modootoday-blog.scss +7 -0
- data/assets/css/modootoday-detail.scss +7 -0
- data/assets/css/modootoday-directory.scss +7 -0
- data/assets/css/modootoday-docs-extra.scss +7 -0
- data/assets/css/modootoday-hero.scss +7 -0
- data/assets/css/modootoday-marketing.scss +7 -0
- data/assets/css/modootoday-pages.scss +7 -0
- data/assets/css/modootoday-resume.scss +7 -0
- data/assets/css/modootoday.scss +17 -0
- data/assets/js/modootoday/accordion.js +13 -0
- data/assets/js/modootoday/code-copy.js +29 -0
- data/assets/js/modootoday/menu.js +19 -0
- data/assets/js/modootoday/scroll-region.js +14 -0
- data/assets/js/modootoday/search-keys.js +18 -0
- data/assets/js/modootoday/search.js +31 -0
- data/assets/js/modootoday/share.js +16 -0
- data/assets/js/modootoday/tabs.js +26 -0
- data/assets/js/modootoday/theme-init.js +2 -0
- data/assets/js/modootoday/theme-toggle.js +17 -0
- data/assets/modootoday/apple-touch-icon.png +0 -0
- data/assets/modootoday/favicon-32.png +0 -0
- data/assets/modootoday/favicon.svg +1 -0
- data/assets/modootoday/hero/dawn-1280.webp +0 -0
- data/assets/modootoday/hero/dawn-640.webp +0 -0
- data/assets/modootoday/hero/dawn-960.webp +0 -0
- data/exe/modootoday-check +7 -0
- data/i18n/ar.yml +130 -0
- data/i18n/de.yml +130 -0
- data/i18n/el.yml +130 -0
- data/i18n/en.yml +131 -0
- data/i18n/es.yml +130 -0
- data/i18n/fa.yml +130 -0
- data/i18n/fr.yml +130 -0
- data/i18n/glossary.yml +61 -0
- data/i18n/id.yml +130 -0
- data/i18n/it.yml +130 -0
- data/i18n/ja.yml +130 -0
- data/i18n/ko.yml +130 -0
- data/i18n/languages.yml +25 -0
- data/i18n/ml.yml +130 -0
- data/i18n/pl.yml +130 -0
- data/i18n/pt-BR.yml +130 -0
- data/i18n/ro.yml +130 -0
- data/i18n/ru.yml +130 -0
- data/i18n/th.yml +130 -0
- data/i18n/tr.yml +130 -0
- data/i18n/uk.yml +130 -0
- data/i18n/ur-Latn.yml +130 -0
- data/i18n/vi.yml +130 -0
- data/i18n/zh-CN.yml +130 -0
- data/i18n/zh-TW.yml +130 -0
- data/lib/jekyll-theme-modootoday.rb +59 -0
- data/lib/modootoday/check/a11y/content.rb +57 -0
- data/lib/modootoday/check/a11y/new_window.rb +64 -0
- data/lib/modootoday/check/blog.rb +72 -0
- data/lib/modootoday/check/build_output.rb +39 -0
- data/lib/modootoday/check/built_parts.rb +40 -0
- data/lib/modootoday/check/cli.rb +61 -0
- data/lib/modootoday/check/component_rules.rb +54 -0
- data/lib/modootoday/check/context.rb +41 -0
- data/lib/modootoday/check/gh_render.rb +21 -0
- data/lib/modootoday/check/github_pages.rb +23 -0
- data/lib/modootoday/check/i18n.rb +92 -0
- data/lib/modootoday/check/layouts/detail.rb +52 -0
- data/lib/modootoday/check/layouts/directory.rb +36 -0
- data/lib/modootoday/check/layouts/docs_extra.rb +84 -0
- data/lib/modootoday/check/layouts/marketing.rb +64 -0
- data/lib/modootoday/check/layouts/shape.rb +38 -0
- data/lib/modootoday/check/layouts/shells.rb +47 -0
- data/lib/modootoday/check/layouts.rb +37 -0
- data/lib/modootoday/check/markdown.rb +39 -0
- data/lib/modootoday/check/page_sections.rb +72 -0
- data/lib/modootoday/check/page_syntax.rb +104 -0
- data/lib/modootoday/check/page_values.rb +30 -0
- data/lib/modootoday/check/pages.rb +31 -0
- data/lib/modootoday/check/registry.rb +69 -0
- data/lib/modootoday/check/site_config.rb +74 -0
- data/lib/modootoday/check/slots.rb +50 -0
- data/lib/modootoday/check/structured_data.rb +97 -0
- data/lib/modootoday/check/stylesheets.rb +28 -0
- data/lib/modootoday/check/twins.rb +69 -0
- data/lib/modootoday/check.rb +22 -0
- data/lib/modootoday/schema/rules.rb +49 -0
- data/lib/modootoday/schema/vocab.txt +2478 -0
- metadata +420 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{%- comment -%}Related posts: same language, most shared tags and categories first, then newest (Liquid only; no LSI).
|
|
2
|
+
Count from modootoday.blog.related (default 3; 0 hides). heading text: news uses "Related coverage" via include.label.{%- endcomment -%}
|
|
3
|
+
{%- if mt_blog_related > 0 and page.related != false -%}
|
|
4
|
+
{%- include modootoday/blog/select.html -%}
|
|
5
|
+
{%- assign _rs = "" | split: "" -%}
|
|
6
|
+
{%- for _score in (1..5) reversed -%}
|
|
7
|
+
{%- for _p in mt_posts -%}{%- if _p.url == page.url -%}{%- continue -%}{%- endif -%}
|
|
8
|
+
{%- assign _n = 0 -%}
|
|
9
|
+
{%- for _t in _p.tags -%}{%- if page.tags contains _t -%}{%- assign _n = _n | plus: 1 -%}{%- endif -%}{%- endfor -%}
|
|
10
|
+
{%- for _t in _p.categories -%}{%- if page.categories contains _t -%}{%- assign _n = _n | plus: 1 -%}{%- endif -%}{%- endfor -%}
|
|
11
|
+
{%- if _n > 5 -%}{%- assign _n = 5 -%}{%- endif -%}
|
|
12
|
+
{%- if _n == _score -%}{%- assign _rs = _rs | push: _p -%}{%- endif -%}
|
|
13
|
+
{%- endfor -%}{%- if _rs.size >= mt_blog_related -%}{%- break -%}{%- endif -%}
|
|
14
|
+
{%- endfor -%}
|
|
15
|
+
{%- if _rs.size > 0 %}
|
|
16
|
+
<section class="mt-related" data-part="related" aria-labelledby="mt-related-title">
|
|
17
|
+
<h2 class="mt-related-title" id="mt-related-title">{{ include.label | default: mt_t_blog_related }}</h2>
|
|
18
|
+
{% include modootoday/blog/list.html posts=_rs limit=mt_blog_related variant="grid" heading="h3" excerpt=false %}
|
|
19
|
+
</section>
|
|
20
|
+
{%- endif -%}{%- endif -%}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{%- comment -%}Series box: front matter series: "Name" groups posts (same language, oldest first); shows "Part n of total" and every part.{%- endcomment -%}
|
|
2
|
+
{%- if page.series -%}
|
|
3
|
+
{%- include modootoday/blog/select.html series=page.series -%}
|
|
4
|
+
{%- assign _sp = mt_posts | reverse -%}
|
|
5
|
+
{%- if _sp.size > 1 -%}
|
|
6
|
+
{%- for _p in _sp -%}{%- if _p.url == page.url -%}{%- assign _sn = forloop.index -%}{%- endif -%}{%- endfor %}
|
|
7
|
+
<nav class="mt-series" data-part="series" aria-label="{{ mt_t_blog_series }}: {{ page.series | escape }}">
|
|
8
|
+
<p class="mt-series-title"><strong>{{ mt_t_blog_series }}: {{ page.series | escape }}</strong> <span>{{ mt_t_blog_series_part | replace: "[n]", _sn | replace: "[total]", _sp.size }}</span></p>
|
|
9
|
+
<ol>{% for _p in _sp %}<li>{% if _p.url == page.url %}<span aria-current="page">{{ _p.title | escape }}</span>{% else %}<a href="{{ _p.url | relative_url }}">{{ _p.title | escape }}</a>{% endif %}</li>{% endfor %}</ol>
|
|
10
|
+
</nav>
|
|
11
|
+
{%- endif -%}{%- endif -%}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{%- comment -%}Copy-link (and native share where available) button; assets/js/modootoday/share.js wires it. Off with modootoday.blog.share: false.{%- endcomment -%}
|
|
2
|
+
{%- if mt_blog_share %}
|
|
3
|
+
<p class="mt-share" data-part="share"><button class="mt-share-button" type="button" data-mt-share data-url="{{ page.url | absolute_url }}" data-title="{{ page.title | escape }}" data-copied="{{ mt_t_blog_copied }}" hidden>{% include modootoday/brand/icon.html name="copy" size=16 %}<span>{{ mt_t_blog_share }}</span></button><span class="mt-sr-only" role="status" aria-live="polite"></span></p>
|
|
4
|
+
{%- endif -%}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{%- comment -%}Header navigation: items {title, url} from _data/nav/<modootoday.nav>.yml (or _data/nav.yml).
|
|
2
|
+
An item with `items:` (a list of {title, url}) is a group: a "More"-style <details> menu from 64rem, plain links below.{%- endcomment -%}
|
|
3
|
+
{%- if mt_nav and mt_components contains "nav" %}
|
|
4
|
+
<nav class="mt-nav" aria-label="{% include modootoday/i18n.html lang=_lang %}{{ mt_t_nav_label }}"><ul>
|
|
5
|
+
{%- for it in mt_nav %}
|
|
6
|
+
{%- if it.items %}
|
|
7
|
+
{%- assign _cur = it.items | where: "url", page.url | first %}
|
|
8
|
+
<li class="mt-nav-group"><details class="mt-menu"><summary{% if _cur %} class="mt-nav-current"{% endif %}>{{ it.title }}{% include modootoday/brand/icon.html name="chevron-down" size=14 %}</summary><ul>
|
|
9
|
+
{%- for sub in it.items %}<li><a href="{% include modootoday/link.html url=sub.url %}"{% include modootoday/links/attrs.html on=sub.new_window target=sub.target url=sub.url %}{% if sub.url == page.url %} aria-current="page"{% endif %}>{{ sub.title }}</a></li>{% endfor -%}
|
|
10
|
+
</ul></details></li>
|
|
11
|
+
{%- for sub in it.items %}
|
|
12
|
+
<li class="mt-nav-flat"><a href="{% include modootoday/link.html url=sub.url %}"{% include modootoday/links/attrs.html on=sub.new_window target=sub.target url=sub.url %}{% if sub.url == page.url %} aria-current="page"{% endif %}>{{ sub.title }}</a></li>
|
|
13
|
+
{%- endfor %}
|
|
14
|
+
{%- else %}
|
|
15
|
+
<li><a href="{% include modootoday/link.html url=it.url %}"{% include modootoday/links/attrs.html on=it.new_window target=it.target url=it.url %}{% if it.url == page.url %} aria-current="page"{% endif %}>{{ it.title }}{% if it.url contains "://" %}{% include modootoday/brand/icon.html name="external" size=12 %}{% endif %}</a></li>
|
|
16
|
+
{%- endif %}
|
|
17
|
+
{%- endfor %}
|
|
18
|
+
</ul></nav>
|
|
19
|
+
{%- endif -%}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{%- comment -%}Breaking / live badge: {% include modootoday/news/badge.html kind="breaking" %} (kind: breaking | live).
|
|
2
|
+
Front matter breaking: true or live: true on a post shows it on cards and the article.{%- endcomment -%}
|
|
3
|
+
{%- if include.kind == "live" -%}<span class="mt-badge mt-badge-live" data-variant="live"><span class="mt-live-dot" aria-hidden="true"></span>{{ mt_t_blog_live }}</span>
|
|
4
|
+
{%- else -%}<span class="mt-badge mt-badge-breaking" data-variant="breaking">{{ mt_t_blog_breaking }}</span>{%- endif -%}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{%- comment -%}News front page: lead story, secondary grid, latest list, then one section per category.
|
|
2
|
+
lead / secondary / latest: counts (defaults 1 / 4 / 6). sections: category names (default modootoday.news.sections, else none).
|
|
3
|
+
A post with featured: true leads; otherwise the newest does. posts: override the selection (default: this language's posts).{%- endcomment -%}
|
|
4
|
+
{%- assign _fp = include.posts -%}{%- unless _fp -%}{%- include modootoday/blog/select.html -%}{%- assign _fp = mt_posts -%}{%- endunless -%}
|
|
5
|
+
{%- assign _fs = include.secondary | default: 4 -%}{%- assign _fl = include.latest | default: 6 -%}
|
|
6
|
+
{%- assign _flead = _fp | where: "featured", true | first | default: _fp.first -%}
|
|
7
|
+
{%- assign _frest = "" | split: "" -%}{%- for _p in _fp -%}{%- if _p.url != _flead.url -%}{%- assign _frest = _frest | push: _p -%}{%- endif -%}{%- endfor -%}
|
|
8
|
+
{%- if _flead %}
|
|
9
|
+
<div class="mt-news-top" data-part="top">
|
|
10
|
+
<div class="mt-news-lead" data-part="lead">{% include modootoday/blog/card.html post=_flead featured=true heading="h2" %}</div>
|
|
11
|
+
<div class="mt-news-secondary" data-part="secondary">{% include modootoday/blog/list.html posts=_frest limit=_fs variant="grid" heading="h3" excerpt=false %}</div>
|
|
12
|
+
</div>
|
|
13
|
+
{%- assign _fo = _fs -%}
|
|
14
|
+
{%- if _frest.size > _fo %}
|
|
15
|
+
<section class="mt-news-latest" data-part="latest" aria-labelledby="mt-news-latest"><h2 id="mt-news-latest">{{ mt_t_blog_latest }}</h2>
|
|
16
|
+
{% include modootoday/blog/list.html posts=_frest offset=_fo limit=_fl variant="list" heading="h3" excerpt=false %}
|
|
17
|
+
</section>
|
|
18
|
+
{%- endif -%}
|
|
19
|
+
{%- assign _fsec = include.sections | default: site.modootoday.news.sections -%}
|
|
20
|
+
{%- for _fc in _fsec -%}
|
|
21
|
+
{%- include modootoday/blog/select.html category=_fc -%}
|
|
22
|
+
{%- if mt_posts.size > 0 %}
|
|
23
|
+
{%- assign _cid = _fc | slugify | prepend: "mt-news-" -%}
|
|
24
|
+
<section class="mt-news-section" data-part="section" data-category="{{ _fc | slugify }}" aria-labelledby="{{ _cid }}"><h2 id="{{ _cid }}">{{ _fc }}</h2>
|
|
25
|
+
{% include modootoday/blog/list.html posts=mt_posts limit=4 variant="grid" heading="h3" excerpt=false %}
|
|
26
|
+
{%- if mt_posts.size > 4 and site.modootoday.archive.categories %}<p class="mt-news-more"><a href="{{ site.modootoday.archive.categories | relative_url }}#categories-{{ _fc | slugify }}">{{ mt_t_blog_more | replace: "[section]", _fc }}</a></p>{% endif %}
|
|
27
|
+
</section>
|
|
28
|
+
{%- endif -%}
|
|
29
|
+
{%- endfor -%}
|
|
30
|
+
{%- endif -%}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{%- comment -%}News article end notes from front matter: correction: "text" (with correction_date:), sources: [{title, url}] or strings, credits: "text".{%- endcomment -%}
|
|
2
|
+
{%- if page.correction %}
|
|
3
|
+
<aside class="mt-callout mt-news-correction" data-variant="warning" data-part="correction"><p class="mt-callout-title">{{ mt_t_blog_correction }}{% if page.correction_date %} · <time datetime="{{ page.correction_date | date_to_xmlschema }}">{{ page.correction_date | date: mt_t_post_date_format }}</time>{% endif %}</p><p>{{ page.correction }}</p></aside>
|
|
4
|
+
{%- endif -%}
|
|
5
|
+
{%- if page.sources.size > 0 %}
|
|
6
|
+
<section class="mt-news-sources" data-part="sources"><h2>{{ mt_t_blog_sources }}</h2><ul>
|
|
7
|
+
{%- for _s in page.sources %}<li>{% if _s.url %}<a href="{{ _s.url }}"{% include modootoday/links/attrs.html on=_s.new_window target=_s.target url=_s.url %}>{{ _s.title | default: _s.url }}</a>{% else %}{{ _s }}{% endif %}</li>{% endfor -%}
|
|
8
|
+
</ul></section>
|
|
9
|
+
{%- endif -%}
|
|
10
|
+
{%- if page.credits %}<p class="mt-news-credits" data-part="credits">{{ page.credits }}</p>{% endif -%}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Optional page footer line (needs modootoday/config.html first).
|
|
3
|
+
site.modootoday.edit_url prefix joined with page.path, e.g. https://github.com/OWNER/REPO/edit/main/docs/
|
|
4
|
+
page.last_modified_at date shown as "Last updated" (front matter, or a plugin that sets it)
|
|
5
|
+
page.edit: false hides the edit link on one page
|
|
6
|
+
{%- endcomment -%}
|
|
7
|
+
{%- include modootoday/i18n.html lang=_lang -%}
|
|
8
|
+
{%- assign _pm_edit = nil -%}
|
|
9
|
+
{%- if site.modootoday.edit_url and page.edit != false and page.path -%}{%- assign _pm_edit = site.modootoday.edit_url | append: page.path -%}{%- endif -%}
|
|
10
|
+
{%- if _pm_edit or page.last_modified_at %}
|
|
11
|
+
<p class="mt-page-meta">
|
|
12
|
+
{%- if page.last_modified_at -%}<span>{{ mt_t_page_updated }} <time datetime="{{ page.last_modified_at | date_to_xmlschema }}">{{ page.last_modified_at | date: "%Y-%m-%d" }}</time></span>{%- endif -%}
|
|
13
|
+
{%- if _pm_edit and page.last_modified_at %} · {% endif -%}
|
|
14
|
+
{%- if _pm_edit -%}<a href="{{ _pm_edit }}" rel="nofollow">{% include modootoday/brand/icon.html name="edit" size=14 %} {{ mt_t_page_edit }}</a>{%- endif -%}
|
|
15
|
+
</p>
|
|
16
|
+
{%- endif -%}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{%- comment -%}Error body for include.status (404 default, 410, 500): localized title and text, then the page body and a home link.{%- endcomment -%}
|
|
2
|
+
{%- include modootoday/i18n.html -%}{%- include modootoday/home-url.html -%}
|
|
3
|
+
{%- assign _s = include.status | default: 404 | append: "" -%}
|
|
4
|
+
{%- case _s -%}
|
|
5
|
+
{%- when "410" -%}{%- assign _et = mt_t_pages_gone -%}{%- assign _ex = mt_t_pages_gone_text -%}
|
|
6
|
+
{%- when "500" -%}{%- assign _et = mt_t_pages_error -%}{%- assign _ex = mt_t_pages_error_text -%}
|
|
7
|
+
{%- else -%}{%- assign _et = mt_t_pages_not_found -%}{%- assign _ex = mt_t_pages_not_found_text -%}
|
|
8
|
+
{%- endcase %}
|
|
9
|
+
<p class="mt-error-code" aria-hidden="true">{{ _s }}</p>
|
|
10
|
+
<h1>{{ page.heading | default: _et }}</h1>
|
|
11
|
+
<p>{{ _ex }}</p>
|
|
12
|
+
{{ content }}
|
|
13
|
+
<p class="mt-actions"><a href="{{ mt_home | relative_url }}">{{ mt_t_pages_home }}</a></p>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{%- comment -%}Showcase SVG scene. include.k: id suffix (one per copy); include.motion: add the SMIL timeline.
|
|
2
|
+
Colours come from mt-showcase-* classes (hero bundle) so light and dark follow the --mt-* tokens.
|
|
3
|
+
Timeline (all finite, settled by 4.6 s): window 0–0.6 s, code lines 0.4–1.9 s, bars 1.2–2.3 s, cursor 2–4.6 s.{%- endcomment -%}
|
|
4
|
+
{%- assign k = include.k -%}{%- assign m = include.motion -%}
|
|
5
|
+
{%- capture sp %}calcMode="spline" keySplines=".2 .8 .2 1" fill="freeze"{% endcapture -%}
|
|
6
|
+
<defs><linearGradient id="mt-sc-g{{ k }}" x1="0" x2="1"><stop offset="0" class="mt-showcase-s1"/><stop offset="1" class="mt-showcase-s2"/></linearGradient></defs>
|
|
7
|
+
{%- if m %}{% include modootoday/pages/hero/sparks.html %}{% endif %}
|
|
8
|
+
<g class="mt-showcase-card">{% if m %}<animate attributeName="opacity" from="0" to="1" dur=".6s" fill="freeze"/><animateTransform attributeName="transform" type="translate" values="-30 10;0 0" dur=".6s" {{ sp }}/>{% endif %}
|
|
9
|
+
<rect class="mt-showcase-win" x="-10" y="10" width="170" height="110" rx="10"/>
|
|
10
|
+
<circle class="mt-showcase-dot1" cx="4" cy="24" r="3.5"/><circle class="mt-showcase-dot2" cx="15" cy="24" r="3.5"/><circle class="mt-showcase-dot3" cx="26" cy="24" r="3.5"/>
|
|
11
|
+
<g stroke-linecap="round" stroke-width="5" fill="none">
|
|
12
|
+
{%- assign ls = "6,46,80,c1,.4|18,62,110,c2,.9|18,78,70,c3,1.3|6,94,40,c4,1.6" | split: "|" -%}
|
|
13
|
+
{%- for l in ls %}{%- assign a = l | split: "," %}
|
|
14
|
+
<path class="mt-showcase-{{ a[3] }}" d="M{{ a[0] }} {{ a[1] }}h{{ a[2] }}" stroke-dasharray="{{ a[2] }}">{% if m %}<animate attributeName="stroke-dashoffset" values="{{ a[2] }};{{ a[2] }};0" keyTimes="0;.6;1" begin="{{ a[4] | minus: 0.3 }}s" dur=".8s" fill="freeze"/>{% endif %}</path>
|
|
15
|
+
{%- endfor %}</g>
|
|
16
|
+
<rect class="mt-showcase-caret" x="50" y="88" width="2" height="12">{% if m %}<animate attributeName="opacity" values="1;0;1" calcMode="discrete" dur="1s" begin="2s" repeatCount="2" fill="freeze"/>{% endif %}</rect></g>
|
|
17
|
+
<g class="mt-showcase-card"><rect class="mt-showcase-panel" x="270" y="170" width="140" height="100" rx="10"/>
|
|
18
|
+
<rect class="mt-showcase-skel" x="284" y="184" width="56" height="7" rx="3.5"/>
|
|
19
|
+
<g fill="url(#mt-sc-g{{ k }})">
|
|
20
|
+
{%- assign bs = "286,44,1.2|310,32,1.4|334,54,1.6|358,62,1.8" | split: "|" -%}
|
|
21
|
+
{%- for b in bs %}{%- assign a = b | split: "," -%}{%- assign y = 258 | minus: a[1] %}
|
|
22
|
+
<rect x="{{ a[0] }}" width="16" rx="3" y="{{ y }}" height="{{ a[1] }}">{% if m %}<animate attributeName="height" values="0;{{ a[1] }}" begin="{{ a[2] }}s" dur=".5s" {{ sp }}/><animate attributeName="y" values="258;{{ y }}" begin="{{ a[2] }}s" dur=".5s" {{ sp }}/>{% endif %}</rect>
|
|
23
|
+
{%- endfor %}</g></g>
|
|
24
|
+
<path id="mt-sc-p{{ k }}" class="mt-showcase-trail" d="M120 250 C 180 300, 260 120, 330 60"/>
|
|
25
|
+
<g class="mt-showcase-card" transform="translate(300 40)"><rect class="mt-showcase-chip" width="96" height="34" rx="17"/><text class="mt-showcase-chipt" x="48" y="22" text-anchor="middle">mt-btn</text></g>
|
|
26
|
+
<g{% unless m %} transform="translate(330 60)"{% endunless %}><path class="mt-showcase-cursor" d="M0 0l0 16 4.5-4 3 7 3-1.4-3-7 6 0z"/>
|
|
27
|
+
{%- if m %}<animateMotion begin="2s" dur="2.6s" calcMode="spline" keyPoints="0;1" keyTimes="0;1" keySplines=".4 0 .2 1" fill="freeze"><mpath href="#mt-sc-p{{ k }}"/></animateMotion>{% endif %}</g>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{%- comment -%}Showcase sparks: transparent drifting dots (SMIL, 2 runs of 2 s each, then rest). Motion copy only.{%- endcomment -%}
|
|
2
|
+
<g class="mt-showcase-sparks">
|
|
3
|
+
{%- assign ps = "40,200,3,0|90,150,2,.3|200,40,2.5,.6|240,230,2,.2|380,130,3,.5|150,20,2,.8|20,90,2.5,.4" | split: "|" -%}
|
|
4
|
+
{%- for p in ps %}{%- assign a = p | split: "," %}
|
|
5
|
+
<circle cx="{{ a[0] }}" cy="{{ a[1] }}" r="{{ a[2] }}" opacity="0"><animate attributeName="opacity" values="0;.7;0" begin="{{ a[3] }}s" dur="2s" repeatCount="2"/><animateTransform attributeName="transform" type="translate" values="0 0;0 -14" begin="{{ a[3] }}s" dur="2s" repeatCount="2"/></circle>
|
|
6
|
+
{%- endfor %}</g>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{%- comment -%}Home hero: include.hero = {title, text, actions: [{label, url}], image: path or {path, alt, width, height, srcset}} (same hero.image API as the showcase visual); renders nothing without a title.{%- endcomment -%}
|
|
2
|
+
{%- assign _h = include.hero -%}
|
|
3
|
+
{%- if _h.title %}
|
|
4
|
+
<header class="mt-hero">
|
|
5
|
+
<h1 class="mt-hero-title">{{ _h.title }}</h1>
|
|
6
|
+
{%- if _h.text %}<p class="mt-hero-text">{{ _h.text }}</p>{% endif %}
|
|
7
|
+
{%- if _h.actions %}<p class="mt-actions">{% for a in _h.actions %}<a href="{% if a.url contains '://' %}{{ a.url }}{% else %}{{ a.url | relative_url }}{% endif %}">{{ a.label }}</a>{% endfor %}</p>{% endif %}
|
|
8
|
+
{%- assign _hi = _h.image -%}{%- if _hi %}{% assign _hp = _hi.path | default: _hi %}
|
|
9
|
+
<img class="mt-hero-media" src="{{ _hp | relative_url }}"{% if _hi.srcset %} srcset="{{ _hi.srcset }}" sizes="100vw"{% endif %} alt="{{ _hi.alt | default: '' | escape }}" width="{{ _hi.width | default: 1024 }}" height="{{ _hi.height | default: 576 }}" decoding="async" fetchpriority="high">{% endif %}
|
|
10
|
+
</header>
|
|
11
|
+
{%- endif %}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{%- comment -%}No-JavaScript search: GET form to an external engine restricted to this host. Configure
|
|
2
|
+
modootoday.search.fallback (url and query parameter); default DuckDuckGo with site:<host>.{%- endcomment -%}
|
|
3
|
+
{%- include modootoday/i18n.html -%}
|
|
4
|
+
{%- assign _f = site.modootoday.search.fallback -%}
|
|
5
|
+
{%- if _f != false -%}
|
|
6
|
+
{%- assign _host = "/" | absolute_url | split: "://" | last | split: "/" | first -%}
|
|
7
|
+
<form class="mt-search-form" role="search" method="get" action="{{ _f.url | default: 'https://duckduckgo.com/' }}">
|
|
8
|
+
<label for="mt-search-q">{{ mt_t_search_label }}</label>
|
|
9
|
+
<input id="mt-search-q" type="search" name="{{ _f.param | default: 'q' }}" required minlength="2" autocomplete="off" aria-describedby="mt-search-hint">
|
|
10
|
+
<input type="hidden" name="sites" value="{{ _host }}">
|
|
11
|
+
<button class="mt-search-submit" type="submit">{% include modootoday/brand/icon.html name="search" size=16 %}{{ mt_t_search_label }}</button>
|
|
12
|
+
<p id="mt-search-hint" class="mt-search-hint">{{ mt_t_pages_search_hint }}</p>
|
|
13
|
+
</form>
|
|
14
|
+
{%- endif -%}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{%- comment -%}Search index. In your site add search.json: ---\nlayout: null\n---\n{% include modootoday/search.json %}
|
|
2
|
+
Pages with `search: false` or no title are skipped. Text is truncated to 300 words.{%- endcomment -%}
|
|
3
|
+
[{%- assign _first = true -%}
|
|
4
|
+
{%- for p in site.pages -%}{%- if p.title and p.search != false and p.layout != nil -%}{%- unless p.url contains ".json" or p.url contains ".txt" or p.url contains ".md" -%}
|
|
5
|
+
{%- unless _first %},{% endunless -%}{%- assign _first = false -%}
|
|
6
|
+
{"title":{{ p.title | jsonify }},"url":{{ p.url | relative_url | jsonify }},"lang":{{ p.lang | default: site.lang | default: "en" | jsonify }},"text":{{ p.content | markdownify | strip_html | normalize_whitespace | truncatewords: 300, "" | jsonify }}}
|
|
7
|
+
{%- endunless -%}{%- endif -%}{%- endfor -%}
|
|
8
|
+
{%- for p in site.posts -%}{%- if p.search != false -%}
|
|
9
|
+
{%- unless _first %},{% endunless -%}{%- assign _first = false -%}
|
|
10
|
+
{"title":{{ p.title | jsonify }},"url":{{ p.url | relative_url | jsonify }},"lang":{{ p.lang | default: site.lang | default: "en" | jsonify }},"text":{{ p.content | strip_html | normalize_whitespace | truncatewords: 300, "" | jsonify }}}
|
|
11
|
+
{%- endif -%}{%- endfor -%}]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Stylesheet links (needs modootoday/config.html first). Sets mt_page_c ("|tabs|faq|": this page's section components).
|
|
3
|
+
split (default): the core sheet, the context sheets the layout chain names in front matter mt_sheets (doc),
|
|
4
|
+
and one sheet per section component the page's sections: use. Page front matter css: [c, ...] adds more.
|
|
5
|
+
modootoday.css: bundle — only the core sheet, which then holds everything.
|
|
6
|
+
{%- endcomment -%}
|
|
7
|
+
{%- assign mt_page_c = "|" -%}
|
|
8
|
+
{%- for _s in page.sections -%}{%- if _s.c -%}{%- assign mt_page_c = mt_page_c | append: _s.c | append: "|" -%}{%- endif -%}{%- endfor -%}
|
|
9
|
+
{%- assign mt_search_index = site.pages | where: "url", "/search.json" | first -%}
|
|
10
|
+
{%- if mt_components contains "search" and mt_search_index -%}{%- assign mt_page_c = mt_page_c | append: "search|" -%}{%- endif -%}
|
|
11
|
+
{%- if site.modootoday.loading or content contains 'class="mt-spinner' or content contains 'class="mt-skeleton' or content contains 'class="mt-topbar' -%}{%- assign mt_page_c = mt_page_c | append: "loading|" -%}{%- endif -%}
|
|
12
|
+
{%- for _x in layout.mt_css -%}{%- assign mt_page_c = mt_page_c | append: _x | append: "|" -%}{%- endfor -%}
|
|
13
|
+
{%- for _x in page.css -%}{%- assign mt_page_c = mt_page_c | append: _x | append: "|" -%}{%- endfor %}
|
|
14
|
+
{%- comment -%}Blog, news and archive layouts add the separate blog sheet (both modes); front matter blog_css: true opts any page in.{%- endcomment -%}
|
|
15
|
+
{%- assign mt_blog_css = false -%}{%- if page.blog_css or page.layout == "post" or page.layout == "blog" or page.layout == "news" or page.layout == "news-article" or page.layout == "author" or page.layout == "archive" -%}{%- assign mt_blog_css = true -%}{%- endif %}
|
|
16
|
+
<link rel="stylesheet" href="{{ '/assets/css/modootoday.css' | relative_url }}">
|
|
17
|
+
{%- if mt_blog_css %}
|
|
18
|
+
<link rel="stylesheet" href="{{ '/assets/css/modootoday-blog.css' | relative_url }}">
|
|
19
|
+
{%- endif -%}
|
|
20
|
+
{%- comment -%}Optional per-layout bundles: the layout chain and the page may set mt_bundle: "<name> [<name>…]" to add
|
|
21
|
+
assets/css/modootoday-<name>.css (both modes), each on its own budget outside core.{%- endcomment -%}
|
|
22
|
+
{%- assign _mtbn = layout.mt_bundle | append: " " | append: page.mt_bundle -%}{%- if page.hero.visual == "showcase" -%}{%- assign _mtbn = _mtbn | append: " hero" -%}{%- endif -%}{%- assign _mtbn = _mtbn | split: " " | uniq -%}
|
|
23
|
+
{%- for _b in _mtbn -%}{%- if _b != "" and _b != "blog" %}
|
|
24
|
+
<link rel="stylesheet" href="{{ '/assets/css/modootoday-' | append: _b | append: '.css' | relative_url }}">
|
|
25
|
+
{%- endif -%}{%- endfor -%}
|
|
26
|
+
{%- unless mt.css == "bundle" -%}
|
|
27
|
+
{%- assign _ls = layout.mt_sheets | default: "" -%}
|
|
28
|
+
{%- for _s in mt_context_sheets -%}{%- assign _kv = _s | split: ":" -%}{%- assign _k = "|" | append: _kv[0] | append: "|" -%}
|
|
29
|
+
{%- if _ls contains _kv[0] or mt_page_c contains _k %}
|
|
30
|
+
<link rel="stylesheet" href="{{ '/assets/css/modootoday/' | append: _kv[0] | append: '.css' | relative_url }}">
|
|
31
|
+
{%- endif -%}{%- endfor -%}
|
|
32
|
+
{%- for _s in mt_section_sheets -%}{%- assign _kv = _s | split: ":" -%}{%- assign _k = "|" | append: _kv[0] | append: "|" -%}{%- assign _n = _kv[1] | split: "/" | last -%}
|
|
33
|
+
{%- if mt_page_c contains _k and mt_components contains _n %}
|
|
34
|
+
<link rel="stylesheet" href="{{ '/assets/css/modootoday/' | append: _kv[1] | append: '.css' | relative_url }}">
|
|
35
|
+
{%- endif -%}{%- endfor -%}
|
|
36
|
+
{%- endunless -%}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{%- comment -%}Theme string by key: {% include modootoday/t.html key="nav.label" %} (optional n= / name= fill %{n} / %{name}).
|
|
2
|
+
Resolution: site _data/i18n/<lang>.yml, then the theme catalog for the language, then English. Generated by script/i18n-build.{%- endcomment -%}
|
|
3
|
+
{%- include modootoday/i18n.html -%}
|
|
4
|
+
{%- case include.key -%}{%- when "direction" -%}{%- assign _tv = mt_t_direction -%}{%- when "skip" -%}{%- assign _tv = mt_t_skip -%}{%- when "new_window.hint" -%}{%- assign _tv = mt_t_new_window_hint -%}{%- when "new_window.open" -%}{%- assign _tv = mt_t_new_window_open -%}{%- when "callout.note" -%}{%- assign _tv = mt_t_callout_note -%}{%- when "callout.tip" -%}{%- assign _tv = mt_t_callout_tip -%}{%- when "callout.important" -%}{%- assign _tv = mt_t_callout_important -%}{%- when "callout.warning" -%}{%- assign _tv = mt_t_callout_warning -%}{%- when "callout.caution" -%}{%- assign _tv = mt_t_callout_caution -%}{%- when "status.available" -%}{%- assign _tv = mt_t_status_available -%}{%- when "status.partial" -%}{%- assign _tv = mt_t_status_partial -%}{%- when "status.planned" -%}{%- assign _tv = mt_t_status_planned -%}{%- when "task.done" -%}{%- assign _tv = mt_t_task_done -%}{%- when "task.open" -%}{%- assign _tv = mt_t_task_open -%}{%- when "tabs.label" -%}{%- assign _tv = mt_t_tabs_label -%}{%- when "toc.label" -%}{%- assign _tv = mt_t_toc_label -%}{%- when "theme.toggle" -%}{%- assign _tv = mt_t_theme_toggle -%}{%- when "sidebar.label" -%}{%- assign _tv = mt_t_sidebar_label -%}{%- when "page_actions.label" -%}{%- assign _tv = mt_t_page_actions_label -%}{%- when "page_actions.copy" -%}{%- assign _tv = mt_t_page_actions_copy -%}{%- when "page_actions.copy_ai" -%}{%- assign _tv = mt_t_page_actions_copy_ai -%}{%- when "page_actions.view" -%}{%- assign _tv = mt_t_page_actions_view -%}{%- when "page_actions.source" -%}{%- assign _tv = mt_t_page_actions_source -%}{%- when "breadcrumb.label" -%}{%- assign _tv = mt_t_breadcrumb_label -%}{%- when "nav.label" -%}{%- assign _tv = mt_t_nav_label -%}{%- when "nav.back_to_top" -%}{%- assign _tv = mt_t_nav_back_to_top -%}{%- when "pagination.label" -%}{%- assign _tv = mt_t_pagination_label -%}{%- when "pagination.prev" -%}{%- assign _tv = mt_t_pagination_prev -%}{%- when "pagination.next" -%}{%- assign _tv = mt_t_pagination_next -%}{%- when "code.copy" -%}{%- assign _tv = mt_t_code_copy -%}{%- when "code.copied" -%}{%- assign _tv = mt_t_code_copied -%}{%- when "code.label" -%}{%- assign _tv = mt_t_code_label -%}{%- when "code.file" -%}{%- assign _tv = mt_t_code_file -%}{%- when "table.label" -%}{%- assign _tv = mt_t_table_label -%}{%- when "search.label" -%}{%- assign _tv = mt_t_search_label -%}{%- when "page.edit" -%}{%- assign _tv = mt_t_page_edit -%}{%- when "page.updated" -%}{%- assign _tv = mt_t_page_updated -%}{%- when "languages.label" -%}{%- assign _tv = mt_t_languages_label -%}{%- when "post.date_format" -%}{%- assign _tv = mt_t_post_date_format -%}{%- when "post.author" -%}{%- assign _tv = mt_t_post_author -%}{%- when "post.related" -%}{%- assign _tv = mt_t_post_related -%}{%- when "post.share" -%}{%- assign _tv = mt_t_post_share -%}{%- when "fallback.notice" -%}{%- assign _tv = mt_t_fallback_notice -%}{%- when "archive.years" -%}{%- assign _tv = mt_t_archive_years -%}{%- when "archive.tags" -%}{%- assign _tv = mt_t_archive_tags -%}{%- when "archive.categories" -%}{%- assign _tv = mt_t_archive_categories -%}{%- when "archive.posts" -%}{%- assign _tv = mt_t_archive_posts -%}{%- when "archive.empty" -%}{%- assign _tv = mt_t_archive_empty -%}{%- when "blog.featured" -%}{%- assign _tv = mt_t_blog_featured -%}{%- when "blog.read_more" -%}{%- assign _tv = mt_t_blog_read_more -%}{%- when "blog.reading_time" -%}{%- assign _tv = mt_t_blog_reading_time -%}{%- when "blog.by" -%}{%- assign _tv = mt_t_blog_by -%}{%- when "blog.updated" -%}{%- assign _tv = mt_t_blog_updated -%}{%- when "blog.newer" -%}{%- assign _tv = mt_t_blog_newer -%}{%- when "blog.older" -%}{%- assign _tv = mt_t_blog_older -%}{%- when "blog.related" -%}{%- assign _tv = mt_t_blog_related -%}{%- when "blog.series" -%}{%- assign _tv = mt_t_blog_series -%}{%- when "blog.series_part" -%}{%- assign _tv = mt_t_blog_series_part -%}{%- when "blog.share" -%}{%- assign _tv = mt_t_blog_share -%}{%- when "blog.copied" -%}{%- assign _tv = mt_t_blog_copied -%}{%- when "blog.feed" -%}{%- assign _tv = mt_t_blog_feed -%}{%- when "blog.latest" -%}{%- assign _tv = mt_t_blog_latest -%}{%- when "blog.breaking" -%}{%- assign _tv = mt_t_blog_breaking -%}{%- when "blog.live" -%}{%- assign _tv = mt_t_blog_live -%}{%- when "blog.correction" -%}{%- assign _tv = mt_t_blog_correction -%}{%- when "blog.sources" -%}{%- assign _tv = mt_t_blog_sources -%}{%- when "blog.more" -%}{%- assign _tv = mt_t_blog_more -%}{%- when "blog.authors" -%}{%- assign _tv = mt_t_blog_authors -%}{%- when "filetree.label" -%}{%- assign _tv = mt_t_filetree_label -%}{%- when "gallery.close" -%}{%- assign _tv = mt_t_gallery_close -%}{%- when "embed.title" -%}{%- assign _tv = mt_t_embed_title -%}{%- when "pricing.recommended" -%}{%- assign _tv = mt_t_pricing_recommended -%}{%- when "banner.label" -%}{%- assign _tv = mt_t_banner_label -%}{%- when "footnote.back" -%}{%- assign _tv = mt_t_footnote_back -%}{%- when "progress.label" -%}{%- assign _tv = mt_t_progress_label -%}{%- when "subscribe.email" -%}{%- assign _tv = mt_t_subscribe_email -%}{%- when "subscribe.submit" -%}{%- assign _tv = mt_t_subscribe_submit -%}{%- when "params.required" -%}{%- assign _tv = mt_t_params_required -%}{%- when "loading.label" -%}{%- assign _tv = mt_t_loading_label -%}{%- when "pages.not_found" -%}{%- assign _tv = mt_t_pages_not_found -%}{%- when "pages.not_found_text" -%}{%- assign _tv = mt_t_pages_not_found_text -%}{%- when "pages.gone" -%}{%- assign _tv = mt_t_pages_gone -%}{%- when "pages.gone_text" -%}{%- assign _tv = mt_t_pages_gone_text -%}{%- when "pages.error" -%}{%- assign _tv = mt_t_pages_error -%}{%- when "pages.error_text" -%}{%- assign _tv = mt_t_pages_error_text -%}{%- when "pages.home" -%}{%- assign _tv = mt_t_pages_home -%}{%- when "pages.moved" -%}{%- assign _tv = mt_t_pages_moved -%}{%- when "pages.moved_link" -%}{%- assign _tv = mt_t_pages_moved_link -%}{%- when "pages.search_hint" -%}{%- assign _tv = mt_t_pages_search_hint -%}{%- when "layouts.all" -%}{%- assign _tv = mt_t_layouts_all -%}{%- when "layouts.filter" -%}{%- assign _tv = mt_t_layouts_filter -%}{%- when "layouts.role" -%}{%- assign _tv = mt_t_layouts_role -%}{%- when "layouts.client" -%}{%- assign _tv = mt_t_layouts_client -%}{%- when "layouts.year" -%}{%- assign _tv = mt_t_layouts_year -%}{%- when "layouts.stack" -%}{%- assign _tv = mt_t_layouts_stack -%}{%- when "layouts.links" -%}{%- assign _tv = mt_t_layouts_links -%}{%- when "layouts.location" -%}{%- assign _tv = mt_t_layouts_location -%}{%- when "layouts.employment" -%}{%- assign _tv = mt_t_layouts_employment -%}{%- when "layouts.salary" -%}{%- assign _tv = mt_t_layouts_salary -%}{%- when "layouts.posted" -%}{%- assign _tv = mt_t_layouts_posted -%}{%- when "layouts.deadline" -%}{%- assign _tv = mt_t_layouts_deadline -%}{%- when "layouts.apply" -%}{%- assign _tv = mt_t_layouts_apply -%}{%- when "layouts.starts" -%}{%- assign _tv = mt_t_layouts_starts -%}{%- when "layouts.ends" -%}{%- assign _tv = mt_t_layouts_ends -%}{%- when "layouts.venue" -%}{%- assign _tv = mt_t_layouts_venue -%}{%- when "layouts.online" -%}{%- assign _tv = mt_t_layouts_online -%}{%- when "layouts.agenda" -%}{%- assign _tv = mt_t_layouts_agenda -%}{%- when "layouts.tickets" -%}{%- assign _tv = mt_t_layouts_tickets -%}{%- when "layouts.calendar" -%}{%- assign _tv = mt_t_layouts_calendar -%}{%- when "layouts.episode" -%}{%- assign _tv = mt_t_layouts_episode -%}{%- when "layouts.season" -%}{%- assign _tv = mt_t_layouts_season -%}{%- when "layouts.duration" -%}{%- assign _tv = mt_t_layouts_duration -%}{%- when "layouts.listen" -%}{%- assign _tv = mt_t_layouts_listen -%}{%- when "layouts.transcript" -%}{%- assign _tv = mt_t_layouts_transcript -%}{%- when "layouts.monthly" -%}{%- assign _tv = mt_t_layouts_monthly -%}{%- when "layouts.yearly" -%}{%- assign _tv = mt_t_layouts_yearly -%}{%- when "layouts.billing" -%}{%- assign _tv = mt_t_layouts_billing -%}{%- when "layouts.popular" -%}{%- assign _tv = mt_t_layouts_popular -%}{%- when "layouts.download" -%}{%- assign _tv = mt_t_layouts_download -%}{%- when "layouts.version" -%}{%- assign _tv = mt_t_layouts_version -%}{%- when "layouts.colors" -%}{%- assign _tv = mt_t_layouts_colors -%}{%- when "layouts.assets" -%}{%- assign _tv = mt_t_layouts_assets -%}{%- when "layouts.send" -%}{%- assign _tv = mt_t_layouts_send -%}{%- when "layouts.name" -%}{%- assign _tv = mt_t_layouts_name -%}{%- when "layouts.email" -%}{%- assign _tv = mt_t_layouts_email -%}{%- when "layouts.message" -%}{%- assign _tv = mt_t_layouts_message -%}{%- when "layouts.contact" -%}{%- assign _tv = mt_t_layouts_contact -%}{%- when "layouts.added" -%}{%- assign _tv = mt_t_layouts_added -%}{%- when "layouts.changed" -%}{%- assign _tv = mt_t_layouts_changed -%}{%- when "layouts.fixed" -%}{%- assign _tv = mt_t_layouts_fixed -%}{%- when "layouts.removed" -%}{%- assign _tv = mt_t_layouts_removed -%}{%- when "layouts.security" -%}{%- assign _tv = mt_t_layouts_security -%}{%- when "layouts.now" -%}{%- assign _tv = mt_t_layouts_now -%}{%- when "layouts.next" -%}{%- assign _tv = mt_t_layouts_next -%}{%- when "layouts.later" -%}{%- assign _tv = mt_t_layouts_later -%}{%- when "layouts.letters" -%}{%- assign _tv = mt_t_layouts_letters -%}{%- when "layouts.lessons" -%}{%- assign _tv = mt_t_layouts_lessons -%}{%- when "layouts.minutes" -%}{%- assign _tv = mt_t_layouts_minutes -%}{%- when "layouts.module" -%}{%- assign _tv = mt_t_layouts_module -%}{%- when "layouts.chapter" -%}{%- assign _tv = mt_t_layouts_chapter -%}{%- when "layouts.effective" -%}{%- assign _tv = mt_t_layouts_effective -%}{%- when "layouts.experience" -%}{%- assign _tv = mt_t_layouts_experience -%}{%- when "layouts.education" -%}{%- assign _tv = mt_t_layouts_education -%}{%- when "layouts.skills" -%}{%- assign _tv = mt_t_layouts_skills -%}{%- when "layouts.present" -%}{%- assign _tv = mt_t_layouts_present -%}{%- when "layouts.loading" -%}{%- assign _tv = mt_t_layouts_loading -%}{%- when "layouts.contents" -%}{%- assign _tv = mt_t_layouts_contents -%}{%- when "language" -%}{%- capture _tv -%}{%- include modootoday/i18n/name.html code=mt_t_lang -%}{%- endcapture -%}{%- assign _tv = site.data.i18n[mt_t_lang].language | default: _tv -%}{%- else -%}{%- assign _tv = include.key -%}{%- endcase -%}
|
|
5
|
+
{%- if include.n -%}{%- assign _tv = _tv | replace: "%{n}", include.n -%}{%- endif -%}
|
|
6
|
+
{%- if include.name -%}{%- assign _tv = _tv | replace: "%{name}", include.name -%}{%- endif -%}
|
|
7
|
+
{{- _tv -}}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{%- comment -%}
|
|
2
|
+
Browser UI colour (iOS Safari, Android Chrome address bar) matching the page background tokens.
|
|
3
|
+
site.modootoday.theme_color false drops the tags; {light: "#hex", dark: "#hex"} or one "#hex" replaces the defaults
|
|
4
|
+
Defaults follow --mt-background: #ffffff light, #0d1117 dark. With color_scheme light/dark only that colour is emitted.
|
|
5
|
+
{%- endcomment -%}
|
|
6
|
+
{%- assign _tc = site.modootoday.theme_color -%}
|
|
7
|
+
{%- unless _tc == false -%}
|
|
8
|
+
{%- if _tc.light or _tc.dark -%}{%- assign _tcl = _tc.light | default: "#ffffff" -%}{%- assign _tcd = _tc.dark | default: "#0d1117" -%}
|
|
9
|
+
{%- elsif _tc -%}{%- assign _tcl = _tc -%}{%- assign _tcd = _tc -%}
|
|
10
|
+
{%- else -%}{%- assign _tcl = "#ffffff" -%}{%- assign _tcd = "#0d1117" -%}{%- endif -%}
|
|
11
|
+
{%- if mt_color_scheme contains "auto" %}
|
|
12
|
+
<meta name="theme-color" media="(prefers-color-scheme: light)" content="{{ _tcl }}">
|
|
13
|
+
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="{{ _tcd }}">
|
|
14
|
+
{%- elsif mt_color_scheme == "dark" %}
|
|
15
|
+
<meta name="theme-color" content="{{ _tcd }}">
|
|
16
|
+
{%- else %}
|
|
17
|
+
<meta name="theme-color" content="{{ _tcl }}">
|
|
18
|
+
{%- endif -%}
|
|
19
|
+
{%- endunless -%}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{%- comment -%}"On this page" from kramdown auto ids: <h2 id="..."> and <h3 id="...">. Shown with 2+ headings;
|
|
2
|
+
front matter toc: false hides it. Usage: {% include modootoday/toc.html html=html %}{%- endcomment -%}
|
|
3
|
+
{%- if mt_components contains "toc" and page.toc != false -%}
|
|
4
|
+
{%- assign _parts = include.html | split: '<h' -%}
|
|
5
|
+
{%- capture _items -%}{%- for _p in _parts offset: 1 -%}
|
|
6
|
+
{%- assign _lv = _p | slice: 0, 1 -%}
|
|
7
|
+
{%- assign _hd = _p | slice: 1, 5 -%}
|
|
8
|
+
{%- if _hd == ' id="' -%}{%- if _lv == "2" or _lv == "3" -%}
|
|
9
|
+
{%- assign _id = _p | slice: 6, 10000 | split: '"' | first -%}
|
|
10
|
+
{%- assign _body = _p | split: '</h' | first -%}{%- assign _gt = _body | split: '>' | first | append: '>' -%}{%- assign _t = _body | remove_first: _gt | strip_html | strip -%}
|
|
11
|
+
<li class="mt-toc-h{{ _lv }}"><a href="#{{ _id }}">{{ _t }}</a></li>
|
|
12
|
+
{%- endif -%}{%- endif -%}{%- endfor -%}{%- endcapture -%}
|
|
13
|
+
{%- assign _n = _items | split: '<li ' | size | minus: 1 -%}
|
|
14
|
+
{%- if _n >= 2 %}
|
|
15
|
+
<nav class="mt-toc" aria-labelledby="mt-toc-title"><p class="mt-toc-title" id="mt-toc-title">{% include modootoday/i18n.html lang=_lang %}{{ mt_t_toc_label }}</p><ol>{{ _items }}</ol></nav>
|
|
16
|
+
{%- endif -%}
|
|
17
|
+
{%- endif -%}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{%- comment -%}Inline token overrides from site.modootoday.tokens / tokens_dark (keys: semantic names, e.g. primary).
|
|
2
|
+
Values are stripped of ; { } < > ; modootoday-check validates their format.{%- endcomment -%}
|
|
3
|
+
{%- if mt.tokens or mt.tokens_dark -%}
|
|
4
|
+
{%- capture _lb -%}{{ "{" }}{%- endcapture -%}{%- assign _rb = "%7D" | url_decode -%}
|
|
5
|
+
{%- capture _l -%}{%- for t in mt.tokens -%}--mt-{{ t[0] | slugify }}:{{ t[1] | strip | remove: ";" | remove: _lb | remove: _rb | remove: "<" | remove: ">" }};{%- endfor -%}{%- endcapture -%}
|
|
6
|
+
{%- capture _d -%}{%- for t in mt.tokens_dark -%}--mt-{{ t[0] | slugify }}:{{ t[1] | strip | remove: ";" | remove: _lb | remove: _rb | remove: "<" | remove: ">" }};{%- endfor -%}{%- endcapture %}
|
|
7
|
+
<style id="mt-tokens">
|
|
8
|
+
{%- if _l != "" %}:root{{ _lb }}{{ _l }}{{ _rb }}{% endif %}
|
|
9
|
+
{%- if _d != "" %}@media (prefers-color-scheme: dark){{ _lb }}:root:not([data-theme="light"]){{ _lb }}{{ _d }}{{ _rb }}{{ _rb }}:root[data-theme="dark"]{{ _lb }}{{ _d }}{{ _rb }}{% endif -%}
|
|
10
|
+
</style>
|
|
11
|
+
{%- endif -%}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{%- comment -%}Hero visual "showcase" (hero: {visual: showcase}): a background image, a soft token overlay and an
|
|
2
|
+
animated SVG UI scene. Everything is decorative (aria-hidden); the headline, text and links stay in the page Markdown.
|
|
3
|
+
Optional hero.image: a path or {path, srcset ("url 640w, …"), width, height} — the same hero.image API as the home
|
|
4
|
+
layout hero (alt is ignored here: the picture is decorative). Default: the bundled dawn ridgeline.
|
|
5
|
+
Motion is SMIL only (no JS) and settles within 5 s; prefers-reduced-motion shows the settled frame instead.{%- endcomment -%}
|
|
6
|
+
{%- assign _v = include.section -%}
|
|
7
|
+
{%- assign _d = '/assets/modootoday/hero/dawn-' | relative_url -%}
|
|
8
|
+
{%- assign _i = _v.image -%}
|
|
9
|
+
{%- if _i -%}{%- assign _src = _i.path | default: _i | relative_url -%}{%- assign _set = _i.srcset -%}
|
|
10
|
+
{%- else -%}{%- assign _src = _d | append: '1280.webp' -%}
|
|
11
|
+
{%- capture _set %}{{ _d }}640.webp 640w, {{ _d }}960.webp 960w, {{ _d }}1280.webp 1280w{% endcapture -%}{%- endif -%}
|
|
12
|
+
<div class="mt-showcase" aria-hidden="true">
|
|
13
|
+
<img class="mt-showcase-bg" src="{{ _src }}"{% if _set %} srcset="{{ _set }}" sizes="(min-width: 76rem) 76rem, 100vw"{% endif %} alt="" width="{{ _i.width | default: 1280 }}" height="{{ _i.height | default: 720 }}" fetchpriority="high" decoding="async">
|
|
14
|
+
<div class="mt-showcase-art">
|
|
15
|
+
<svg class="mt-showcase-motion" viewBox="0 0 400 300" focusable="false">{% include modootoday/pages/hero/scene.html k="m" motion=true %}</svg>
|
|
16
|
+
<svg class="mt-showcase-still" viewBox="0 0 400 300" focusable="false">{% include modootoday/pages/hero/scene.html k="s" %}</svg>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: doc
|
|
3
|
+
---
|
|
4
|
+
{%- comment -%}md-components v1 — archive layout: page body, then the tag or category archive (front matter archive: tags | categories | years; default tags).{%- endcomment -%}
|
|
5
|
+
{{ content }}
|
|
6
|
+
{% if page.archive == "years" %}{% include modootoday/archive-years.html lang=page.archive_lang %}{% else %}{% include modootoday/archive.html by=page.archive lang=page.archive_lang %}{% endif %}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
---
|
|
4
|
+
{%- comment -%}mt author page: front matter author: <id> (from _data/authors.yml: name, bio, avatar, url), then that author's posts.{%- endcomment -%}
|
|
5
|
+
{%- assign _lang = page.lang | default: site.lang | default: "en" -%}
|
|
6
|
+
{%- include modootoday/i18n.html lang=_lang -%}
|
|
7
|
+
{%- include modootoday/blog/config.html -%}
|
|
8
|
+
{%- assign _au = site.data.authors[page.author] -%}
|
|
9
|
+
<div class="mt-blog mt-author">
|
|
10
|
+
<header class="mt-author-card" data-part="author">
|
|
11
|
+
{%- if _au.avatar %}<img class="mt-avatar" src="{{ _au.avatar | relative_url }}" alt="" width="72" height="72">{% endif %}
|
|
12
|
+
<div><h1>{{ _au.name | default: page.title | default: page.author }}</h1>
|
|
13
|
+
{%- if _au.bio %}<p>{{ _au.bio }}</p>{% endif -%}
|
|
14
|
+
{%- if _au.url %}<p><a href="{{ _au.url }}" rel="me">{{ _au.url | remove: "https://" | remove: "http://" }}</a></p>{% endif %}</div>
|
|
15
|
+
</header>
|
|
16
|
+
{%- if content != "" %}<div class="mt-doc">{{ content }}</div>{% endif -%}
|
|
17
|
+
{%- include modootoday/blog/select.html author=page.author lang=page.posts_lang -%}
|
|
18
|
+
{% include modootoday/blog/list.html posts=mt_posts variant=page.variant %}
|
|
19
|
+
</div>
|
data/_layouts/blog.html
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
---
|
|
4
|
+
{%- comment -%}mt blog index: page body (intro), then post cards and newer/older links. Liquid only (github-pages and Jekyll 4).
|
|
5
|
+
Front matter: variant (list | grid | magazine), featured (true: first card leads), category / tag (filter), lang ("all" mixes languages).
|
|
6
|
+
Pagination: with jekyll-paginate (paginate: N in _config.yml) on index.html the paginator's posts are used;
|
|
7
|
+
otherwise the newest modootoday.blog.per_page posts are shown and an older-posts link goes to archive_url (default the tag archive).{%- endcomment -%}
|
|
8
|
+
{%- assign _lang = page.lang | default: site.lang | default: "en" -%}
|
|
9
|
+
{%- include modootoday/i18n.html lang=_lang -%}
|
|
10
|
+
{%- include modootoday/blog/config.html -%}
|
|
11
|
+
<div class="mt-blog" data-variant="{{ mt_blog_variant }}">
|
|
12
|
+
{%- if content != "" %}
|
|
13
|
+
<header class="mt-blog-intro mt-doc">{{ content }}</header>
|
|
14
|
+
{%- endif -%}
|
|
15
|
+
{%- if paginator.posts -%}{%- assign _bp = paginator.posts -%}{%- assign _bmore = false -%}
|
|
16
|
+
{%- else -%}
|
|
17
|
+
{%- include modootoday/blog/select.html lang=page.posts_lang category=page.category tag=page.tag -%}
|
|
18
|
+
{%- assign _bp = mt_posts -%}{%- assign _bmore = false -%}{%- if mt_posts.size > mt_blog_per_page -%}{%- assign _bmore = true -%}{%- endif -%}
|
|
19
|
+
{%- endif -%}
|
|
20
|
+
{%- assign _bf = page.featured | default: false -%}{%- if mt_blog_variant == "magazine" -%}{%- assign _bf = true -%}{%- endif -%}
|
|
21
|
+
{%- if _bp.size == 0 %}
|
|
22
|
+
<p class="mt-archive-empty">{{ mt_t_archive_empty }}</p>
|
|
23
|
+
{%- else -%}
|
|
24
|
+
{% include modootoday/blog/list.html posts=_bp limit=mt_blog_per_page featured=_bf %}
|
|
25
|
+
{%- endif -%}
|
|
26
|
+
{%- assign _bau = page.archive_url | default: site.modootoday.archive.tags -%}
|
|
27
|
+
{% include modootoday/blog/pager.html more=_bmore url=_bau %}
|
|
28
|
+
</div>
|
data/_layouts/book.html
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
mt_bundle: docs-extra
|
|
4
|
+
mt_main: mt-dx mt-dx-book
|
|
5
|
+
---
|
|
6
|
+
{%- comment -%}book: a book or long guide's cover page. image (cover), author, isbn, pages, chapters: [{title, url}] as a
|
|
7
|
+
numbered contents list, then the body. Structured data: Book with author, isbn, numberOfPages and a Chapter per entry.{%- endcomment -%}
|
|
8
|
+
<article aria-labelledby="mt-dx-title" class="mt-dx-book">
|
|
9
|
+
{%- if page.image %}<img class="mt-dx-cover" src="{{ page.image | relative_url }}" alt="" width="200" height="280" decoding="async">{% endif %}
|
|
10
|
+
<div>
|
|
11
|
+
{%- include modootoday/docs-extra/head.html kicker=page.author %}
|
|
12
|
+
{%- if page.isbn or page.pages %}<p class="mt-dx-meta">{% if page.isbn %}ISBN {{ page.isbn }}{% endif %}{% if page.isbn and page.pages %} · {% endif %}{% if page.pages %}{{ page.pages }} p.{% endif %}</p>{% endif %}
|
|
13
|
+
</div>
|
|
14
|
+
{%- if page.chapters %}
|
|
15
|
+
<nav class="mt-dx-toc mt-dx-chapters" aria-labelledby="mt-dx-contents"><h2 id="mt-dx-contents">{{ mt_t_layouts_contents }}</h2>
|
|
16
|
+
<ol>{% for c in page.chapters %}<li><span class="mt-dx-kicker">{{ mt_t_layouts_chapter | replace: "[n]", forloop.index }}</span> {% if c.url %}<a href="{% include modootoday/link.html url=c.url %}"{% include modootoday/links/attrs.html on=c.new_window target=c.target url=c.url %}>{{ c.title }}</a>{% else %}{{ c.title }}{% endif %}</li>{% endfor %}</ol></nav>
|
|
17
|
+
{%- endif %}
|
|
18
|
+
<div class="mt-dx-body">
|
|
19
|
+
{{ content }}
|
|
20
|
+
</div>
|
|
21
|
+
</article>
|
data/_layouts/brand.html
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
mt_bundle: marketing
|
|
4
|
+
mt_main: mt-mk mt-mk-brand
|
|
5
|
+
---
|
|
6
|
+
{%- include modootoday/i18n.html -%}
|
|
7
|
+
{%- comment -%}brand: colors: [{name, hex}] as swatches (an SVG fill, so no inline style under a strict CSP; the hex is always printed as text), assets: [{label, url, format}] to download, then the body (usage rules).{%- endcomment -%}
|
|
8
|
+
<article aria-labelledby="mt-mk-title">
|
|
9
|
+
{%- include modootoday/marketing/head.html %}
|
|
10
|
+
{%- if page.colors %}
|
|
11
|
+
<section aria-labelledby="mt-brand-colors"><h2 id="mt-brand-colors">{{ mt_t_layouts_colors }}</h2>
|
|
12
|
+
<ul class="mt-mk-swatches" role="list">{% for c in page.colors %}<li><svg class="mt-mk-chip" viewBox="0 0 1 1" aria-hidden="true" focusable="false"><rect width="1" height="1" fill="{{ c.hex }}"/></svg><strong>{{ c.name }}</strong> <code>{{ c.hex }}</code></li>{% endfor %}</ul></section>
|
|
13
|
+
{%- endif %}
|
|
14
|
+
{%- if page.assets %}
|
|
15
|
+
<section aria-labelledby="mt-brand-assets"><h2 id="mt-brand-assets">{{ mt_t_layouts_assets }}</h2>
|
|
16
|
+
<ul class="mt-mk-files" role="list">{% for a in page.assets %}<li><a href="{% include modootoday/link.html url=a.url %}"{% include modootoday/links/attrs.html on=a.new_window target=a.target url=a.url %} download>{{ a.label }}</a>{% if a.format %} <span>{{ a.format }}</span>{% endif %}</li>{% endfor %}</ul></section>
|
|
17
|
+
{%- endif %}
|
|
18
|
+
<div class="mt-mk-body">
|
|
19
|
+
{{ content }}
|
|
20
|
+
</div>
|
|
21
|
+
</article>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
mt_bundle: docs-extra
|
|
4
|
+
mt_main: mt-dx mt-dx-changelog
|
|
5
|
+
---
|
|
6
|
+
{%- comment -%}changelog: releases: [{version, date, url, added, changed, fixed, removed, security}] newest first, one section per
|
|
7
|
+
release (h2 with the version, its date) with a list per category (Keep a Changelog). Items take inline Markdown.{%- endcomment -%}
|
|
8
|
+
{%- assign _df = mt_t_post_date_format | default: "%Y-%m-%d" -%}
|
|
9
|
+
{%- assign _cats = "added changed fixed removed security" | split: " " -%}
|
|
10
|
+
<article aria-labelledby="mt-dx-title">
|
|
11
|
+
{%- include modootoday/docs-extra/head.html %}
|
|
12
|
+
<div class="mt-dx-body">
|
|
13
|
+
{{ content }}
|
|
14
|
+
</div>
|
|
15
|
+
{%- for r in page.releases %}{% assign _id = r.version | prepend: "v" | slugify %}
|
|
16
|
+
<section class="mt-dx-release" id="{{ _id }}" aria-labelledby="{{ _id }}-h">
|
|
17
|
+
<h2 id="{{ _id }}-h">{% if r.url %}<a href="{% include modootoday/link.html url=r.url %}"{% include modootoday/links/attrs.html on=r.new_window target=r.target url=r.url %}>{{ r.version }}</a>{% else %}{{ r.version }}{% endif %}{% if r.date %} <time datetime="{{ r.date | date: '%Y-%m-%d' }}">{{ r.date | date: _df }}</time>{% endif %}</h2>
|
|
18
|
+
{%- for c in _cats %}{% if r[c] %}{% assign _l = "layouts." | append: c %}{% capture _cl %}{% include modootoday/t.html key=_l %}{% endcapture %}
|
|
19
|
+
<h3 class="mt-dx-cat mt-dx-cat-{{ c }}">{{ _cl | strip }}</h3>
|
|
20
|
+
<ul>{% for i in r[c] %}<li>{{ i | markdownify | remove: "<p>" | remove: "</p>" | strip }}</li>{% endfor %}</ul>
|
|
21
|
+
{%- endif %}{% endfor %}
|
|
22
|
+
</section>
|
|
23
|
+
{%- endfor %}
|
|
24
|
+
</article>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
mt_bundle: marketing
|
|
4
|
+
mt_main: mt-mk mt-mk-contact
|
|
5
|
+
---
|
|
6
|
+
{%- include modootoday/i18n.html -%}
|
|
7
|
+
{%- comment -%}contact: the body, contacts: [{label, value, url}] as a list, and a form that posts to form.action (an external form
|
|
8
|
+
service; nothing is sent without it). form.fields: [name, email, message] by default. ContactPage structured data.{%- endcomment -%}
|
|
9
|
+
<article aria-labelledby="mt-mk-title">
|
|
10
|
+
{%- include modootoday/marketing/head.html %}
|
|
11
|
+
<div class="mt-mk-body">
|
|
12
|
+
{{ content }}
|
|
13
|
+
</div>
|
|
14
|
+
{%- if page.contacts %}
|
|
15
|
+
<dl class="mt-mk-contacts">{% for c in page.contacts %}<div><dt>{{ c.label }}</dt><dd>{% if c.url %}<a href="{{ c.url }}"{% include modootoday/links/attrs.html on=c.new_window target=c.target url=c.url %}>{{ c.value | default: c.url }}</a>{% else %}{{ c.value }}{% endif %}</dd></div>{% endfor %}</dl>
|
|
16
|
+
{%- endif %}
|
|
17
|
+
{%- if page.form.action %}
|
|
18
|
+
{%- assign _fl = page.form.fields | default: "name,email,message" -%}{%- if _fl.first == nil -%}{%- assign _fl = _fl | split: "," -%}{%- endif -%}
|
|
19
|
+
<form class="mt-mk-form" action="{{ page.form.action }}" method="post" aria-labelledby="mt-mk-title">
|
|
20
|
+
{%- for f in _fl %}
|
|
21
|
+
<p><label for="mt-f-{{ f }}">{% case f %}{% when "name" %}{{ mt_t_layouts_name }}{% when "email" %}{{ mt_t_layouts_email }}{% else %}{{ mt_t_layouts_message }}{% endcase %}</label>
|
|
22
|
+
{%- if f == "message" %}<textarea id="mt-f-{{ f }}" name="{{ f }}" rows="6" required></textarea>{% else %}<input id="mt-f-{{ f }}" name="{{ f }}" type="{% if f == 'email' %}email{% else %}text{% endif %}" autocomplete="{{ f }}" required>{% endif %}</p>
|
|
23
|
+
{%- endfor %}
|
|
24
|
+
<p><button class="mt-mk-btn" type="submit">{{ mt_t_layouts_send }}</button></p>
|
|
25
|
+
</form>
|
|
26
|
+
{%- endif %}
|
|
27
|
+
</article>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
mt_bundle: docs-extra
|
|
4
|
+
mt_main: mt-dx mt-dx-course
|
|
5
|
+
---
|
|
6
|
+
{%- comment -%}course: level, modules: [{title, lessons: [{title, url, minutes}]}]; facts (level, total time), a numbered syllabus
|
|
7
|
+
(Module n: title, its lessons with times), then the body. Structured data: Course with provider = site publisher.{%- endcomment -%}
|
|
8
|
+
{%- assign _min = 0 -%}{%- for m in page.modules -%}{%- for l in m.lessons -%}{%- assign _min = _min | plus: l.minutes -%}{%- endfor -%}{%- endfor -%}
|
|
9
|
+
<article aria-labelledby="mt-dx-title">
|
|
10
|
+
{%- include modootoday/docs-extra/head.html %}
|
|
11
|
+
{%- if page.level or _min > 0 %}<p class="mt-dx-meta">{% if page.level %}{{ page.level }}{% endif %}{% if page.level and _min > 0 %} · {% endif %}{% if _min > 0 %}{{ mt_t_layouts_minutes | replace: "[n]", _min }}{% endif %}</p>{% endif %}
|
|
12
|
+
<div class="mt-dx-body">
|
|
13
|
+
{{ content }}
|
|
14
|
+
</div>
|
|
15
|
+
{%- if page.modules %}
|
|
16
|
+
<section aria-labelledby="mt-dx-syllabus"><h2 id="mt-dx-syllabus">{{ mt_t_layouts_lessons }}</h2>
|
|
17
|
+
<ol class="mt-dx-syllabus">{% for m in page.modules %}<li><h3><span class="mt-dx-kicker">{{ mt_t_layouts_module | replace: "[n]", forloop.index }}</span> {{ m.title }}</h3>
|
|
18
|
+
<ol>{% for l in m.lessons %}<li>{% if l.url %}<a href="{% include modootoday/link.html url=l.url %}"{% include modootoday/links/attrs.html on=l.new_window target=l.target url=l.url %}>{{ l.title }}</a>{% else %}{{ l.title }}{% endif %}{% if l.minutes %} <span class="mt-dx-time">{{ mt_t_layouts_minutes | replace: "[n]", l.minutes }}</span>{% endif %}</li>{% endfor %}</ol></li>{% endfor %}</ol>
|
|
19
|
+
</section>
|
|
20
|
+
{%- endif %}
|
|
21
|
+
</article>
|