├── .dockerignore ├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── documentation.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── build-and-test.yml │ ├── docs.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── EXAMPLES.md ├── LICENSE ├── README.md ├── build.rs ├── components ├── config │ ├── Cargo.toml │ ├── examples │ │ └── generate_sublime.rs │ ├── src │ │ ├── config │ │ │ ├── languages.rs │ │ │ ├── link_checker.rs │ │ │ ├── markup.rs │ │ │ ├── mod.rs │ │ │ ├── search.rs │ │ │ ├── slugify.rs │ │ │ └── taxonomies.rs │ │ ├── highlighting.rs │ │ ├── lib.rs │ │ └── theme.rs │ └── sublime │ │ ├── syntaxes │ │ ├── extra │ │ │ ├── Assembly x86.sublime-syntax │ │ │ ├── CSV.sublime-syntax │ │ │ ├── Crystal.sublime-syntax │ │ │ ├── Dart.sublime-syntax │ │ │ ├── Handlebars.sublime-syntax │ │ │ ├── Kotlin.sublime-syntax │ │ │ ├── MZN.sublime-syntax │ │ │ ├── Nim.sublime-syntax │ │ │ ├── Nix.sublime-syntax │ │ │ ├── PowerShell.sublime-syntax │ │ │ ├── Prolog.sublime-syntax │ │ │ ├── README.md │ │ │ ├── Racket.sublime-syntax │ │ │ ├── Reason.sublime-syntax │ │ │ ├── Stylus.sublime-syntax │ │ │ ├── Swift.sublime-syntax │ │ │ ├── TypeScript.sublime-syntax │ │ │ ├── TypeScriptReact.sublime-syntax │ │ │ ├── VimL.sublime-syntax │ │ │ ├── lrc.sublime-syntax │ │ │ └── srt.sublime-syntax │ │ └── newlines.packdump │ │ └── themes │ │ ├── 1337.tmTheme │ │ ├── OneHalfDark.tmTheme │ │ ├── OneHalfLight.tmTheme │ │ ├── Tomorrow.tmTheme │ │ ├── agola-dark.tmTheme │ │ ├── all.themedump │ │ ├── ascetic-white.tmTheme │ │ ├── axar.tmTheme │ │ ├── ayu-dark.tmTheme │ │ ├── ayu-light.tmTheme │ │ ├── ayu-mirage.tmTheme │ │ ├── base16-atelierdune-light.tmTheme │ │ ├── base16-ocean-dark.tmTheme │ │ ├── base16-ocean-light.tmTheme │ │ ├── bbedit.tmTheme │ │ ├── boron.tmTheme │ │ ├── charcoal.tmTheme │ │ ├── cheerfully-light.tmTheme │ │ ├── classic-modified.tmTheme │ │ ├── demain.tmTheme │ │ ├── dimmed-fluid.tmTheme │ │ ├── dracula.tmTheme │ │ ├── gray-matter-dark.tmTheme │ │ ├── green.tmTheme │ │ ├── gruvbox-dark.tmTheme │ │ ├── gruvbox-light.tmTheme │ │ ├── idle.tmTheme │ │ ├── inspired-github.tmTheme │ │ ├── ir-white.tmTheme │ │ ├── kronuz.tmTheme │ │ ├── material-dark.tmTheme │ │ ├── material-light.tmTheme │ │ ├── monokai.tmTheme │ │ ├── nord.tmTheme │ │ ├── nyx-bold.tmTheme │ │ ├── one-dark.tmTheme │ │ ├── railsbase16-green-screen-dark.tmTheme │ │ ├── solarized-dark.tmTheme │ │ ├── solarized-light.tmTheme │ │ ├── subway-madrid.tmTheme │ │ ├── subway-moscow.tmTheme │ │ ├── two-dark.tmTheme │ │ ├── visual-studio-dark.tmTheme │ │ └── zenburn.tmTheme ├── console │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── content │ ├── Cargo.toml │ └── src │ │ ├── file_info.rs │ │ ├── front_matter │ │ ├── mod.rs │ │ ├── page.rs │ │ ├── section.rs │ │ └── split.rs │ │ ├── lib.rs │ │ ├── library.rs │ │ ├── page.rs │ │ ├── pagination.rs │ │ ├── section.rs │ │ ├── ser.rs │ │ ├── sorting.rs │ │ ├── taxonomies.rs │ │ ├── types.rs │ │ └── utils.rs ├── errors │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── imageproc │ ├── Cargo.toml │ ├── src │ │ ├── format.rs │ │ ├── helpers.rs │ │ ├── lib.rs │ │ ├── meta.rs │ │ ├── ops.rs │ │ └── processor.rs │ └── tests │ │ ├── resize_image.rs │ │ └── test_imgs │ │ ├── avif.avif │ │ ├── exif_0.jpg │ │ ├── exif_1.jpg │ │ ├── exif_2.jpg │ │ ├── exif_3.jpg │ │ ├── exif_4.jpg │ │ ├── exif_5.jpg │ │ ├── exif_6.jpg │ │ ├── exif_7.jpg │ │ ├── exif_8.jpg │ │ ├── jpg.jpg │ │ ├── png.png │ │ ├── svg.svg │ │ └── webp.webp ├── libs │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── link_checker │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── markdown │ ├── Cargo.toml │ ├── benches │ │ └── all.rs │ ├── src │ │ ├── codeblock │ │ │ ├── fence.rs │ │ │ ├── highlight.rs │ │ │ └── mod.rs │ │ ├── content.pest │ │ ├── context.rs │ │ ├── lib.rs │ │ ├── markdown.rs │ │ ├── shortcode │ │ │ ├── mod.rs │ │ │ └── parser.rs │ │ └── snapshots │ │ │ ├── markdown__markdown__tests__def_before_use.snap │ │ │ ├── markdown__markdown__tests__footnote_inside_footnote.snap │ │ │ ├── markdown__markdown__tests__multiple_refs.snap │ │ │ ├── markdown__markdown__tests__no_footnotes.snap │ │ │ ├── markdown__markdown__tests__reordered_footnotes.snap │ │ │ └── markdown__markdown__tests__single_footnote.snap │ └── tests │ │ ├── codeblocks.rs │ │ ├── common.rs │ │ ├── img.rs │ │ ├── links.rs │ │ ├── markdown.rs │ │ ├── shortcodes.rs │ │ ├── snapshots │ │ ├── codeblocks__can_add_line_numbers.snap │ │ ├── codeblocks__can_add_line_numbers_windows_eol.snap │ │ ├── codeblocks__can_add_line_numbers_with_classes.snap │ │ ├── codeblocks__can_add_line_numbers_with_highlight.snap │ │ ├── codeblocks__can_add_line_numbers_with_lineno_start.snap │ │ ├── codeblocks__can_hide_lines.snap │ │ ├── codeblocks__can_highlight_all_lines.snap │ │ ├── codeblocks__can_highlight_at_end.snap │ │ ├── codeblocks__can_highlight_line_range.snap │ │ ├── codeblocks__can_highlight_mix_line_ranges.snap │ │ ├── codeblocks__can_highlight_out_of_bounds.snap │ │ ├── codeblocks__can_highlight_ranges_overlap.snap │ │ ├── codeblocks__can_highlight_reversed_range.snap │ │ ├── codeblocks__can_highlight_single_line.snap │ │ ├── codeblocks__can_highlight_single_line_range.snap │ │ ├── codeblocks__can_highlight_unknown_lang.snap │ │ ├── codeblocks__can_highlight_weird_fence_tokens.snap │ │ ├── codeblocks__can_highlight_with_classes.snap │ │ ├── codeblocks__can_render_completely_mixed_codeblock.snap │ │ ├── codeblocks__can_render_multiple_shortcodes_in_codeblock.snap │ │ ├── codeblocks__can_render_shortcode_in_codeblock.snap │ │ ├── codeblocks__does_nothing_with_highlighting_disabled.snap │ │ ├── img__can_add_lazy_loading_and_async_decoding.snap │ │ ├── img__can_transform_image.snap │ │ ├── markdown__all_markdown_features_integration.snap │ │ ├── markdown__can_customise_anchor_template.snap │ │ ├── markdown__can_customise_summary_template.snap │ │ ├── markdown__can_handle_heading_ids-2.snap │ │ ├── markdown__can_handle_heading_ids.snap │ │ ├── markdown__can_insert_anchors-2.snap │ │ ├── markdown__can_insert_anchors-3.snap │ │ ├── markdown__can_insert_anchors.snap │ │ ├── markdown__can_make_zola_internal_links.snap │ │ ├── markdown__can_render_basic_markdown.snap │ │ ├── markdown__can_use_definition_list.snap │ │ ├── markdown__can_use_smart_punctuation.snap │ │ ├── markdown__custom_url_schemes_are_untouched.snap │ │ ├── markdown__external_link_all_options.snap │ │ ├── markdown__external_link_class.snap │ │ ├── markdown__external_link_class_and_target_blank.snap │ │ ├── markdown__external_link_no_follow.snap │ │ ├── markdown__external_link_no_options.snap │ │ ├── markdown__external_link_no_referrer.snap │ │ ├── markdown__external_link_target_blank.snap │ │ ├── markdown__github_style_footnotes.snap │ │ ├── markdown__internal_link_no_class.snap │ │ ├── markdown__internal_link_without_class.snap.new │ │ ├── shortcodes__can_emit_newlines_and_whitespace_with_shortcode.snap │ │ ├── shortcodes__can_grab_lang_in_html_shortcodes.snap │ │ ├── shortcodes__can_grab_lang_in_md_shortcodes.snap │ │ ├── shortcodes__can_grab_lang_in_shortcodes.snap │ │ ├── shortcodes__can_passthrough_markdown_from_shortcode.snap │ │ ├── shortcodes__can_render_body_shortcode_and_paragraph_after.snap │ │ ├── shortcodes__can_render_commented_out_shortcodes.snap │ │ ├── shortcodes__can_render_list_with_shortcode.snap │ │ ├── shortcodes__can_render_markdown_in_nested_shortcodes_with_bodies.snap │ │ ├── shortcodes__can_render_markdown_in_shortcodes.snap │ │ ├── shortcodes__can_render_nested_shortcodes_with_bodies_with_nth.snap │ │ ├── shortcodes__can_render_shortcodes_with_tabs.snap │ │ ├── shortcodes__can_render_simple_text_with_shortcodes.snap │ │ ├── shortcodes__can_render_two_body_shortcode_and_paragraph_after_with_line_break_between.snap │ │ ├── shortcodes__can_render_with_inline_html.snap │ │ ├── shortcodes__can_split_shortcode_body_lines.snap │ │ ├── shortcodes__can_use_shortcodes_in_quotes.snap │ │ ├── shortcodes__doesnt_escape_html_shortcodes.snap │ │ ├── shortcodes__doesnt_render_ignored_shortcodes.snap │ │ ├── shortcodes__doesnt_try_to_highlight_content_from_shortcode.snap │ │ ├── shortcodes__html_shortcode_regression-2.snap │ │ ├── shortcodes__html_shortcode_regression-3.snap │ │ ├── shortcodes__html_shortcode_regression-4.snap │ │ ├── shortcodes__html_shortcode_regression-5.snap │ │ ├── shortcodes__html_shortcode_regression.snap │ │ ├── shortcodes__invocation_count_increments_in_shortcode.snap │ │ ├── shortcodes__md_shortcode_regression.snap │ │ ├── shortcodes__shortcodes_do_not_generate_paragraphs.snap │ │ ├── summary__basic_summary.snap │ │ ├── summary__footnotes_summary.snap │ │ ├── summary__summary_with_shortcodes.snap │ │ └── summary__truncated_summary.snap │ │ ├── summary.rs │ │ └── toc.rs ├── search │ ├── Cargo.toml │ └── src │ │ ├── elasticlunr.min.js │ │ ├── elasticlunr.rs │ │ ├── fuse.rs │ │ └── lib.rs ├── site │ ├── Cargo.toml │ ├── benches │ │ ├── gen.py │ │ ├── load.rs │ │ └── site.rs │ ├── src │ │ ├── feeds.rs │ │ ├── lib.rs │ │ ├── link_checking.rs │ │ ├── minify.rs │ │ ├── sass.rs │ │ ├── sitemap.rs │ │ └── tpls.rs │ └── tests │ │ ├── common.rs │ │ ├── invalid.rs │ │ ├── site.rs │ │ └── site_i18n.rs ├── templates │ ├── Cargo.toml │ ├── gutenberg.jpg │ └── src │ │ ├── builtins │ │ ├── 404.html │ │ ├── anchor-link.html │ │ ├── atom.xml │ │ ├── internal │ │ │ └── alias.html │ │ ├── robots.txt │ │ ├── rss.xml │ │ ├── sitemap.xml │ │ ├── split_sitemap_index.xml │ │ └── summary-cutoff.html │ │ ├── filters.rs │ │ ├── global_fns │ │ ├── content.rs │ │ ├── files.rs │ │ ├── helpers.rs │ │ ├── i18n.rs │ │ ├── images.rs │ │ ├── load_data.rs │ │ ├── macros.rs │ │ └── mod.rs │ │ └── lib.rs └── utils │ ├── Cargo.toml │ ├── src │ ├── anchors.rs │ ├── de.rs │ ├── default_tpl.html │ ├── fs.rs │ ├── globs.rs │ ├── lib.rs │ ├── net.rs │ ├── site.rs │ ├── slugs.rs │ ├── table_of_contents.rs │ ├── templates.rs │ └── types.rs │ ├── test-files │ ├── test.css │ ├── test.csv │ ├── test.json │ ├── test.toml │ ├── test.xml │ ├── test.yaml │ └── uneven_rows.csv │ └── test-templates │ ├── base.html │ ├── child.html │ ├── included.html │ ├── index.html │ ├── macros.html │ ├── shortcodes │ └── something.html │ └── using-macros.html ├── docs ├── config.toml ├── content │ ├── documentation │ │ ├── _index.md │ │ ├── content │ │ │ ├── _index.md │ │ │ ├── image-processing │ │ │ │ ├── 01-zola.png │ │ │ │ ├── 02-zola-manet.png │ │ │ │ ├── 03-zola-cezanne.png │ │ │ │ ├── 04-gutenberg.jpg │ │ │ │ ├── 05-example.jpg │ │ │ │ ├── 06-example.jpg │ │ │ │ ├── 07-example.jpg │ │ │ │ ├── 08-example.jpg │ │ │ │ └── index.md │ │ │ ├── linking.md │ │ │ ├── multilingual.md │ │ │ ├── overview.md │ │ │ ├── page.md │ │ │ ├── sass.md │ │ │ ├── search.md │ │ │ ├── section.md │ │ │ ├── shortcodes.md │ │ │ ├── syntax-highlighting.md │ │ │ ├── table-of-contents.md │ │ │ └── taxonomies.md │ │ ├── deployment │ │ │ ├── _index.md │ │ │ ├── aws-s3.md │ │ │ ├── cloudflare-pages.md │ │ │ ├── codeberg-pages.md │ │ │ ├── docker-image.md │ │ │ ├── edgio.md │ │ │ ├── flyio.md │ │ │ ├── github-pages.md │ │ │ ├── gitlab-pages.md │ │ │ ├── netlify.md │ │ │ ├── overview.md │ │ │ ├── sourcehut.md │ │ │ ├── vercel.md │ │ │ └── zeabur.md │ │ ├── getting-started │ │ │ ├── _index.md │ │ │ ├── cli-usage.md │ │ │ ├── configuration.md │ │ │ ├── directory-structure.md │ │ │ ├── installation.md │ │ │ └── overview.md │ │ ├── templates │ │ │ ├── 404.md │ │ │ ├── _index.md │ │ │ ├── archive.md │ │ │ ├── feeds │ │ │ │ ├── index.md │ │ │ │ └── rss_feed.png │ │ │ ├── overview.md │ │ │ ├── pages-sections.md │ │ │ ├── pagination.md │ │ │ ├── robots.md │ │ │ ├── sitemap.md │ │ │ └── taxonomies.md │ │ └── themes │ │ │ ├── _index.md │ │ │ ├── creating-a-theme.md │ │ │ ├── extending-a-theme.md │ │ │ ├── installing-and-using-themes.md │ │ │ └── overview.md │ └── themes │ │ ├── BelResume │ │ ├── index.md │ │ └── screenshot.png │ │ ├── DeepThought │ │ ├── index.md │ │ └── screenshot.png │ │ ├── Ergo │ │ ├── index.md │ │ └── screenshot.png │ │ ├── HayFlow │ │ ├── index.md │ │ └── screenshot.png │ │ ├── Zulma │ │ ├── index.md │ │ └── screenshot.png │ │ ├── _index.md │ │ ├── abridge │ │ ├── index.md │ │ └── screenshot.png │ │ ├── academic-paper │ │ ├── index.md │ │ └── screenshot.png │ │ ├── academic-workshop │ │ ├── index.md │ │ └── screenshot.png │ │ ├── adidoks │ │ ├── index.md │ │ └── screenshot.png │ │ ├── after-dark │ │ ├── index.md │ │ └── screenshot.png │ │ ├── albatros │ │ ├── index.md │ │ └── screenshot.png │ │ ├── anatole-zola │ │ ├── index.md │ │ └── screenshot.png │ │ ├── andromeda │ │ ├── index.md │ │ └── screenshot.png │ │ ├── anemone │ │ ├── index.md │ │ └── screenshot.png │ │ ├── anpu │ │ ├── index.md │ │ └── screenshot.png │ │ ├── apollo │ │ ├── index.md │ │ └── screenshot.png │ │ ├── archie-zola │ │ ├── index.md │ │ └── screenshot.png │ │ ├── ataraxia-zola │ │ ├── index.md │ │ └── screenshot.png │ │ ├── bearblog │ │ ├── index.md │ │ └── screenshot.png │ │ ├── blow │ │ ├── index.md │ │ └── screenshot.png │ │ ├── book │ │ ├── index.md │ │ └── screenshot.png │ │ ├── boring │ │ ├── index.md │ │ └── screenshot.png │ │ ├── clean-blog │ │ ├── index.md │ │ └── screenshot.png │ │ ├── codinfox-zola │ │ ├── index.md │ │ └── screenshot.png │ │ ├── d3c3nt │ │ ├── index.md │ │ └── screenshot.png │ │ ├── daisy │ │ ├── index.md │ │ └── screenshot.png │ │ ├── dinkleberg │ │ ├── index.md │ │ └── screenshot.png │ │ ├── docsascode-theme │ │ ├── index.md │ │ └── screenshot.png │ │ ├── dose │ │ ├── index.md │ │ └── screenshot.png │ │ ├── duckquill │ │ ├── index.md │ │ └── screenshot.png │ │ ├── emily │ │ ├── index.md │ │ └── screenshot.png │ │ ├── even │ │ ├── index.md │ │ └── screenshot.png │ │ ├── feather │ │ ├── index.md │ │ └── screenshot.png │ │ ├── float │ │ ├── index.md │ │ └── screenshot.png │ │ ├── hallo │ │ ├── index.md │ │ └── screenshot.png │ │ ├── halve-z │ │ ├── index.md │ │ └── screenshot.png │ │ ├── hephaestus │ │ ├── index.md │ │ └── screenshot.png │ │ ├── hermit │ │ ├── index.md │ │ └── screenshot.png │ │ ├── homepage-creators │ │ ├── index.md │ │ └── screenshot.png │ │ ├── hook │ │ ├── index.md │ │ └── screenshot.png │ │ ├── hyde │ │ ├── index.md │ │ └── screenshot.png │ │ ├── inky │ │ ├── index.md │ │ └── screenshot.png │ │ ├── juice │ │ ├── index.md │ │ └── screenshot.png │ │ ├── kangae │ │ ├── index.md │ │ └── screenshot.png │ │ ├── karzok │ │ ├── index.md │ │ └── screenshot.png │ │ ├── kita │ │ ├── index.md │ │ └── screenshot.png │ │ ├── kodama-theme │ │ ├── index.md │ │ └── screenshot.png │ │ ├── lightspeed │ │ ├── index.md │ │ └── screenshot.png │ │ ├── linkita │ │ ├── index.md │ │ └── screenshot.png │ │ ├── mabuya │ │ ├── index.md │ │ └── screenshot.png │ │ ├── minimal-dark │ │ ├── index.md │ │ └── screenshot.png │ │ ├── nasm-theme │ │ ├── index.md │ │ └── screenshot.png │ │ ├── neovim-theme │ │ ├── index.md │ │ └── screenshot.png │ │ ├── no-style-please │ │ ├── index.md │ │ └── screenshot.png │ │ ├── ntun │ │ ├── index.md │ │ └── screenshot.png │ │ ├── oceanic-zen │ │ ├── index.md │ │ ├── screenshot-index.png │ │ └── screenshot.png │ │ ├── otherworld │ │ ├── index.md │ │ └── screenshot.png │ │ ├── papaya │ │ ├── index.md │ │ └── screenshot.png │ │ ├── papermod │ │ ├── index.md │ │ └── screenshot.png │ │ ├── parchment │ │ ├── index.md │ │ └── screenshot.png │ │ ├── particle │ │ ├── index.md │ │ └── screenshot.png │ │ ├── pico │ │ ├── index.md │ │ └── screenshot.png │ │ ├── polymathic │ │ ├── index.md │ │ └── screenshot.png │ │ ├── project-portfolio │ │ ├── index.md │ │ └── screenshot.png │ │ ├── radion │ │ ├── index.md │ │ └── screenshot.png │ │ ├── re137 │ │ ├── index.md │ │ └── screenshot.png │ │ ├── resume │ │ ├── index.md │ │ └── screenshot.png │ │ ├── sam │ │ ├── index.md │ │ └── screenshot.png │ │ ├── seagull │ │ ├── index.md │ │ └── screenshot.png │ │ ├── seje2 │ │ ├── index.md │ │ └── screenshot.png │ │ ├── serene │ │ ├── index.md │ │ └── screenshot.png │ │ ├── shadharon │ │ ├── index.md │ │ └── screenshot.png │ │ ├── simple-dev-blog │ │ ├── index.md │ │ └── screenshot.png │ │ ├── slim │ │ ├── index.md │ │ └── screenshot.png │ │ ├── soapstone │ │ ├── index.md │ │ └── screenshot.png │ │ ├── solar-theme-zola │ │ ├── index.md │ │ └── screenshot.png │ │ ├── tabi │ │ ├── index.md │ │ └── screenshot.png │ │ ├── tale-zola │ │ ├── index.md │ │ └── screenshot.png │ │ ├── tilde │ │ ├── index.md │ │ └── screenshot.png │ │ ├── toucan │ │ ├── index.md │ │ └── screenshot.png │ │ ├── tranquil │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zallery │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zerm │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zhuia │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zluinav │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-folio │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-futu │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-grayscale │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-hacker │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-henry │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-minimal │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-paper │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-pickles │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-theme-course │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-theme-hikari │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-theme-jiaxiang.wang │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola-theme-terminimal │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola.386 │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zola_easydocs_theme │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zolarwind │ │ ├── index.md │ │ └── screenshot.png │ │ ├── zolastrap │ │ ├── index.md │ │ └── screenshot.png │ │ └── zplit │ │ ├── index.md │ │ └── screenshot.png ├── sass │ ├── _base.scss │ ├── _docs.scss │ ├── _header.scss │ ├── _index.scss │ ├── _layout.scss │ ├── _normalize.scss │ ├── _pattern.scss │ ├── _search.scss │ ├── _themes.scss │ └── site.scss ├── static │ ├── CNAME │ ├── favicon.ico │ ├── logos │ │ ├── Zola-icon-coffee-on-white.svg │ │ ├── Zola-icon-cream-on-coffee.svg │ │ ├── Zola-logo-alt-cream.svg │ │ ├── Zola-logo-black.svg │ │ ├── Zola-logo-main-coffee.svg │ │ └── Zola-logo-white.svg │ ├── processed_images │ │ ├── 01-zola.1a8b81cf026f45cb.png │ │ ├── 01-zola.2894991332a9de9e.png │ │ ├── 01-zola.415a7ae280b04f3a.png │ │ ├── 01-zola.88a4046ce11eac5c.png │ │ ├── 01-zola.8b09d4ac023bf17f.png │ │ ├── 01-zola.a7f6fb4842538499.png │ │ ├── 01-zola.aa5c9741e1f54677.png │ │ ├── 01-zola.c31346a8ceb47990.png │ │ ├── 02-zola-manet.f247a1c1a09dea92.png │ │ ├── 03-zola-cezanne.54f3edb977adbe2f.png │ │ ├── 04-gutenberg.6b23c36e66378f24.jpg │ │ ├── 05-example.67dc3b46cdb5d5d4.jpg │ │ ├── 06-example.2c54491c2daefe2f.jpg │ │ ├── 07-example.3143e7a66ae6fd02.jpg │ │ ├── 08-example.684e6a6497b4e859.jpg │ │ └── 08-example.cdf453f9e75156af.jpg │ └── search.js └── templates │ ├── documentation.html │ ├── index.html │ ├── page.html │ ├── shortcodes │ ├── gallery.html │ ├── high_res_image.html │ ├── resize_image.html │ └── resize_image_relative.html │ ├── theme-tags │ ├── list.html │ └── single.html │ ├── theme.html │ └── themes.html ├── netlify.toml ├── rustfmt.toml ├── snapcraft.yaml ├── src ├── cli.rs ├── cmd │ ├── build.rs │ ├── check.rs │ ├── init.rs │ ├── livereload.js │ ├── mod.rs │ └── serve.rs ├── fs_utils.rs ├── main.rs ├── messages.rs └── prompt.rs ├── test_site ├── README.md ├── _dir_with_underscores │ └── .gitkeep ├── config.staging.toml ├── config.toml ├── content │ ├── 2018 │ │ └── index.md │ ├── .should-not-be-picked-up.md │ ├── _index.md │ ├── applying_page_template │ │ ├── _index.md │ │ ├── another_section │ │ │ ├── _index.md │ │ │ └── post.md │ │ ├── from-section-config.md │ │ ├── override.md │ │ └── yet_another_section │ │ │ ├── _index.md │ │ │ └── post.md │ ├── colocated-assets │ │ ├── index.md │ │ └── with_subfolder │ │ │ └── _index.md │ ├── hello.md │ ├── paginated │ │ └── _index.md │ ├── posts │ │ ├── 2018 │ │ │ ├── _index.md │ │ │ └── transparent-page.md │ │ ├── 2016-10-08_a-post-with-dates.md │ │ ├── _index.md │ │ ├── draft.md │ │ ├── extra_syntax.md │ │ ├── fixed-slug.md │ │ ├── fixed-url.md │ │ ├── ignored.md │ │ ├── no-section │ │ │ └── simple.md │ │ ├── python.md │ │ ├── render.md │ │ ├── simple.md │ │ ├── skip_prefixes.md │ │ ├── top-level-alias.md │ │ ├── tutorials │ │ │ ├── _index.md │ │ │ ├── devops │ │ │ │ ├── _index.md │ │ │ │ ├── docker.md │ │ │ │ └── nix.md │ │ │ └── programming │ │ │ │ ├── _index.md │ │ │ │ ├── python.md │ │ │ │ └── rust.md │ │ └── with-assets │ │ │ ├── index.md │ │ │ ├── with.js │ │ │ └── zola.png │ ├── rebuild │ │ ├── _index.md │ │ ├── first.md │ │ └── second.md │ ├── reverse-paginated │ │ ├── 1.md │ │ ├── 2.md │ │ ├── 3.md │ │ ├── 4.md │ │ ├── 5.md │ │ ├── 6.md │ │ ├── 7.md │ │ ├── 8.md │ │ ├── 9.md │ │ └── _index.md │ ├── root-page-1.md │ ├── root-page-2.md │ └── secret_section │ │ ├── _index.md │ │ ├── draft-page.md │ │ ├── page.md │ │ └── secret_sub_section │ │ ├── _index.md │ │ └── hello.md ├── highlight_themes │ └── custom_gruvbox.tmTheme ├── sass │ ├── _included.scss │ ├── blog.scss │ ├── nested_sass │ │ ├── sass.sass │ │ └── scss.scss │ ├── sass.sass │ └── scss.scss ├── static │ ├── .gitattributes │ ├── scripts │ │ └── hello.js │ └── site.css ├── syntaxes │ └── test.sublime-syntax ├── templates │ ├── categories │ │ ├── list.html │ │ └── single.html │ ├── index.html │ ├── index_paginated.html │ ├── page.html │ ├── page_template.html │ ├── page_template_child.html │ ├── page_template_override.html │ ├── podcast_authors │ │ ├── list.html │ │ └── single.html │ ├── rebuild.html │ ├── robots.txt │ ├── section.html │ ├── section_paginated.html │ ├── shortcodes │ │ ├── basic.html │ │ ├── pirate_included.html │ │ └── youtube.html │ └── tags │ │ ├── list.html │ │ └── single.html └── themes │ └── sample │ ├── sass │ └── sample.scss │ ├── static │ ├── some-html.html │ └── some.js │ ├── templates │ ├── 404.html │ ├── categories │ │ └── single.html │ ├── child.html │ ├── current_path.html │ ├── included.html │ ├── index.html │ ├── macros.html │ ├── section-specific-extends.html │ ├── section.html │ ├── shortcodes │ │ ├── pirate.html │ │ ├── pirate_included.html │ │ └── theme_shortcode.html │ └── using-macros.html │ └── theme.toml ├── test_site_i18n ├── config.toml ├── content │ ├── _index.fr.md │ ├── _index.md │ ├── base.fr.md │ ├── base.md │ └── blog │ │ ├── _index.fr.md │ │ ├── _index.it.md │ │ ├── _index.md │ │ ├── fixed-slug.fr.md │ │ ├── fixed-slug.it.md │ │ ├── fixed-slug.md │ │ ├── not-translated-in-default-language.fr.md │ │ ├── not-translated.md │ │ ├── something.fr.md │ │ ├── something.md │ │ └── with-assets │ │ ├── index.fr.md │ │ ├── index.md │ │ └── some.js └── templates │ ├── auteurs │ ├── list.html │ └── single.html │ ├── authors │ ├── list.html │ └── single.html │ ├── index.html │ ├── page.html │ ├── section.html │ └── tags │ ├── list.html │ └── single.html ├── test_sites_invalid └── indexmd │ ├── config.toml │ ├── content │ ├── _index.md │ └── index.md │ ├── static │ └── .gitkeep │ └── templates │ └── .gitkeep └── zola.metainfo.xml /.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | .git* 3 | Dockerfile 4 | 5 | # From .gitignore 6 | target 7 | .idea/ 8 | test_site/public 9 | test_site_i18n/public 10 | docs/public 11 | 12 | small-blog 13 | medium-blog 14 | big-blog 15 | huge-blog 16 | extra-huge-blog 17 | small-kb 18 | medium-kb 19 | huge-kb 20 | 21 | current.bench 22 | now.bench 23 | *.zst 24 | 25 | # snapcraft artifacts 26 | snap/.snapcraft 27 | parts 28 | prime 29 | stage 30 | 31 | # nixos dependencies snippet 32 | shell.nix 33 | # vim temporary files 34 | **/.*.sw* 35 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.rs] 2 | end_of_line = lf 3 | charset = utf-8 4 | indent_style = space 5 | indent_size = 4 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Did you run into an issue while using Zola? 4 | --- 5 | 6 | # Bug Report 7 | 8 | ## Environment 9 | 10 | Zola version: 11 | 12 | ## Expected Behavior 13 | Tell us what should have happened. 14 | 15 | ## Current Behavior 16 | Tell us what happens instead of the expected behavior. If you are seeing an 17 | error, please include the full error message and stack trace. You can get the 18 | stacktrace of a panic by adding `RUST_BACKTRACE=1` when running a `zola` command. 19 | 20 | ## Step to reproduce 21 | Please provide the steps to reproduce the issue. 22 | If the issue is hard to reproduce, please provide a sample repository or sample 23 | that triggers the bug. 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Is the documentation lacking or has typos/errors/missing/outdated content? 4 | --- 5 | 6 | # Documentation issue 7 | 8 | ## Summary 9 | What is the issue? Is the documentation unclear? Is it missing information? 10 | 11 | ## Proposed solution 12 | A quick explanation of what you would like to see to solve the issue. 13 | If you want to add content, please explain what you were looking for and what was 14 | your process while looking at the current documentation. 15 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **IMPORTANT: Please do not create a Pull Request adding a new feature without discussing it first.** 2 | 3 | The place to discuss new features is the forum: 4 | If you want to add a new feature, please open a thread there first in the feature requests section. 5 | 6 | Sanity check: 7 | 8 | * [ ] Have you checked to ensure there aren't other open [Pull Requests](https://github.com/getzola/zola/pulls) for the same update/change? 9 | 10 | ## Code changes 11 | (Delete or ignore this section for documentation changes) 12 | 13 | * [ ] Are you doing the PR on the `next` branch? 14 | 15 | If the change is a new feature or adding to/changing an existing one: 16 | 17 | * [ ] Have you created/updated the relevant documentation page(s)? 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /.github/workflows/build-and-test.yml: -------------------------------------------------------------------------------- 1 | name: Build & Test 2 | 3 | on: 4 | push: 5 | branches: ["*"] 6 | 7 | permissions: 8 | contents: read 9 | 10 | jobs: 11 | Tests: 12 | runs-on: ${{ matrix.os }} 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | target: 17 | - x86_64-unknown-linux-gnu 18 | - aarch64-unknown-linux-gnu 19 | - x86_64-pc-windows-msvc 20 | - x86_64-apple-darwin 21 | - aarch64-apple-darwin 22 | rustup_toolchain: [stable] 23 | include: 24 | - os: windows-2022 25 | target: x86_64-pc-windows-msvc 26 | - os: ubuntu-22.04 27 | target: x86_64-unknown-linux-gnu 28 | - os: ubuntu-22.04-arm 29 | target: aarch64-unknown-linux-gnu 30 | - os: macos-13 31 | target: x86_64-apple-darwin 32 | - os: macos-14 33 | target: aarch64-apple-darwin 34 | steps: 35 | - name: Checkout repository 36 | uses: actions/checkout@v4 37 | 38 | - name: Install Rust 39 | uses: dtolnay/rust-toolchain@stable 40 | with: 41 | toolchain: ${{ matrix.rustup_toolchain }} 42 | 43 | - name: Cargo build (Native TLS) 44 | run: | 45 | cargo build --all --no-default-features --features=native-tls 46 | cargo clean 47 | 48 | - name: Cargo build (Rust TLS) 49 | run: cargo build --all 50 | 51 | - name: Cargo test 52 | run: cargo test --all 53 | 54 | - name: Cargo fmt 55 | run: cargo fmt --check 56 | -------------------------------------------------------------------------------- /.github/workflows/docs.yml: -------------------------------------------------------------------------------- 1 | name: Build and deploy GH Pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | if: github.ref != 'refs/heads/master' 15 | steps: 16 | - name: checkout 17 | uses: actions/checkout@v4 18 | - name: build 19 | uses: shalzz/zola-deploy-action@v0.20.0 20 | env: 21 | BUILD_DIR: docs/ 22 | BUILD_ONLY: true 23 | 24 | build_and_deploy: 25 | runs-on: ubuntu-latest 26 | if: github.ref == 'refs/heads/master' 27 | steps: 28 | - name: checkout 29 | uses: actions/checkout@v4 30 | - name: build_and_deploy 31 | uses: shalzz/zola-deploy-action@v0.20.0 32 | env: 33 | PAGES_BRANCH: gh-pages 34 | BUILD_DIR: docs/ 35 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | .idea/ 3 | test_site/public 4 | test_site_i18n/public 5 | docs/public 6 | docs/out 7 | 8 | small-blog 9 | medium-blog 10 | big-blog 11 | huge-blog 12 | extra-huge-blog 13 | small-kb 14 | medium-kb 15 | huge-kb 16 | 17 | current.bench 18 | now.bench 19 | *.zst 20 | 21 | # snapcraft artifacts 22 | snap/.snapcraft 23 | parts 24 | prime 25 | stage 26 | 27 | # nixos dependencies snippet 28 | shell.nix 29 | # vim temporary files 30 | **/.*.sw* 31 | .swp 32 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:slim-bookworm AS builder 2 | 3 | ARG USE_GH_RELEASE=false 4 | ARG ZOLA_RELEASE_VERSION=latest 5 | RUN apt-get update -y && \ 6 | apt-get install -y pkg-config make g++ libssl-dev curl jq tar gzip 7 | 8 | WORKDIR /app 9 | COPY . . 10 | 11 | RUN if [ "${USE_GH_RELEASE}" = "true" ]; then \ 12 | if [ "${ZOLA_RELEASE_VERSION}" = "latest" ]; then \ 13 | export ZOLA_VERSION=$(curl -sL https://api.github.com/repos/getzola/zola/releases/latest | jq -r .name); \ 14 | else \ 15 | export ZOLA_VERSION="${ZOLA_RELEASE_VERSION}"; \ 16 | fi && \ 17 | curl -sL --fail --output zola.tar.gz https://github.com/getzola/zola/releases/download/${ZOLA_VERSION}/zola-${ZOLA_VERSION}-$(uname -m)-unknown-linux-gnu.tar.gz && \ 18 | tar -xzvf zola.tar.gz zola; \ 19 | else \ 20 | cargo build --release && \ 21 | cp target/$(uname -m)-unknown-linux-gnu/release/zola zola; \ 22 | fi && ./zola --version 23 | 24 | FROM gcr.io/distroless/cc-debian12 25 | COPY --from=builder /app/zola /bin/zola 26 | ENTRYPOINT [ "/bin/zola" ] 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017-2018 Vincent Prouillet 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /build.rs: -------------------------------------------------------------------------------- 1 | fn generate_pe_header() { 2 | use time::OffsetDateTime; 3 | 4 | let today = OffsetDateTime::now_utc(); 5 | let copyright = format!("Copyright © 2017-{} Vincent Prouillet", today.year()); 6 | let mut res = winres::WindowsResource::new(); 7 | // needed for MinGW cross-compiling 8 | if cfg!(unix) { 9 | res.set_windres_path("x86_64-w64-mingw32-windres"); 10 | } 11 | res.set_icon("docs/static/favicon.ico"); 12 | res.set("LegalCopyright", ©right); 13 | res.compile().expect("Failed to compile Windows resources!"); 14 | } 15 | 16 | fn main() { 17 | if std::env::var("CARGO_CFG_TARGET_OS").unwrap() != "windows" 18 | && std::env::var("PROFILE").unwrap() != "release" 19 | { 20 | return; 21 | } 22 | if cfg!(windows) { 23 | generate_pe_header(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /components/config/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "config" 3 | version = "0.1.0" 4 | edition = "2021" 5 | include = ["src/**/*"] 6 | 7 | [dependencies] 8 | serde = {version = "1.0", features = ["derive"] } 9 | 10 | errors = { path = "../errors" } 11 | utils = { path = "../utils" } 12 | libs = { path = "../libs" } 13 | -------------------------------------------------------------------------------- /components/config/src/config/link_checker.rs: -------------------------------------------------------------------------------- 1 | use libs::globset::GlobSet; 2 | use serde::{Deserialize, Serialize}; 3 | 4 | use errors::Result; 5 | use utils::globs::build_ignore_glob_set; 6 | 7 | #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] 8 | pub enum LinkCheckerLevel { 9 | #[serde(rename = "error")] 10 | Error, 11 | #[serde(rename = "warn")] 12 | Warn, 13 | } 14 | 15 | impl Default for LinkCheckerLevel { 16 | fn default() -> Self { 17 | Self::Error 18 | } 19 | } 20 | 21 | #[derive(Clone, Debug, Default, Serialize, Deserialize)] 22 | #[serde(default)] 23 | pub struct LinkChecker { 24 | /// Skip link checking for these URL prefixes 25 | pub skip_prefixes: Vec, 26 | /// Skip anchor checking for these URL prefixes 27 | pub skip_anchor_prefixes: Vec, 28 | /// Emit either "error" or "warn" for broken internal links (including anchor links). 29 | pub internal_level: LinkCheckerLevel, 30 | /// Emit either "error" or "warn" for broken external links (including anchor links). 31 | pub external_level: LinkCheckerLevel, 32 | /// A list of file glob patterns to skip link checking on 33 | pub ignored_files: Vec, 34 | #[serde(skip_serializing, skip_deserializing)] // not a typo, 2 are needed 35 | pub ignored_files_globset: Option, 36 | } 37 | 38 | impl LinkChecker { 39 | pub fn resolve_globset(&mut self) -> Result<()> { 40 | let glob_set = build_ignore_glob_set(&self.ignored_files, "files")?; 41 | self.ignored_files_globset = Some(glob_set); 42 | Ok(()) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /components/config/src/config/slugify.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | 3 | use utils::slugs::SlugifyStrategy; 4 | 5 | #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] 6 | #[serde(default)] 7 | pub struct Slugify { 8 | pub paths: SlugifyStrategy, 9 | pub paths_keep_dates: bool, 10 | pub taxonomies: SlugifyStrategy, 11 | pub anchors: SlugifyStrategy, 12 | } 13 | -------------------------------------------------------------------------------- /components/config/src/config/taxonomies.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | 3 | #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] 4 | #[serde(default)] 5 | pub struct TaxonomyConfig { 6 | /// The name used in the URL, usually the plural 7 | pub name: String, 8 | /// The slug according to the config slugification strategy 9 | pub slug: String, 10 | /// If this is set, the list of individual taxonomy term page will be paginated 11 | /// by this much 12 | pub paginate_by: Option, 13 | pub paginate_path: Option, 14 | /// Whether the taxonomy will be rendered, defaults to `true` 15 | pub render: bool, 16 | /// Whether to generate a feed only for each taxonomy term, defaults to `false` 17 | pub feed: bool, 18 | } 19 | 20 | impl Default for TaxonomyConfig { 21 | fn default() -> Self { 22 | Self { 23 | name: String::new(), 24 | slug: String::new(), 25 | paginate_by: None, 26 | paginate_path: None, 27 | render: true, 28 | feed: false, 29 | } 30 | } 31 | } 32 | 33 | impl TaxonomyConfig { 34 | pub fn is_paginated(&self) -> bool { 35 | self.paginate_by.is_some_and(|paginate_by| paginate_by > 0) 36 | } 37 | 38 | pub fn paginate_path(&self) -> &str { 39 | self.paginate_path.as_deref().unwrap_or("page") 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /components/config/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod config; 2 | pub mod highlighting; 3 | mod theme; 4 | 5 | use std::path::Path; 6 | 7 | pub use crate::config::{ 8 | languages::LanguageOptions, 9 | link_checker::LinkChecker, 10 | link_checker::LinkCheckerLevel, 11 | search::{IndexFormat, Search}, 12 | slugify::Slugify, 13 | taxonomies::TaxonomyConfig, 14 | Config, 15 | }; 16 | use errors::Result; 17 | 18 | /// Get and parse the config. 19 | /// If it doesn't succeed, exit 20 | pub fn get_config(filename: &Path) -> Result { 21 | Config::from_file(filename) 22 | } 23 | -------------------------------------------------------------------------------- /components/config/src/theme.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | use std::path::Path; 3 | 4 | use libs::toml::Value as Toml; 5 | use serde::{Deserialize, Serialize}; 6 | 7 | use errors::{bail, Context, Result}; 8 | use utils::fs::read_file; 9 | 10 | /// Holds the data from a `theme.toml` file. 11 | /// There are other fields than `extra` in it but Zola 12 | /// itself doesn't care about them. 13 | #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] 14 | pub struct Theme { 15 | /// All user params set in [extra] in the theme.toml 16 | pub extra: HashMap, 17 | } 18 | 19 | impl Theme { 20 | /// Parses a TOML string to our Theme struct 21 | pub fn parse(content: &str) -> Result { 22 | let theme = match content.parse::() { 23 | Ok(t) => t, 24 | Err(e) => bail!(e), 25 | }; 26 | 27 | let mut extra = HashMap::new(); 28 | if let Some(theme_table) = theme.as_table() { 29 | if let Some(ex) = theme_table.get("extra") { 30 | if ex.is_table() { 31 | extra = ex.clone().try_into().unwrap(); 32 | } 33 | } 34 | } else { 35 | bail!("Expected the `theme.toml` to be a TOML table") 36 | } 37 | 38 | Ok(Theme { extra }) 39 | } 40 | 41 | /// Parses a theme file from the given path 42 | pub fn from_file(path: &Path, theme_name: &str) -> Result { 43 | let content = 44 | read_file(path).with_context(|| format!("Failed to load theme {}", theme_name))?; 45 | Theme::parse(&content) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /components/config/sublime/syntaxes/extra/CSV.sublime-syntax: -------------------------------------------------------------------------------- 1 | %YAML 1.2 2 | --- 3 | # http://www.sublimetext.com/docs/3/syntax.html 4 | name: Advanced CSV 5 | file_extensions: 6 | - csv 7 | - tsv 8 | scope: text.advanced_csv 9 | contexts: 10 | main: 11 | - match: (\") 12 | captures: 13 | 1: string.quoted.double.advanced_csv 14 | push: 15 | - meta_scope: meta.quoted.advanced_csv 16 | - match: (\") 17 | captures: 18 | 1: string.quoted.double.advanced_csv 19 | pop: true 20 | - include: main 21 | - match: '(\[([+-]?\d*)(\:)?([+-]?\d*)(\,)?([+-]?\d*)(\:)?([+-]?\d*)\])?\s*([<>v^])?\s*(=)' 22 | captures: 23 | 1: keyword.operator.advanced_csv 24 | 2: constant.numeric.formula.advanced_csv 25 | 4: constant.numeric.formula.advanced_csv 26 | 6: constant.numeric.formula.advanced_csv 27 | 8: constant.numeric.formula.advanced_csv 28 | 9: keyword.operator.advanced_csv 29 | 10: keyword.operator.advanced_csv 30 | push: 31 | - meta_scope: meta.range.advanced_csv 32 | - match: (?=(\")|$) 33 | pop: true 34 | - include: scope:source.python 35 | - match: '(?<=^|,|\s|\")([0-9.eE+-]+)(?=$|,|\s|\")' 36 | scope: meta.number.advanced_csv 37 | captures: 38 | 1: constant.numeric.advanced_csv 39 | - match: '(?<=^|,|\s|\")([^, \t\"]+)(?=$|,|\s|\")' 40 | scope: meta.nonnumber.advanced_csv 41 | captures: 42 | 1: storage.type.advanced_csv 43 | - match: (\,) 44 | scope: meta.delimiter.advanced_csv 45 | captures: 46 | 1: keyword.operator.advanced_csv 47 | -------------------------------------------------------------------------------- /components/config/sublime/syntaxes/extra/README.md: -------------------------------------------------------------------------------- 1 | # Sublime syntaxes 2 | 3 | All the submodules are offering .sublime-syntax files. The ones that are not in a submodule 4 | are converted from the following repos at the following commit: 5 | 6 | - Assembly x86: https://github.com/Nessphoro/sublimeassembly/tree/150352f4d89d7fde48b18cc4b046385a6e926c96 7 | - CSV: https://github.com/wadetb/Sublime-Text-Advanced-CSV/tree/4786d037a761bc45e516f6b0624a839919ec6d05 8 | - Crystal: https://github.com/crystal-lang-tools/sublime-crystal/tree/2ee9d667aeb9e90846244b5a74e78826014676de 9 | - Dart: https://github.com/LiteCatDev/Dartlight/tree/4a9abb5d480eec6b4b95fe6ff4667162a33d41d6 10 | - Kotlin: https://github.com/vkostyukov/kotlin-sublime-package/tree/aeeed2780b04aea3d293c547c24cae27cafef0c5 11 | - Nix: https://github.com/wmertens/sublime-nix/tree/9032bd613746b9c135223fd6f26a5fa555f18946 12 | - PowerShell: https://github.com/PowerShell/EditorSyntax/tree/4a0a076661d26473cac71b9a17e6a759e9b1c643 13 | - Swift: https://github.com/quiqueg/Swift-Sublime-Package/tree/fef17119ceef28a3c4b8cf72268d6192b595365d 14 | - Reason: https://github.com/reasonml-editor/sublime-reason/tree/69925396ec6e73581357c0b1c487055fa6c065e8 15 | - Stylus: https://github.com/billymoon/Stylus/tree/30908e3b5757d6cab4bf2ce660ef89b0c614cf62 16 | - Racket: https://gist.githubusercontent.com/sliminality/3f1527f8e910c36b3303346422b03409/raw/9ce1ddd463c9bc97439726fd5f63b1fb3a36419b/Racket.tmLanguage 17 | - TypeScript: https://github.com/microsoft/TypeScript-Sublime-Plugin/commit/a607ddfec90648c1c2f33f8306733f6aec5d2b78 18 | 19 | The others, I haven't kept track of the repo/commit. 20 | -------------------------------------------------------------------------------- /components/config/sublime/syntaxes/extra/lrc.sublime-syntax: -------------------------------------------------------------------------------- 1 | %YAML 1.2 2 | --- 3 | # http://www.sublimetext.com/docs/3/syntax.html 4 | scope: source.lyric 5 | file_extensions: 6 | - lrc 7 | - lyric 8 | contexts: 9 | main: 10 | - match: '\[([0-5][0-9]:[0-5][0-9]\.[0-9][0-9])\]' 11 | captures: 12 | 1: constant.other.time.lyric 13 | push: 14 | - match: '(.*)[\n\r]+' 15 | captures: 16 | 1: string.literal.lyric 17 | pop: true 18 | - match: '(\[)([a-zA-Z].*)(:)(.*)(\])' 19 | captures: 20 | 1: punctuation.definition.meta.lyric 21 | 2: entity.name.function.lyric 22 | 3: punctuation.definition.split.lyric 23 | 4: meta.object-literal.key.lyric 24 | 5: punctuation.definition.meta.lyric 25 | - match: (.*) 26 | captures: 27 | 1: invalid.illegal.lyric 28 | -------------------------------------------------------------------------------- /components/config/sublime/syntaxes/extra/srt.sublime-syntax: -------------------------------------------------------------------------------- 1 | %YAML 1.2 2 | --- 3 | # http://www.sublimetext.com/docs/3/syntax.html 4 | scope: source.subrip 5 | file_extensions: 6 | - srt 7 | - subrip 8 | contexts: 9 | main: 10 | - match: "^([1-9][0-9]*)$" 11 | scope: variable.other.readwrite.subrip 12 | - match: '^(\d{2}:[0-5][0-9]:[0-5][0-9],\d{3}) (-->) (\d{2}:[0-5][0-9]:[0-5][0-9],\d{3})$' 13 | captures: 14 | 1: constant.other.time.subrip 15 | 2: keyword.operator.assignment.subrip 16 | 3: constant.other.time.subrip 17 | - match: .+ 18 | push: 19 | - meta_scope: string.literal.subrip 20 | - match: (\n\r|\n) 21 | pop: true 22 | - match: (\)' 28 | captures: 29 | 1: punctuation.definition.tag.end.html 30 | pop: true 31 | - match: ()(.*)(<\/b>) 32 | captures: 33 | 1: punctuation.definition.tag.begin.html 34 | 2: entity.name.tag.inline.any.html 35 | 3: punctuation.definition.tag.end.html 36 | -------------------------------------------------------------------------------- /components/config/sublime/syntaxes/newlines.packdump: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/config/sublime/syntaxes/newlines.packdump -------------------------------------------------------------------------------- /components/config/sublime/themes/all.themedump: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/config/sublime/themes/all.themedump -------------------------------------------------------------------------------- /components/console/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "console" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | errors = { path = "../errors" } 8 | libs = { path = "../libs" } 9 | -------------------------------------------------------------------------------- /components/content/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "content" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | serde = {version = "1.0", features = ["derive"] } 8 | time = { version = "0.3", features = ["macros"] } 9 | 10 | errors = { path = "../errors" } 11 | utils = { path = "../utils" } 12 | libs = { path = "../libs" } 13 | config = { path = "../config" } 14 | 15 | # TODO: remove it? 16 | markdown = { path = "../markdown" } 17 | 18 | [dev-dependencies] 19 | test-case = "3" # TODO: can we solve that usecase in src/page.rs in a simpler way? A custom macro_rules! maybe 20 | tempfile = "3.3.0" 21 | templates = { path = "../templates" } 22 | -------------------------------------------------------------------------------- /components/content/src/front_matter/mod.rs: -------------------------------------------------------------------------------- 1 | mod page; 2 | mod section; 3 | mod split; 4 | 5 | pub use page::PageFrontMatter; 6 | pub use section::SectionFrontMatter; 7 | pub use split::{split_page_content, split_section_content}; 8 | -------------------------------------------------------------------------------- /components/content/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod front_matter; 2 | 3 | mod file_info; 4 | mod library; 5 | mod page; 6 | mod pagination; 7 | mod section; 8 | mod ser; 9 | mod sorting; 10 | mod taxonomies; 11 | mod types; 12 | mod utils; 13 | 14 | pub use file_info::FileInfo; 15 | pub use front_matter::{PageFrontMatter, SectionFrontMatter}; 16 | pub use library::Library; 17 | pub use page::Page; 18 | pub use pagination::Paginator; 19 | pub use section::Section; 20 | pub use taxonomies::{Taxonomy, TaxonomyTerm}; 21 | pub use types::*; 22 | -------------------------------------------------------------------------------- /components/content/src/types.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | 3 | #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, Eq)] 4 | #[serde(rename_all = "lowercase")] 5 | pub enum SortBy { 6 | /// Most recent to oldest 7 | Date, 8 | /// Most recent to oldest 9 | #[serde(rename = "update_date")] 10 | UpdateDate, 11 | /// Sort by title lexicographically 12 | Title, 13 | /// Sort by titles using the bytes directly 14 | #[serde(rename = "title_bytes")] 15 | TitleBytes, 16 | /// Lower weight comes first 17 | Weight, 18 | /// Sort by slug 19 | Slug, 20 | /// No sorting 21 | None, 22 | } 23 | -------------------------------------------------------------------------------- /components/errors/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "errors" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | anyhow = "1.0.56" 8 | -------------------------------------------------------------------------------- /components/errors/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub use anyhow::*; 2 | -------------------------------------------------------------------------------- /components/imageproc/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "imageproc" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | serde = { version = "1", features = ["derive"] } 8 | kamadak-exif = "0.6" 9 | 10 | errors = { path = "../errors" } 11 | utils = { path = "../utils" } 12 | config = { path = "../config" } 13 | libs = { path = "../libs" } 14 | 15 | [dev-dependencies] 16 | tempfile = "3" 17 | -------------------------------------------------------------------------------- /components/imageproc/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod format; 2 | mod helpers; 3 | mod meta; 4 | mod ops; 5 | mod processor; 6 | 7 | pub use helpers::fix_orientation; 8 | pub use meta::{read_image_metadata, ImageMeta, ImageMetaResponse}; 9 | pub use ops::{ResizeInstructions, ResizeOperation}; 10 | pub use processor::{EnqueueResponse, Processor, RESIZED_SUBDIR}; 11 | -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/avif.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/avif.avif -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_0.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_1.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_2.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_3.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_4.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_5.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_6.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_7.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/exif_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/exif_8.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/jpg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/jpg.jpg -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/png.png -------------------------------------------------------------------------------- /components/imageproc/tests/test_imgs/webp.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/imageproc/tests/test_imgs/webp.webp -------------------------------------------------------------------------------- /components/libs/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! This component is only there to re-export libraries used in the rest of the sub-crates 2 | //! without having to add them to each `Cargo.toml`. This way, updating a library version only requires 3 | //! modifying one crate instead of eg updating Tera in 5 sub crates using it. It also means if you want 4 | //! to define features, it is done in a single place. 5 | //! It doesn't work for crates exporting macros like `serde` or dev deps but that's ok for most. 6 | 7 | pub use ahash; 8 | pub use ammonia; 9 | pub use atty; 10 | pub use avif_parse; 11 | pub use base64; 12 | pub use csv; 13 | pub use elasticlunr; 14 | pub use filetime; 15 | pub use gh_emoji; 16 | pub use glob; 17 | pub use globset; 18 | pub use grass; 19 | pub use image; 20 | pub use lexical_sort; 21 | pub use minify_html; 22 | pub use nom_bibtex; 23 | pub use num_format; 24 | pub use once_cell; 25 | pub use percent_encoding; 26 | pub use pulldown_cmark; 27 | pub use pulldown_cmark_escape; 28 | pub use quickxml_to_serde; 29 | pub use rayon; 30 | pub use regex; 31 | pub use relative_path; 32 | pub use reqwest; 33 | pub use serde_json; 34 | pub use serde_yaml; 35 | pub use sha2; 36 | pub use slug; 37 | pub use svg_metadata; 38 | pub use syntect; 39 | pub use tera; 40 | pub use termcolor; 41 | pub use time; 42 | pub use toml; 43 | pub use unic_langid; 44 | pub use unicode_segmentation; 45 | pub use url; 46 | pub use walkdir; 47 | pub use webp; 48 | -------------------------------------------------------------------------------- /components/link_checker/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "link_checker" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | config = { path = "../config" } 8 | errors = { path = "../errors" } 9 | utils = { path = "../utils" } 10 | libs = { path = "../libs" } 11 | 12 | [dev-dependencies] 13 | mockito = "1.6" 14 | -------------------------------------------------------------------------------- /components/markdown/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "markdown" 3 | version = "0.1.0" 4 | edition = "2021" 5 | include = ["src/**/*"] 6 | 7 | [dependencies] 8 | pest = "2" 9 | pest_derive = "2" 10 | 11 | errors = { path = "../errors" } 12 | utils = { path = "../utils" } 13 | config = { path = "../config" } 14 | console = { path = "../console" } 15 | libs = { path = "../libs" } 16 | 17 | [dev-dependencies] 18 | templates = { path = "../templates" } 19 | insta = "1.12.0" 20 | -------------------------------------------------------------------------------- /components/markdown/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod codeblock; 2 | mod context; 3 | mod markdown; 4 | mod shortcode; 5 | 6 | use shortcode::{extract_shortcodes, insert_md_shortcodes}; 7 | 8 | use errors::Result; 9 | 10 | use crate::markdown::markdown_to_html; 11 | pub use crate::markdown::Rendered; 12 | pub use context::RenderContext; 13 | 14 | pub fn render_content(content: &str, context: &RenderContext) -> Result { 15 | // avoid parsing the content if needed 16 | if !content.contains("{{") && !content.contains("{%") { 17 | return markdown_to_html(content, context, Vec::new()); 18 | } 19 | 20 | let definitions = context.shortcode_definitions.as_ref(); 21 | // Extract all the defined shortcodes 22 | let (content, shortcodes) = extract_shortcodes(content, definitions)?; 23 | 24 | // Step 1: we render the MD shortcodes before rendering the markdown so they can get processed 25 | let (content, html_shortcodes) = 26 | insert_md_shortcodes(content, shortcodes, &context.tera_context, &context.tera)?; 27 | 28 | // Step 2: we render the markdown and the HTML markdown at the same time 29 | let html_context = markdown_to_html(&content, context, html_shortcodes)?; 30 | 31 | // TODO: Here issue #1418 could be implemented 32 | // if do_warn_about_unprocessed_md { 33 | // warn_about_unprocessed_md(unprocessed_md); 34 | // } 35 | 36 | Ok(html_context) 37 | } 38 | -------------------------------------------------------------------------------- /components/markdown/src/snapshots/markdown__markdown__tests__def_before_use.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/src/markdown.rs 3 | expression: html 4 | --- 5 |

