diff --git a/.gitignore b/.gitignore index eb5d27557d..b7e84d344e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -# MkDocs +# Zensical _build +docs/_build.*.toml comment.md # IDEs and oather build artefacts diff --git a/README.md b/README.md index 8e25b1ad18..ebcfb2009c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This is the homepage for the [BeeWare project](http://beeware.org). -It is a [MkDocs](https://mkdocs.org)-based site. The site is hosted on GitHub Pages, with PR builds being provided by ReadTheDocs. +It is a [Zensical](https://zensical.org)-based site. The site is hosted on GitHub Pages, with PR builds being provided by ReadTheDocs. ## Getting started diff --git a/docs-redirect/.readthedocs.yaml b/docs-redirect/.readthedocs.yaml index 0b5d84d349..515887c709 100644 --- a/docs-redirect/.readthedocs.yaml +++ b/docs-redirect/.readthedocs.yaml @@ -1,13 +1,15 @@ - version: 2 +version: 2 - build: - os: "ubuntu-24.04" - tools: - python: "3.12" - jobs: - pre_install: - - python -m pip install --upgrade pip - - python -m pip install --group redirects - - mkdocs: - configuration: docs-redirect/mkdocs.yml +build: + os: "ubuntu-24.04" + tools: + python: "3.13" + jobs: + pre_install: + - python -m pip install --upgrade pip + - python -m pip install --group docs-redirect + build: + html: + - python -m zensical build --clean --strict --config-file docs-redirect/zensical.toml + - mkdir -p $READTHEDOCS_OUTPUT + - cp -r docs-redirect/_build/html $READTHEDOCS_OUTPUT/html diff --git a/docs-redirect/mkdocs.yml b/docs-redirect/mkdocs.yml deleted file mode 100644 index 11e37a6ba0..0000000000 --- a/docs-redirect/mkdocs.yml +++ /dev/null @@ -1,15 +0,0 @@ -site_name: BeeWare -site_url: https://docs.beeware.org/ -docs_dir: en - -plugins: - redirects: - redirect_maps: - "index.md": "https://beeware.org/docs" - -theme: - name: mkdocs - locale: en - custom_dir: overrides/ - static_templates: - - 404.html diff --git a/docs-redirect/zensical.toml b/docs-redirect/zensical.toml new file mode 100644 index 0000000000..67ac948108 --- /dev/null +++ b/docs-redirect/zensical.toml @@ -0,0 +1,18 @@ +[project] +site_name = "BeeWare" +site_url = "https://docs.beeware.org/" +docs_dir = "en" +site_dir = "_build/html" +# README.md only exists so that the `en` directory exists. Excluding it leaves +# the index page free for the redirect. +exclude_docs = """ +README.md +""" + +[project.theme] +language = "en" +# Provides the 404 page, which redirects any other URL on the site. +custom_dir = "overrides" + +[project.plugins.redirects.redirect_maps] +"index.md" = "https://beeware.org/docs" diff --git a/docs/config.yml b/docs/config.yml deleted file mode 100644 index afe7750e97..0000000000 --- a/docs/config.yml +++ /dev/null @@ -1,326 +0,0 @@ -# yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json -copyright: © Russell Keith-Magee - -nav: - - About: - - about/index.md - - What is BeeWare?: about/overview.md - - The Bee Team: about/team.md - - History and Philosophy: about/history.md - - Success stories: about/success.md - - Contact: about/contact.md - - Branding guidelines: about/branding.md - - Documentation: - - docs/index.md - - Community: - - community/index.md - - BeeWare Community Code of Conduct: community/code-of-conduct.md - - Governance: community/governance.md - - Available for Hire: community/for-hire.md - - Contributing: - - contributing/index.md - - First-time contributors: contributing/first-time-contributors.md - - Contribution guide: - - contributing/guide/index.md - - Fix an issue: contributing/guide/what/fix-issue.md - - Implement a new feature: contributing/guide/what/implement-feature.md - - Write documentation: contributing/guide/what/write-docs.md - - Triage an issue: contributing/guide/what/triage.md - - Review a pull request: contributing/guide/what/review-pr.md - - Propose a new feature: contributing/guide/what/propose-feature.md - - Translate content: contributing/guide/what/translate.md - - Use the tools: contributing/guide/what/use-tools.md - - Setting up a development environment: contributing/guide/how/dev-environment.md - - Reproducing an issue: contributing/guide/how/reproduce-issue.md - - Working from a branch: contributing/guide/how/branches.md - - Avoiding scope creep: contributing/guide/how/scope-creep.md - - Writing, running, and testing code: contributing/guide/how/write-code.md - - Building documentation: contributing/guide/how/build-docs.md - - Writing documentation: contributing/guide/how/write-docs.md - - Adding a change note: contributing/guide/how/change-note.md - - Submitting a pull request: contributing/guide/how/submit-pr.md - - Providing a review: contributing/guide/how/review-pr.md - - Submitting a new issue: contributing/guide/how/new-issue.md - - Proposing a new feature: contributing/guide/how/propose-feature.md - - Translating content: contributing/guide/how/translate.md - - Pull request review process: contributing/guide/next/pr-review.md - - Release process: contributing/guide/next/release.md - - AI Policy: contributing/guide/policies/ai-policy.md - - Code style guide: contributing/guide/style/code-style-guide.md - - Documentation style guide: contributing/guide/style/docs-style-guide.md - - Sprint guide: contributing/sprint-guide.md - - Challenge coins: contributing/challenge-coins.md - - News: - - news/index.md - - Sponsor: - - membership/index.md - -not_in_nav: | - /index.md - /titles.md - /project/README.md - -exclude_docs: - | # This is the only way to keep the build from parsing the team bio files. - !.* - /about/team/ - -validation: - omitted_files: warn - absolute_links: relative_to_docs - anchors: warn - unrecognized_links: warn - -extra: - project_name: beeware - formal_name: BeeWare - hide_dev_links: true - website: true - translated: true - min_python_version: "3.10" # The oldest supported Python version - min_python_version_tag: "310" # The tag version of the minimum python version - recent_python_version: "3.13" # The newest Python version known to work on all platforms - docs_python_version: "3.13" # The version of Python required to build the documentation - contribution_guide_root: contributing/guide/ - social: - - icon: fontawesome/brands/github - link: https://github.com/beeware - name: BeeWare on GitHub - - icon: fontawesome/brands/mastodon - link: https://fosstodon.org/@beeware - name: BeeWare on Mastodon - - icon: fontawesome/brands/discord - link: https://beeware.org/bee/chat/ - name: BeeWare on Discord - - icon: fontawesome/solid/square-rss - name: BeeWare blog RSS feed - link: https://beeware.org/news/buzz/atom.xml - generator: false - alternate: - - name: English - link: /en/ - lang: en - - name: العَرَبِيَّة - link: /ar/ - lang: ar - - name: Čeština - link: /cs/ - lang: cs - - name: Dansk - link: /da/ - lang: da - - name: Deutsch - link: /de/ - lang: de - - name: Español - link: /es/ - lang: es - - name: فارسی - link: /fa/ - lang: fa - - name: Français - link: /fr/ - lang: fr - - name: Italiano - link: /it/ - lang: it - - name: 日本語 - link: /ja/ - lang: ja - - name: 한국어 - link: /ko/ - lang: ko - - name: Polski - link: /pl/ - lang: pl - - name: Português - link: /pt/ - lang: pt - - name: Русский - link: /ru/ - lang: ru - - name: தமிழ் - link: /ta/ - lang: ta - - name: Türkçe - link: /tr/ - lang: tr - - name: Yкраїнська - link: /uk/ - lang: uk - - name: Tiếng Việt - link: /vi/ - lang: vi - - name: 中文(简体) - link: /zh_CN/ - lang: zh-Hant - - name: 中文(繁體) - link: /zh_TW/ - lang: zh-TW - -extra_css: - - stylesheets/beeware.css - -theme: - name: material - language: en - logo: assets/images/brutus-256.png - favicon: assets/images/brutus-256.png - features: - - content.tabs.link - - toc.follow - - navigation.tabs - - navigation.tabs.sticky - - navigation.indexes - - navigation.sections - - navigation.path - - navigation.expand - - search.suggest - - search.highlight - - search.share - custom_dir: overrides - palette: - # Palette toggle for automatic mode - - media: "(prefers-color-scheme)" - toggle: - icon: material/brightness-auto - name: Switch to light mode - - # Palette toggle for light mode - - media: "(prefers-color-scheme: light)" - scheme: default - toggle: - icon: material/brightness-7 - name: Switch to dark mode - - # Palette toggle for dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - toggle: - icon: material/brightness-4 - name: Switch to system preference - -markdown_extensions: - # PyMdown Extensions - pymdownx.highlight: {} - pymdownx.superfences: {} - pymdownx.blocks.caption: {} - pymdownx.blocks.admonition: - types: - - note - - abstract - - info - - tip - - success - - question - - warning - - failure - - danger - - bug - - example - - quote - pymdownx.blocks.details: - types: - - { name: details-note, class: note } - - { name: details-abstract, class: abstract } - - { name: details-info, class: info } - - { name: details-tip, class: tip } - - { name: details-success, class: success } - - { name: details-question, class: question } - - { name: details-warning, class: warning } - - { name: details-failure, class: failure } - - { name: details-danger, class: danger } - - { name: details-bug, class: bug } - - { name: details-example, class: example } - - { name: details-quote, class: quote } - pymdownx.blocks.tab: - alternate_style: true - pymdownx.snippets: - base_path: ["docs"] - url_download: true - check_paths: true - # Python Markdown extensions - toc: - permalink: true - title: On this page - attr_list: {} - md_in_html: {} - smarty: - smart_quotes: false - -plugins: - search: {} - blog: - blog_dir: news - post_url_date_format: yyyy - post_url_format: "{categories}/{date}/{slug}" - post_url_max_categories: 1 - categories_url_format: "{slug}" - categories_allowed: - - Buzz - - Events - - Resources - autorefs: - resolve_closest: true # autorefs warns of the Usage headings begin duplicates without this - we will have to assign unique ids to all of them otherwise - macros: - module_name: macros - include_yaml: - - team: en/news/.authors.yml - meta: {} - rss: - feed_title: "BeeWare: The Buzz" - feed_description: News and events for the BeeWare project. - match_path: "news/posts/.*" - use_git: false # Forces it to read the dates from the frontmatter. - date_from_meta: - as_creation: "date" - datetime_format: "%Y-%m-%d" - categories: - - categories - feeds_filenames: - rss_created: news/buzz/atom.xml - # image: images/brutus.png # Update to a Brutus URL - abstract_chars_count: -1 - redirects: - redirect_maps: - # Toga project references - "toga.md": "https://toga.beeware.org/" - "project/toga.md": "https://toga.beeware.org/" - "project/projects/libraries/toga.md": "https://toga.beeware.org/" - # Briefcase project references - "briefcase.md": "https://briefcase.beeware.org/" - "project/briefcase.md": "https://briefcase.beeware.org/" - "project/projects/tools/briefcase.md": "https://briefcase.beeware.org/" - # Rubicon-ObjC project references - "rubicon.md": "https://rubicon-objc.beeware.org/" - "project/utilities/rubicon.md": "https://rubicon-objc.beeware.org/" - "project/projects/bridges/rubicon.md": "https://rubicon-objc.beeware.org/" - # Podium project references - "project/applications/podium.md": "https://github.com/beeware/podium" - "project/projects/applications/podium.md": "https://github.com/beeware/podium" - # shortlinks - "bee/briefcase-bootstraps.md": "https://briefcase.beeware.org/en/latest/reference/commands/new.html#third-party-bootstraps" - "bee/chat.md": "https://discord.gg/AjYYm8cyQM" - "bee/coc.md": "community/code-of-conduct.md" - "bee/join.md": "membership/index.md" - "bee/podium.md": "https://github.com/beeware/podium" - "bee/ready.md": "https://github.com/orgs/beeware/projects/1/views/7" - "bee/review.md": "https://github.com/search?o=desc&q=org%3Abeeware+is%3Apr+is%3Aopen+draft%3Afalse+-author%3A%40me+archived%3Afalse&s=created&type=pullrequests" - "bee/review-guide.md": "https://beeware.org/contributing/guide/what/review-pr/" - "bee/signup.md": "about/contact.md" - "bee/sprint.md": "contributing/sprint-guide.md" - "bee/sprints.md": "contributing/sprint-guide.md" - # Short shortlinks - "b/ready.md": "https://github.com/orgs/beeware/projects/1/views/7" - "b/review.md": "https://github.com/search?o=desc&q=org%3Abeeware+is%3Apr+is%3Aopen+draft%3Afalse+-author%3A%40me+archived%3Afalse&s=created&type=pullrequests" - "b/review-guide.md": "https://beeware.org/contributing/guide/what/review-pr/" - "b/sprints.md": "contributing/sprint-guide.md" - "b/sprint.md": "contributing/sprint-guide.md" - # Historical links of significance - "community/behavior/code-of-conduct.md": "community/code-of-conduct.md" - "community/behavior.md": "community/code-of-conduct.md" - "community/members.md": "membership/index.md" - "contributing/membership.md": "membership/index.md" - # Tutorial shortlinks - "t/linux-deps.md": "https://gist.github.com/freakboy3742/2e3a524bf6f1cd4486bb9e7fa2a2d3fb" - "t/preparation.md": "https://gist.github.com/freakboy3742/8ad8a4a74f6933a71035c1795d944610" diff --git a/docs/en/about/team.md b/docs/en/about/team.md index 4fca70a412..b34872b1cf 100644 --- a/docs/en/about/team.md +++ b/docs/en/about/team.md @@ -4,8 +4,8 @@ So who are the people behind BeeWare? Well, there's a huge group of contributors ## Current team members -{{ generate_team_members(team, page, current=True) }} +{{ generate_team_members(team, current=True) }} ## Emeritus team members -{{ generate_team_members(team, page, current=False) }} +{{ generate_team_members(team, current=False) }} diff --git a/docs/en/index.md b/docs/en/index.md index bc1905c8f7..9fada20441 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -118,11 +118,11 @@ BeeWare is supported by users like you! Every little bit helps: [click here to c ### Latest news -{{ latest_news(files) }} +{{ latest_news() }} ### Upcoming events -{% set events = upcoming_events(files) %} +{% set events = upcoming_events() %} {% if events %} {{ events }} {% else %} diff --git a/docs/en/news/.authors.yml b/docs/en/news/.authors.yml index 6899d8a49d..3f0f3e6ca2 100644 --- a/docs/en/news/.authors.yml +++ b/docs/en/news/.authors.yml @@ -1,245 +1,146 @@ authors: freakboy3742: name: Russell Keith-Magee - short_name: Russell - pronoun: he description: Founding Apiarist avatar: about/images/freakboy3742.png url: about/team/#freakboy3742 - join_date: 2013-09-05 - mastodon: "@freakboy3742@cloudisland.nz" - email: russell@beeware.org kattni: name: Kattni - short_name: Kattni - pronoun: she description: Apiarist avatar: about/images/kattni.png url: about/team/#kattni - join_date: 2025-10-05 - mastodon: "@kattni@kattstodon.com" - email: kattni@beeware.org mhsmith: name: Malcolm Smith - short_name: Malcolm - pronoun: he description: Apiarist avatar: about/images/mhsmith.png url: about/team/#mhsmith - join_date: 2022-08-31 - email: smith@chaquo.com glasnt: name: Katie McLaughlin - short_name: Katie - pronoun: they description: Senior Apiarist avatar: about/images/glasnt.png url: about/team/#glasnt - join_date: 2016-04-02 - mastodon: "@glasnt@cloudisland.nz" - email: katie@beeware.org phildini: name: Philip James - short_name: Philip - pronoun: he description: Senior Apiarist avatar: about/images/phildini.png url: about/team/#phildini - join_date: 2016-06-03 - mastodon: "@phildini@wandering.shop" - email: philip@beeware.org hawkowl: name: Amber Brown - short_name: Amber - pronoun: she description: Team Member Emeritus avatar: about/images/hawkowl.png url: about/team/#hawkowl - join_date: 2016-10-13 - emeritus_date: 2025-12-15 - email: hawkowl@atleastfornow.net danyeaw: name: Dan Yeaw - short_name: Dan - pronoun: he description: Team Member Emeritus avatar: about/images/danyeaw.png url: about/team/#danyeaw - join_date: 2018-02-28 - emeritus_date: 2021-05-01 - mastodon: "@danyeaw@fosstodon.org" - email: dan@yeaw.me rmartin16: name: Russell Martin - short_name: Russell M - pronoun: he description: Apiarist avatar: about/images/rmartin16.png url: about/team/#rmartin16 - join_date: 2022-08-31 - email: rmartin16@gmail.com swenson: name: Christopher Swenson - short_name: Swenson - pronoun: they description: Team Member Emeritus avatar: about/images/swenson.png url: about/team/#swenson - join_date: 2016-09-07 - emeritus_date: 2021-05-01 - mastodon: "@chris_swenson@tweets.icu" - email: swenson@beeware.org halfwhitt: name: Charles Whittington - short_name: Charles - pronoun: they description: Apiarist avatar: about/images/halfwhitt.png url: about/team/#halfwhitt - join_date: 2024-03-24 - email: charleswhitt@gmail.com corranwebster: name: Corran Webster - short_name: Corran - pronoun: he description: Apiarist avatar: about/images/corranwebster.png url: about/team/#corranwebster - join_date: 2026-02-23 - email: cwebster@unital.dev Oliver-Leigh: name: Oliver Leigh - short_name: Oliver - pronoun: he description: Apiarist avatar: about/images/Oliver-Leigh.png url: about/team/#Oliver-Leigh - join_date: 2026-07-27 cflee: name: Chiang Fong Lee - short_name: Chiang Fong - pronoun: he description: Team Member Emeritus avatar: about/images/cflee.png url: about/team/#cflee - join_date: 2017-03-11 - emeritus_date: 2020-06-01 - mastodon: "@cflee@hachyderm.io" - email: myself@cflee.net eliasdorneles: name: Elias Dorneles - short_name: Elias - pronoun: he description: Team Member Emeritus avatar: about/images/elias.png url: about/team/#eliasdorneles - join_date: 2017-03-01 - emeritus_date: 2020-06-03 - email: eliasdorneles@gmail.com obulat: name: Olga Bulat - short_name: Olga - pronoun: she description: Team Member Emeritus avatar: about/images/obulat.png url: about/team/#obulat - email: obulat@gmail.com - join_date: 2018-03-05 - emeritus_date: 2025-12-05 samschott: name: Sam Schott - short_name: Sam - pronoun: he description: Team Member Emeritus avatar: about/images/samschott.png url: about/team/#samschott - email: sam.schott@outlook.com - join_date: 2021-07-29 - emeritus_date: 2025-12-12 flowerncsu: name: Charlotte Mays - short_name: Charlotte - pronoun: she description: Team Member Emeritus avatar: about/images/flowerncsu.png url: about/team/#flowerncsu - mastodon: "@charlotte@hachyderm.io" - email: charlotte@charlottemays.me - join_date: 2017-08-17 - emeritus_date: 2025-12-15 saroad2: name: Sagi Shadur - short_name: Sagi - pronoun: he description: Team Member Emeritus avatar: about/images/saroad2.png url: about/team/#saroad2 - email: saroad2@gmail.com - join_date: 2020-05-31 - emeritus_date: 2025-12-15 BPYap: name: Yap Boon Peng - short_name: Boon Peng description: 2018 Google Summer of Code Student avatar: https://avatars.githubusercontent.com/u/32807097 url: https://github.com/BPYap abonie: name: Adam Boniecki - short_name: Adam description: 2017 Google Summer of Code Student avatar: https://avatars.githubusercontent.com/u/20281641 url: https://github.com/abonie Dayof: name: Dayanne Fernandes - short_name: Dayanne description: 2017 Google Summer of Code Student avatar: https://avatars.githubusercontent.com/u/8198348 url: https://github.com/Dayof ocupe: name: Jonas Schell - short_name: Jonas description: 2017 Google Summer of Code Student avatar: https://avatars.githubusercontent.com/u/11357413 url: https://github.com/ocupe kavi2du: name: Kavidu Abeykoon Mudiyanselagedara - short_name: Kavidu description: Curtin Capstone Team avatar: https://avatars.githubusercontent.com/u/132393780 url: https://github.com/kavi2du Stringer90: name: Callum Horton - short_name: Callum description: Curtin Capstone Team avatar: https://avatars.githubusercontent.com/u/109891554 url: https://github.com/Stringer90 cadynn: name: Caydn Lee - short_name: Cadyn description: Curtin Capstone Team avatar: https://avatars.githubusercontent.com/u/104604345 url: https://github.com/caydnn JMah007: name: Jaeden Mah - short_name: Jaeden description: Curtin Capstone Team avatar: https://avatars.githubusercontent.com/u/107184317 url: https://github.com/JMah007 mEp3ii2: name: Mitchell Pontague - short_name: Mitchell description: Curtin Capstone Team avatar: https://avatars.githubusercontent.com/u/74845700 url: https://github.com/mEp3ii2 vt37: name: Veronica Taniputra - short_name: Veronica description: Curtin Capstone Team avatar: https://avatars.githubusercontent.com/u/110211722 url: https://github.com/vt37 patiences: name: Patience Shyu - short_name: Patience description: 2018 Google Summer of Code Student avatar: https://avatars.githubusercontent.com/u/14033272 url: https://github.com/patiences diff --git a/docs/en/news/.team.yml b/docs/en/news/.team.yml new file mode 100644 index 0000000000..ce79051232 --- /dev/null +++ b/docs/en/news/.team.yml @@ -0,0 +1,134 @@ +# Team details for blog authors, keyed by GitHub ID. +# +# The blog (in `.authors.yml`) only accepts `name`, `description`, `avatar`, +# and `url` for each author. Any other details about an author, used to +# generate the team page and event posts, live here. `docs/macros.py` +# merges the two files. +freakboy3742: + short_name: Russell + pronoun: he + join_date: 2013-09-05 + mastodon: "@freakboy3742@cloudisland.nz" + email: russell@beeware.org +kattni: + short_name: Kattni + pronoun: she + join_date: 2025-10-05 + mastodon: "@kattni@kattstodon.com" + email: kattni@beeware.org +mhsmith: + short_name: Malcolm + pronoun: he + join_date: 2022-08-31 + email: smith@chaquo.com +glasnt: + short_name: Katie + pronoun: they + join_date: 2016-04-02 + mastodon: "@glasnt@cloudisland.nz" + email: katie@beeware.org +phildini: + short_name: Philip + pronoun: he + join_date: 2016-06-03 + mastodon: "@phildini@wandering.shop" + email: philip@beeware.org +hawkowl: + short_name: Amber + pronoun: she + join_date: 2016-10-13 + emeritus_date: 2025-12-15 + email: hawkowl@atleastfornow.net +danyeaw: + short_name: Dan + pronoun: he + join_date: 2018-02-28 + emeritus_date: 2021-05-01 + mastodon: "@danyeaw@fosstodon.org" + email: dan@yeaw.me +rmartin16: + short_name: Russell M + pronoun: he + join_date: 2022-08-31 + email: rmartin16@gmail.com +swenson: + short_name: Swenson + pronoun: they + join_date: 2016-09-07 + emeritus_date: 2021-05-01 + mastodon: "@chris_swenson@tweets.icu" + email: swenson@beeware.org +halfwhitt: + short_name: Charles + pronoun: they + join_date: 2024-03-24 + email: charleswhitt@gmail.com +corranwebster: + short_name: Corran + pronoun: he + join_date: 2026-02-23 + email: cwebster@unital.dev +Oliver-Leigh: + short_name: Oliver + pronoun: he + join_date: 2026-07-27 +cflee: + short_name: Chiang Fong + pronoun: he + join_date: 2017-03-11 + emeritus_date: 2020-06-01 + mastodon: "@cflee@hachyderm.io" + email: myself@cflee.net +eliasdorneles: + short_name: Elias + pronoun: he + join_date: 2017-03-01 + emeritus_date: 2020-06-03 + email: eliasdorneles@gmail.com +obulat: + short_name: Olga + pronoun: she + email: obulat@gmail.com + join_date: 2018-03-05 + emeritus_date: 2025-12-05 +samschott: + short_name: Sam + pronoun: he + email: sam.schott@outlook.com + join_date: 2021-07-29 + emeritus_date: 2025-12-12 +flowerncsu: + short_name: Charlotte + pronoun: she + mastodon: "@charlotte@hachyderm.io" + email: charlotte@charlottemays.me + join_date: 2017-08-17 + emeritus_date: 2025-12-15 +saroad2: + short_name: Sagi + pronoun: he + email: saroad2@gmail.com + join_date: 2020-05-31 + emeritus_date: 2025-12-15 +BPYap: + short_name: Boon Peng +abonie: + short_name: Adam +Dayof: + short_name: Dayanne +ocupe: + short_name: Jonas +kavi2du: + short_name: Kavidu +Stringer90: + short_name: Callum +cadynn: + short_name: Cadyn +JMah007: + short_name: Jaeden +mEp3ii2: + short_name: Mitchell +vt37: + short_name: Veronica +patiences: + short_name: Patience diff --git a/docs/en/news/posts/2020/buzz/release-the-android-bees.md b/docs/en/news/posts/2020/buzz/release-the-android-bees.md index a8620c8ce1..646fe9d99a 100644 --- a/docs/en/news/posts/2020/buzz/release-the-android-bees.md +++ b/docs/en/news/posts/2020/buzz/release-the-android-bees.md @@ -21,4 +21,4 @@ There's still plenty of work to be done, though. There are still a lot of widget All of those are significant projects in themselves, and will require effort comparable to that required to add Android as a supported platform. And so, we're looking for the financial support to make that happen. We're applying for new grants as opportunities arise, but the most helpful source of funds are the ongoing funds that come from memberships. Ongoing funding means we can focus on improving BeeWare, rather than chasing grants. It means being able to hire *permanent* staff, rather than offering short term contracts. And it means being able to make long term plans and promises to the community. -If this project proves anything, it's that money makes things happen. If you're excited by the prospects of Python on mobile platforms, please consider [joining the BeeWare Project as a financial member][we-need-your-help]. Or, if you've got experience with commercialization of Open Source projects, or any other ideas for how we could [please get in touch](mailto:contact@beeware.org). +If this project proves anything, it's that money makes things happen. If you're excited by the prospects of Python on mobile platforms, please consider [joining the BeeWare Project as a financial member](/membership/index.md#we-need-your-help). Or, if you've got experience with commercialization of Open Source projects, or any other ideas for how we could [please get in touch](mailto:contact@beeware.org). diff --git a/docs/en/news/posts/2024/events/pycon-us-2023.md b/docs/en/news/posts/2024/events/pycon-us-2023.md deleted file mode 100644 index 9618f157a1..0000000000 --- a/docs/en/news/posts/2024/events/pycon-us-2023.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: We'll be at PyCon US 2023! -date: 2023-04-21 -authors: -- freakboy3742 -- mhsmith -categories: -- Events -event: - name: PyCon US 2023 - url: https://us.pycon.org/2024/ - date: 2023-04-21 - end_date: 2023-04-24 - description: '' -involvement: -- type: talk - team_members: - - freakboy3742 - title: 'You *can* take it with you: Packaging your Python code with Briefcase' - url: https://us.pycon.org/2024/ - date: 2023-04-21 - end_date: 2023-04-21 - description: |- - Once you're written your amazing new application using Python, the next - problem you'll face is how to get that application into the hands of - users. If your users are familiar with `pip` and and `venv`, you can put pip - install instructions into a README, and leave it at that. But what if - your audience aren't Python programmers? What if your app needs to be - used by people who don't write Python at all? How do you distribute your - code so that others can use it? - - In this talk, you'll learn about Briefcase, a tool that can convert a - Python project into platform-native apps on macOS, Windows, Linux - and - can also target iOS, Android, and the web. You'll learn how to use - Briefcase to start a new project, or convert an existing project for - distribution. You'll learn about the features of Briefcase that can - support you while you develop your application. Finally, you'l learn how - to generate installers and standalone applications for multiple - platforms from a single Python codebase. -- type: booth - team_members: - - freakboy3742 - - mhsmith - url: https://us.pycon.org/2024/ - date: 2023-04-21 - end_date: 2023-04-21 -- type: talk - team_members: - - mhsmith - title: Python on Android - url: https://us.pycon.org/2024/ - date: 2023-04-23 - end_date: 2023-04-23 - description: |- - By many measures, Android is the most widely-used operating system in - the world. But Python development on the platform remains quite rare. - - Fortunately there are several active projects working to improve this. - In this talk, you'll learn about: - - - Why Android support is important for the future of Python. - - How Android compares to other platforms, and the unique challenges it - presents. - - What's needed to make mobile Python development practical, including - build tools, GUI libraries, and binary package support. - - The available options for running Python on Android, and how to choose - which one is best for you. -- type: sprint - team_members: - - freakboy3742 - - mhsmith - url: https://us.pycon.org/2023 - date: 2023-04-24 - end_date: 2023-04-24 ---- - -{{ generate_event_post(authors, event, involvement, team) }} diff --git a/docs/en/news/posts/2026/buzz/february-2026-status-update.md b/docs/en/news/posts/2026/buzz/february-2026-status-update.md index 3d52202327..dbdf97bee8 100644 --- a/docs/en/news/posts/2026/buzz/february-2026-status-update.md +++ b/docs/en/news/posts/2026/buzz/february-2026-status-update.md @@ -13,8 +13,8 @@ February has seen a collection of improvements across the BeeWare ecosystem - in ## What we've done -- We've launched a new version of our [website](https://beeware.org)! This primarily an infrastructure change - we've moved off Lektor, and onto a MkDocs-based site, matching the tooling that we're now using for the rest of BeeWare's documentation. This gives us much faster builds, better translation tooling, search... and dark mode! A huge shout out to [Kattni][kattni] for all her work getting this done. -- We welcomed a new member of the BeeWare core team - [Corran Webster][corranwebster]. Over the last few months, Corran has taken Toga’s Qt backend from a bare stub to a widget-complete implementation. He’s also done some major internal design work around Toga's Table and Tree implementations, and added the long-requested ability to add bitmap images to a Canvas. That's a lot of work for a couple of months - we're excited to see what comes next! +- We've launched a new version of our [website](https://beeware.org)! This primarily an infrastructure change - we've moved off Lektor, and onto a MkDocs-based site, matching the tooling that we're now using for the rest of BeeWare's documentation. This gives us much faster builds, better translation tooling, search... and dark mode! A huge shout out to [Kattni](/about/team.md#kattni) for all her work getting this done. +- We welcomed a new member of the BeeWare core team - [Corran Webster](/about/team.md#corranwebster). Over the last few months, Corran has taken Toga’s Qt backend from a bare stub to a widget-complete implementation. He’s also done some major internal design work around Toga's Table and Tree implementations, and added the long-requested ability to add bitmap images to a Canvas. That's a lot of work for a couple of months - we're excited to see what comes next! - We published new [support packages for iOS and macOS](https://github.com/beeware/Python-Apple-support/releases), backporting some recent changes in CPython to our patches for Python 3.10-3.12. - We made significant progress on adding [FastAPI and PyScript backends for Positron](https://github.com/beeware/toga/pull/4156). The PyScript part of this backend has revealed some issues with the feature set of Android and iOS `WebView` widgets; we're working with the PyScript team to find a workaround for these problems. - We [fixed several issues with the testbed application that is used to test Python on Android](https://github.com/python/cpython/pull/142912). diff --git a/docs/en/stylesheets/beeware.css b/docs/en/stylesheets/beeware.css index fed57efaec..e930db9cc8 100644 --- a/docs/en/stylesheets/beeware.css +++ b/docs/en/stylesheets/beeware.css @@ -397,6 +397,20 @@ h2#sidebar { display: none; } +/* The emoji extension wraps each Font Awesome icon in a `twemoji` span, which + the theme sizes at 1.125em. Keep icons the size of the surrounding text. */ +.md-typeset .fa-icon .twemoji { + display: inline; + height: auto; + vertical-align: baseline; +} + +.md-typeset .fa-icon .twemoji svg { + width: 1em; + height: 1em; + max-height: none; +} + /* Documentation page CSS */ /* Workaround for not having H1 on page */ h1.documentation { diff --git a/docs/macros.py b/docs/macros.py index f73054978e..7c86a1f20a 100644 --- a/docs/macros.py +++ b/docs/macros.py @@ -1,22 +1,33 @@ import datetime -from functools import cache from pathlib import Path from textwrap import dedent -import material import yaml -# The Font Awesome icon set bundled with mkdocs-material -# This avoids the need for the Font Awesome kit/CDN). -FONTAWESOME_ICONS_DIR = ( - Path(material.__file__).parent / "templates" / ".icons" / "fontawesome" -) +def as_date(value): + """Return a date, whether YAML parsed the value as a date or a string.""" + if isinstance(value, datetime.date): + return value + return datetime.date.fromisoformat(str(value)) -@cache -def _fontawesome_svg(style, name): - """Load (and cache) the raw SVG markup for a bundled Font Awesome icon.""" - return (FONTAWESOME_ICONS_DIR / style / f"{name}.svg").read_text() + +def merge_team_details(team, team_details): + """Merge the blog author details with the team details for each author. + + The blog only accepts a limited set of fields for each author, so the + remaining team details are stored separately, keyed by the same GitHub ID. + """ + return { + "authors": { + github_id: {**author_details, **team_details.get(github_id, {})} + for github_id, author_details in team["authors"].items() + } + } + + +def get_metadata(contents): + return next(yaml.load_all(contents, Loader=yaml.SafeLoader)) def attendees(authors, team): @@ -53,12 +64,25 @@ def talk_title_punctuation(talk_title): def define_env(env): + # The docs directory being built; for translations, this is the directory + # containing the translated content. + docs_dir = Path(env.project_dir) / env.conf["docs_dir"] + + def full_team(team): + """Merge the team details into the blog author details.""" + team_details = yaml.load( + (docs_dir / "news/.team.yml").read_text(encoding="utf-8"), + Loader=yaml.SafeLoader, + ) + return merge_team_details(team, team_details) + @env.macro def fa(style, name): - """Generates an inline Font Awesome icon, using the SVG bundled with - mkdocs-material, rather than depending on the Font Awesome kit/CDN. + """Generates an inline Font Awesome icon, using the icon shortcodes + provided by the emoji extension, rather than depending on the Font + Awesome kit/CDN. """ - return f'{_fontawesome_svg(style, name)}' + return f':fontawesome-{style}-{name}:' @env.macro def generate_resource_post(resource): @@ -115,13 +139,16 @@ def generate_resource_post(resource): @env.macro def generate_event_post(authors, event, involvement, team): """Generate an event post from event template.""" + team = full_team(team) content = [] - if event.date == event.end_date: - event_timeframe = f"on {event.date.strftime('%B %d, %Y')}" - elif event.date != event.end_date: + start_date = as_date(event["date"]) + end_date = as_date(event["end_date"]) + if start_date == end_date: + event_timeframe = f"on {start_date.strftime('%B %d, %Y')}" + else: event_timeframe = ( - f"from {event.date.strftime('%B %d')} " - f"- {event.end_date.strftime('%B %d, %Y')}" + f"from {start_date.strftime('%B %d')} " + f"- {end_date.strftime('%B %d, %Y')}" ) highlight_authors = set() @@ -131,14 +158,14 @@ def generate_event_post(authors, event, involvement, team): highlight_authors.update(set(inv["team_members"])) content.append( dedent(f"""\ - {attendees(inv["team_members"], team)} will be organizing [{event.name}]({event.url}), which will happen {event_timeframe}!\n\n + {attendees(inv["team_members"], team)} will be organizing [{event["name"]}]({event["url"]}), which will happen {event_timeframe}!\n\n """) # noqa: E501 ) elif inv["type"] == "keynote": highlight_authors.update(set(inv["team_members"])) content.append( dedent(f""" - {attendees(inv["team_members"], team)} will be keynoting {event.name}, giving a presentation entitled [{talk_title_punctuation(inv["title"])}]({inv["url"]}) + {attendees(inv["team_members"], team)} will be keynoting {event["name"]}, giving a presentation entitled [{talk_title_punctuation(inv["title"])}]({inv["url"]}) \n\n """) # noqa: E501 @@ -163,13 +190,13 @@ def generate_event_post(authors, event, involvement, team): else: content.append( dedent(f"""\ - {attendees(authors, team)} will be attending [{event.name}]({event.url}) {event_timeframe}! + {attendees(authors, team)} will be attending [{event["name"]}]({event["url"]}) {event_timeframe}! \n\n """) # noqa: E501 ) - content.append(f"{event.description}\n\n") + content.append(f"{event['description']}\n\n") _, first_pronoun, second_pronoun = pronouns( team["authors"][authors[-1]]["pronoun"] @@ -252,8 +279,11 @@ def generate_event_post(authors, event, involvement, team): return "".join(content) @env.macro - def generate_team_members(team, page, current): - """Generate the team page from the .authors.yml file metadata.""" + def generate_team_members(team, current): + """Generate the team page from the .authors.yml and .team.yml file + metadata. + """ + team = full_team(team) team_member_content = [] for github_id, member_details in team["authors"].items(): @@ -298,9 +328,9 @@ def generate_team_members(team, page, current): """ # noqa: E501 ) - member_bio = ( - Path(page.file.src_dir) / f"about/team/{github_id}.md" - ).read_text() + member_bio = (docs_dir / f"about/team/{github_id}.md").read_text( + encoding="utf-8" + ) team_member = ( member_title @@ -322,47 +352,51 @@ def generate_team_members(team, page, current): return "".join(tmc[1] for tmc in sorted(team_member_content)) - def get_metadata(contents): - return next(yaml.load_all(contents, Loader=yaml.SafeLoader)) + def posts(*paths): + """Yield the docs-relative path and metadata of every post in the given + docs-relative directories. + """ + for path in paths: + for post in sorted((docs_dir / path).glob("*.md")): + yield ( + post.relative_to(docs_dir).as_posix(), + get_metadata(post.read_text(encoding="utf-8")), + ) @env.macro - def upcoming_events(files): + def upcoming_events(): """Generate upcoming events list for beeware.org homepage sidebar.""" this_year = datetime.datetime.now().year next_year = this_year + 1 events = [] - for filename, file_data in files.src_uris.items(): - if filename.startswith( - tuple(f"news/posts/{year}/events/" for year in [this_year, next_year]) - ): - metadata = get_metadata(file_data.content_string) - - if metadata["event"]["date"] > datetime.date.today(): - if metadata["event"]["date"] == metadata["event"]["end_date"]: - event_date = metadata["event"]["date"].strftime("%B %d, %Y") - else: - event_date = ( - f"{metadata['event']['date'].strftime('%B %d')}" - f"-{metadata['event']['end_date'].strftime('%d, %Y')}" - ) + for src_path, metadata in posts( + *(f"news/posts/{year}/events" for year in [this_year, next_year]) + ): + start_date = as_date(metadata["event"]["date"]) + end_date = as_date(metadata["event"]["end_date"]) + + if start_date > datetime.date.today(): + if start_date == end_date: + event_date = start_date.strftime("%B %d, %Y") + else: + event_date = ( + f"{start_date.strftime('%B %d')}-{end_date.strftime('%d, %Y')}" + ) - events.append( - ( - metadata["event"]["date"], - ( - f"- [{metadata['event']['name']}" - f": {event_date}]({file_data.src_path})" - ), - ) + events.append( + ( + start_date, + f"- [{metadata['event']['name']}: {event_date}]({src_path})", ) + ) if events: return "\n".join(item[1] for item in sorted(events)[:5]) return None @env.macro - def latest_news(files): + def latest_news(): """Generate "Latest news" latest blog post link for beeware.org homepage sidebar. """ @@ -371,16 +405,12 @@ def latest_news(files): latest_post = None - for filename, file_data in files.src_uris.items(): - if filename.startswith( - tuple(f"news/posts/{year}/buzz/" for year in [last_year, this_year]) - ): - metadata = get_metadata(file_data.content_string) - - if latest_post is None or latest_post[0]["date"] < metadata["date"]: - latest_post = (metadata, file_data) + for src_path, metadata in posts( + *(f"news/posts/{year}/buzz" for year in [last_year, this_year]) + ): + post_date = as_date(metadata["date"]) + if latest_post is None or latest_post[0] < post_date: + latest_post = (post_date, metadata["title"], src_path) - return ( - f"{latest_post[0]['date'].strftime('%B %d')}" - f": [{latest_post[0]['title']}]({latest_post[1].src_path})" - ) + post_date, title, src_path = latest_post + return f"{post_date.strftime('%B %d')}: [{title}]({src_path})" diff --git a/docs/mkdocs.ar.yml b/docs/mkdocs.ar.yml deleted file mode 100644 index e45f2be7f7..0000000000 --- a/docs/mkdocs.ar.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: ar - -theme: - language: ar - -extra: - translation_type: machine diff --git a/docs/mkdocs.cs.yml b/docs/mkdocs.cs.yml deleted file mode 100644 index a76bc2bf11..0000000000 --- a/docs/mkdocs.cs.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: cs - -theme: - language: cs - -extra: - translation_type: machine diff --git a/docs/mkdocs.da.yml b/docs/mkdocs.da.yml deleted file mode 100644 index c280df9f1b..0000000000 --- a/docs/mkdocs.da.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: da - -theme: - language: da - -extra: - translation_type: machine diff --git a/docs/mkdocs.de.yml b/docs/mkdocs.de.yml deleted file mode 100644 index 56fb6bbaa0..0000000000 --- a/docs/mkdocs.de.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: de - -theme: - language: de - -extra: - translation_type: machine diff --git a/docs/mkdocs.en.yml b/docs/mkdocs.en.yml deleted file mode 100644 index 82db60930d..0000000000 --- a/docs/mkdocs.en.yml +++ /dev/null @@ -1,7 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: en - -extra: - translation_type: original diff --git a/docs/mkdocs.es.yml b/docs/mkdocs.es.yml deleted file mode 100644 index 617b87b33c..0000000000 --- a/docs/mkdocs.es.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: es - -theme: - language: es - -extra: - translation_type: machine diff --git a/docs/mkdocs.fa.yml b/docs/mkdocs.fa.yml deleted file mode 100644 index 46bd2c1d7c..0000000000 --- a/docs/mkdocs.fa.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: fa - -theme: - language: fa - -extra: - translation_type: machine diff --git a/docs/mkdocs.fr.yml b/docs/mkdocs.fr.yml deleted file mode 100644 index c4de093c0d..0000000000 --- a/docs/mkdocs.fr.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: fr - -theme: - language: fr - -extra: - translation_type: original diff --git a/docs/mkdocs.it.yml b/docs/mkdocs.it.yml deleted file mode 100644 index b3edca6f2e..0000000000 --- a/docs/mkdocs.it.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: it - -theme: - language: it - -extra: - translation_type: machine diff --git a/docs/mkdocs.ja.yml b/docs/mkdocs.ja.yml deleted file mode 100644 index 3ba89e8f55..0000000000 --- a/docs/mkdocs.ja.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: ja - -theme: - language: ja - -extra: - translation_type: machine diff --git a/docs/mkdocs.ko.yml b/docs/mkdocs.ko.yml deleted file mode 100644 index 42f1c46932..0000000000 --- a/docs/mkdocs.ko.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: ko - -theme: - language: ko - -extra: - translation_type: machine diff --git a/docs/mkdocs.pl.yml b/docs/mkdocs.pl.yml deleted file mode 100644 index f17520e69f..0000000000 --- a/docs/mkdocs.pl.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: pl - -theme: - language: pl - -extra: - translation_type: machine diff --git a/docs/mkdocs.pt.yml b/docs/mkdocs.pt.yml deleted file mode 100644 index b03ecf48bd..0000000000 --- a/docs/mkdocs.pt.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: pt - -theme: - language: pt - -extra: - translation_type: machine diff --git a/docs/mkdocs.ru.yml b/docs/mkdocs.ru.yml deleted file mode 100644 index 88039346d3..0000000000 --- a/docs/mkdocs.ru.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: ru - -theme: - language: ru - -extra: - translation_type: machine diff --git a/docs/mkdocs.ta.yml b/docs/mkdocs.ta.yml deleted file mode 100644 index 71d1f5e0b1..0000000000 --- a/docs/mkdocs.ta.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: ta - -theme: - language: ta - -extra: - translation_type: machine diff --git a/docs/mkdocs.tr.yml b/docs/mkdocs.tr.yml deleted file mode 100644 index d2c3772c39..0000000000 --- a/docs/mkdocs.tr.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: tr - -theme: - language: tr - -extra: - translation_type: machine diff --git a/docs/mkdocs.uk.yml b/docs/mkdocs.uk.yml deleted file mode 100644 index f6b404d267..0000000000 --- a/docs/mkdocs.uk.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: uk - -theme: - language: uk - -extra: - translation_type: machine diff --git a/docs/mkdocs.vi.yml b/docs/mkdocs.vi.yml deleted file mode 100644 index af224510b4..0000000000 --- a/docs/mkdocs.vi.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: vi - -theme: - language: vi - -extra: - translation_type: machine diff --git a/docs/mkdocs.zh_CN.yml b/docs/mkdocs.zh_CN.yml deleted file mode 100644 index 88ae0e5c90..0000000000 --- a/docs/mkdocs.zh_CN.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: zh_CN - -theme: - language: zh - -extra: - translation_type: machine diff --git a/docs/mkdocs.zh_TW.yml b/docs/mkdocs.zh_TW.yml deleted file mode 100644 index 45035713e1..0000000000 --- a/docs/mkdocs.zh_TW.yml +++ /dev/null @@ -1,10 +0,0 @@ -INHERIT: config.yml -site_name: BeeWare -site_url: https://beeware.org/ -docs_dir: zh_TW - -theme: - language: zh-TW - -extra: - translation_type: machine diff --git a/docs/spelling_wordlist b/docs/spelling_wordlist index a08b6b2503..51cbad4f7a 100644 --- a/docs/spelling_wordlist +++ b/docs/spelling_wordlist @@ -337,6 +337,7 @@ Xcode Xcode's Xero xgboost +Zensical abonie akaptur diff --git a/docs/zensical.ar.toml b/docs/zensical.ar.toml new file mode 100644 index 0000000000..f8bb98c2cd --- /dev/null +++ b/docs/zensical.ar.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "ar" + +[project.theme] +language = "ar" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.cs.toml b/docs/zensical.cs.toml new file mode 100644 index 0000000000..2b1668c428 --- /dev/null +++ b/docs/zensical.cs.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "cs" + +[project.theme] +language = "cs" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.da.toml b/docs/zensical.da.toml new file mode 100644 index 0000000000..56c85c30cf --- /dev/null +++ b/docs/zensical.da.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "da" + +[project.theme] +language = "da" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.de.toml b/docs/zensical.de.toml new file mode 100644 index 0000000000..8679a08362 --- /dev/null +++ b/docs/zensical.de.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "de" + +[project.theme] +language = "de" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.en.toml b/docs/zensical.en.toml new file mode 100644 index 0000000000..6d967459d1 --- /dev/null +++ b/docs/zensical.en.toml @@ -0,0 +1,6 @@ +[project] +site_name = "BeeWare" +docs_dir = "en" + +[project.extra] +translation_type = "original" diff --git a/docs/zensical.es.toml b/docs/zensical.es.toml new file mode 100644 index 0000000000..353548439e --- /dev/null +++ b/docs/zensical.es.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "es" + +[project.theme] +language = "es" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.fa.toml b/docs/zensical.fa.toml new file mode 100644 index 0000000000..65b492b920 --- /dev/null +++ b/docs/zensical.fa.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "fa" + +[project.theme] +language = "fa" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.fr.toml b/docs/zensical.fr.toml new file mode 100644 index 0000000000..cd21eb5bd9 --- /dev/null +++ b/docs/zensical.fr.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "fr" + +[project.theme] +language = "fr" + +[project.extra] +translation_type = "original" diff --git a/docs/zensical.it.toml b/docs/zensical.it.toml new file mode 100644 index 0000000000..ae3264b3ff --- /dev/null +++ b/docs/zensical.it.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "it" + +[project.theme] +language = "it" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.ja.toml b/docs/zensical.ja.toml new file mode 100644 index 0000000000..57c4b2e312 --- /dev/null +++ b/docs/zensical.ja.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "ja" + +[project.theme] +language = "ja" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.ko.toml b/docs/zensical.ko.toml new file mode 100644 index 0000000000..9dca818e73 --- /dev/null +++ b/docs/zensical.ko.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "ko" + +[project.theme] +language = "ko" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.pl.toml b/docs/zensical.pl.toml new file mode 100644 index 0000000000..f6aeebdc6c --- /dev/null +++ b/docs/zensical.pl.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "pl" + +[project.theme] +language = "pl" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.pt.toml b/docs/zensical.pt.toml new file mode 100644 index 0000000000..b658dda4bf --- /dev/null +++ b/docs/zensical.pt.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "pt" + +[project.theme] +language = "pt" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.ru.toml b/docs/zensical.ru.toml new file mode 100644 index 0000000000..4e9ecd0fb1 --- /dev/null +++ b/docs/zensical.ru.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "ru" + +[project.theme] +language = "ru" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.ta.toml b/docs/zensical.ta.toml new file mode 100644 index 0000000000..3816d4b3cd --- /dev/null +++ b/docs/zensical.ta.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "ta" + +[project.theme] +language = "ta" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.toml b/docs/zensical.toml new file mode 100644 index 0000000000..2b02d30168 --- /dev/null +++ b/docs/zensical.toml @@ -0,0 +1,288 @@ +[project] +copyright = "© Russell Keith-Magee" +nav = [ + { "About" = [ + "about/index.md", + { "What is BeeWare?" = "about/overview.md" }, + { "The Bee Team" = "about/team.md" }, + { "History and Philosophy" = "about/history.md" }, + { "Success stories" = "about/success.md" }, + { "Contact" = "about/contact.md" }, + { "Branding guidelines" = "about/branding.md" }, + ] }, + { "Documentation" = [ + "docs/index.md", + ] }, + { "Community" = [ + "community/index.md", + { "BeeWare Community Code of Conduct" = "community/code-of-conduct.md" }, + { "Governance" = "community/governance.md" }, + { "Available for Hire" = "community/for-hire.md" }, + ] }, + { "Contributing" = [ + "contributing/index.md", + { "First-time contributors" = "contributing/first-time-contributors.md" }, + { "Contribution guide" = [ + "contributing/guide/index.md", + { "Fix an issue" = "contributing/guide/what/fix-issue.md" }, + { "Implement a new feature" = "contributing/guide/what/implement-feature.md" }, + { "Write documentation" = "contributing/guide/what/write-docs.md" }, + { "Triage an issue" = "contributing/guide/what/triage.md" }, + { "Review a pull request" = "contributing/guide/what/review-pr.md" }, + { "Propose a new feature" = "contributing/guide/what/propose-feature.md" }, + { "Translate content" = "contributing/guide/what/translate.md" }, + { "Use the tools" = "contributing/guide/what/use-tools.md" }, + { "Setting up a development environment" = "contributing/guide/how/dev-environment.md" }, + { "Reproducing an issue" = "contributing/guide/how/reproduce-issue.md" }, + { "Working from a branch" = "contributing/guide/how/branches.md" }, + { "Avoiding scope creep" = "contributing/guide/how/scope-creep.md" }, + { "Writing, running, and testing code" = "contributing/guide/how/write-code.md" }, + { "Building documentation" = "contributing/guide/how/build-docs.md" }, + { "Writing documentation" = "contributing/guide/how/write-docs.md" }, + { "Adding a change note" = "contributing/guide/how/change-note.md" }, + { "Submitting a pull request" = "contributing/guide/how/submit-pr.md" }, + { "Providing a review" = "contributing/guide/how/review-pr.md" }, + { "Submitting a new issue" = "contributing/guide/how/new-issue.md" }, + { "Proposing a new feature" = "contributing/guide/how/propose-feature.md" }, + { "Translating content" = "contributing/guide/how/translate.md" }, + { "Pull request review process" = "contributing/guide/next/pr-review.md" }, + { "Release process" = "contributing/guide/next/release.md" }, + { "AI Policy" = "contributing/guide/policies/ai-policy.md" }, + { "Code style guide" = "contributing/guide/style/code-style-guide.md" }, + { "Documentation style guide" = "contributing/guide/style/docs-style-guide.md" }, + ] }, + { "Sprint guide" = "contributing/sprint-guide.md" }, + { "Challenge coins" = "contributing/challenge-coins.md" }, + ] }, + { "News" = [ + "news/index.md", + ] }, + { "Sponsor" = [ + "membership/index.md", + ] }, +] +not_in_nav = """ +/index.md +/titles.md +/project/README.md +""" +# This is the only way to keep the build from parsing the team bio files. +exclude_docs = """ +!.* +/about/team/ +""" +extra_css = ["stylesheets/beeware.css"] +site_url = "https://beeware.org/" + +[project.validation] +omitted_files = "warn" +absolute_links = "relative_to_docs" +anchors = "warn" +unrecognized_links = "warn" + +[project.extra] +project_name = "beeware" +formal_name = "BeeWare" +hide_dev_links = true +website = true +translated = true +min_python_version = "3.10" # The oldest supported Python version +min_python_version_tag = "310" # The tag version of the minimum python version +recent_python_version = "3.13" # The newest Python version known to work on all platforms +docs_python_version = "3.13" # The version of Python required to build the documentation +contribution_guide_root = "contributing/guide/" +social = [ + { icon = "fontawesome/brands/github", link = "https://github.com/beeware", name = "BeeWare on GitHub" }, + { icon = "fontawesome/brands/mastodon", link = "https://fosstodon.org/@beeware", name = "BeeWare on Mastodon" }, + { icon = "fontawesome/brands/discord", link = "https://beeware.org/bee/chat/", name = "BeeWare on Discord" }, + { icon = "fontawesome/solid/square-rss", name = "BeeWare blog RSS feed", link = "https://beeware.org/news/buzz/atom.xml" }, +] +generator = false +alternate = [ + { name = "English", link = "/en/", lang = "en" }, + { name = "العَرَبِيَّة", link = "/ar/", lang = "ar" }, + { name = "Čeština", link = "/cs/", lang = "cs" }, + { name = "Dansk", link = "/da/", lang = "da" }, + { name = "Deutsch", link = "/de/", lang = "de" }, + { name = "Español", link = "/es/", lang = "es" }, + { name = "فارسی", link = "/fa/", lang = "fa" }, + { name = "Français", link = "/fr/", lang = "fr" }, + { name = "Italiano", link = "/it/", lang = "it" }, + { name = "日本語", link = "/ja/", lang = "ja" }, + { name = "한국어", link = "/ko/", lang = "ko" }, + { name = "Polski", link = "/pl/", lang = "pl" }, + { name = "Português", link = "/pt/", lang = "pt" }, + { name = "Русский", link = "/ru/", lang = "ru" }, + { name = "தமிழ்", link = "/ta/", lang = "ta" }, + { name = "Türkçe", link = "/tr/", lang = "tr" }, + { name = "Yкраїнська", link = "/uk/", lang = "uk" }, + { name = "Tiếng Việt", link = "/vi/", lang = "vi" }, + { name = "中文(简体)", link = "/zh_CN/", lang = "zh-Hant" }, + { name = "中文(繁體)", link = "/zh_TW/", lang = "zh-TW" }, +] + +[project.theme] +name = "material" +language = "en" +logo = "assets/images/brutus-256.png" +favicon = "assets/images/brutus-256.png" +features = [ + "content.tabs.link", + "toc.follow", + "navigation.tabs", + "navigation.tabs.sticky", + "navigation.indexes", + "navigation.sections", + "navigation.path", + "navigation.expand", + "search.suggest", + "search.highlight", + "search.share", +] +custom_dir = "overrides" + +# Palette toggle for automatic mode +[[project.theme.palette]] +media = "(prefers-color-scheme)" +toggle.icon = "material/brightness-auto" +toggle.name = "Switch to light mode" + +# Palette toggle for light mode +[[project.theme.palette]] +media = "(prefers-color-scheme: light)" +scheme = "default" +toggle.icon = "material/brightness-7" +toggle.name = "Switch to dark mode" + +# Palette toggle for dark mode +[[project.theme.palette]] +media = "(prefers-color-scheme: dark)" +scheme = "slate" +toggle.icon = "material/brightness-4" +toggle.name = "Switch to system preference" + +[project.markdown_extensions] +# Python Markdown extensions +toc.permalink = true +toc.title = "On this page" +attr_list = {} +md_in_html = {} +smarty.smart_quotes = false +# PyMdown Extensions +pymdownx.highlight = {} +pymdownx.superfences = {} +pymdownx.blocks.caption = {} +pymdownx.blocks.admonition.types = [ + "note", + "abstract", + "info", + "tip", + "success", + "question", + "warning", + "failure", + "danger", + "bug", + "example", + "quote", +] +pymdownx.blocks.details.types = [ + { name = "details-note", class = "note" }, + { name = "details-abstract", class = "abstract" }, + { name = "details-info", class = "info" }, + { name = "details-tip", class = "tip" }, + { name = "details-success", class = "success" }, + { name = "details-question", class = "question" }, + { name = "details-warning", class = "warning" }, + { name = "details-failure", class = "failure" }, + { name = "details-danger", class = "danger" }, + { name = "details-bug", class = "bug" }, + { name = "details-example", class = "example" }, + { name = "details-quote", class = "quote" }, +] +pymdownx.blocks.tab.alternate_style = true +pymdownx.emoji.emoji_index = "zensical.extensions.emoji.twemoji" +pymdownx.emoji.emoji_generator = "zensical.extensions.emoji.to_svg" +pymdownx.snippets.base_path = ["docs"] +pymdownx.snippets.url_download = true +pymdownx.snippets.check_paths = true + +[project.plugins.search] + +[project.plugins.blog] +blog_dir = "news" +post_url_date_format = "yyyy" +post_url_format = "{categories}/{date}/{slug}" +post_url_max_categories = 1 +categories_url_format = "{slug}" +categories_allowed = ["Buzz", "Events", "Resources"] + +[project.plugins.autorefs] +resolve_closest = true # autorefs warns of the Usage headings begin duplicates without this - we will have to assign unique ids to all of them otherwise + +[project.plugins.macros] +module_name = "macros" + +[project.plugins.macros.include_yaml] +team = "en/news/.authors.yml" + +[project.plugins.meta] + +[project.plugins.rss] +feed_title = "BeeWare: The Buzz" +feed_description = "News and events for the BeeWare project." +match_path = "news/posts/.*" +use_git = false # Forces it to read the dates from the frontmatter. +categories = ["categories"] +# image = "images/brutus.png" # Update to a Brutus URL +abstract_chars_count = -1 + +[project.plugins.rss.date_from_meta] +as_creation = "date" +datetime_format = "%Y-%m-%d" + +[project.plugins.rss.feeds_filenames] +rss_created = "news/buzz/atom.xml" + +[project.plugins.redirects.redirect_maps] +# Toga project references +"toga.md" = "https://toga.beeware.org/" +"project/toga.md" = "https://toga.beeware.org/" +"project/projects/libraries/toga.md" = "https://toga.beeware.org/" +# Briefcase project references +"briefcase.md" = "https://briefcase.beeware.org/" +"project/briefcase.md" = "https://briefcase.beeware.org/" +"project/projects/tools/briefcase.md" = "https://briefcase.beeware.org/" +# Rubicon-ObjC project references +"rubicon.md" = "https://rubicon-objc.beeware.org/" +"project/utilities/rubicon.md" = "https://rubicon-objc.beeware.org/" +"project/projects/bridges/rubicon.md" = "https://rubicon-objc.beeware.org/" +# Podium project references +"project/applications/podium.md" = "https://github.com/beeware/podium" +"project/projects/applications/podium.md" = "https://github.com/beeware/podium" +# shortlinks +"bee/briefcase-bootstraps.md" = "https://briefcase.beeware.org/en/latest/reference/commands/new.html#third-party-bootstraps" +"bee/chat.md" = "https://discord.gg/AjYYm8cyQM" +"bee/coc.md" = "community/code-of-conduct.md" +"bee/join.md" = "membership/index.md" +"bee/podium.md" = "https://github.com/beeware/podium" +"bee/ready.md" = "https://github.com/orgs/beeware/projects/1/views/7" +"bee/review.md" = "https://github.com/search?o=desc&q=org%3Abeeware+is%3Apr+is%3Aopen+draft%3Afalse+-author%3A%40me+archived%3Afalse&s=created&type=pullrequests" +"bee/review-guide.md" = "https://beeware.org/contributing/guide/what/review-pr/" +"bee/signup.md" = "about/contact.md" +"bee/sprint.md" = "contributing/sprint-guide.md" +"bee/sprints.md" = "contributing/sprint-guide.md" +# Short shortlinks +"b/ready.md" = "https://github.com/orgs/beeware/projects/1/views/7" +"b/review.md" = "https://github.com/search?o=desc&q=org%3Abeeware+is%3Apr+is%3Aopen+draft%3Afalse+-author%3A%40me+archived%3Afalse&s=created&type=pullrequests" +"b/review-guide.md" = "https://beeware.org/contributing/guide/what/review-pr/" +"b/sprints.md" = "contributing/sprint-guide.md" +"b/sprint.md" = "contributing/sprint-guide.md" +# Historical links of significance +"community/behavior/code-of-conduct.md" = "community/code-of-conduct.md" +"community/behavior.md" = "community/code-of-conduct.md" +"community/members.md" = "membership/index.md" +"contributing/membership.md" = "membership/index.md" +# Tutorial shortlinks +"t/linux-deps.md" = "https://gist.github.com/freakboy3742/2e3a524bf6f1cd4486bb9e7fa2a2d3fb" +"t/preparation.md" = "https://gist.github.com/freakboy3742/8ad8a4a74f6933a71035c1795d944610" diff --git a/docs/zensical.tr.toml b/docs/zensical.tr.toml new file mode 100644 index 0000000000..b0e8592f74 --- /dev/null +++ b/docs/zensical.tr.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "tr" + +[project.theme] +language = "tr" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.uk.toml b/docs/zensical.uk.toml new file mode 100644 index 0000000000..1ef948e13f --- /dev/null +++ b/docs/zensical.uk.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "uk" + +[project.theme] +language = "uk" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.vi.toml b/docs/zensical.vi.toml new file mode 100644 index 0000000000..90eb88c697 --- /dev/null +++ b/docs/zensical.vi.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "vi" + +[project.theme] +language = "vi" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.zh_CN.toml b/docs/zensical.zh_CN.toml new file mode 100644 index 0000000000..695a4eb2bf --- /dev/null +++ b/docs/zensical.zh_CN.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "zh_CN" + +[project.theme] +language = "zh" + +[project.extra] +translation_type = "machine" diff --git a/docs/zensical.zh_TW.toml b/docs/zensical.zh_TW.toml new file mode 100644 index 0000000000..79028d2275 --- /dev/null +++ b/docs/zensical.zh_TW.toml @@ -0,0 +1,9 @@ +[project] +site_name = "BeeWare" +docs_dir = "zh_TW" + +[project.theme] +language = "zh-TW" + +[project.extra] +translation_type = "machine" diff --git a/pyproject.toml b/pyproject.toml index c7c0f0a0b7..b75fb0278e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,8 +3,10 @@ pre-commit = [ "pre-commit == 4.7.0", ] -redirects = [ - "mkdocs-redirects == 1.2.3", +# The docs.beeware.org redirect site (in `docs-redirect`), which is built on +# its own ReadTheDocs project. +docs-redirect = [ + "zensical == 0.1.0", ] tox-uv = [ @@ -21,9 +23,9 @@ dev = [ ] docs = [ - "beeware-docs-tools @ git+https://github.com/beeware/beeware-docs-tools", + # TEMPORARY: pinned to the docs-tools Zensical migration branch. Revert to beeware/main once that docs-tools PR is merged. + "beeware-docs-tools @ git+https://github.com/kattni/beeware-docs-tools@tooling/zensical-migration", # "beeware-docs-tools @ file://../beeware-docs-tools", - {include-group = "redirects"}, ] translate = [ diff --git a/tox.ini b/tox.ini index 4e16947f8f..7eff8a508d 100644 --- a/tox.ini +++ b/tox.ini @@ -13,9 +13,6 @@ commands = pre-commit run --all-files --show-diff-on-failure --color=always # Docs are always built on Python 3.13. See also the RTD config. base_python = py313 skip_install = true -setenv = - DISABLE_MKDOCS_2_WARNING = true - NO_MKDOCS_2_WARNING = 1 passenv = DEEPL_API_KEY dependency_groups = docs