datalog-theme 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +127 -0
  3. data/CITATION.cff +2 -2
  4. data/README.md +4 -2
  5. data/_data/i18n/en.yml +55 -3
  6. data/_data/i18n/es.yml +55 -3
  7. data/_data/i18n/pt.yml +55 -3
  8. data/_includes/analytics/dashboard.html +24 -9
  9. data/_includes/components/academic-dashboard.html +168 -133
  10. data/_includes/components/author-bio.html +7 -5
  11. data/_includes/components/author-list.html +6 -5
  12. data/_includes/components/citation-tools.html +2 -1
  13. data/_includes/components/content-provenance.html +19 -1
  14. data/_includes/components/correction-report.html +15 -8
  15. data/_includes/components/hero.html +22 -15
  16. data/_includes/components/package-index.html +121 -0
  17. data/_includes/components/package-install.html +27 -50
  18. data/_includes/components/post-list.html +14 -0
  19. data/_includes/components/responsive-image.html +15 -21
  20. data/_includes/footer.html +1 -1
  21. data/_includes/head.html +70 -11
  22. data/_includes/layouts/default/article.html +76 -46
  23. data/_includes/meta/dataset-json.html +171 -0
  24. data/_includes/meta/math-config.html +15 -1
  25. data/_includes/meta/package-json.html +69 -0
  26. data/_includes/meta/person-json.html +36 -13
  27. data/_includes/meta/publisher.html +15 -0
  28. data/_includes/meta/schema.html +108 -23
  29. data/_includes/meta/scholarly.html +10 -5
  30. data/_includes/post/related-posts.html +17 -43
  31. data/_includes/scripts.html +2 -2
  32. data/_includes/search/index-data.json +10 -1
  33. data/_includes/search/page.html +11 -6
  34. data/_layouts/archive.html +67 -0
  35. data/_layouts/dataset.html +2 -1
  36. data/_layouts/default.html +13 -11
  37. data/_layouts/docs.html +53 -0
  38. data/_layouts/home.html +30 -1
  39. data/_layouts/notebook.html +5 -1
  40. data/_layouts/package.html +38 -21
  41. data/_layouts/portfolio.html +1 -0
  42. data/_layouts/post.html +21 -62
  43. data/_layouts/project.html +2 -1
  44. data/_layouts/research.html +14 -2
  45. data/_plugins/analytics_dashboard.rb +4 -1
  46. data/_plugins/archive.rb +114 -0
  47. data/_plugins/authors.rb +50 -1
  48. data/_plugins/citation_exports.rb +12 -1
  49. data/_plugins/config_validator.rb +77 -2
  50. data/_plugins/correction_fallback.rb +110 -0
  51. data/_plugins/image_optimizer.rb +129 -22
  52. data/_plugins/math_preprocessor.rb +7 -48
  53. data/_plugins/notebook_converter.rb +44 -5
  54. data/_plugins/packages.rb +84 -0
  55. data/_plugins/page_dates.rb +37 -0
  56. data/_plugins/references.rb +16 -2
  57. data/_plugins/related_posts.rb +149 -0
  58. data/_plugins/search_sections.rb +110 -0
  59. data/_plugins/site_identity.rb +42 -0
  60. data/_plugins/social_cards.rb +17 -0
  61. data/_sass/_academic-dashboard.scss +18 -30
  62. data/_sass/_base.scss +2 -0
  63. data/_sass/_components.scss +21 -23
  64. data/_sass/_docs.scss +143 -0
  65. data/_sass/_features.scss +6 -0
  66. data/_sass/_layout.scss +65 -6
  67. data/_sass/_mathematical.scss +61 -19
  68. data/_sass/_notebooks.scss +1 -32
  69. data/_sass/_package-docs.scss +6 -9
  70. data/_sass/_post-components.scss +23 -23
  71. data/_sass/_print.scss +1 -1
  72. data/_sass/_search-page.scss +75 -0
  73. data/_sass/_search.scss +17 -26
  74. data/_sass/_syntax-highlighting.scss +23 -1
  75. data/_sass/_theme.scss +1 -0
  76. data/_sass/_utilities.scss +87 -40
  77. data/_sass/_variables.scss +31 -29
  78. data/assets/css/main.scss +2 -1
  79. data/assets/js/dist/academic.js +1 -1
  80. data/assets/js/dist/analytics-dashboard.js +1 -1
  81. data/assets/js/dist/chunks/chunk-TNVD6UAM.js +1 -0
  82. data/assets/js/dist/comments.js +1 -1
  83. data/assets/js/dist/contact.js +1 -1
  84. data/assets/js/dist/core.js +1 -1
  85. data/assets/js/dist/corrections.js +5 -1
  86. data/assets/js/dist/loader.js +1 -1
  87. data/assets/js/dist/math.js +2 -1
  88. data/assets/js/dist/moderation.js +1 -1
  89. data/assets/js/dist/reactions.js +1 -1
  90. data/assets/js/dist/search.js +1 -1
  91. data/assets/js/dist/sources.json +20 -16
  92. data/assets/js/dist/subscriptions.js +1 -1
  93. data/assets/js/loader.js +6 -2
  94. data/lib/datalog/audit/checks.rb +269 -0
  95. data/lib/datalog/audit/known_keys.rb +61 -0
  96. data/lib/datalog/audit/site_reader.rb +118 -0
  97. data/lib/datalog/audit/source_file.rb +85 -0
  98. data/lib/datalog/audit.rb +145 -0
  99. data/lib/datalog/citations/bibtex.rb +200 -0
  100. data/lib/datalog/citations/entry.rb +333 -0
  101. data/lib/datalog/citations/markup.rb +79 -0
  102. data/lib/datalog/cli.rb +164 -89
  103. data/lib/datalog/critical_css.rb +126 -21
  104. data/lib/datalog/latex_speech/words.json +88 -0
  105. data/lib/datalog/latex_speech.rb +355 -0
  106. data/lib/datalog/packages/command.rb +51 -0
  107. data/lib/datalog/packages/refresh.rb +187 -0
  108. data/lib/datalog/packages.rb +177 -0
  109. data/lib/datalog/plugin_system.rb +5 -0
  110. data/lib/datalog/plugins/citations.rb +325 -109
  111. data/lib/datalog/site_config.rb +26 -0
  112. data/lib/datalog/social_cards/font.rb +286 -0
  113. data/lib/datalog/social_cards/fonts/IBMPlexSans-Regular.ttf +0 -0
  114. data/lib/datalog/social_cards/fonts/IBMPlexSerif-SemiBold.ttf +0 -0
  115. data/lib/datalog/social_cards/fonts/OFL.txt +92 -0
  116. data/lib/datalog/social_cards/geometry.rb +51 -0
  117. data/lib/datalog/social_cards/outline.rb +54 -0
  118. data/lib/datalog/social_cards/plain_text.rb +258 -0
  119. data/lib/datalog/social_cards/template.rb +322 -0
  120. data/lib/datalog/social_cards/template.svg +17 -0
  121. data/lib/datalog/social_cards/typesetter.rb +178 -0
  122. data/lib/datalog/social_cards.rb +369 -0
  123. data/lib/datalog/theme/updater.rb +307 -0
  124. data/lib/datalog/theme/version.rb +1 -1
  125. metadata +44 -7
  126. data/_includes/components/enhanced-code-block.html +0 -212
  127. data/_includes/components/performance-monitor.html +0 -170
  128. data/_includes/components/viz-table-fallback.html +0 -19
  129. data/_plugins/datalog_bibliography.rb +0 -21
  130. data/assets/js/dist/chunks/chunk-WIRUK3OZ.js +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64603590b57087b7aa895fb3e0e5047d213506583382a640d775541e85d1c929