There is footnote definition?1

6 |
7 |
    8 |
  1. 9 |

    It's before the reference.

    10 |
  2. 11 |
12 |
13 | -------------------------------------------------------------------------------- /components/markdown/src/snapshots/markdown__markdown__tests__footnote_inside_footnote.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/src/markdown.rs 3 | expression: html 4 | --- 5 |

This text has a footnote1

6 |
7 |
    8 |
  1. 9 |

    But the footnote has another footnote2.

    10 |
  2. 11 |
  3. 12 |

    That's it.

    13 |
  4. 14 |
15 |
16 | -------------------------------------------------------------------------------- /components/markdown/src/snapshots/markdown__markdown__tests__multiple_refs.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/src/markdown.rs 3 | expression: html 4 | --- 5 |

This text has two1 identical footnotes1

6 |
7 |
    8 |
  1. 9 |

    So one is present. ↩2

    10 |
  2. 11 |
12 |
13 | -------------------------------------------------------------------------------- /components/markdown/src/snapshots/markdown__markdown__tests__no_footnotes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/src/markdown.rs 3 | expression: html 4 | --- 5 |

Some text without footnotes.

6 |

Only fancy formatting.

7 | -------------------------------------------------------------------------------- /components/markdown/src/snapshots/markdown__markdown__tests__reordered_footnotes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/src/markdown.rs 3 | expression: html 4 | --- 5 |

This text has two1 footnotes2

6 |
7 |
    8 |
  1. 9 |

    But they are

    10 |
  2. 11 |
  3. 12 |

    not sorted.

    13 |
  4. 14 |
15 |
16 | -------------------------------------------------------------------------------- /components/markdown/src/snapshots/markdown__markdown__tests__single_footnote.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/src/markdown.rs 3 | expression: html 4 | --- 5 |

This text has a footnote1

6 |
7 |
    8 |
  1. 9 |

    But it is meaningless.

    10 |
  2. 11 |
12 |
13 | -------------------------------------------------------------------------------- /components/markdown/tests/img.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | use config::Config; 3 | 4 | #[test] 5 | fn can_transform_image() { 6 | let cases = vec![ 7 | "![haha](https://example.com/abc.jpg)", 8 | "![](https://example.com/abc.jpg)", 9 | "![ha\"h>a](https://example.com/abc.jpg)", 10 | "![__ha__*ha*](https://example.com/abc.jpg)", 11 | "![ha[ha](https://example.com)](https://example.com/abc.jpg)", 12 | ]; 13 | 14 | let body = common::render(&cases.join("\n")).unwrap().body; 15 | insta::assert_snapshot!(body); 16 | } 17 | 18 | #[test] 19 | fn can_add_lazy_loading_and_async_decoding() { 20 | let cases = vec![ 21 | "![haha](https://example.com/abc.jpg)", 22 | "![](https://example.com/abc.jpg)", 23 | "![ha\"h>a](https://example.com/abc.jpg)", 24 | "![__ha__*ha*](https://example.com/abc.jpg)", 25 | "![ha[ha](https://example.com)](https://example.com/abc.jpg)", 26 | ]; 27 | 28 | let mut config = Config::default_for_test(); 29 | config.markdown.lazy_async_image = true; 30 | 31 | let body = common::render_with_config(&cases.join("\n"), config).unwrap().body; 32 | insta::assert_snapshot!(body); 33 | } 34 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_add_line_numbers.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 227 4 | expression: body 5 | 6 | --- 7 |
1foo 8 |
2bar 9 |
10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_add_line_numbers_windows_eol.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/codeblocks.rs 3 | assertion_line: 248 4 | expression: body 5 | --- 6 |
1foo 7 |
2bar 8 |
9 | 10 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_add_line_numbers_with_highlight.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 253 4 | expression: body 5 | 6 | --- 7 |
1foo 8 |
2bar 9 |
10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_add_line_numbers_with_lineno_start.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 240 4 | expression: body 5 | 6 | --- 7 |
40foo 8 |
41bar 9 |
10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_hide_lines.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 36 4 | expression: res.body 5 | 6 | --- 7 |
foo
 8 | baz
 9 | bat