4
- data.tar.gz: 4ee7ec7bdc68fcbe9876ec07aaf74d9e78e70666f34c1135244ff382cae4e3fd
3
+ metadata.gz: 0a6f608b10a3157fb14d9f0c48112f37f53f1772fd824871dd092c22384b9312
4
+ data.tar.gz: 7c60b3bcc2a41c04d48b7975169d75de86f53e589ed0aa228ec026f6c7151484
5
5
  SHA512:
6
- metadata.gz: 80b4d09c2a23c57e540dbf4853c07b73f9b78f231acbba8cf0b6577e07df61d5ddd77efb2d619f0ebfeb14847a5f42dc0b2f9495562f91317ec384383697a194
7
- data.tar.gz: a2a82ffd1dd92e1961d5aeccdde0161e28a39f63755b85eb933faf61556530bad647d88d20fbc84b0cd38723e25196415d1d44ce80e48239bc3246ba27431737
6
+ metadata.gz: 846cd1d47b6a4e711d210411765137c459cd047f8787d559021e353317614d7033f61ade9e05502eb46b8c51fc56324999df7ff0b7442f82ade3b3dc0693b831
7
+ data.tar.gz: 4d1bd2d991ffdaa7d7c867aa4994b8010471658eba5fee85619585643db2f6ec34a1c49e278fab8081e48e05032fb56b39b3f552096e9a2b00b8dadce6517a18
data/CHANGELOG.md CHANGED
@@ -2,6 +2,133 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## [0.11.0] - 2026-10-04
6
+
7
+ ### Upgrading from 0.10.x
8
+
9
+ These change what an existing site shows. Each names the setting that keeps the old behaviour, where there is one:
10
+
11
+ - **A first visit is dark.** A site without `theme_options.color_scheme.default` used to follow the operating system; set `default: system` to keep that (#374).
12
+ - **Display equations are plain, and only the ones the text can refer to are numbered.** Set `theme_options.math.display_style: card` and `theme_options.math.numbering: all` for the old cards and numbers (#318).
13
+ - **The author and editorial note follows the article.** `theme_options.provenance.position: start`, or `provenance_position` in a post's front matter, puts it back before the body (#317).
14
+ - **A page lists only the works it cites.** A page that cites none listed every entry; add `nocite: all` to keep the full list (#289).
15
+ - **Related posts are ranked by relevance**, so a post may recommend different ones. `related_posts` in `_config.yml` tunes the ranking, and a post's front matter can name its own picks (#294).
16
+ - **A post shows its `summary` under its title**, where the heading repeated its first paragraph; a post without one shows none. Pages with a header of their own (packages, datasets, projects, notebooks, research articles, the home page) no longer get a date, a byline and the build time as "Published" above it (#411).
17
+
18
+ These need an edit, or can stop a build:
19
+
20
+ - **Three components are gone:** `components/enhanced-code-block.html`, `components/performance-monitor.html` and `components/viz-table-fallback.html`. A site that includes one gets a build error naming it; remove the include (#355).
21
+ - **Citation keys are checked.** A cited key that no source has, or that two entries share, stops the build and names the page and the key. In `{% datalog_cite key label %}` the second word is now a second key, not a label (#289).
22
+ - **An error raised in a plugin hook stops the build.** A `Jekyll::Errors::FatalException` from a hook was logged as a warning (#289).
23
+ - **`datalog critical-css` runs critical 9.** It needs Node.js 22.13, and Playwright's Chromium for the default `render` engine (`npx playwright install chromium`); `critical_css.engine: static` needs no browser. Remove `critical_css.penthouse_options`, which the build now warns about. A site whose own `node_modules` holds critical 8 needs to update it, and the command says how (#360).
24
+
25
+ One more to know about, needing no edit: `$dark-ink-200` and `$dark-ink-100` are now slate greys that read on dark surfaces. A site that uses them in its own styles gets the new colours, and one that sets them keeps its own (#415).
26
+
27
+ ### Fixed
28
+
29
+ - **The maths editor's preview names what it draws** (#422).
30
+ - **The name:** the preview is a live region, so a screen reader announces what is drawn in it. Its expression had no name, so what was announced was its MathML flattened to text: "σ 2 + E [X]" for `\sigma^2 + \mathbb{E}[X]`. It now gets `role="math"` and the name the rest of the page would give it ("sigma squared + double-struck E [X]"), or its `% alt:` comment, and the name follows each change.
31
+ - **A "<" in the LaTeX:** `renderLatex` set the LaTeX as HTML, so `a<b` began a tag and nothing was drawn; the preview showed, and announced, "\[a". It now sets it as text.
32
+ - **Search previews:** the maths previews in search results are drawn the same way, and stay unnamed and out of the tab order, since the LaTeX beside them is what is read (#365).
33
+
34
+ - **The maths toolkit starts whichever script loads second** (#421).
35
+ - **The bug:** MathJax's `ready()` started the toolkit only if `math.js` had already loaded, and the loader imports `math.js` after `DOMContentLoaded` while MathJax loads `async`. With MathJax in the browser's cache it was often ready first, and then nothing started the toolkit: no expression got its tab stop, its name on the rendered formula, or its copy and edit tools.
36
+ - **Now:** `math.js` starts the toolkit itself when it arrives after MathJax's `ready()`, and the toolkit starts once either way. Its options (`numbering`) now sit in the MathJax configuration, under `datalog`, so both sides read the same ones.
37
+
38
+ - **A formula's screen-reader name says what the formula says** (#417).
39
+ - **The bug:** the build and the browser derived the name from the LaTeX by spelling out a few commands and replacing every other one with a space. So `f : [a, b] \to \mathbb{R}` was named "f : [a, b] R", `c \in (a, b)` "c (a, b)", and `\pi`, `\sin` and the Greek letters vanished. Spacing commands and `\label` keys were read out, and `\square` became "Mathematical expression".
40
+ - **Now:** both read the LaTeX as words from one table (`lib/datalog/latex_speech/words.json`). Theorem 1 reads "f: [a, b] to double-struck R", and `\lim_{x \to 0}` reads "limit as x approaches 0". Fractions and roots nest, and a command with no word of its own is read by its name. Sizing, spacing, `\label`, the equation number from `\tag` and the names of environments such as `equation` or `align` are left out of the name; a matrix or `cases` is announced, as "matrix … end matrix".
41
+ - **Overrides:** a `% alt:` comment still names an expression, and the configuration guide now documents it.
42
+
43
+ - **A notebook page shows its title once.** Most notebooks open with their title as a `# Title` heading, and the page showed it again straight under its own `<h1>`, as an `<h2>` in a cell box of its own. When the first Markdown cell opens with a heading that is the page's title, that heading is now left out, and a cell that held nothing else isn't drawn. A heading that says something else, and the rest of that cell, stay (#416).
44
+ - **Text that kept the light theme's colour in dark mode now meets AA contrast.** The axe sweep missed all of it: the notebook page wasn't in the sweep, axe leaves text over the notebook header's gradient undecided, and it passes over single characters such as punctuation (#415).
45
+ - **Notebook page:** the header's values and summary, and the sidebar's counts and execution details, were dark grey on the dark panel at 2.1:1. The header's label was indigo at 2.3:1. They now use the dark theme's secondary ink and accent. A cell's code and outputs sat on a lighter wash than the cell, which put an output's text at 4.2:1 and a chart's warning at 2.9:1. They now sit a shade darker than the cell, as in light mode. In light mode, the header's tags were purple on their own tint at 4:1, and now use a darker purple, `$color-accent-tertiary-text`.
46
+ - **Code:** 14 Rouge token colours had no dark colour and kept the light one, about 2:1 on the dark code background. They are punctuation, HTML tags, constants, symbols, variables, regular expressions, deleted lines and error output. Each now has a dark colour.
47
+ - **Palette:** `$dark-ink-200` and `$dark-ink-100` were warm greys left from an older palette, at 2.3:1 and 1.7:1 on the dark page. They are now slate greys that read at 4.5:1 or more on every dark surface.
48
+ - **Removed:** five notebook output styles that nothing writes (`--stream`, `--error`, `__trace`, `__figure` and `--widget`).
49
+ - **A click on a formula no longer collapses part of it**, nor takes away its focus, its place in the tab order, its role or its label. MathJax's collapsible setting was on: it wrapped parts of an expression in toggles, so a click meant to select or copy a formula collapsed part of it to ◂…▸ ("Let f : ◂ ▸ be twice continuously differentiable"). MathJax then drew the expression again into a new container with none of what the theme gives an expression. The setting is now off (#412).
50
+ - **Menu changes:** MathJax also draws every expression again when a reader changes a setting in its menu, including turning collapsing back on. A render action in the theme's MathJax configuration now gives each new container its tab stop, role, label and LaTeX back, and the focus to the one that had it, without adding a second link after an equation reference. It sits in the configuration because the menu builds a new MathJax document for some settings, which would lose an action added later.
51
+ - **The default layout's heading no longer repeats or invents a date, an author and a summary** above every layout's own (#411).
52
+ - **Posts:** a post showed its date and author twice, as bare lines under the title and again in its own row. It now shows them once, and under its title the `summary` its author wrote, where the heading had repeated the post's first paragraph.
53
+ - **Layouts with their own header:** package, dataset, project, portfolio, notebook, research and home pages show nothing above it but the site header. Before, they showed a "summary" taken from their first paragraph (on the demo, "Installation" or "Key artifacts"), a byline, and the time of the build labelled "Published". A research article no longer has two `<h1>`s.
54
+ - **Dates:** no page shows the time of the build or of the checkout as its publication date. Jekyll gives an undated document the build's time, and the notebook converter gave a notebook without an execution time its file's, which is the checkout's. Neither reaches the page, the JSON-LD, the citation meta tags, or a citation and its BibTeX, RIS and EndNote exports any more. A citation takes the date it is given, else the page's real date, else its `updated` or `last_updated` date where the layout passes one, and otherwise has no year.
55
+ - **Microdata:** the heading is no longer a `ScholarlyArticle` microdata item around every page. That item contradicted the JSON-LD of the home page, the archives, packages and datasets, and gave a post a second item of another type. A post's own `TechArticle` item now carries its headline.
56
+ - **Layouts and plain pages:** `article_meta: false` is how a layout or a page leaves the date and authors to itself, as `show_title: false` leaves it the `<h1>` and the summary under it. A research article shows its `summary` under its own title. A plain page's date and authors are labelled, in the post row's style.
57
+ - A package page in a language other than Python or R had an "Installation" heading over an empty panel. It now shows the Git tab when the page has a `github_url`, and no panel otherwise. The Git tab's `cd` now names the directory the clone makes, which is the repository's name; it used the package's. The buttons of a package or project card wrap onto a second line rather than squeezing their labels into two (#290).
58
+ - The citations plugin escapes every value it writes into the page. The in-text link took `url` straight into `href`, and the list took the formatted entry and the title unescaped. Only an `http(s)` address or a DOI becomes a link now (#289).
59
+ - The academic dashboard (`components/academic-dashboard.html`) works, and the demo renders it at `/academic/` in place of a hand-written English copy. Nothing had rendered it, and it had decayed:
60
+ - its profiles never appeared, because a `for` loop cannot filter its own collection;
61
+ - it carried a second `h1`, and a heading for each section even when the data had nothing for it;
62
+ - its metrics were `dt`/`dd` pairs outside any `dl`, and the bibliography box had no label;
63
+ - the bibliography entries were joined with a literal `\n\n`, and date-only calendar events read "00:00".
64
+
65
+ Citations by year now keep the numbers `_data/academic.yml` gives and draw each bar against the busiest year. The script used to replace them with the publications generator's series, which counts citations by the year of publication, and it set a width CSS cannot read, so no bar showed. The submission and calendar filters now load `academic.js` even on a dashboard without citation metrics. The profile links carry `rel="me"`, like the author card's. A map passed as `academic` supplies the metrics too, and `docs/components.md` documents the component and its data (#355).
66
+ - `datalog update` no longer stops at "already at" when a path-installed theme is already at the release asked for. It answered before checking anything, so a checkout whose script bundles were never built reported success, and `--build` built nothing. It now rebuilds the bundles when they are missing or were built from other sources, runs the same site checks as after an update, and builds the site with `--build`; `--dry-run` says which of these it would do. The exit status is still 0 (#295).
67
+ - A reader who reaches the contact, subscription or correction form before its script has loaded is now told when the service does not take it. Each form asked the service only on the reader's first focus, or for a correction report when its panel opened; on a slow connection that had already happened before the script was listening, so the form stayed ready until the reader sent it and was refused. The check now runs at once when focus is already inside the form or the panel is already open. The same race failed the contact form's browser test on a slow CI runner.
68
+ - Search results are an ordinary list again, so a screen reader can reach what is inside them. Each result was an `option` in a `listbox`, a role whose children are presentational, which put the title link and the matching-section links of every result out of reach in browse mode. The arrow keys now move real focus through the results rather than pointing `aria-activedescendant` at them, Tab reaches them as it reaches any link, Enter follows the focused link, and Escape from the list returns to the query without clearing it (#365).
69
+ - The search results meet AA contrast in both themes. The query highlight took its colour from the card around it, which in dark mode put light grey on a light amber wash at 2.26:1; the tag and difficulty chips sat at 4.32:1 on their own tint; the loading text kept the light theme's grey on the dark surface at 3.27:1. The highlight now takes its colour from the wash it sits on, and the chips and the loading text have dark-mode colours of their own (#365).
70
+ - Code and LaTeX previews in a search result can be scrolled from the keyboard, and the rendered maths beside the LaTeX is `inert`, so it is neither a focus stop nor announced twice (#365).
71
+ - `datalog update`, `datalog check` and `datalog critical-css` read `_config.yml` as Jekyll does. The update's site checks loaded it with a YAML loader that allowed no dates, so a configuration with a date in it (`launched: 2024-01-01`) stopped the update with a `Psych::DisallowedClass` error after the theme checkout had already moved; and all three commands failed on a YAML alias, which Jekyll accepts. One loader now serves the three, allowing dates, times and aliases (#295).
72
+
73
+ ### Added
74
+
75
+ - **Share cards.** With `theme_options.social_cards.enabled`, the build draws a 1200×630 PNG for each post that names no image of its own. The card shows the title, the series or subtitle, the authors and date, the site's name and logo, and a research article's venue and DOI, on the theme's colours. `og:image` and `twitter:image` point at it, with its width, height and alt text, and so does the JSON-LD `image`. Before, every post without an `og_image` was shared with `social.default_image`.
76
+ - **Precedence:** `og_image` or `image` in front matter wins, then the card, then the default image. `social_card: false` asks for none.
77
+ - **Drawing:** ImageMagick draws the cards, as it draws the image variants. The text is set in IBM Plex Serif and Sans, which the gem now ships under the SIL Open Font License, and drawn as outlines, so no font is looked up and Ubuntu's ImageMagick 6 and Windows' ImageMagick 7 draw the same pixels. TeX in a title reads as text ("α-stable laws for X_t²"), and a title of 140 characters fits whole.
78
+ - **Caching and degrading:** cards are kept in `.jekyll-cache/datalog-social-cards`, keyed by what they show, so an unchanged page draws nothing on the next build. Without ImageMagick the build warns once and every page keeps the default image.
79
+ - **Settings:** `scheme` (dark or light, both AA for every text colour), `background`, `logo`, `template` (an SVG of the site's own) and `collections`. `docs/configuration-guide.md` documents them and the tools to install. The demo draws a card for each of its posts (#297).
80
+ - **Package pages know their registries.** A package names them in `registry:` (`pypi`, `conda_forge`, `cran`, `crates`, `rubygems`, `npm`, `julia`), and each gives its link and an install tab: `cargo add` with a docs.rs link, `gem install` with the Gemfile line, `npm install` and `Pkg.add`, beside pip, conda, CRAN and Git. `docs_url` adds a Documentation link, and `status` (alpha, beta, stable) shows beside the version. `pypi_url` and `cran_url` still work.
81
+ - **`bundle exec datalog packages refresh`** reads each package's latest release from PyPI, crates.io, RubyGems, CRAN (through crandb) and npm into `_data/package_releases.yml`: the version, release date and licence, the language version it needs, and whether it is a pre-release (by the registry's own rules: PEP 440, semver or RubyGems) or yanked. The layout shows that release before the front matter's `version`, and the build stays offline. A registry that cannot be read stops the command with exit 1 before the file is touched.
82
+ - **`components/package-index.html`** lists every package as cards or a table, with its release, install command and purpose, optionally grouped by `language` or any other field. The demo's `/packages/` is that include.
83
+ - **JSON-LD:** a package page describes its package as `SoftwareSourceCode`, with its repository, language, version, licence, author and registry pages.
84
+ - `docs/components.md` documents the front matter, the command and the index (#290).
85
+ - **`bundle exec datalog audit`** reports, with the file and line of each finding, what the theme's newer authoring features would improve. It reads the site through Jekyll's reader and never builds or writes it. `docs/scripts-reference.md` describes each check.
86
+ - **Opportunities** (advice): statements typed as bold "**Theorem**" or "**Definition**"; "Figure 3" typed by hand; posts that look like parts of a series; posts linking a repository, notebook or DOI with no reproducibility block; posts edited long after publication with no revision entry; hand-written reference lists.
87
+ - **Problems** (warnings, exit 1 with `--strict`): front matter keys that nothing in the theme or the site reads, with the known keys taken from the sources rather than kept as a list; images without alt text; links to pages the site does not build; `math` switched against a post's content.
88
+ - **Options:** `--format json` or `markdown`, `--only`, `--path`; `audit.known_keys`, `audit.ignore_links` and `audit.revision_after_days` in `_config.yml`.
89
+ - **Demo:** its first run found dead front matter, which is now removed: `hero:` on eleven posts, pointing at images that do not exist, and `nav_exclude:`, a Just the Docs field, on four pages (#296).
90
+ - **Citations work like `{% ref %}`.**
91
+ - **Sources:** a page names a BibTeX (`.bib`) or CSL-JSON (`.json`) file in `bibliography`, or the site does in `citations.bibliography`. Entries in front matter still work.
92
+ - **Tags:** `{% cite key %}`, `{% cite a b %}` and `{% cite key p="12" %}` become "[1]", "[2, 3]" and "[1, p. 12]", each linked to its entry. With `citations.style: author-year` (or `citation_style` on a page) they read "(Rubin 1987)".
93
+ - **The list:** the article ends with the cited works in citation order (numeric) or by author and year, each entry with its DOI or address as a link and a link back to each place it is cited. `nocite` lists works the text does not cite.
94
+ - **Errors:** a key no source has, or one two entries share, stops the build and names the page and the key.
95
+ - **Metadata:** on a research article, each cited work is a `citation_reference` meta tag and a `CreativeWork` in the JSON-LD `citation`.
96
+ - **Plugin:** it no longer needs `datalog-search`, and adds the cited keys to the index only when search is on. The BibTeX subset is read without a dependency, and the words are translated in English, Portuguese and Spanish. `docs/user-guide.md` has a worked example and `docs/components.md` the reference (#289).
97
+ - An `archive` layout for year, tag, category and curated topic pages, with jump lists, counts per section, localized dates, optional month sections and series grouping for topics, sharing `components/post-list.html` (compact, dated and teaser variants) with the rest of the theme. The starter template includes `/archives/years/`, `/tags/` and `/categories/`; `datalog new archive --type year|tag|category|topic` scaffolds another; a site whose archives live elsewhere sets `tag_archive.path` and `category_archive.path` so tag and category links reach them (#293).
98
+ - Posts offer a way to report an error on a site without dynamic services: a link to a pre-filled GitHub or GitLab issue, labelled with `corrections.issue_labels` and saying before the reader follows it that the issue is public, or an email to `contact_email` (else `author.email`). `corrections.fallback` chooses `issue`, `email` or `none`, and by default takes the issue link when `repository` is a GitHub or GitLab address. The link works without JavaScript; with it, the section and the selected passage are added. The form still takes over wherever the service offers corrections (#292).
99
+ - `datalog update` updates a theme installed from a Git submodule or a local path: it moves the checkout to the latest stable release tag, or the one `--to` names, refuses a checkout with local changes, rebuilds the script bundles, installs the site's gems, prints the release's Removed, Changed and Deprecated notes, and stages the new submodule pointer without committing. `--dry-run` says what it would do and `--build` builds the site into a temporary directory first. It exits 0 when already current, 2 after an update and 1 on failure; installs from RubyGems update as before (#295).
100
+ - The home layout's hero is a contained panel with up to two actions (`hero_cta_label` and `hero_cta_url`, `hero_secondary_cta_label` and `hero_secondary_cta_url`), and `home_features` in the home page's front matter lists feature cards with a title, description and link. The latest posts and portfolio sections are left out when their collections are empty, and a hero background image is preloaded only when one is configured (#375).
101
+ - `layout: docs` gives a guide a section sidebar, drawn from optional `docs` groups in `_data/navigation.yml`, an on-page contents list and links to the previous and next guides; guides share the posts' code-copy control. The documentation site uses it, with search, the colour toggle, a homepage that leads to installation, and a technical authoring guide (#376, #379, #380).
102
+ - The dynamic features have a backend to deploy. [datalog-services](https://github.com/DiogoRibeiro7/datalog-services), a separate repository outside the gem, implements every route of the dynamic-services contract as a Cloudflare Worker with a D1 database, with an OpenAPI description of the contract, a conformance suite any backend can run against a base URL, and a deployment guide. `docs/dynamic-services.md` links all four, and its prose reference deployment is now only what they leave out; `docs/moderation.md` and `docs/components.md` point at the service where they described one (#291).
103
+ - The site can describe itself to search engines. With `site_identity` in `_config.yml` (`true`, or a map with `name` and `alternate_names`), the homepage carries a `WebSite` node with the site's name, other names and URL, which is what Google reads as a site's name, and the publisher in full: the author's `Person` or the `Organization`. `og:site_name` follows the same name. A page with `schema_type: ProfilePage` is now a real profile page: its `mainEntity` is its author (or the publisher, with `main_entity: publisher`) and it is `isPartOf` the website, where the type alone used to change nothing else. The author's `Person` reads `alternate_name`, `job_title` or `roles`, the avatar, `bio`, `knows_about` (or `expertise`, `research_areas`) and a `same_as` list, for every author whose record has them. The site's author and the publisher carry stable `@id`s (`/#person`, `/#organization`) on every page, so an article's author, its publisher and the homepage's person are one entity rather than one per page; this adds an `@id` to the JSON-LD of every page, and a guest gets none. `seo_title_suffix: false` drops the ` | site title` from a page's `<title>`, and a string replaces the site title there. The JSON-LD description already followed the meta description's order (`seo_description`, `description`, excerpt, site description), which a test now holds. Off by default, so a site with its own `WebSite` block does not get two (#322).
104
+ - The site author's profile links say `rel="me"`, so IndieAuth, Mastodon's verified links and other identity checks can connect the site to its owner's accounts, as the JSON-LD `sameAs` already did. It covers the author card's GitHub, Twitter/X, LinkedIn, ORCID and Google Scholar links, each author's ORCID link in the research layout, and the footer's ORCID link, which all follow one rule: `me noopener noreferrer` for the site's own author, `noopener noreferrer` for anyone else, so a guest's profiles are never claimed as the owner's. `profile_rel` on `author` in `_config.yml`, or on a `_data/authors.yml` record, replaces `me` for that person; `noopener` and `noreferrer` are always kept. The footer's ORCID link gains `noreferrer`, which it lacked (#323).
105
+ - A page in `_datasets/` now carries `schema.org/Dataset` structured data, which is what Google Dataset Search indexes; the `WebPage` description a dataset page had could not reach it. The title, summary, `updated`, `license` and field `schema` it already declares fill most of it in, and `doi`, `keywords`, `temporal_coverage`, `spatial_coverage`, `measurement_technique`, `citation`, `is_accessible_for_free` and a `distributions` list are read when present. A dataset with no `date:` claims no publication date rather than the build time (#334).
106
+ - Figures can carry a dark companion. Put `power-dark.png` beside `power.png` and it becomes a `<source media="(prefers-color-scheme: dark)">` at the front of the same `<picture>`, with its own resized copies and modern formats; the `<img>` keeps the light file, its alt text and its dimensions, so the figure is described once. `{% figure %}` takes `dark_src` for a companion that does not follow the convention, as does any `<img data-dark-src="...">`, including one the variant pipeline never reads, such as an SVG. `theme_options.images.dark_suffix` changes the suffix, and `""` turns the convention off. `prefers-color-scheme` follows the operating system and the theme's toggle does not, so `core/dark-mode.js` overrules the query on those sources whenever a reader has chosen a mode for the site; with JavaScript off the figures follow the system. A page's `hero_image` gets the same treatment, through `components/responsive-image.html`, which now builds its `srcset`s with the same code the optimizer uses rather than three copies of its own (#335).
107
+ - Search results link to the section of a page the query was found in, not just to the page. A result is still one entry per page, with at most three matching sections listed under it, each an anchor to the heading itself; the excerpt now comes from the section's own text. The sections are taken from the page's own `h2` and `h3` at build time, using the ids kramdown already gives them, so there is nothing to write in front matter. A page with no headings indexes as one section, as every page did before; the text before the first heading is never offered as a section of itself; a heading with no id still indexes and links to the page; and the split runs over the document's own content, so the headings a layout puts around an article are not sections of every result. An index generated without sections, by an older build or a site's own template, still searches. The repeated text takes `search.json` from 32 KB to 39 KB served compressed on the demo site, and a budget assertion holds it there (#336).
108
+
109
+ ### Changed
110
+
111
+ - **`datalog critical-css` runs critical 9.** critical 9 rewrote its command line, and the command's `--base`, `--css` and `--penthouse-*` options stopped it with "Unknown option '--base'". The theme's `devDependency` and the `npx` fallback move together, so the theme and the sites using it run the same version.
112
+ - **How pages reach it:** each page goes to critical on its standard input, from the built site's root, with `assets/css/main.css` as its only stylesheet. The inlined CSS still carries no Google Fonts rules, now whatever the site's `baseurl`. The viewports are one `--dimensions` list.
113
+ - **Engines:** `critical_css.engine: render`, the default, measures the first screen in Playwright's Chromium at each viewport, as critical 8 did in Puppeteer's Chrome. critical 9 does not download that browser: install it with `npx playwright install chromium`, or let the command install it when it runs critical through `npx`. `engine: static` needs no browser and writes more CSS. On the demo, render's CSS is a quarter to a half larger than critical 8's (4.3 to 6.3 KB gzipped against 3.5 to 4.0 KB), because critical 9 keeps the media queries of every viewport it measures.
114
+ - **Checks:** the command names a Node.js older than 22.13, which critical 8 needed as well, and a site whose own `node_modules` holds critical 8, with the command that updates it.
115
+ - **Removed:** `critical_css.penthouse_options`: critical 9 has no penthouse, and the build now warns while the setting is there. The Tests, Deploy and Lighthouse workflows install Playwright's Chromium before they run critical. The unit tests now run the installed critical with the theme's arguments, so a refused option fails there as well as in the consumer test (#360).
116
+
117
+ - **A page lists only the works it cites.** The citations plugin listed every entry of a page that cited none of them; `nocite: all` restores that.
118
+ - **Research layout:** its `references:` list of strings is no longer read as citation entries (a list of maps still is), and it shows the cited works in its References section.
119
+ - **JSON-LD:** `citation` lists the cited works, not the page's own `citation_key`.
120
+ - **The old tag:** `{% datalog_cite key label %}` is now an alias of `{% cite %}`, so a second word is a second key rather than a custom label.
121
+ - **Plugin errors:** a `Jekyll::Errors::FatalException` raised in a plugin hook now stops the build instead of being logged as a warning (#289).
122
+ - **Display equations are set plain, and only the ones the text can refer to are numbered.** Each display equation was a bordered, shadowed card, 106 px tall around a 16 px formula, and every one was numbered. An equation now stands on its own line with a `1.25rem` margin and adds nothing to the page but its height and margins; its copy and edit tools appear at the end of its line when the pointer or the focus reaches it, and stay in the tab order. MathJax numbers what amsmath numbers (`equation`, `align`, `gather` and the rest, not their starred forms) and any `$$…$$` display with a `\label{}`, so `\eqref{}` still finds it, and leaves `$$x = 1$$` unnumbered. To keep the old look and numbering, set `theme_options.math.display_style: card` and `theme_options.math.numbering: all`; `numbering: none` numbers only a `\tag{}` of the author's. The validator accepts only those values. The card's styles are compiled only for a site that asks for it, so a plain site's stylesheet does not grow (#318).
123
+ - **The author and editorial note follows the article.** The note that `why_this_exists`, `evidence`, `methodology` and `reviewed_at` make stood between the topics and the body, a screenful on a phone before the first sentence. It now comes after the body and the reproducibility panel, before the revision history and "How to cite", in the document and so for screen readers and in print as well as on screen. A row of the metadata, "Author and editorial note", says when the article was reviewed and links to it. `theme_options.provenance.position: start` puts the note back where it was, and `provenance_position` in a post's front matter chooses for that post (#317).
124
+ - **A first visit is dark.** The palette is indigo and cyan, and a site without `theme_options.color_scheme.default` now opens dark, where it used to follow the operating system. Set `default: system` to keep the old behaviour, or `light`; a reader's choice with the toggle still wins, and dark figure variants follow the mode in effect (#374).
125
+ - **Related posts are ranked by relevance**, so a site's posts may recommend different ones than before. Shared tags count by how rare they are, then categories and keywords, and the date only breaks ties. `related_posts` in `_config.yml` sets `limit`, `min_score` and `weights` (a `text` weight for shared title and excerpt words is off by default). In a post's front matter, `related_posts` lists picks by URL, path or exact title, shown first; a pick that matches nothing or more than one post stops the build. A post's own series is left out and another series appears at most once; `related: false` keeps a post out of other posts' lists and `related_posts: false` hides the section (#294).
126
+ - The analytics dashboard follows the theme's dark and light palettes, redraws its charts when the mode changes, and offers each chart's values as a table. It tells apart data that is configured, empty, unavailable, not set up and stale: when a refresh from the analytics API fails, the last good data stays on the page marked stale rather than shown as current (#377).
127
+
128
+ ### Removed
129
+
130
+ - `components/enhanced-code-block.html`, `components/performance-monitor.html` and `components/viz-table-fallback.html`, which no layout, page or script included. The first two held inline scripts that the Content Security Policy would block. Code blocks get their copy button from the layouts, and `assets/js/visualizations.js` builds the table fallback's template itself when the page has none, which was always. A site that includes one of them gets a build error naming the file. A test now fails when a file in `_includes/components/` is included by nothing the build renders (#355).
131
+
5
132
  ## [0.10.1] - 2026-09-22
6
133
 
7
134
  ### Fixed
data/CITATION.cff CHANGED
@@ -16,8 +16,8 @@ abstract: >-
16
16
  It offers integrated notebook publishing, advanced math rendering, interactive
17
17
  visualization workflows, and reproducibility tooling optimised for open science communities.
18
18
  license: MIT
19
- version: 0.10.1
20
- date-released: 2026-09-22
19
+ version: 0.11.0
20
+ date-released: 2026-10-04
21
21
  keywords:
22
22
  - data-science
23
23
  - jekyll
data/README.md CHANGED
@@ -75,7 +75,7 @@ site; the rest is reference content you can copy from.
75
75
  ## Documentation
76
76
 
77
77
  - [Documentation Index](docs/README.md) — every guide, grouped by what you want to do.
78
- - [Documentation Site](docs/site/README.md) — source for the live `datalog-theme.github.io` documentation hub with feature walk-throughs, interactive demos, and migration guides.
78
+ - [Documentation Site](docs/site/README.md) — source for a documentation site built with the theme, with feature walk-throughs, interactive demos, and migration guides. It is not published yet; CI builds it and checks it in a browser on every pull request. The live example of the theme is the [demo site](https://diogoribeiro7.github.io/analytics-blog-jekyll/).
79
79
  - [User Guide](docs/user-guide.md) — comprehensive documentation covering installation, notebooks, math, visualizations, research workflows, accessibility, performance, and collaboration best practices for DataLog users.
80
80
  - [Environment Setup Guide](docs/environment-setup.md) — configure environment variables, secrets, and integrations for analytics, testing, and deployment.
81
81
  - [Scripts Reference](docs/scripts-reference.md) — complete reference for all build, test, import/export, and utility scripts.
@@ -134,6 +134,8 @@ bin/datalog --help
134
134
  - `bin/datalog new notebook` — create a notebook landing page and starter `.ipynb` in one step.
135
135
  - `bin/datalog new project` — scaffold a portfolio entry with metadata and placeholder sections.
136
136
  - `bin/datalog check` — validate runtime dependencies, configuration, and optional tooling like Node.js.
137
+ - `bin/datalog audit` — list the posts that would gain from newer authoring features (statements, figures, series, citations) and content problems (unread front matter, images without alt text, broken internal links), with file and line; `--strict` for CI. See [docs/scripts-reference.md](docs/scripts-reference.md#datalog-audit).
138
+ - `bin/datalog packages refresh` — read each package's latest release from its registries (PyPI, crates.io, RubyGems, CRAN, npm) into `_data/package_releases.yml`, which package pages show before their front matter. See [docs/components.md](docs/components.md#package-pages).
137
139
  - `bin/datalog publish` — build the site and push the `_site` artifacts to your GitHub Pages branch via git worktrees.
138
140
  - `bin/datalog update` — upgrade the `datalog-theme` gem and refresh npm packages when applicable.
139
141
 
@@ -208,7 +210,7 @@ Data-driven configuration allows you to publish or reorder projects, datasets, s
208
210
  Add the theme gem to your Jekyll site:
209
211
 
210
212
  ```ruby
211
- gem "datalog-theme", "~> 0.10.0"
213
+ gem "datalog-theme", "~> 0.11.0"
212
214
  ```
213
215
 
214
216
  The constraint takes the patch releases of the current minor series. Until 1.0 a minor release may include breaking changes, listed in the [changelog](CHANGELOG.md).
data/_data/i18n/en.yml CHANGED
@@ -2,6 +2,7 @@
2
2
  date:
3
3
  formats:
4
4
  long: "%B %-d, %Y"
5
+ month: "%B"
5
6
  datetime: "%B %-d, %Y %H:%M"
6
7
  months:
7
8
  1: January
@@ -45,6 +46,14 @@ date:
45
46
  4: Thu
46
47
  5: Fri
47
48
  6: Sat
49
+ archive:
50
+ jump: Jump to archive section
51
+ count: "({{count}} posts)"
52
+ show_all: "Show all ({{count}} more)"
53
+ series: Series
54
+ parts: "({{count}} parts)"
55
+ articles: Articles
56
+ empty: No articles published yet.
48
57
  global:
49
58
  skip_to_main: Skip to main content
50
59
  math_ready: Mathematical content is ready
@@ -147,6 +156,8 @@ navigation:
147
156
  julia: Julia
148
157
  javascript: JavaScript
149
158
  home:
159
+ features: What you can publish
160
+ explore_more: Explore more
150
161
  latest_research: Latest Research Notes
151
162
  reading_time_one: 1 min read
152
163
  reading_time_many: "{{minutes}} mins read"
@@ -162,6 +173,14 @@ article:
162
173
  authors: Authors
163
174
  corrections:
164
175
  summary: Report an error or suggest a correction
176
+ fallback:
177
+ subject: "Correction: {{title}}"
178
+ article: Article
179
+ url: Address
180
+ prompt: "Describe the error and the suggested correction."
181
+ section: Section
182
+ quote: Selected passage
183
+ public_note: "Issue reports are public. Do not include private information."
165
184
  intro: "Spotted a mistake in the mathematics, the facts, a citation, the code or the reproducibility? Say what and where. The report goes to the author, not onto the page."
166
185
  category: What kind of problem
167
186
  section: Where
@@ -370,6 +389,16 @@ dynamic_services:
370
389
  aborted: The request was cancelled.
371
390
  retry_after: "Try again in {{seconds}} seconds."
372
391
  reference: "Reference: {{id}}"
392
+ citations:
393
+ and: and
394
+ et_al: et al.
395
+ no_date: n.d.
396
+ back: "Back to citation {{n}}"
397
+ locators:
398
+ p: p.
399
+ pp: pp.
400
+ chap: ch.
401
+ sec: sec.
373
402
  references:
374
403
  figure: Figure
375
404
  table: Table
@@ -390,6 +419,8 @@ post:
390
419
  evidence: Evidence used
391
420
  method: Method
392
421
  reviewed: Reviewed
422
+ reviewed_on: "Reviewed {{date}}"
423
+ link: How this article was made
393
424
  revisions:
394
425
  heading: Revision history
395
426
  corrected_on: "Corrected on {{date}}."
@@ -550,9 +581,6 @@ notebook:
550
581
  launch_binder: Launch in Binder
551
582
  open_colab: Open in Colab
552
583
  academic_dashboard:
553
- header:
554
- title: Academic integration hub
555
- description: Monitor publication metrics, synchronize academic profiles, and coordinate submissions, funding, and mentorship opportunities.
556
584
  profiles:
557
585
  title: Academic profiles & synchronization
558
586
  view_profile: View profile
@@ -565,6 +593,7 @@ academic_dashboard:
565
593
  featured_projects: Featured projects
566
594
  collections: Collections
567
595
  auto_update: Auto update
596
+ auto_update_on: "On"
568
597
  citations:
569
598
  title: Citation metrics
570
599
  total: Total citations
@@ -748,6 +777,15 @@ analytics:
748
777
  last_updated: Last updated
749
778
  last_updated_unknown: "Last updated: pending"
750
779
  cache_window: Data cached for 24 hours
780
+ current: Current results
781
+ stale: Cached results
782
+ stale_note: GA4 is unavailable. Showing the last successful cached results.
783
+ setup_needed: Setup needed
784
+ unavailable: Unavailable
785
+ empty: No results yet
786
+ view_data: View data table
787
+ chart_unavailable: Chart unavailable; use the data table below.
788
+ no_chart_data: No chart data available.
751
789
  top_posts: Top posts
752
790
  search_terms: Search queries
753
791
  visitor_trends: Visitor trends
@@ -785,3 +823,17 @@ package_install:
785
823
  copy: Copy
786
824
  copied: Copied!
787
825
  copy_error: Could not copy
826
+ gemfile: Gemfile
827
+ julia_repl: Julia REPL
828
+ packages:
829
+ documentation: Documentation
830
+ prerelease: pre-release
831
+ yanked: yanked
832
+ index:
833
+ title: Packages
834
+ other: Other
835
+ package: Package
836
+ release: Release
837
+ install: Install
838
+ purpose: Purpose
839
+ empty: No packages yet.
data/_data/i18n/es.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  date:
3
3
  formats:
4
+ month: "%B"
4
5
  long: "%d de %B de %Y"
5
6
  datetime: "%d de %B de %Y %H:%M"
6
7
  months:
@@ -45,6 +46,14 @@ date:
45
46
  4: Jue
46
47
  5: Vie
47
48
  6: Sáb
49
+ archive:
50
+ jump: Ir a la sección del archivo
51
+ count: "({{count}} artículos)"
52
+ show_all: "Mostrar todos ({{count}} más)"
53
+ series: Series
54
+ parts: "({{count}} partes)"
55
+ articles: Artículos
56
+ empty: Aún no hay artículos publicados.
48
57
  global:
49
58
  skip_to_main: Ir al contenido principal
50
59
  math_ready: El contenido matemático está disponible
@@ -147,6 +156,8 @@ navigation:
147
156
  julia: Julia
148
157
  javascript: JavaScript
149
158
  home:
159
+ features: Qué puedes publicar
160
+ explore_more: Explorar más
150
161
  latest_research: Notas de investigación recientes
151
162
  reading_time_one: Lectura de 1 min
152
163
  reading_time_many: "Lectura de {{minutes}} min"
@@ -162,6 +173,14 @@ article:
162
173
  authors: Autores
163
174
  corrections:
164
175
  summary: Informar de un error o sugerir una corrección
176
+ fallback:
177
+ subject: "Corrección: {{title}}"
178
+ article: Artículo
179
+ url: Dirección
180
+ prompt: "Describe el error y la corrección sugerida."
181
+ section: Sección
182
+ quote: Pasaje seleccionado
183
+ public_note: "Los informes mediante incidencias son públicos. No incluyas datos privados."
165
184
  intro: "¿Has visto un error en las matemáticas, los hechos, una cita, el código o la reproducibilidad? Di qué y dónde. El informe va al autor, no a la página."
166
185
  category: Qué tipo de problema
167
186
  section: Dónde
@@ -370,6 +389,16 @@ dynamic_services:
370
389
  aborted: La solicitud se canceló.
371
390
  retry_after: "Inténtalo de nuevo en {{seconds}} segundos."
372
391
  reference: "Referencia: {{id}}"
392
+ citations:
393
+ and: "y"
394
+ et_al: et al.
395
+ no_date: s.f.
396
+ back: "Volver a la cita {{n}}"
397
+ locators:
398
+ p: p.
399
+ pp: pp.
400
+ chap: cap.
401
+ sec: secc.
373
402
  references:
374
403
  figure: Figura
375
404
  table: Tabla
@@ -390,6 +419,8 @@ post:
390
419
  evidence: Evidencia utilizada
391
420
  method: Método
392
421
  reviewed: Revisado
422
+ reviewed_on: "Revisado el {{date}}"
423
+ link: Cómo se hizo este artículo
393
424
  revisions:
394
425
  heading: Historial de revisiones
395
426
  corrected_on: "Corregido el {{date}}."
@@ -550,9 +581,6 @@ notebook:
550
581
  launch_binder: Abrir en Binder
551
582
  open_colab: Abrir en Colab
552
583
  academic_dashboard:
553
- header:
554
- title: Centro de integración académica
555
- description: Supervise métricas de publicación, sincronice perfiles académicos y coordine envíos, financiación y mentorías.
556
584
  profiles:
557
585
  title: Perfiles académicos y sincronización
558
586
  view_profile: Ver perfil
@@ -565,6 +593,7 @@ academic_dashboard:
565
593
  featured_projects: Proyectos destacados
566
594
  collections: Colecciones
567
595
  auto_update: Actualización automática
596
+ auto_update_on: "Activada"
568
597
  citations:
569
598
  title: Métricas de citación
570
599
  total: Total de citas
@@ -748,6 +777,15 @@ analytics:
748
777
  last_updated: Última actualización
749
778
  last_updated_unknown: "Última actualización: pendiente"
750
779
  cache_window: Datos en caché por 24 horas
780
+ current: Resultados actuales
781
+ stale: Resultados en caché
782
+ stale_note: GA4 no está disponible. Se muestran los últimos resultados guardados.
783
+ setup_needed: Configuración necesaria
784
+ unavailable: No disponible
785
+ empty: Aún no hay resultados
786
+ view_data: Ver tabla de datos
787
+ chart_unavailable: Gráfico no disponible; consulta la tabla de datos de abajo.
788
+ no_chart_data: No hay datos para el gráfico.
751
789
  top_posts: Entradas destacadas
752
790
  search_terms: Consultas de búsqueda
753
791
  visitor_trends: Tendencias de visitantes
@@ -785,3 +823,17 @@ package_install:
785
823
  copy: Copiar
786
824
  copied: ¡Copiado!
787
825
  copy_error: No se pudo copiar
826
+ gemfile: Gemfile
827
+ julia_repl: REPL de Julia
828
+ packages:
829
+ documentation: Documentación
830
+ prerelease: prelanzamiento
831
+ yanked: retirada
832
+ index:
833
+ title: Paquetes
834
+ other: Otros
835
+ package: Paquete
836
+ release: Versión
837
+ install: Instalación
838
+ purpose: Para qué sirve
839
+ empty: Todavía no hay paquetes.
data/_data/i18n/pt.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  date:
3
3
  formats:
4
+ month: "%B"
4
5
  long: "%d de %B de %Y"
5
6
  datetime: "%d de %B de %Y %H:%M"
6
7
  months:
@@ -45,6 +46,14 @@ date:
45
46
  4: Qui
46
47
  5: Sex
47
48
  6: Sáb
49
+ archive:
50
+ jump: Ir para a secção do arquivo
51
+ count: "({{count}} artigos)"
52
+ show_all: "Mostrar todos (mais {{count}})"
53
+ series: Séries
54
+ parts: "({{count}} partes)"
55
+ articles: Artigos
56
+ empty: Ainda não há artigos publicados.
48
57
  global:
49
58
  skip_to_main: Ir para o conteúdo principal
50
59
  math_ready: Conteúdo matemático disponível
@@ -147,6 +156,8 @@ navigation:
147
156
  julia: Julia
148
157
  javascript: JavaScript
149
158
  home:
159
+ features: O que pode publicar
160
+ explore_more: Explorar mais
150
161
  latest_research: Notas de investigação recentes
151
162
  reading_time_one: Leitura de 1 min
152
163
  reading_time_many: "Leitura de {{minutes}} min"
@@ -162,6 +173,14 @@ article:
162
173
  authors: Autores
163
174
  corrections:
164
175
  summary: Comunicar um erro ou sugerir uma correção
176
+ fallback:
177
+ subject: "Correção: {{title}}"
178
+ article: Artigo
179
+ url: Endereço
180
+ prompt: "Descreva o erro e a correção sugerida."
181
+ section: Secção
182
+ quote: Passagem selecionada
183
+ public_note: "As comunicações por issue são públicas. Não inclua dados privados."
165
184
  intro: "Encontrou um erro na matemática, nos factos, numa citação, no código ou na reprodutibilidade? Diga o quê e onde. O relato vai para o autor, não para a página."
166
185
  category: Que tipo de problema
167
186
  section: Onde
@@ -370,6 +389,16 @@ dynamic_services:
370
389
  aborted: O pedido foi cancelado.
371
390
  retry_after: "Tente novamente em {{seconds}} segundos."
372
391
  reference: "Referência: {{id}}"
392
+ citations:
393
+ and: e
394
+ et_al: et al.
395
+ no_date: s.d.
396
+ back: "Voltar à citação {{n}}"
397
+ locators:
398
+ p: p.
399
+ pp: pp.
400
+ chap: cap.
401
+ sec: sec.
373
402
  references:
374
403
  figure: Figura
375
404
  table: Tabela
@@ -390,6 +419,8 @@ post:
390
419
  evidence: Evidência utilizada
391
420
  method: Método
392
421
  reviewed: Revisto
422
+ reviewed_on: "Revisto a {{date}}"
423
+ link: Como este artigo foi feito
393
424
  revisions:
394
425
  heading: Histórico de revisões
395
426
  corrected_on: "Corrigido em {{date}}."
@@ -550,9 +581,6 @@ notebook:
550
581
  launch_binder: Abrir no Binder
551
582
  open_colab: Abrir no Colab
552
583
  academic_dashboard:
553
- header:
554
- title: Hub de integração académica
555
- description: Monitorize métricas de publicação, sincronize perfis académicos e coordene submissões, financiamento e programas de mentoria.
556
584
  profiles:
557
585
  title: Perfis académicos e sincronização
558
586
  view_profile: Ver perfil
@@ -565,6 +593,7 @@ academic_dashboard:
565
593
  featured_projects: Projetos em destaque
566
594
  collections: Coleções
567
595
  auto_update: Atualização automática
596
+ auto_update_on: "Ativa"
568
597
  citations:
569
598
  title: Métricas de citação
570
599
  total: Total de citações
@@ -748,6 +777,15 @@ analytics:
748
777
  last_updated: Última atualização
749
778
  last_updated_unknown: "Última atualização: pendente"
750
779
  cache_window: Dados em cache por 24 horas
780
+ current: Resultados atuais
781
+ stale: Resultados em cache
782
+ stale_note: O GA4 está indisponível. Exibindo os últimos resultados armazenados.
783
+ setup_needed: Configuração necessária
784
+ unavailable: Indisponível
785
+ empty: Ainda não há resultados
786
+ view_data: Ver tabela de dados
787
+ chart_unavailable: Gráfico indisponível; consulte a tabela de dados abaixo.
788
+ no_chart_data: Não há dados para o gráfico.
751
789
  top_posts: Principais publicações
752
790
  search_terms: Consultas de pesquisa
753
791
  visitor_trends: Tendências de visitantes
@@ -785,3 +823,17 @@ package_install:
785
823
  copy: Copiar
786
824
  copied: Copiado!
787
825
  copy_error: Não foi possível copiar
826
+ gemfile: Gemfile
827
+ julia_repl: REPL do Julia
828
+ packages:
829
+ documentation: Documentação
830
+ prerelease: pré-lançamento
831
+ yanked: retirada
832
+ index:
833
+ title: Pacotes
834
+ other: Outros
835
+ package: Pacote
836
+ release: Versão
837
+ install: Instalação
838
+ purpose: Para que serve
839
+ empty: Ainda não há pacotes.