10 | 
11 | 12 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_all_lines.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 83 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_at_end.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 124 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_line_range.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 68 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_mix_line_ranges.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 184 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_out_of_bounds.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 139 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_ranges_overlap.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 154 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_reversed_range.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 214 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_single_line.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 53 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_single_line_range.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 199 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_unknown_lang.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 323 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | 
10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_highlight_weird_fence_tokens.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 169 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | bar
10 | baz
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_render_multiple_shortcodes_in_codeblock.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 288 4 | expression: body 5 | 6 | --- 7 |
1text1 8 |
2first 9 |
3text2 10 |
4second 11 |
5text3 12 |
13 | 14 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__can_render_shortcode_in_codeblock.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 272 4 | expression: body 5 | 6 | --- 7 |
1<div id="custom-attr"> 8 |
2dQw4w9WgXcQ 9 |
3</div> 10 |
11 | 12 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/codeblocks__does_nothing_with_highlighting_disabled.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/codeblocks.rs 3 | assertion_line: 336 4 | expression: body 5 | 6 | --- 7 |
foo
 8 | bar
 9 | 
10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/img__can_add_lazy_loading_and_async_decoding.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/img.rs 3 | expression: body 4 | --- 5 |

haha 6 | 7 | ha"h>a 8 | <strong>ha</strong><em>ha</em> 9 | ha<a href=ha" loading="lazy" decoding="async" />

10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/img__can_transform_image.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/img.rs 3 | expression: body 4 | --- 5 |

haha 6 | 7 | ha"h>a 8 | haha 9 | haha

10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_customise_anchor_template.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/markdown.rs 3 | assertion_line: 127 4 | expression: body 5 | 6 | --- 7 |

Hello (in en)

8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_customise_summary_template.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: summary 4 | --- 5 |

Hello (in en)

6 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_handle_heading_ids-2.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | --- 5 |

Hello

6 |

Hello

7 |

L'écologie et vous

8 |

Hello

9 |

Hello

10 |

Hello

11 |

Workaround for literal {#…}

12 |

Auto

13 |

14 |

15 |

About

16 |

Rust

17 |

hi

18 |

hi

19 |

hi

20 |

text 1 there

21 |
1 22 |

footnote

23 |
24 |

Classes

25 | 26 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_handle_heading_ids.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | --- 5 |

Hello

6 |

Hello

7 |

L'écologie et vous

8 |

Hello

9 |

Hello

10 |

Hello

11 |

Workaround for literal {#…}

12 |

Auto

13 |

14 |

15 |

About

16 |

Rust

17 |

hi

18 |

hi

19 |

hi

20 |

text 1 there

21 |
1 22 |

footnote

23 |
24 |

Classes

25 | 26 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_insert_anchors-2.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/markdown.rs 3 | assertion_line: 108 4 | expression: body 5 | 6 | --- 7 |

Hello🔗

8 |

World🔗

9 |

Hello!🔗

10 |

Rust🔗

11 |

Hello*_()🔗

12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_insert_anchors-3.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | --- 5 |

Hello

6 |

World

7 |

Hello!

8 |

Rust

9 |

Hello*_()

10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_insert_anchors.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/markdown.rs 3 | assertion_line: 105 4 | expression: body 5 | 6 | --- 7 |

🔗Hello

8 |

🔗World

9 |

🔗Hello!

10 |

🔗Rust

11 |

🔗Hello*_()

12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_make_zola_internal_links.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/markdown.rs 3 | assertion_line: 43 4 | expression: body 5 | 6 | --- 7 |

rel link 8 | rel link with anchor 9 | abs link

10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_render_basic_markdown.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | --- 5 |

Hello world

6 |

Hello world

7 |

Hello world 8 | Hello 9 | world 10 | Non rendered emoji :smile: 11 | a link 12 | alt text

13 |

some html

14 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_use_definition_list.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | --- 5 |
6 |
term
7 |
definition
8 |
9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__can_use_smart_punctuation.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/markdown.rs 3 | assertion_line: 135 4 | expression: body 5 | 6 | --- 7 |

This – is “it”…

8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__custom_url_schemes_are_untouched.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/markdown.rs 3 | assertion_line: 194 4 | expression: body 5 | 6 | --- 7 |

foo@bar.tld

8 |

(123) 456-7890

9 |

blank page

10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__external_link_all_options.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

https://google.com

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__external_link_class.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

https://google.com

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__external_link_class_and_target_blank.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

https://google.com

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__external_link_no_follow.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

https://google.com

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__external_link_no_options.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

https://google.com

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__external_link_no_referrer.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

https://google.com

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__external_link_target_blank.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

https://google.com

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__internal_link_no_class.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | expression: body 4 | snapshot_kind: text 5 | --- 6 |

about

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/markdown__internal_link_without_class.snap.new: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/markdown.rs 3 | assertion_line: 148 4 | expression: body 5 | --- 6 |

about

7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_emit_newlines_and_whitespace_with_shortcode.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 161 4 | expression: body 5 | 6 | --- 7 |
Hello
 8 | 
 9 | Zola
10 | 
11 | !
12 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_grab_lang_in_html_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 75 4 | expression: body 5 | 6 | --- 7 |

hello in en

8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_grab_lang_in_md_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/shortcodes.rs 3 | expression: body 4 | --- 5 |

Book cover in en

6 | 7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_grab_lang_in_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 50 4 | expression: body 5 | 6 | --- 7 |

hello in en

8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_passthrough_markdown_from_shortcode.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 184 4 | expression: body 5 | 6 | --- 7 |

Hello

8 |

Passing through

9 |

to the document

10 | 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_body_shortcode_and_paragraph_after.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 76 4 | expression: body 5 | 6 | --- 7 | This is a quote 8 |

Here is another paragraph.

9 | 10 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_commented_out_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 222 4 | expression: body 5 | 6 | --- 7 | 8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_list_with_shortcode.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 343 4 | expression: body 5 | 6 | --- 7 |
    8 |
  • a
  • 9 |
  • b 10 |
    11 | Hello World! 12 |
  • 13 |
  • c 14 |
    15 | Hello World! 16 |
  • 17 |
18 | 19 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_markdown_in_nested_shortcodes_with_bodies.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/shortcodes.rs 3 | assertion_line: 358 4 | expression: body 5 | --- 6 |

Begin level 0

7 |

Begin level 1

8 |

Begin level 2

9 |

a: 1, a: 2, b: 1, b: 2

10 |

End level 2

11 |
12 |

End level 1

13 |

End level 0

14 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_markdown_in_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 371 4 | expression: body 5 | 6 | --- 7 |
some code;
 8 | 
9 |
10 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_nested_shortcodes_with_bodies_with_nth.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/shortcodes.rs 3 | assertion_line: 398 4 | expression: body 5 | --- 6 |

a: 1

7 |

a: 2

8 |

a: 3

9 |

a: 4

10 |

a: 5

11 |

a: 6

12 |
13 |

a: 7

14 |

a: 8

15 |
16 |

a: 9

17 |

a: 10

18 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_shortcodes_with_tabs.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 326 4 | expression: body 5 | 6 | --- 7 |

8 | Hello World! 9 |
10 | Hello World! 11 |

12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_simple_text_with_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 52 4 | expression: body 5 | 6 | --- 7 |

hello shortcode-id

8 | A quoteshortcode-id2shortcode-id3 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_two_body_shortcode_and_paragraph_after_with_line_break_between.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 92 4 | expression: body 5 | 6 | --- 7 | This is a quoteThis is a quote 8 |

Here is another paragraph.

9 | 10 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_render_with_inline_html.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/shortcodes.rs 3 | expression: body 4 | --- 5 |

Here is 1 example.

6 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_split_shortcode_body_lines.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 312 4 | expression: body 5 | 6 | --- 7 | [multi, ple, lines] 8 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__can_use_shortcodes_in_quotes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 385 4 | expression: body 5 | 6 | --- 7 |
8 |

test quote 9 | a quote

10 |
11 | 12 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__doesnt_escape_html_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 198 4 | expression: body 5 | 6 | --- 7 | something 8 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__doesnt_render_ignored_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/shortcodes.rs 3 | expression: body 4 | --- 5 |

{{ youtube(id="w7Ft2ymGmfc") }}

6 | 7 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__doesnt_try_to_highlight_content_from_shortcode.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 140 4 | expression: body 5 | 6 | --- 7 | no highlight 8 | or there 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__html_shortcode_regression-2.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 293 4 | expression: body 5 | 6 | --- 7 |

2 1 3

8 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__html_shortcode_regression-3.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 293 4 | expression: body 5 | 6 | --- 7 |

\n2\n

8 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__html_shortcode_regression-4.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 293 4 | expression: body 5 | 6 | --- 7 |

2\nThe Book 2

8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__html_shortcode_regression-5.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 293 4 | expression: body 5 | 6 | --- 7 |

a.2 b.1 c.3

8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__html_shortcode_regression.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 293 4 | expression: body 5 | 6 | --- 7 |

2 1 3

8 | 9 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__invocation_count_increments_in_shortcode.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 254 4 | expression: body 5 | 6 | --- 7 |

a: 1

8 |

b: 1

9 |

a: 2

10 |

b: 2

11 | 12 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__md_shortcode_regression.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 274 4 | expression: body 5 | 6 | --- 7 |

ttest1

8 |

123

9 |

ttest2

10 |

123

11 | 12 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/shortcodes__shortcodes_do_not_generate_paragraphs.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/shortcodes.rs 3 | assertion_line: 362 4 | expression: body 5 | 6 | --- 7 | some code; 8 | more code; 9 | 10 | other code here; 11 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/summary__basic_summary.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/summary.rs 3 | assertion_line: 24 4 | expression: body 5 | 6 | --- 7 |

Hello world!

8 |

Introduction

9 |
    10 |
  • first
  • 11 |
  • second
  • 12 |
13 | 14 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/summary__footnotes_summary.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/summary.rs 3 | expression: body 4 | --- 5 |

Hello world.

6 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/summary__summary_with_shortcodes.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/rendering/tests/summary.rs 3 | assertion_line: 41 4 | expression: body 5 | 6 | --- 7 |

a: 1

a: 2

8 |

Hello world

9 |

10 |
some code;
11 | 
12 | 13 | -------------------------------------------------------------------------------- /components/markdown/tests/snapshots/summary__truncated_summary.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: components/markdown/tests/summary.rs 3 | expression: body 4 | --- 5 |

Things to do:

6 |
    7 |
  • Program… 8 |
  • 9 |
10 | -------------------------------------------------------------------------------- /components/markdown/tests/summary.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | 3 | fn get_summary(content: &str) -> String { 4 | get_rendered(content).summary.expect("had no summary") 5 | } 6 | 7 | fn get_rendered(content: &str) -> markdown::Rendered { 8 | common::render(content).expect("couldn't render") 9 | } 10 | 11 | #[test] 12 | fn basic_summary() { 13 | let body = get_summary( 14 | r#" 15 | Hello world! 16 | 17 | # Introduction 18 | 19 | - first 20 | - second 21 | 22 | 23 | 24 | And some content after 25 | "#, 26 | ); 27 | insta::assert_snapshot!(body); 28 | } 29 | 30 | // https://zola.discourse.group/t/zola-12-issue-with-continue-reading/590/7 31 | #[test] 32 | fn summary_with_shortcodes() { 33 | let body = get_summary( 34 | r#" 35 | {{ a() }} {{ a() }} 36 | {% render_md() %} 37 | # Hello world 38 | {% end %} 39 | ``` 40 | some code; 41 | ``` 42 | 43 | 44 | And some content after 45 | "#, 46 | ); 47 | insta::assert_snapshot!(body); 48 | } 49 | 50 | #[test] 51 | fn truncated_summary() { 52 | let body = get_summary( 53 | r#" 54 | Things to do: 55 | * Program something 56 | * Eat 57 | * Sleep 58 | "#, 59 | ); 60 | insta::assert_snapshot!(body); 61 | } 62 | 63 | #[test] 64 | fn footnotes_summary() { 65 | let body = get_summary( 66 | r#" 67 | Hello world[^1]. 68 | 69 | 70 | 71 | Good bye. 72 | 73 | [^1]: "World" is a placeholder. 74 | "#, 75 | ); 76 | insta::assert_snapshot!(body); 77 | } 78 | -------------------------------------------------------------------------------- /components/search/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "search" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | errors = { path = "../errors" } 8 | content = { path = "../content" } 9 | config = { path = "../config" } 10 | libs = { path = "../libs" } 11 | serde = { version = "1.0", features = ["derive"] } 12 | -------------------------------------------------------------------------------- /components/site/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "site" 3 | version = "0.1.0" 4 | authors = ["Vincent Prouillet "] 5 | edition = "2018" 6 | include = ["src/**/*"] 7 | 8 | [dependencies] 9 | serde = { version = "1.0", features = ["derive"] } 10 | 11 | errors = { path = "../errors" } 12 | config = { path = "../config" } 13 | console = { path = "../console" } 14 | utils = { path = "../utils" } 15 | templates = { path = "../templates" } 16 | search = { path = "../search" } 17 | imageproc = { path = "../imageproc" } 18 | link_checker = { path = "../link_checker" } 19 | libs = { path = "../libs" } 20 | content = { path = "../content" } 21 | 22 | [dev-dependencies] 23 | tempfile = "3" 24 | path-slash = "0.2" 25 | -------------------------------------------------------------------------------- /components/site/tests/invalid.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | 3 | use site::Site; 4 | use std::env; 5 | 6 | #[test] 7 | fn errors_on_index_md_page_in_section() { 8 | let mut path = env::current_dir().unwrap().parent().unwrap().parent().unwrap().to_path_buf(); 9 | path.push("test_sites_invalid"); 10 | path.push("indexmd"); 11 | let config_file = path.join("config.toml"); 12 | let mut site = Site::new(&path, &config_file).unwrap(); 13 | let res = site.load(); 14 | assert!(res.is_err()); 15 | let err = res.unwrap_err(); 16 | assert!(format!("{:?}", err) 17 | .contains("We can't have a page called `index.md` in the same folder as an index section")); 18 | } 19 | -------------------------------------------------------------------------------- /components/templates/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "templates" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | errors = { path = "../errors" } 8 | utils = { path = "../utils" } 9 | content = { path = "../content" } 10 | config = { path = "../config" } 11 | imageproc = { path = "../imageproc" } 12 | markdown = { path = "../markdown" } 13 | libs = { path = "../libs" } 14 | 15 | 16 | [dev-dependencies] 17 | mockito = "1.6" 18 | tempfile = "3" 19 | -------------------------------------------------------------------------------- /components/templates/gutenberg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/components/templates/gutenberg.jpg -------------------------------------------------------------------------------- /components/templates/src/builtins/404.html: -------------------------------------------------------------------------------- 1 | 2 | 404 Not Found 3 |

404 Not Found

4 | -------------------------------------------------------------------------------- /components/templates/src/builtins/anchor-link.html: -------------------------------------------------------------------------------- 1 | 🔗 -------------------------------------------------------------------------------- /components/templates/src/builtins/internal/alias.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Redirect 6 |

Click here to be redirected.

7 | -------------------------------------------------------------------------------- /components/templates/src/builtins/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | Allow: / 4 | Sitemap: {{ get_url(path="sitemap.xml") }} 5 | -------------------------------------------------------------------------------- /components/templates/src/builtins/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {%- for sitemap_entry in entries %} 4 | 5 | {{ sitemap_entry.permalink | escape_xml | safe }} 6 | {%- if sitemap_entry.updated %} 7 | {{ sitemap_entry.updated }} 8 | {%- endif %} 9 | 10 | {%- endfor %} 11 | 12 | -------------------------------------------------------------------------------- /components/templates/src/builtins/split_sitemap_index.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {%- for sitemap in sitemaps %} 4 | 5 | {{ sitemap }} 6 | 7 | {%- endfor %} 8 | 9 | -------------------------------------------------------------------------------- /components/templates/src/builtins/summary-cutoff.html: -------------------------------------------------------------------------------- 1 | … 2 | -------------------------------------------------------------------------------- /components/templates/src/global_fns/macros.rs: -------------------------------------------------------------------------------- 1 | #[macro_export] 2 | macro_rules! required_arg { 3 | ($ty: ty, $e: expr, $err: expr) => { 4 | match $e { 5 | Some(v) => match from_value::<$ty>(v.clone()) { 6 | Ok(u) => u, 7 | Err(_) => return Err($err.into()), 8 | }, 9 | None => return Err($err.into()), 10 | } 11 | }; 12 | } 13 | 14 | #[macro_export] 15 | macro_rules! optional_arg { 16 | ($ty: ty, $e: expr, $err: expr) => { 17 | match $e { 18 | Some(v) => match from_value::<$ty>(v.clone()) { 19 | Ok(u) => Some(u), 20 | Err(_) => return Err($err.into()), 21 | }, 22 | None => None, 23 | } 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /components/templates/src/global_fns/mod.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | mod macros; 3 | 4 | mod content; 5 | mod files; 6 | mod helpers; 7 | mod i18n; 8 | mod images; 9 | mod load_data; 10 | 11 | pub use self::content::{GetPage, GetSection, GetTaxonomy, GetTaxonomyTerm, GetTaxonomyUrl}; 12 | pub use self::files::{GetHash, GetUrl}; 13 | pub use self::i18n::Trans; 14 | pub use self::images::{GetImageMetadata, ResizeImage}; 15 | pub use self::load_data::LoadData; 16 | -------------------------------------------------------------------------------- /components/utils/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "utils" 3 | version = "0.1.0" 4 | authors = ["Vincent Prouillet "] 5 | edition = "2018" 6 | include = ["src/**/*"] 7 | 8 | [dependencies] 9 | serde = { version = "1.0", features = ["derive"] } 10 | 11 | errors = { path = "../errors" } 12 | libs = { path = "../libs" } 13 | 14 | [dev-dependencies] 15 | tempfile = "3" 16 | time = { version = "0.3", features = ["macros"] } 17 | -------------------------------------------------------------------------------- /components/utils/src/default_tpl.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Zola 4 | 5 | 6 |
7 |

Welcome to Zola!

8 |

9 | You're seeing this page because we couldn't find a template to render. 10 |

11 |

12 | To modify this page, create a {{filename}} file in the templates directory or 13 | install a theme. 14 |
15 | You can find what variables are available in this template in the documentation. 16 |

17 |
18 | 21 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /components/utils/src/globs.rs: -------------------------------------------------------------------------------- 1 | use libs::globset::{Glob, GlobSet, GlobSetBuilder}; 2 | 3 | use errors::{bail, Result}; 4 | 5 | pub fn build_ignore_glob_set(ignore: &Vec, name: &str) -> Result { 6 | // Convert the file glob strings into a compiled glob set matcher. We want to do this once, 7 | // at program initialization, rather than for every page, for example. We arrange for the 8 | // globset matcher to always exist (even though it has to be inside an Option at the 9 | // moment because of the TOML serializer); if the glob set is empty the `is_match` function 10 | // of the globber always returns false. 11 | let mut glob_set_builder = GlobSetBuilder::new(); 12 | for pat in ignore { 13 | let glob = match Glob::new(pat) { 14 | Ok(g) => g, 15 | Err(e) => bail!("Invalid ignored_{} glob pattern: {}, error = {}", name, pat, e), 16 | }; 17 | glob_set_builder.add(glob); 18 | } 19 | Ok(glob_set_builder.build()?) 20 | } 21 | -------------------------------------------------------------------------------- /components/utils/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod anchors; 2 | pub mod de; 3 | pub mod fs; 4 | pub mod globs; 5 | pub mod net; 6 | pub mod site; 7 | pub mod slugs; 8 | pub mod table_of_contents; 9 | pub mod templates; 10 | pub mod types; 11 | -------------------------------------------------------------------------------- /components/utils/src/net.rs: -------------------------------------------------------------------------------- 1 | use std::net::IpAddr; 2 | use std::net::TcpListener; 3 | 4 | pub fn get_available_port(interface: IpAddr, avoid: u16) -> Option { 5 | // Start after "well-known" ports (0–1023) as they require superuser 6 | // privileges on UNIX-like operating systems. 7 | (1024..9000).find(|port| *port != avoid && port_is_available(interface, *port)) 8 | } 9 | 10 | pub fn port_is_available(interface: IpAddr, port: u16) -> bool { 11 | TcpListener::bind((interface, port)).is_ok() 12 | } 13 | 14 | /// Returns whether a link starts with an HTTP(s) scheme. 15 | pub fn is_external_link(link: &str) -> bool { 16 | link.starts_with("http:") || link.starts_with("https:") 17 | } 18 | -------------------------------------------------------------------------------- /components/utils/src/types.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | 3 | #[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] 4 | #[serde(rename_all = "lowercase")] 5 | pub enum InsertAnchor { 6 | Left, 7 | Right, 8 | Heading, 9 | None, 10 | } 11 | 12 | impl InsertAnchor { 13 | pub fn uses_template(&self) -> bool { 14 | matches!(self, InsertAnchor::Left | InsertAnchor::Right) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /components/utils/test-files/test.css: -------------------------------------------------------------------------------- 1 | .hello {} 2 | -------------------------------------------------------------------------------- /components/utils/test-files/test.csv: -------------------------------------------------------------------------------- 1 | Number,Title 2 | 1,Gutenberg 3 | 2,Printing -------------------------------------------------------------------------------- /components/utils/test-files/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "value", 3 | "array": [1, 2, 3], 4 | "subpackage": { 5 | "subkey": 5 6 | } 7 | } -------------------------------------------------------------------------------- /components/utils/test-files/test.toml: -------------------------------------------------------------------------------- 1 | [category] 2 | key = "value" 3 | date = 1979-05-27T07:32:00Z 4 | lt1 = 07:32:00 -------------------------------------------------------------------------------- /components/utils/test-files/test.xml: -------------------------------------------------------------------------------- 1 | 2 | value 3 | 1 4 | 2 5 | 3 6 | 7 | 5 8 | 9 | 10 | -------------------------------------------------------------------------------- /components/utils/test-files/test.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | key: "value" 3 | array: 4 | - 1 5 | - 2 6 | - 3 7 | subpackage: 8 | subkey: 5 9 | 10 | -------------------------------------------------------------------------------- /components/utils/test-files/uneven_rows.csv: -------------------------------------------------------------------------------- 1 | Number,Title 2 | 1,Gutenberg 3 | 2,Printing 4 | 3,Typewriter,ExtraBadColumn 5 | -------------------------------------------------------------------------------- /components/utils/test-templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% block body %} 8 | {% endblock body %} 9 | 10 | -------------------------------------------------------------------------------- /components/utils/test-templates/child.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | A child 4 | 5 | {% include "included.html" %} 6 | -------------------------------------------------------------------------------- /components/utils/test-templates/included.html: -------------------------------------------------------------------------------- 1 | I am included. 2 | -------------------------------------------------------------------------------- /components/utils/test-templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block body %} 4 | The default text 5 | {% endblock body %} 6 | -------------------------------------------------------------------------------- /components/utils/test-templates/macros.html: -------------------------------------------------------------------------------- 1 | {% macro twice(str) %} 2 | {{str}}-{{str}} 3 | {% endmacro twice %} 4 | -------------------------------------------------------------------------------- /components/utils/test-templates/shortcodes/something.html: -------------------------------------------------------------------------------- 1 | Hello 2 | -------------------------------------------------------------------------------- /components/utils/test-templates/using-macros.html: -------------------------------------------------------------------------------- 1 | {% import "macros.html" as macros %} 2 | 3 | {{ macros::twice(str="hey") }} 4 | -------------------------------------------------------------------------------- /docs/config.toml: -------------------------------------------------------------------------------- 1 | base_url = "https://www.getzola.org/" 2 | title = "Zola" 3 | description = "Everything you need to make a static site engine in one binary." 4 | 5 | compile_sass = true 6 | build_search_index = true 7 | 8 | taxonomies = [ 9 | { name = "theme-tags"} 10 | ] 11 | 12 | [search] 13 | index_format = "elasticlunr_json" 14 | 15 | [markdown] 16 | highlight_code = true 17 | highlight_theme = "kronuz" 18 | external_links_class = "external" 19 | #highlight_theme = "css" 20 | #highlight_themes_css = [ 21 | # { theme = "base16-ocean-dark", filename = "syntax-theme-dark.css" }, 22 | # { theme = "base16-ocean-light", filename = "syntax-theme-light.css" }, 23 | #] 24 | 25 | [link_checker] 26 | internal_level = "warn" 27 | 28 | [extra] 29 | author = "Vincent Prouillet" 30 | -------------------------------------------------------------------------------- /docs/content/documentation/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | template = "documentation.html" 3 | redirect_to = "documentation/getting-started/" 4 | +++ 5 | 6 | Getting started 7 | - Installation 8 | - CLI usage 9 | - Directory structure 10 | - config.toml 11 | 12 | Content 13 | - Organisation 14 | - Sections 15 | - Pages 16 | - Shortcodes 17 | - Internal links & deep linking 18 | - Table of contents 19 | - Syntax highlighting 20 | - Sass 21 | 22 | Templates 23 | - Intro 24 | - Each kind of page and the variables available 25 | - Built-in global functions 26 | - Built-in filters 27 | 28 | Theme 29 | - Installing & customising a theme 30 | - Creating a theme 31 | -------------------------------------------------------------------------------- /docs/content/documentation/content/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Content" 3 | weight = 2 4 | sort_by = "weight" 5 | redirect_to = "documentation/content/overview" 6 | insert_anchor_links = "left" 7 | +++ 8 | -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/01-zola.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/01-zola.png -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/02-zola-manet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/02-zola-manet.png -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/03-zola-cezanne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/03-zola-cezanne.png -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/04-gutenberg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/04-gutenberg.jpg -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/05-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/05-example.jpg -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/06-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/06-example.jpg -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/07-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/07-example.jpg -------------------------------------------------------------------------------- /docs/content/documentation/content/image-processing/08-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/content/image-processing/08-example.jpg -------------------------------------------------------------------------------- /docs/content/documentation/content/table-of-contents.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Table of Contents" 3 | weight = 60 4 | +++ 5 | 6 | Each page/section will automatically generate a table of contents for itself based on the headers generated with markdown. 7 | 8 | It is available in the template through the `page.toc` or `section.toc` variable. 9 | You can view the [template variables](@/documentation/templates/pages-sections.md#table-of-contents) 10 | documentation for information on its structure. 11 | 12 | Here is an example of using that field to render a two-level table of contents: 13 | 14 | ```jinja2 15 | {% if page.toc %} 16 |
    17 | {% for h1 in page.toc %} 18 |
  • 19 | {{ h1.title }} 20 | {% if h1.children %} 21 |
      22 | {% for h2 in h1.children %} 23 |
    • 24 | {{ h2.title }} 25 |
    • 26 | {% endfor %} 27 |
    28 | {% endif %} 29 |
  • 30 | {% endfor %} 31 |
32 | {% endif %} 33 | ``` 34 | 35 | While headers are neatly ordered in this example, it will work just as well with disjoint headers. 36 | 37 | Note that all existing HTML tags from the title will NOT be present in the table of contents to 38 | avoid various issues. 39 | -------------------------------------------------------------------------------- /docs/content/documentation/deployment/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Deployment" 3 | weight = 5 4 | sort_by = "weight" 5 | insert_anchor_links = "left" 6 | redirect_to = "documentation/deployment/overview" 7 | +++ 8 | 9 | -------------------------------------------------------------------------------- /docs/content/documentation/deployment/docker-image.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Docker image" 3 | weight = 90 4 | +++ 5 | 6 | If you have to distribute a Zola based web site through Docker, it's easy to do with a multi-stage build. 7 | 8 | Here is an example that builds the current folder, and put the result in a docker image that will be served by 9 | [static-web-server](https://static-web-server.net/), a minimalist web server written in rust. 10 | 11 | Of course, you may want to replace the second stage with another static web server like Nginx or Apache. 12 | 13 | ```Dockerfile 14 | FROM ghcr.io/getzola/zola:v0.17.1 as zola 15 | 16 | COPY . /project 17 | WORKDIR /project 18 | RUN ["zola", "build"] 19 | 20 | FROM ghcr.io/static-web-server/static-web-server:2 21 | WORKDIR / 22 | COPY --from=zola /project/public /public 23 | ``` 24 | 25 | To build your website as a docker image, you then run: 26 | ```shell 27 | docker build -t my_website:latest . 28 | ``` 29 | 30 | To test your site, just run the docker image and browse [http://localhost:8000](http://localhost:8000) 31 | 32 | ``` 33 | docker run --rm -p 8000:80 my_website:latest 34 | ``` 35 | 36 | Note that, if you want to be able to use your docker image from multiple locations, you'll have to set `base_url` to `/`. 37 | -------------------------------------------------------------------------------- /docs/content/documentation/deployment/edgio.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Edgio" 3 | weight = 50 4 | +++ 5 | 6 | If you don't have an account with Edgio, you can sign up [here](https://app.layer0.co/signup). 7 | 8 | ## Manual deploys 9 | 10 | For a command-line manual deploy, follow these steps: 11 | 12 | 1. Install the Edgio CLI: 13 | 14 | ```bash 15 | npm i -g @edgio/cli 16 | ``` 17 | 18 | 2. Create a package.json at the root of your project with the following: 19 | 20 | ```bash 21 | npm init -y 22 | ``` 23 | 24 | 3. Initialize your project with: 25 | 26 | ```bash 27 | edgio init 28 | ``` 29 | 30 | 4. Update routes.js at the root of your project to the following: 31 | 32 | ```js 33 | // This file was added by edgio init. 34 | // You should commit this file to source control. 35 | 36 | import { Router } from '@edgio/core/router' 37 | 38 | export default new Router().static('public') 39 | ``` 40 | 41 | 5. Build your zola app: 42 | 43 | ```bash 44 | zola build 45 | ``` 46 | 47 | 6. Deploy! 48 | 49 | ```bash 50 | edgio deploy 51 | ``` 52 | -------------------------------------------------------------------------------- /docs/content/documentation/deployment/flyio.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Fly.io" 3 | weight = 70 4 | +++ 5 | 6 | If you don't have an account with fly.io, you can sign up [here](https://fly.io/app/sign-up). 7 | 8 | Then install the `flyctl` tool following the instructions [here](https://fly.io/docs/hands-on/install-flyctl/). 9 | 10 | Create a `Dockerfile`: 11 | 12 | ```Dockerfile 13 | FROM ghcr.io/getzola/zola:v0.17.2 AS builder 14 | 15 | WORKDIR /app 16 | COPY . . 17 | RUN ["zola", "build"] 18 | 19 | FROM joseluisq/static-web-server:2 20 | COPY --from=builder /app/public /public 21 | ENV SERVER_PORT 8080 22 | ``` 23 | 24 | You can now run `fly launch`. It will detect the `Dockerfile` and mostly auto-configure everything. Fill out the necessary information, but say "no" to (1) launching any databases and (2) deploying immediately. 25 | 26 | Take note of the hostname assigned to your app. 27 | 28 | If you already have a Zola site you must now ensure that `base_url` in `config.toml` is set correctly using the hostname from your app (or whatever domain you have pointing to the app): 29 | 30 | base_url = "https://white-snow-9922.fly.dev" 31 | 32 | If you don't have an existing site, initialize one with `zola init -f` and remember to set the correct `base_url`. 33 | 34 | You're now ready to launch your site! Run `flyctl deploy` and have fun! 35 | 36 | Finally, to set up continuous deployment of your site from GitHub, follow [this](https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/) guide, steps 4-8. Any changes to your site will now be pushed automatically. 37 | -------------------------------------------------------------------------------- /docs/content/documentation/deployment/overview.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Overview" 3 | weight = 10 4 | +++ 5 | 6 | Zola outputs plain files, no databases needed. This makes hosting and deployment 7 | trivial on many providers. 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/content/documentation/getting-started/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Getting Started" 3 | weight = 1 4 | sort_by = "weight" 5 | redirect_to = "documentation/getting-started/overview" 6 | insert_anchor_links = "left" 7 | +++ 8 | -------------------------------------------------------------------------------- /docs/content/documentation/templates/404.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "404 error page" 3 | weight = 80 4 | +++ 5 | 6 | Zola will look for a `404.html` file in the `templates` directory or 7 | use the built-in one. The default template is very basic and gets `config` in its context. 8 | -------------------------------------------------------------------------------- /docs/content/documentation/templates/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Templates" 3 | weight = 3 4 | sort_by = "weight" 5 | insert_anchor_links = "left" 6 | redirect_to = "documentation/templates/overview" 7 | +++ 8 | -------------------------------------------------------------------------------- /docs/content/documentation/templates/archive.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Archive" 3 | weight = 90 4 | +++ 5 | 6 | Zola doesn't have a built-in way to display an archive page (a page showing 7 | all post titles ordered by year). However, this can be accomplished directly in the templates: 8 | 9 | ```jinja2 10 | {% for year, posts in section.pages | group_by(attribute="year") %} 11 |

{{ year }}

12 | 13 | 18 | {% endfor %} 19 | ``` 20 | 21 | This snippet assumes that posts are sorted by date and that you want to display the archive 22 | in descending order. If you want to show articles in ascending order, you need to further 23 | process the list of pages: 24 | ```jinja2 25 | {% set posts_by_year = section.pages | group_by(attribute="year") %} 26 | {% set_global years = [] %} 27 | {% for year, ignored in posts_by_year %} 28 | {% set_global years = years | concat(with=year) %} 29 | {% endfor %} 30 | {% for year in years | reverse %} 31 | {% set posts = posts_by_year[year] %} 32 | {# (same as the previous snippet) #} 33 | {% endfor %} 34 | ``` 35 | -------------------------------------------------------------------------------- /docs/content/documentation/templates/feeds/rss_feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/documentation/templates/feeds/rss_feed.png -------------------------------------------------------------------------------- /docs/content/documentation/templates/robots.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Robots.txt" 3 | weight = 70 4 | +++ 5 | 6 | Zola will look for a `robots.txt` file in the `templates` directory or 7 | use the built-in one. 8 | 9 | Robots.txt is the simplest of all templates: it only gets `config` 10 | and the default is what most sites want: 11 | 12 | ```jinja2 13 | User-agent: * 14 | Disallow: 15 | Allow: / 16 | Sitemap: {{/* get_url(path="sitemap.xml") */}} 17 | ``` 18 | 19 | The file can be extended & expanded like other templates using e.g. Tera's `include` tag: 20 | 21 | ```jinja2 22 | User-agent: * 23 | Disallow: 24 | Allow: / 25 | Sitemap: {{/* get_url(path="sitemap.xml") */}} 26 | 27 | {% include "path/to/other/robots.txt" %} 28 | ``` 29 | -------------------------------------------------------------------------------- /docs/content/documentation/templates/sitemap.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Sitemap" 3 | weight = 60 4 | +++ 5 | 6 | Zola will look for a `sitemap.xml` file in the `templates` directory or 7 | use the built-in one. 8 | 9 | If your site has more than 30 000 pages, it will automatically split 10 | the links into multiple sitemaps, as recommended by [Google](https://support.google.com/webmasters/answer/183668?hl=en): 11 | 12 | > All formats limit a single sitemap to 50MB (uncompressed) and 50,000 URLs. 13 | > If you have a larger file or more URLs, you will have to break your list into multiple sitemaps. 14 | > You can optionally create a sitemap index file (a file that points to a list of sitemaps) and submit 15 | > that single index file to Google. 16 | 17 | In such a case, Zola will use a template called `split_sitemap_index.xml` to render the index sitemap. 18 | 19 | 20 | The `sitemap.xml` template gets a single variable: 21 | 22 | - `entries`: all pages of the site, as a list of `SitemapEntry` 23 | 24 | A `SitemapEntry` has the following fields: 25 | 26 | ```ts 27 | permalink: String; 28 | updated: String?; 29 | extra: Hashmap?; 30 | ``` 31 | 32 | The `split_sitemap_index.xml` also gets a single variable: 33 | 34 | - `sitemaps`: a list of permalinks to the sitemaps 35 | -------------------------------------------------------------------------------- /docs/content/documentation/themes/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Themes" 3 | weight = 4 4 | sort_by = "weight" 5 | insert_anchor_links = "left" 6 | redirect_to = "documentation/themes/overview" 7 | +++ 8 | -------------------------------------------------------------------------------- /docs/content/documentation/themes/overview.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Overview" 3 | weight = 10 4 | +++ 5 | 6 | Themes are collections of layouts and styles used to facilitate the creation and management of Zola projects. As such, themes are Zola projects which provide their own templates, content and even static assets. 7 | 8 | Zola has built-in support for themes which makes it easy to customise and update them. 9 | 10 | All themes can use the full power of Zola, from shortcodes to Sass compilation. 11 | 12 | A list of themes is available [here](@/themes/_index.md). 13 | 14 | -------------------------------------------------------------------------------- /docs/content/themes/BelResume/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/BelResume/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/DeepThought/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/DeepThought/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/Ergo/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/Ergo/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/HayFlow/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/HayFlow/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/Zulma/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/Zulma/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/_index.md: -------------------------------------------------------------------------------- 1 | 2 | +++ 3 | template = "themes.html" 4 | sort_by = "date" 5 | +++ 6 | -------------------------------------------------------------------------------- /docs/content/themes/abridge/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/abridge/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/academic-paper/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/academic-paper/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/academic-workshop/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/academic-workshop/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/adidoks/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/adidoks/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/after-dark/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/after-dark/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/albatros/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/albatros/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/anatole-zola/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/anatole-zola/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/andromeda/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/andromeda/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/anemone/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/anemone/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/anpu/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/anpu/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/apollo/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/apollo/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/archie-zola/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/archie-zola/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/ataraxia-zola/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/ataraxia-zola/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/bearblog/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/bearblog/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/blow/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/blow/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/book/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/book/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/boring/index.md: -------------------------------------------------------------------------------- 1 | 2 | +++ 3 | title = "boring" 4 | description = "A minimal theme" 5 | template = "theme.html" 6 | date = 2023-11-16T12:53:23+05:30 7 | 8 | [taxonomies] 9 | theme-tags = [] 10 | 11 | [extra] 12 | created = 2023-11-16T12:53:23+05:30 13 | updated = 2023-11-16T12:53:23+05:30 14 | repository = "https://github.com/ssiyad/boring.git" 15 | homepage = "https://github.com/ssiyad/boring" 16 | minimum_version = "0.16.0" 17 | license = "GPLv3" 18 | demo = "https://boring-zola.netlify.app/" 19 | 20 | [extra.author] 21 | name = "Sabu Siyad" 22 | homepage = "https://ssiyad.com" 23 | +++ 24 | 25 | # Boring 26 | Minimal theme for [Zola](https://www.getzola.org/), powered by 27 | [TailwindCSS](https://tailwindcss.com/) 28 | 29 | ### Demo 30 | https://boring-zola.netlify.app/ 31 | 32 | ![sreenshot](./screenshot.png) 33 | 34 | ### Setup 35 | In your zola site directory 36 | - Get theme 37 | 38 | ```shell 39 | git submodule add https://github.com/ssiyad/boring themes/boring 40 | ``` 41 | 42 | - Build CSS 43 | 44 | ```shell 45 | cd themes/boring 46 | yarn install --frozen-lockfile 47 | yarn build 48 | ``` 49 | 50 | - Change theme specific variables. They are listed in `extra` section of 51 | [config.toml](./config.toml) 52 | 53 | Refer [Zola Docs](https://www.getzola.org/documentation/themes/installing-and-using-themes/#using-a-theme) 54 | for further instructions 55 | 56 | ### License 57 | [GPLv3](./LICENSE) 58 | 59 | 60 | -------------------------------------------------------------------------------- /docs/content/themes/boring/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/boring/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/clean-blog/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/clean-blog/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/codinfox-zola/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/codinfox-zola/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/d3c3nt/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/d3c3nt/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/daisy/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/daisy/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/dinkleberg/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/dinkleberg/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/docsascode-theme/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/docsascode-theme/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/dose/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/dose/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/duckquill/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/duckquill/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/emily/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/emily/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/even/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/even/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/feather/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/feather/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/float/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/float/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/hallo/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/hallo/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/halve-z/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/halve-z/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/hephaestus/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/hephaestus/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/hermit/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/hermit/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/homepage-creators/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/homepage-creators/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/hook/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/hook/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/hyde/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/hyde/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/inky/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/inky/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/juice/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/juice/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/kangae/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/kangae/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/karzok/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/karzok/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/kita/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/kita/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/kodama-theme/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/kodama-theme/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/lightspeed/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/lightspeed/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/linkita/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/linkita/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/mabuya/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/mabuya/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/minimal-dark/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/minimal-dark/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/nasm-theme/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/nasm-theme/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/neovim-theme/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/neovim-theme/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/no-style-please/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/no-style-please/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/ntun/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/ntun/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/oceanic-zen/screenshot-index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/oceanic-zen/screenshot-index.png -------------------------------------------------------------------------------- /docs/content/themes/oceanic-zen/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/oceanic-zen/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/otherworld/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/otherworld/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/papaya/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/papaya/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/papermod/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/papermod/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/parchment/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/parchment/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/particle/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/particle/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/pico/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/pico/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/polymathic/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/polymathic/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/project-portfolio/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/project-portfolio/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/radion/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/radion/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/re137/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/re137/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/resume/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/resume/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/sam/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/sam/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/seagull/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/seagull/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/seje2/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/seje2/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/serene/index.md: -------------------------------------------------------------------------------- 1 | 2 | +++ 3 | title = "serene" 4 | description = "A spiffy blog theme for zola" 5 | template = "theme.html" 6 | date = 2025-05-07T23:48:50+08:00 7 | 8 | [taxonomies] 9 | theme-tags = [] 10 | 11 | [extra] 12 | created = 2025-05-07T23:48:50+08:00 13 | updated = 2025-05-07T23:48:50+08:00 14 | repository = "https://github.com/isunjn/serene.git" 15 | homepage = "https://github.com/isunjn/serene" 16 | minimum_version = "0.20.0" 17 | license = "MIT" 18 | demo = "https://serene-demo.pages.dev" 19 | 20 | [extra.author] 21 | name = "isunjn" 22 | homepage = "https://github.com/isunjn" 23 | +++ 24 | 25 |

26 | A minimal blog theme for zola, well crafted 27 |

28 | 29 |

30 | Demo · 31 | Usage 32 |

33 | 34 | Screenshot 35 | 36 | -------------------------------------------------------------------------------- /docs/content/themes/serene/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/serene/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/shadharon/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/shadharon/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/simple-dev-blog/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/simple-dev-blog/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/slim/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/slim/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/soapstone/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/soapstone/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/solar-theme-zola/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/solar-theme-zola/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/tabi/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/tabi/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/tale-zola/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/tale-zola/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/tilde/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/tilde/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/toucan/index.md: -------------------------------------------------------------------------------- 1 | 2 | +++ 3 | title = "Toucan" 4 | description = "Inspired from Pelican default theme" 5 | template = "theme.html" 6 | date = 2023-10-03T16:44:28+02:00 7 | 8 | [taxonomies] 9 | theme-tags = [] 10 | 11 | [extra] 12 | created = 2023-10-03T16:44:28+02:00 13 | updated = 2023-10-03T16:44:28+02:00 14 | repository = "https://git.42l.fr/HugoTrentesaux/toucan.git" 15 | homepage = "https://git.42l.fr/HugoTrentesaux/toucan" 16 | minimum_version = "0.8.0" 17 | license = "AGPL" 18 | demo = "https://toucan.coinduf.eu/" 19 | 20 | [extra.author] 21 | name = "Hugo Trentesaux" 22 | homepage = "https://trentesaux.fr/" 23 | +++ 24 | 25 | # Toucan 26 | 27 | A light theme for Zola adapted from Pelican. 28 | 29 | ![screenshot](./screenshot.png) 30 | 31 | ## Installation 32 | 33 | You can add the theme as a submodule : 34 | 35 | ```bash 36 | git submodule add --name toucan https://git.42l.fr/HugoTrentesaux/toucan.git themes/toucan 37 | ``` 38 | 39 | and enable the theme in your `config.toml` 40 | 41 | ```toml 42 | theme = "toucan" 43 | ``` 44 | 45 | ## Usage 46 | 47 | Categories will be added to the menu, and all articles from categories with 48 | 49 | ```toml 50 | transparent = true 51 | ``` 52 | 53 | will be listed in the home page. 54 | 55 | You can personalize the following options : 56 | 57 | ```toml 58 | [extra] 59 | title = "Toucan theme" 60 | title_pic = "/favicon.ico" 61 | description = "Theme for Zola inspired from Pelican website theme" 62 | license = """Content under CC BY-SA Licence""" 63 | ``` 64 | 65 | 66 | -------------------------------------------------------------------------------- /docs/content/themes/toucan/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/toucan/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/tranquil/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/tranquil/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zallery/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zallery/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zerm/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zerm/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zhuia/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zhuia/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zluinav/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zluinav/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-folio/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-folio/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-futu/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-futu/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-grayscale/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-grayscale/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-hacker/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-hacker/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-henry/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-henry/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-minimal/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-minimal/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-paper/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-paper/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-pickles/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-pickles/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-theme-course/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-theme-course/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-theme-hikari/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-theme-hikari/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-theme-jiaxiang.wang/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-theme-jiaxiang.wang/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola-theme-terminimal/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola-theme-terminimal/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola.386/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola.386/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zola_easydocs_theme/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zola_easydocs_theme/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zolarwind/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zolarwind/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zolastrap/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zolastrap/screenshot.png -------------------------------------------------------------------------------- /docs/content/themes/zplit/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/content/themes/zplit/screenshot.png -------------------------------------------------------------------------------- /docs/sass/_header.scss: -------------------------------------------------------------------------------- 1 | header { 2 | .header__logo { 3 | border-bottom: none; 4 | } 5 | 6 | ul { 7 | padding-inline-start: 0; 8 | display: flex; 9 | gap: 1ch 2rem; 10 | margin: 0; 11 | } 12 | 13 | li { 14 | list-style: none; 15 | } 16 | 17 | .header__logo { 18 | font-size: 2rem; 19 | font-weight: bold; 20 | 21 | &:hover { 22 | text-decoration: none; 23 | } 24 | } 25 | } 26 | 27 | @media only screen and (max-width: 1000px) { 28 | header { 29 | padding: 1rem 0; 30 | 31 | nav { 32 | text-align: center; 33 | } 34 | 35 | .header__logo { 36 | // to force menu links to be on a line below 37 | text-align: center; 38 | width: 100%; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /docs/sass/_index.scss: -------------------------------------------------------------------------------- 1 | .inverted-colours { 2 | background: $foreground; 3 | color: $background; 4 | } 5 | 6 | .hero { 7 | width: 60%; 8 | margin: 0 auto; 9 | margin-top: 3rem; 10 | margin-bottom: 6rem; 11 | text-align: center; 12 | 13 | &__tagline { 14 | margin-bottom: 2rem; 15 | } 16 | } 17 | 18 | .selling-points { 19 | padding: 3rem; 20 | 21 | &__content { 22 | display: flex; 23 | flex-wrap: wrap; 24 | } 25 | } 26 | 27 | .selling-point { 28 | // 2 selling points per row on desktop 29 | width: 33%; 30 | padding: 2rem; 31 | padding-top: 1rem; 32 | } 33 | 34 | // and 1 on mobile 35 | @media only screen and (max-width: 1000px) { 36 | .hero { 37 | width: 90%; 38 | margin-top: 2rem; 39 | margin-bottom: 4rem; 40 | } 41 | 42 | .selling-points { 43 | padding: 2rem; 44 | } 45 | 46 | .selling-point { 47 | width: 100%; 48 | padding: 1rem; 49 | 50 | h2 { 51 | text-align: center; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /docs/sass/_layout.scss: -------------------------------------------------------------------------------- 1 | header { 2 | padding: 2rem 3rem; 3 | display: flex; 4 | flex-wrap: wrap; 5 | align-items: baseline; 6 | column-gap: 2rem; 7 | 8 | // Container is reused elsewhere, so this must be declared here 9 | nav { 10 | display: flex; 11 | flex-grow: 1; 12 | flex-wrap: wrap; 13 | align-items: baseline; 14 | justify-content: center; 15 | gap: 1rem 2rem; 16 | margin: 0; 17 | } 18 | } 19 | 20 | .container { 21 | max-width: 1000px; 22 | margin: 0 auto; 23 | } 24 | 25 | @media only screen and (max-width: 1000px) { 26 | header { 27 | max-width: 90%; 28 | margin-inline: auto; 29 | justify-content: center; 30 | } 31 | } 32 | 33 | .content { 34 | flex-grow: 1; 35 | 36 | &--reversed { 37 | background: $foreground; 38 | color: $background; 39 | } 40 | } 41 | 42 | footer { 43 | text-align: center; 44 | padding: 2rem 3rem; 45 | } 46 | -------------------------------------------------------------------------------- /docs/sass/_search.scss: -------------------------------------------------------------------------------- 1 | .search-container { 2 | display: inline-block; 3 | position: relative; 4 | width: 100%; 5 | max-width: 300px; 6 | margin-left: auto; 7 | 8 | input { 9 | width: 100%; 10 | padding: 0.5rem; 11 | } 12 | } 13 | 14 | .search-results { 15 | display: none; 16 | position: absolute; 17 | background: white; 18 | color: black; 19 | padding: 1rem; 20 | box-shadow: 2px 2px 2px 0 rgba(0, 0, 0, 0.5); 21 | max-height: 500px; 22 | overflow: auto; 23 | width: 150%; 24 | right: 0; 25 | 26 | &__items { 27 | list-style: none; 28 | } 29 | 30 | li { 31 | margin-top: 1rem; 32 | border-bottom: 1px solid #ccc; 33 | font-size: 0.9rem; 34 | 35 | &:first-of-type { 36 | margin-top: 0; 37 | } 38 | } 39 | 40 | &__item { 41 | margin-bottom: 1rem; 42 | 43 | a { 44 | font-size: 1.2rem; 45 | display: inline-block; 46 | margin-bottom: 0.5rem; 47 | } 48 | } 49 | } 50 | 51 | @media only screen and (max-width: 1000px) { 52 | .search-container { 53 | margin-left: 0; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /docs/sass/_themes.scss: -------------------------------------------------------------------------------- 1 | .themes-container { 2 | padding: 3rem; 3 | width: 80%; 4 | margin: 0 auto; 5 | 6 | img { 7 | max-width: 100%; 8 | } 9 | } 10 | 11 | @media only screen and (max-width: 1000px) { 12 | .themes-container { 13 | width: 100%; 14 | margin: 0 1rem; 15 | } 16 | } 17 | 18 | .themes { 19 | display: flex; 20 | flex-wrap: wrap; 21 | justify-content: space-between; 22 | 23 | .theme { 24 | width: 45%; 25 | text-decoration: none; 26 | cursor: pointer; 27 | margin-bottom: 2rem; 28 | border-bottom: none; 29 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); 30 | padding: 10px; 31 | 32 | img { 33 | width: 100%; 34 | aspect-ratio: 16 / 9; 35 | height: 90%; 36 | object-fit: cover; 37 | } 38 | 39 | span { 40 | display: block; 41 | text-align: center; 42 | font-size: 1.1rem; 43 | } 44 | } 45 | } 46 | 47 | .theme-info { 48 | display: flex; 49 | align-items: flex-start; 50 | 51 | .thumb { 52 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07); 53 | width: 400px; 54 | margin-right: 2rem; 55 | } 56 | 57 | h1, 58 | p { 59 | margin: 0; 60 | } 61 | 62 | padding: 1rem; 63 | } 64 | 65 | @media only screen and (max-width: 1000px) { 66 | .themes .theme { 67 | width: 100%; 68 | } 69 | } 70 | 71 | @media only screen and (max-width: 1000px) { 72 | .theme-info { 73 | flex-direction: column; 74 | align-items: center; 75 | 76 | img { 77 | margin-bottom: 1rem; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /docs/sass/site.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | @import "normalize"; 4 | 5 | *, *:before, *:after { 6 | box-sizing: border-box; 7 | } 8 | 9 | $background: #191919; 10 | $foreground: white; 11 | $link-color: #007CBC; 12 | 13 | @import "base"; 14 | @import "layout"; 15 | @import "header"; 16 | @import "index"; 17 | @import "docs"; 18 | @import "themes"; 19 | @import "search"; 20 | 21 | //@import url("syntax-theme-dark.css") (prefers-color-scheme: dark); 22 | //@import url("syntax-theme-light.css") (prefers-color-scheme: light); 23 | -------------------------------------------------------------------------------- /docs/static/CNAME: -------------------------------------------------------------------------------- 1 | www.getzola.org 2 | -------------------------------------------------------------------------------- /docs/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/favicon.ico -------------------------------------------------------------------------------- /docs/static/logos/Zola-icon-coffee-on-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/static/logos/Zola-icon-cream-on-coffee.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.1a8b81cf026f45cb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.1a8b81cf026f45cb.png -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.2894991332a9de9e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.2894991332a9de9e.png -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.415a7ae280b04f3a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.415a7ae280b04f3a.png -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.88a4046ce11eac5c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.88a4046ce11eac5c.png -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.8b09d4ac023bf17f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.8b09d4ac023bf17f.png -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.a7f6fb4842538499.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.a7f6fb4842538499.png -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.aa5c9741e1f54677.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.aa5c9741e1f54677.png -------------------------------------------------------------------------------- /docs/static/processed_images/01-zola.c31346a8ceb47990.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/01-zola.c31346a8ceb47990.png -------------------------------------------------------------------------------- /docs/static/processed_images/02-zola-manet.f247a1c1a09dea92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/02-zola-manet.f247a1c1a09dea92.png -------------------------------------------------------------------------------- /docs/static/processed_images/03-zola-cezanne.54f3edb977adbe2f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/03-zola-cezanne.54f3edb977adbe2f.png -------------------------------------------------------------------------------- /docs/static/processed_images/04-gutenberg.6b23c36e66378f24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/04-gutenberg.6b23c36e66378f24.jpg -------------------------------------------------------------------------------- /docs/static/processed_images/05-example.67dc3b46cdb5d5d4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/05-example.67dc3b46cdb5d5d4.jpg -------------------------------------------------------------------------------- /docs/static/processed_images/06-example.2c54491c2daefe2f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/06-example.2c54491c2daefe2f.jpg -------------------------------------------------------------------------------- /docs/static/processed_images/07-example.3143e7a66ae6fd02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/07-example.3143e7a66ae6fd02.jpg -------------------------------------------------------------------------------- /docs/static/processed_images/08-example.684e6a6497b4e859.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/08-example.684e6a6497b4e859.jpg -------------------------------------------------------------------------------- /docs/static/processed_images/08-example.cdf453f9e75156af.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/docs/static/processed_images/08-example.cdf453f9e75156af.jpg -------------------------------------------------------------------------------- /docs/templates/documentation.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | {% block extra_nav_class %}{% endblock extra_nav_class %} 4 | {% block extra_content_class %}content--reversed{% endblock extra_content_class %} 5 | 6 | {% block content %} 7 | {% set section = get_section(path="documentation/_index.md") %} 8 |
9 | 26 |
27 | {% block doc_content %} 28 | {% endblock doc_content %} 29 |
30 |
31 | {% endblock content %} 32 | -------------------------------------------------------------------------------- /docs/templates/page.html: -------------------------------------------------------------------------------- 1 | {% extends "documentation.html" %} 2 | 3 | {% block title %}{{ page.title }} | {{ super() }} {% endblock title %} 4 | {% block doc_content %} 5 |

{{page.title}}

6 | {{page.content | safe}} 7 | {% endblock doc_content %} 8 | -------------------------------------------------------------------------------- /docs/templates/shortcodes/gallery.html: -------------------------------------------------------------------------------- 1 |
2 | {% for asset in page.assets -%} 3 | {%- if asset is matching("[.](jpg|png)$") -%} 4 | {% set image = resize_image(path=asset, width=240, height=180) %} 5 | 6 | 7 | 8 | {%- endif %} 9 | {%- endfor %} 10 |
11 | -------------------------------------------------------------------------------- /docs/templates/shortcodes/high_res_image.html: -------------------------------------------------------------------------------- 1 | {% set mdata = get_image_metadata(path=path) %} 2 | {% set w = (mdata.width / 2) | int %} 3 | {% set h = (mdata.height / 2) | int %} 4 | {% set image = resize_image(path=path, width=w, height=h, op="fit_width") %} 5 | -------------------------------------------------------------------------------- /docs/templates/shortcodes/resize_image.html: -------------------------------------------------------------------------------- 1 | {% set image = resize_image(path=path, width=width, height=height, op=op) %} 2 | 3 | -------------------------------------------------------------------------------- /docs/templates/shortcodes/resize_image_relative.html: -------------------------------------------------------------------------------- 1 | {% set mdata = get_image_metadata(path=path) %} 2 | {% set image = resize_image(path=path, width=(mdata.width * scale)|int, op="fit_width") %} 3 | -------------------------------------------------------------------------------- /docs/templates/theme-tags/list.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | {% block extra_nav_class %}{% endblock extra_nav_class %} 4 | {% block extra_content_class %}content--reversed{% endblock extra_content_class %} 5 | 6 | {% block title %}Themes | {{ super() }} {% endblock title %} 7 | 8 | {% block content %} 9 |

Tags

10 | {% set section = get_section(path = "themes/_index.md") %} 11 |

All themes ({{ section.pages | length }}

12 | 17 | {% endblock content %} -------------------------------------------------------------------------------- /docs/templates/theme-tags/single.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | {% block extra_nav_class %}{% endblock extra_nav_class %} 4 | {% block extra_content_class %}content--reversed{% endblock extra_content_class %} 5 | 6 | {% block title %}Themes | {{ super() }} {% endblock title %} 7 | 8 | {% block content %} 9 |
10 | {% block theme_content %} 11 |

Zola themes in {{ term.name }}

12 |
13 | {% for theme in term.pages %} 14 | 15 | Screenshot of {{theme.title}} 16 | {{theme.title}} 17 | 18 | {% endfor %} 19 |
20 | {% endblock theme_content %} 21 |
22 | {% endblock content %} 23 | -------------------------------------------------------------------------------- /docs/templates/themes.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | {% block extra_nav_class %}{% endblock extra_nav_class %} 4 | {% block extra_content_class %}content--reversed{% endblock extra_content_class %} 5 | 6 | {% block title %}Themes | {{ super() }} {% endblock title %} 7 | 8 | {% block content %} 9 |
10 | {% block theme_content %} 11 |

Zola themes

12 | {% set tax = get_taxonomy(kind = "theme-tags") %} 13 | {% if tax and tax.items | length > 0 %} 14 |

Search by tags

15 | {% endif %} 16 |
17 | {% for theme in section.pages %} 18 | 19 | Screenshot of {{theme.title}} 20 | {{theme.title}} 21 | 22 | {% endfor %} 23 |
24 | {% endblock theme_content %} 25 |
26 | {% endblock content %} 27 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | base = "docs" 3 | publish = "docs/public" 4 | command = "zola build" 5 | 6 | [build.environment] 7 | ZOLA_VERSION = "0.17.1" 8 | 9 | [context.deploy-preview] 10 | command = "zola build --base-url $DEPLOY_PRIME_URL" 11 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | use_small_heuristics = "max" 2 | -------------------------------------------------------------------------------- /snapcraft.yaml: -------------------------------------------------------------------------------- 1 | name: zola 2 | version: 0.20.0 3 | summary: A fast static site generator in a single binary with everything built-in. 4 | description: | 5 | A fast static site generator in a single binary with everything built-in. 6 | https://www.getzola.org 7 | 8 | base: core18 9 | grade: stable # must be 'stable' to release into candidate/stable channels 10 | confinement: strict # use 'strict' once you have the right plugs and slots 11 | 12 | apps: 13 | zola: 14 | command: zola 15 | plugs: 16 | - home 17 | - network 18 | - network-bind 19 | 20 | parts: 21 | zola: 22 | source-type: git 23 | source: https://github.com/getzola/zola.git 24 | source-tag: v0.20.0 25 | plugin: rust 26 | rust-channel: stable 27 | build-packages: 28 | - build-essential 29 | - cmake 30 | - libssl-dev 31 | - pkg-config 32 | -------------------------------------------------------------------------------- /src/cmd/build.rs: -------------------------------------------------------------------------------- 1 | use std::path::Path; 2 | 3 | use errors::{Error, Result}; 4 | use site::Site; 5 | 6 | use crate::messages; 7 | 8 | pub fn build( 9 | root_dir: &Path, 10 | config_file: &Path, 11 | base_url: Option<&str>, 12 | output_dir: Option<&Path>, 13 | force: bool, 14 | include_drafts: bool, 15 | minify: bool, 16 | ) -> Result<()> { 17 | let mut site = Site::new(root_dir, config_file)?; 18 | if let Some(output_dir) = output_dir { 19 | if !force && output_dir.exists() { 20 | return Err(Error::msg(format!( 21 | "Directory '{}' already exists. Use --force to overwrite.", 22 | output_dir.display(), 23 | ))); 24 | } 25 | 26 | site.set_output_path(output_dir); 27 | } 28 | if let Some(b) = base_url { 29 | site.set_base_url(b.to_string()); 30 | } 31 | if include_drafts { 32 | site.include_drafts(); 33 | } 34 | if minify { 35 | site.minify(); 36 | } 37 | site.load()?; 38 | messages::notify_site_size(&site); 39 | messages::warn_about_ignored_pages(&site); 40 | site.build() 41 | } 42 | -------------------------------------------------------------------------------- /src/cmd/check.rs: -------------------------------------------------------------------------------- 1 | use std::path::{Path, PathBuf}; 2 | 3 | use errors::Result; 4 | use site::Site; 5 | 6 | use crate::messages; 7 | 8 | pub fn check( 9 | root_dir: &Path, 10 | config_file: &Path, 11 | base_path: Option<&str>, 12 | base_url: Option<&str>, 13 | include_drafts: bool, 14 | skip_external_links: bool, 15 | ) -> Result<()> { 16 | let bp = base_path.map(PathBuf::from).unwrap_or_else(|| PathBuf::from(root_dir)); 17 | let mut site = Site::new(bp, config_file)?; 18 | // Force the checking of external links 19 | site.config.enable_check_mode(); 20 | if let Some(b) = base_url { 21 | site.set_base_url(b.to_string()); 22 | } 23 | if include_drafts { 24 | site.include_drafts(); 25 | } 26 | if skip_external_links { 27 | site.skip_external_links_check(); 28 | } 29 | site.load()?; 30 | messages::check_site_summary(&site); 31 | messages::warn_about_ignored_pages(&site); 32 | Ok(()) 33 | } 34 | -------------------------------------------------------------------------------- /src/cmd/mod.rs: -------------------------------------------------------------------------------- 1 | mod build; 2 | mod check; 3 | mod init; 4 | mod serve; 5 | 6 | pub use self::build::build; 7 | pub use self::check::check; 8 | pub use self::init::create_new_project; 9 | pub use self::serve::serve; 10 | -------------------------------------------------------------------------------- /test_site/README.md: -------------------------------------------------------------------------------- 1 | Test site used by some components (`site`, `rebuild`) for integration tests. 2 | -------------------------------------------------------------------------------- /test_site/_dir_with_underscores/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/_dir_with_underscores/.gitkeep -------------------------------------------------------------------------------- /test_site/config.staging.toml: -------------------------------------------------------------------------------- 1 | title = "My site" 2 | base_url = "https://staging.com" 3 | highlight_code = true 4 | theme = "sample" 5 | 6 | [markdown] 7 | highlight_code = true 8 | 9 | [extra.author] 10 | name = "Vincent Prouillet" 11 | 12 | -------------------------------------------------------------------------------- /test_site/config.toml: -------------------------------------------------------------------------------- 1 | title = "My Integration Testing site" 2 | base_url = "https://replace-this-with-your-url.com" 3 | compile_sass = true 4 | generate_feeds = true 5 | theme = "sample" 6 | 7 | taxonomies = [ 8 | {name = "categories", feed = true}, 9 | {name = "podcast_authors", feed = true}, 10 | ] 11 | 12 | ignored_content = ["*/ignored.md"] 13 | 14 | author = "config@example.com (Config Author)" 15 | 16 | [markdown] 17 | highlight_code = true 18 | highlight_theme = "custom_gruvbox" 19 | extra_syntaxes_and_themes = ["syntaxes", "highlight_themes"] 20 | 21 | [slugify] 22 | paths = "on" 23 | taxonomies = "on" 24 | anchors = "on" 25 | 26 | [link_checker] 27 | skip_prefixes = [ 28 | "http://[2001:db8::]/", 29 | "http://invaliddomain", 30 | ] 31 | 32 | skip_anchor_prefixes = [ 33 | "https://github.com/rust-lang/rust/blob/", 34 | ] 35 | 36 | [extra.author] 37 | name = "Vincent Prouillet" 38 | -------------------------------------------------------------------------------- /test_site/content/.should-not-be-picked-up.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/content/.should-not-be-picked-up.md -------------------------------------------------------------------------------- /test_site/content/2018/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "index page in a direction with the same name as a section" 3 | +++ -------------------------------------------------------------------------------- /test_site/content/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | 4 | # Heading 1 5 | -------------------------------------------------------------------------------- /test_site/content/applying_page_template/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | page_template = "page_template.html" 3 | sort_by = "weight" 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/applying_page_template/another_section/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | -------------------------------------------------------------------------------- /test_site/content/applying_page_template/another_section/post.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Changed recursively" 3 | +++ 4 | -------------------------------------------------------------------------------- /test_site/content/applying_page_template/from-section-config.md: -------------------------------------------------------------------------------- 1 | +++ 2 | weight = 0 3 | title = "From section config" 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/applying_page_template/override.md: -------------------------------------------------------------------------------- 1 | +++ 2 | template = "page_template_override.html" 3 | weight = 1 4 | title = "Override" 5 | +++ 6 | -------------------------------------------------------------------------------- /test_site/content/applying_page_template/yet_another_section/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | page_template = "page_template_child.html" 3 | sort_by = "weight" 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/applying_page_template/yet_another_section/post.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Local section override" 3 | weight = 0 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/colocated-assets/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Assets in root content directory" 3 | +++ -------------------------------------------------------------------------------- /test_site/content/colocated-assets/with_subfolder/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Assets in root content directory" 3 | +++ -------------------------------------------------------------------------------- /test_site/content/hello.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | 4 | This file starts with a UTF-8 BOM and should be loaded 5 | -------------------------------------------------------------------------------- /test_site/content/paginated/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | paginate_by = 10 3 | template = "section_paginated.html" 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/posts/2016-10-08_a-post-with-dates.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "A post with dates" 3 | +++ 4 | -------------------------------------------------------------------------------- /test_site/content/posts/2018/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | transparent = true 3 | render = false 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/posts/2018/transparent-page.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "A transparent page" 3 | description = "" 4 | date = 2018-10-10 5 | authors = ["page@example.com (Page Author)"] 6 | +++ 7 | -------------------------------------------------------------------------------- /test_site/content/posts/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Posts" 3 | paginate_by = 2 4 | template = "section_paginated.html" 5 | insert_anchor_links = "left" 6 | sort_by = "date" 7 | aliases = ["another-old-url/index.html"] 8 | generate_feeds = true 9 | +++ 10 | -------------------------------------------------------------------------------- /test_site/content/posts/draft.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "A draft" 3 | draft = true 4 | date = 2016-03-01 5 | +++ 6 | 7 | 8 | {{ theme_shortcode() }} 9 | 10 | Link to [root](@/hello.md). 11 | -------------------------------------------------------------------------------- /test_site/content/posts/extra_syntax.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Extra Syntax" 3 | description = "" 4 | date = 2018-08-14 5 | +++ 6 | 7 | ```mylang 8 | for (int i = 0; ; i++ ) { 9 | if (i < 10) 10 | } 11 | ``` 12 | 13 | ``` 14 | for (int i = 0; ; i++ ) { 15 | if (i < 10) 16 | } 17 | ``` 18 | 19 | ```c 20 | for (int i = 0; ; i++ ) { 21 | if (i < 10) 22 | } 23 | ``` 24 | -------------------------------------------------------------------------------- /test_site/content/posts/fixed-slug.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Fixed slug" 3 | description = "" 4 | slug = "something-&-else" 5 | date = 2017-01-01 6 | aliases = ["/an-old-url/old-page", "/an-old-url/an-old-alias.html"] 7 | +++ 8 | 9 | A simple page with a slug defined 10 | 11 | # Title 12 | 13 | Hey 14 | 15 | -------------------------------------------------------------------------------- /test_site/content/posts/fixed-url.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Fixed URL" 3 | description = "" 4 | path = "a-fixed-url" 5 | date = 2017-02-01 6 | +++ 7 | 8 | A simple page with fixed url 9 | -------------------------------------------------------------------------------- /test_site/content/posts/ignored.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "This should not be picked up" 3 | date = 2019-07-23 4 | +++ 5 | 6 | Don't pick me up, I'm ignored via ignored_content in config.toml. 7 | -------------------------------------------------------------------------------- /test_site/content/posts/no-section/simple.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Simple" 3 | description = "" 4 | +++ 5 | 6 | A simple page 7 | -------------------------------------------------------------------------------- /test_site/content/posts/python.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Python in posts" 3 | description = "" 4 | date = 2017-03-01 5 | +++ 6 | 7 | Same filename but different path 8 | 9 | 10 | 11 | {{ basic() }} 12 | 13 | {{ pirate(name="Bob") }} 14 | {{ pirate(name="Bob_Sponge") }} 15 | 16 | 17 | -------------------------------------------------------------------------------- /test_site/content/posts/render.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Page with content but without generated folder" 3 | description = "" 4 | date = 2017-04-01 5 | render = false 6 | +++ 7 | 8 | Don't generate a folder for this page 9 | -------------------------------------------------------------------------------- /test_site/content/posts/simple.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Simple article with shortcodes" 3 | description = "" 4 | date = 2017-04-01 5 | +++ 6 | 7 | A simple page 8 | 9 | {{ youtube(id="e1C9kpMV2e8") }} 10 | {{ youtube(id="e1C9kpMV2e8", autoplay=true) }} 11 | -------------------------------------------------------------------------------- /test_site/content/posts/skip_prefixes.md: -------------------------------------------------------------------------------- 1 | +++ 2 | date = 2017-01-01 3 | +++ 4 | 5 | [test skip 1](http://invaliddomain 11 | 12 | Link to some rust-lang [source code][permalink]. 13 | 14 | Internal web server . 15 | 16 | [permalink]: https://github.com/rust-lang/rust/blob/c772948b687488a087356cb91432425662e034b9/src/librustc_back/target/mod.rs#L194-L214 17 | -------------------------------------------------------------------------------- /test_site/content/posts/with-assets/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "With assets" 3 | description = "hey there" 4 | date = 2015-03-01 5 | +++ 6 | 7 | Hello world [here](with.js) 8 | -------------------------------------------------------------------------------- /test_site/content/posts/with-assets/with.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /test_site/content/posts/with-assets/zola.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/content/posts/with-assets/zola.png -------------------------------------------------------------------------------- /test_site/content/rebuild/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | paginate_by = 1 3 | sort_by = "weight" 4 | template = "rebuild.html" 5 | +++ 6 | -------------------------------------------------------------------------------- /test_site/content/rebuild/first.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "first" 3 | weight = 10 4 | date = 2017-01-01 5 | 6 | [taxonomies] 7 | categories = ["a-category"] 8 | podcast_authors = ["Some Person"] 9 | +++ 10 | 11 | # A title 12 | -------------------------------------------------------------------------------- /test_site/content/rebuild/second.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "second" 3 | weight = 100 4 | date = 2016-01-01 5 | +++ 6 | 7 | # A title 8 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/1.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 1" 3 | weight=1 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/2.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 2" 3 | weight=2 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/3.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 3" 3 | weight=3 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/4.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 4" 3 | weight=4 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/5.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 5" 3 | weight=5 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/6.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 6" 3 | weight=6 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/7.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 7" 3 | weight=7 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/8.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 8" 3 | weight=8 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/9.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Page number: 9" 3 | weight=9 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/reverse-paginated/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | paginate_by = 2 3 | template = "section_paginated.html" 4 | sort_by = "weight" 5 | paginate_reversed = true 6 | +++ 7 | -------------------------------------------------------------------------------- /test_site/content/root-page-1.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | -------------------------------------------------------------------------------- /test_site/content/root-page-2.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | -------------------------------------------------------------------------------- /test_site/content/secret_section/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Drafted section" 3 | draft=true 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/secret_section/draft-page.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="drafted page in drafted section" 3 | draft=true 4 | +++ 5 | -------------------------------------------------------------------------------- /test_site/content/secret_section/page.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="non draft page" 3 | +++ 4 | -------------------------------------------------------------------------------- /test_site/content/secret_section/secret_sub_section/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="subsection of a secret section" 3 | +++ 4 | -------------------------------------------------------------------------------- /test_site/content/secret_section/secret_sub_section/hello.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title="Is anyone ever going to read this?" 3 | +++ 4 | -------------------------------------------------------------------------------- /test_site/sass/_included.scss: -------------------------------------------------------------------------------- 1 | .container { 2 | font-size: 2rem; 3 | } 4 | -------------------------------------------------------------------------------- /test_site/sass/blog.scss: -------------------------------------------------------------------------------- 1 | body { 2 | background: red; 3 | 4 | .container { 5 | background: blue; 6 | } 7 | } 8 | 9 | @import "included"; 10 | -------------------------------------------------------------------------------- /test_site/sass/nested_sass/sass.sass: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/sass/nested_sass/sass.sass -------------------------------------------------------------------------------- /test_site/sass/nested_sass/scss.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/sass/nested_sass/scss.scss -------------------------------------------------------------------------------- /test_site/sass/sass.sass: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/sass/sass.sass -------------------------------------------------------------------------------- /test_site/sass/scss.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/sass/scss.scss -------------------------------------------------------------------------------- /test_site/static/.gitattributes: -------------------------------------------------------------------------------- 1 | # ensure consistent line endings (for hashes) 2 | *.css text eol=lf 3 | *.js text eol=lf 4 | -------------------------------------------------------------------------------- /test_site/static/scripts/hello.js: -------------------------------------------------------------------------------- 1 | // test content 2 | -------------------------------------------------------------------------------- /test_site/static/site.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /test_site/syntaxes/test.sublime-syntax: -------------------------------------------------------------------------------- 1 | %YAML 1.2 2 | --- 3 | name: mylang 4 | file_extensions: [mylang] 5 | scope: source.mylang 6 | 7 | contexts: 8 | main: 9 | - match: \b(if|else|for|while)\b 10 | scope: keyword.control -------------------------------------------------------------------------------- /test_site/templates/categories/list.html: -------------------------------------------------------------------------------- 1 | {% for term in terms %} 2 | {{ term.name }} {{ term.slug }} {{ term.pages | length }} 3 | {% endfor %} 4 | -------------------------------------------------------------------------------- /test_site/templates/categories/single.html: -------------------------------------------------------------------------------- 1 | {% extends "sample/templates/categories/single.html" %} 2 | 3 | {% block extra_category %} 4 | EXTENDED 5 | {% endblock extra_category %} 6 | -------------------------------------------------------------------------------- /test_site/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends 'sample/templates/index.html' %} 3 | {% block content %} 4 |
5 | {% for page in section.pages %} 6 | 9 | {% endfor %} 10 |
11 | 12 |

<<<

13 | 14 | {{ section.content | safe }} 15 | {% endblock content %} 16 | 17 | {% block script %} 18 | 20 | {% endblock script %} 21 | -------------------------------------------------------------------------------- /test_site/templates/index_paginated.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {{ config.title }} 12 | 13 | 14 | 15 |
16 | {% block content %} 17 |
18 | {% for page in paginator.pages %} 19 | 22 | {% endfor %} 23 | {% if paginator.previous %}has_prev{% endif %} 24 | {% if paginator.next %}has_next{% endif %} 25 | Num pages: {{ paginator.number_pagers }} 26 | Current index: {{ paginator.current_index }} 27 | First: {{ paginator.first | safe }} 28 | Last: {{ paginator.last | safe }} 29 |
30 | {% endblock content %} 31 |
32 | 33 | {% include "current_path.html" %} 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /test_site/templates/page.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | {% block content %} 4 | {{ page.title | safe }} 5 | {{ page.content | safe }} 6 | {{ page.relative_path | safe }} 7 | {{ page.toc }} 8 | 9 | {% if page.earlier %}Previous article: {{ page.earlier.permalink }}{% endif %} 10 | {% if page.later %}Next article: {{ page.later.permalink }}{% endif %} 11 | {% endblock content %} 12 | -------------------------------------------------------------------------------- /test_site/templates/page_template.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | {% block content %} 3 |

Another page template, specified with the "page_template" key in the front matter

4 | {{ page.content | safe }} 5 | {% if page.earlier %}Previous article: {{ page.earlier.permalink }}{% endif %} 6 | {% if page.later %}Next article: {{ page.later.permalink }}{% endif %} 7 | {% endblock content %} 8 | -------------------------------------------------------------------------------- /test_site/templates/page_template_child.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | {% block content %} 3 |

Another page template, specified with the "page_template" key in the front matter but from a child 4 | of a section with also a "page_template" key

5 | {{ page.content | safe }} 6 | {% if page.earlier %}Previous article: {{ page.earlier.permalink }}{% endif %} 7 | {% if page.later %}Next article: {{ page.later.permalink }}{% endif %} 8 | {% endblock content %} 9 | -------------------------------------------------------------------------------- /test_site/templates/page_template_override.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | {% block content %} 3 | {{ page.content | safe }} 4 |

Yet another page template, using the override feature for page templates

5 | {% if page.earlier %}Previous article: {{ page.earlier.permalink }}{% endif %} 6 | {% if page.later %}Next article: {{ page.later.permalink }}{% endif %} 7 | {% endblock content %} 8 | -------------------------------------------------------------------------------- /test_site/templates/podcast_authors/list.html: -------------------------------------------------------------------------------- 1 | {% for term in terms %} 2 | {{ term.name }} {{ term.slug }} {{ term.pages | length }} 3 | {% endfor %} 4 | Current path: {{ current_path }} -------------------------------------------------------------------------------- /test_site/templates/podcast_authors/single.html: -------------------------------------------------------------------------------- 1 | Category: {{ term.name }} 2 | 3 | 4 | {% for page in term.pages %} 5 | 8 | {% endfor %} 9 | 10 | Current path: {{ current_path }} -------------------------------------------------------------------------------- /test_site/templates/rebuild.html: -------------------------------------------------------------------------------- 1 | {# Testing that global functions/section get reloaded properly #} 2 | 3 | {% set section = get_section(path="rebuild/_index.md") %} 4 | 5 | {% for page in section.pages -%} 6 |

{{ page.title }}

7 | {%- endfor %} 8 | -------------------------------------------------------------------------------- /test_site/templates/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: zola 2 | Disallow: 3 | Allow: / 4 | Sitemap: {{config.base_url}}/sitemap.xml 5 | -------------------------------------------------------------------------------- /test_site/templates/section.html: -------------------------------------------------------------------------------- 1 | {% extends "sample/templates/section-specific-extends.html" %} 2 | {% block content %} 3 | {% for page in section.pages %} 4 | {{page.title}} 5 | {% endfor %} 6 | {{ super() }} 7 | {% endblock content %} 8 | -------------------------------------------------------------------------------- /test_site/templates/section_paginated.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | {% block content %} 4 | {% for page in paginator.pages %} 5 | {{page.title}} 6 | {% endfor %} 7 | Num pagers: {{ paginator.number_pagers }} 8 | Page size: {{ paginator.paginate_by }} 9 | Current index: {{ paginator.current_index }} 10 | First: {{ paginator.first | safe }} 11 | Last: {{ paginator.last | safe }} 12 | {% if paginator.previous %}has_prev{% endif%} 13 | {% if paginator.next %}has_next{% endif%} 14 | {% endblock content %} 15 | -------------------------------------------------------------------------------- /test_site/templates/shortcodes/basic.html: -------------------------------------------------------------------------------- 1 |

Basic shortcode

2 | -------------------------------------------------------------------------------- /test_site/templates/shortcodes/pirate_included.html: -------------------------------------------------------------------------------- 1 | Arrrh {{ name }} 2 | -------------------------------------------------------------------------------- /test_site/templates/shortcodes/youtube.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /test_site/templates/tags/list.html: -------------------------------------------------------------------------------- 1 | {% for tag in terms %} 2 | {{ tag.name }} {{ tag.slug }} {{ tag.pages | length }} 3 | {% endfor %} 4 | 5 | {% include "current_path.html" %} -------------------------------------------------------------------------------- /test_site/templates/tags/single.html: -------------------------------------------------------------------------------- 1 | {% if not paginator %} 2 | Tag: {{ term.name }} 3 | 4 | {% for page in term.pages %} 5 | 8 | {% endfor %} 9 | {% else %} 10 | Tag: {{ term.name }} 11 | {% for page in paginator.pages %} 12 | {{page.title|safe}} 13 | {% endfor %} 14 | Num pagers: {{ paginator.number_pagers }} 15 | Page size: {{ paginator.paginate_by }} 16 | Current index: {{ paginator.current_index }} 17 | First: {{ paginator.first | safe }} 18 | Last: {{ paginator.last | safe }} 19 | {% if paginator.previous %}has_prev{% endif%} 20 | {% if paginator.next %}has_next{% endif%} 21 | {% endif %} 22 | 23 | {% include "current_path.html" %} -------------------------------------------------------------------------------- /test_site/themes/sample/sass/sample.scss: -------------------------------------------------------------------------------- 1 | body { 2 | font-weight: bold; 3 | } 4 | -------------------------------------------------------------------------------- /test_site/themes/sample/static/some-html.html: -------------------------------------------------------------------------------- 1 | This should not be loaded. 2 | https://github.com/Keats/gutenberg/issues/412 3 | 4 |
  • IllegalMacroParam: \( \def\mymacro#1{#2} \mymacro{x} \)
  • 5 | 6 | {{ hey( }} 7 | -------------------------------------------------------------------------------- /test_site/themes/sample/static/some.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site/themes/sample/static/some.js -------------------------------------------------------------------------------- /test_site/themes/sample/templates/404.html: -------------------------------------------------------------------------------- 1 | Oops -------------------------------------------------------------------------------- /test_site/themes/sample/templates/categories/single.html: -------------------------------------------------------------------------------- 1 | Category: {{ term.name }} 2 | 3 | 4 | {% for page in term.pages %} 5 | 8 | {% endfor %} 9 | 10 | {% block extra_category %} 11 | {% endblock extra_category %} 12 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/child.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | 3 | A child 4 | 5 | {% include "included.html" %} 6 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/current_path.html: -------------------------------------------------------------------------------- 1 |
    [current_path]({{ current_path | safe }})
    -------------------------------------------------------------------------------- /test_site/themes/sample/templates/included.html: -------------------------------------------------------------------------------- 1 | I am included. 2 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {{ config.title }} 12 | 13 | 14 | 15 |
    16 | {% block content %}Hello{% endblock content %} 17 |
    18 | 19 | {% include "current_path.html" %} 20 | 21 | {% block script %} 22 | {% endblock script %} 23 | 24 | 25 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/macros.html: -------------------------------------------------------------------------------- 1 | {% macro twice(str) %} 2 | {{str}}-{{str}} 3 | {% endmacro twice %} 4 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/section-specific-extends.html: -------------------------------------------------------------------------------- 1 | {% extends "index.html" %} 2 | {% block content %} 3 | {{ section.relative_path | safe }} 4 | {{ section.content | safe }} 5 | {% for sub in section.subsections %} 6 | {% set subsection = get_section(path=sub) %} 7 | {{subsection.title}} 8 | Sub-pages: {{subsection.pages | length}} 9 | {% endfor %} 10 | {% endblock content %} 11 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/section.html: -------------------------------------------------------------------------------- 1 | {% extends 'index.html' %} 2 | {% block content %} 3 | I'm overridden in all cases so seeing me is a bug 4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/shortcodes/pirate.html: -------------------------------------------------------------------------------- 1 | {% include 'shortcodes/pirate_included.html' %} 2 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/shortcodes/pirate_included.html: -------------------------------------------------------------------------------- 1 | SHOULDNOTAPPEAR: overridden by site shortcode 2 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/shortcodes/theme_shortcode.html: -------------------------------------------------------------------------------- 1 | THEME_SHORTCODE 2 | -------------------------------------------------------------------------------- /test_site/themes/sample/templates/using-macros.html: -------------------------------------------------------------------------------- 1 | {% import "macros.html" as macros %} 2 | 3 | {{ macros::twice(str="hey") }} 4 | -------------------------------------------------------------------------------- /test_site/themes/sample/theme.toml: -------------------------------------------------------------------------------- 1 | name = "sample" 2 | 3 | [extra] 4 | -------------------------------------------------------------------------------- /test_site_i18n/config.toml: -------------------------------------------------------------------------------- 1 | # The URL the site will be built for 2 | base_url = "https://example.com" 3 | 4 | # Whether to automatically compile all Sass files in the sass directory 5 | compile_sass = false 6 | 7 | # Whether to build a search index to be used later on by a JavaScript library 8 | build_search_index = true 9 | 10 | default_language = "en" 11 | 12 | generate_feeds = true 13 | 14 | taxonomies = [ 15 | {name = "authors", feed = true}, 16 | {name = "tags"}, 17 | ] 18 | 19 | [languages.fr] 20 | generate_feeds = true 21 | taxonomies = [ 22 | {name = "auteurs", feed = true}, 23 | {name = "tags"}, 24 | ] 25 | 26 | [languages.it] 27 | build_search_index = true 28 | 29 | [markdown] 30 | highlight_code = false 31 | 32 | 33 | [extra] 34 | # Put all your custom variables here 35 | -------------------------------------------------------------------------------- /test_site_i18n/content/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Accueil" 3 | +++ 4 | 5 | Page d'accueil. [Notre blog](@/blog/_index.fr.md) 6 | 7 | [Lire notre description](#about) 8 | 9 | 10 | # À propos {#about} 11 | -------------------------------------------------------------------------------- /test_site_i18n/content/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Home" 3 | +++ 4 | 5 | Homepage. [Our blog](@/blog/_index.md) 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/base.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Une page" 3 | +++ 4 | 5 | Une page en Français 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/base.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "A page" 3 | +++ 4 | 5 | A page in english 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/_index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Mon blog" 3 | sort_by = "date" 4 | insert_anchor_links = "right" 5 | +++ 6 | 7 | [Dernières nouvelles](#news) 8 | 9 | # News {#news} 10 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/_index.it.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Il mio blog" 3 | sort_by = "date" 4 | insert_anchor_links = "right" 5 | +++ 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "My blog" 3 | sort_by = "date" 4 | insert_anchor_links = "left" 5 | +++ 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/fixed-slug.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Un slug fixe" 3 | slug = "something-else" 4 | date = 2017-01-01 5 | +++ 6 | 7 | Une page qui definit son slug dans le front-matter 8 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/fixed-slug.it.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Un slug fixe" 3 | slug = "something-else" 4 | date = 2017-01-01 5 | +++ 6 | 7 | Una pagina che definisce il suo slug nel front-matter 8 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/fixed-slug.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Fixed slug" 3 | slug = "something-else" 4 | date = 2017-01-01 5 | +++ 6 | 7 | A simple page with a slug defined 8 | 9 | # Title 10 | 11 | Hey 12 | 13 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/not-translated-in-default-language.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Ma page que en français" 3 | date = 2018-08-10 4 | +++ 5 | 6 | Cette page n'est pas traduite dans la langue par défaut (anglais). 7 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/not-translated.md: -------------------------------------------------------------------------------- 1 | +++ 2 | date = 2018-08-19 3 | +++ 4 | 5 | Something not translated 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/something.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Quelque chose" 3 | date = 2018-10-09 4 | 5 | [taxonomies] 6 | auteurs = ["Vincent Prouillet"] 7 | tags = ["bonjour"] 8 | +++ 9 | 10 | Un article 11 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/something.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Something" 3 | date = 2018-10-09 4 | 5 | [taxonomies] 6 | authors = ["Queen Elizabeth"] 7 | tags = ["hello"] 8 | +++ 9 | 10 | A blog post 11 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/with-assets/index.fr.md: -------------------------------------------------------------------------------- 1 | +++ 2 | date = 2018-11-10 3 | +++ 4 | 5 | Avec des fichiers 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/with-assets/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | date = 2018-11-10 3 | +++ 4 | 5 | With assets 6 | -------------------------------------------------------------------------------- /test_site_i18n/content/blog/with-assets/some.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_site_i18n/content/blog/with-assets/some.js -------------------------------------------------------------------------------- /test_site_i18n/templates/auteurs/list.html: -------------------------------------------------------------------------------- 1 | {% for author in terms %} 2 | {{ author.name }} {{ author.slug }} {{ author.pages | length }} 3 | {% endfor %} 4 | {{lang}} 5 | -------------------------------------------------------------------------------- /test_site_i18n/templates/auteurs/single.html: -------------------------------------------------------------------------------- 1 | {% if not paginator %} 2 | Tag: {{ term.name }} 3 | 4 | {% for page in term.pages %} 5 | 8 | {% endfor %} 9 | {% else %} 10 | Tag: {{ term.name }} 11 | {% for page in paginator.pages %} 12 | {{page.title|safe}} 13 | {% endfor %} 14 | Num pagers: {{ paginator.number_pagers }} 15 | Page size: {{ paginator.paginate_by }} 16 | Current index: {{ paginator.current_index }} 17 | First: {{ paginator.first | safe }} 18 | Last: {{ paginator.last | safe }} 19 | {% if paginator.previous %}has_prev{% endif%} 20 | {% if paginator.next %}has_next{% endif%} 21 | {% endif %} 22 | {{lang}} -------------------------------------------------------------------------------- /test_site_i18n/templates/authors/list.html: -------------------------------------------------------------------------------- 1 | {% for term in terms %} 2 | {{ term.name }} {{ term.slug }} {{ term.pages | length }} 3 | {% endfor %} 4 | -------------------------------------------------------------------------------- /test_site_i18n/templates/authors/single.html: -------------------------------------------------------------------------------- 1 | {% if not paginator %} 2 | Tag: {{ term.name }} 3 | 4 | {% for page in term.pages %} 5 | 8 | {% endfor %} 9 | {% else %} 10 | Tag: {{ term.name }} 11 | {% for page in paginator.pages %} 12 | {{page.title|safe}} 13 | {% endfor %} 14 | Num pagers: {{ paginator.number_pagers }} 15 | Page size: {{ paginator.paginate_by }} 16 | Current index: {{ paginator.current_index }} 17 | First: {{ paginator.first | safe }} 18 | Last: {{ paginator.last | safe }} 19 | {% if paginator.previous %}has_prev{% endif%} 20 | {% if paginator.next %}has_next{% endif%} 21 | {% endif %} 22 | -------------------------------------------------------------------------------- /test_site_i18n/templates/index.html: -------------------------------------------------------------------------------- 1 | {% for page in section.pages %} 2 | {{page.title}} 3 | {% endfor %} 4 | Language: {{lang}} 5 | 6 | {% for t in section.translations %} 7 | Translated in {{t.lang|default(value=config.default_language)}}: {{t.title}} {{t.permalink|safe}} 8 | {% endfor %} 9 | -------------------------------------------------------------------------------- /test_site_i18n/templates/page.html: -------------------------------------------------------------------------------- 1 | {{page.title}} 2 | {{page.content | safe}} 3 | Language: {{lang}} 4 | 5 | {% for t in page.translations %} 6 | Translated in {{t.lang|default(value=config.default_language)}}: {{t.title}} {{t.permalink|safe}} 7 | 8 |

    9 | 10 | {% set translated_page = get_page(path = t.path) %} 11 | {{ translated_page.content | safe }} 12 | 13 | {% endfor %} 14 | 15 | {% for taxo_kind, items in page.taxonomies %} 16 | {% set taxo = get_taxonomy(kind=taxo_kind, lang=lang) %} 17 | {% endfor %} -------------------------------------------------------------------------------- /test_site_i18n/templates/section.html: -------------------------------------------------------------------------------- 1 | {% for page in section.pages %} 2 | {{page.title}} 3 | {% endfor %} 4 | Language: {{lang}} 5 | 6 | {% for t in section.translations %} 7 | Translated in {{t.lang|default(value=config.default_language)}}: {{t.title}} {{t.permalink|safe}} 8 | {% endfor %} 9 | -------------------------------------------------------------------------------- /test_site_i18n/templates/tags/list.html: -------------------------------------------------------------------------------- 1 | {% for tag in terms %} 2 | {{ tag.name }} {{ tag.slug }} {{ tag.pages | length }} {{ lang }} 3 | {% endfor %} 4 | -------------------------------------------------------------------------------- /test_site_i18n/templates/tags/single.html: -------------------------------------------------------------------------------- 1 | {% if not paginator %} 2 | Tag: {{ term.name }} 3 | 4 | {% for page in term.pages %} 5 | 8 | {% endfor %} 9 | {% else %} 10 | Tag: {{ term.name }} 11 | {% for page in paginator.pages %} 12 | {{page.title|safe}} 13 | {% endfor %} 14 | Num pagers: {{ paginator.number_pagers }} 15 | Page size: {{ paginator.paginate_by }} 16 | Current index: {{ paginator.current_index }} 17 | First: {{ paginator.first | safe }} 18 | Last: {{ paginator.last | safe }} 19 | {% if paginator.previous %}has_prev{% endif%} 20 | {% if paginator.next %}has_next{% endif%} 21 | {% endif %} 22 | -------------------------------------------------------------------------------- /test_sites_invalid/indexmd/config.toml: -------------------------------------------------------------------------------- 1 | title = "My Integration Testing site" 2 | base_url = "https://replace-this-with-your-url.com" 3 | 4 | -------------------------------------------------------------------------------- /test_sites_invalid/indexmd/content/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ -------------------------------------------------------------------------------- /test_sites_invalid/indexmd/content/index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | -------------------------------------------------------------------------------- /test_sites_invalid/indexmd/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_sites_invalid/indexmd/static/.gitkeep -------------------------------------------------------------------------------- /test_sites_invalid/indexmd/templates/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getzola/zola/cea009666896989bab17a968051308741a6734d1/test_sites_invalid/indexmd/templates/.gitkeep --------------------------------------------------------------------------------