148 Commits

Author SHA1 Message Date
Thomas Dinges
8327356de4 Release cards: Update for 5.1 2026-03-17 14:52:24 +01:00
Thomas Dinges
646b11c31f Update release card for 5.1 rc 2026-03-13 10:48:52 +01:00
Thomas Dinges
782ed21709 Release Card: Update for 5.1 Beta / 5.2 LTS Alpha 2026-02-06 08:44:24 +01:00
Thomas Dinges
5451020a14 Projects: Add Looptools 2026-02-04 14:11:02 +01:00
Bart van der Braak
3433254eb4 Git Hooks: Fix permission issues 2025-12-18 13:05:25 +01:00
Bart van der Braak
413453ad19 Git Hooks: Add Docker test setup and update documentation 2025-12-18 12:59:18 +01:00
Bart van der Braak
681099734f Templates: Merge default merge message templates from blender-devops 2025-12-18 11:44:50 +01:00
Bart van der Braak
053119419c Git Hooks: Merge hook scripts and tests from blender-devops 2025-12-18 11:44:03 +01:00
Thomas Dinges
620838eea7 Merge branch 'develop' 2025-11-18 17:22:28 +01:00
Thomas Dinges
e857e53318 Cards: Update for 5.0 release 2025-11-18 17:22:11 +01:00
Bart van der Braak
72a6c9031d Navbar: Add media query to prevent overflow (#17)
Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/17
2025-11-13 17:35:49 +01:00
Thomas Dinges
9f98e45080 Release: 5.0 RC 2025-11-12 16:54:05 +01:00
Thomas Dinges
1babcc9882 Cards: Update projects 2025-10-27 10:32:07 +01:00
Thomas Dinges
840f0a8163 Cards: Update projects 2025-10-16 11:31:55 +02:00
Thomas Dinges
ae241331a5 Cards: Update front page for 5.1 2025-10-08 12:08:47 +02:00
Thomas Dinges
9130abd04e Projects: Fix wrong URL for BAT 2025-09-08 16:07:58 +02:00
Thomas Dinges
cb9316472d Projects: Update cards 2025-09-08 15:23:38 +02:00
Thomas Dinges
ed4ea6386a Projects: Update card 2025-09-08 14:41:07 +02:00
Bart van der Braak
27884e4b65 Add link to Code Paste service at the top of page 2025-07-28 13:04:14 +02:00
Bart van der Braak
b18f79aefe Add override for maximum height of textareas in new issues 2025-07-27 22:36:18 +02:00
Bart van der Braak
bb5c914360 Add more opacity to issues button when inactive 2025-07-25 15:56:05 +02:00
Bart van der Braak
2e270d06fd Change background of project card
Fixes infrastructure/meta#145
2025-07-25 15:02:31 +02:00
Bart van der Braak
609e1fe10f Apply textarea height increase to new issues in Blender repository only 2025-07-24 12:02:57 +02:00
Bart van der Braak
fb02e98826 Increase minimum height of textarea when creating issues
See: https://projects.blender.org/infrastructure/meta/issues/144
2025-07-19 15:49:51 +02:00
Thomas Dinges
72af28cc14 Projects: Remove Vulkan and Slotted actions 2025-07-17 14:19:23 +02:00
Thomas Dinges
7251b98c56 Release card: Update for 4.5 LTS 2025-07-15 14:42:30 +02:00
Thomas Dinges
96eb059985 Projects Card: Add hair dynamics 2025-07-14 08:29:27 +02:00
Thomas Dinges
36d03f7805 Cards: Bump 4.5 to RC 2025-07-09 12:40:32 +02:00
Bart van der Braak
ed853bc483 Revert "Announcement for Blender Projects changing its Git SSH domain (#15)" (#16)
This reverts commit 65573b27f6.

Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/16
2025-07-01 12:10:44 +02:00
Thomas Dinges
c2d04a35b9 Projects: Update Story Tools, remove NPR. 2025-06-19 14:55:49 +02:00
Bart van der Braak
65573b27f6 Announcement for Blender Projects changing its Git SSH domain (#15)
I've added an announcement using Gitea styling:
- Date of switchover (still needs to be determined)
- Commands to update Git Remote
- Link to DevTalk announcement post
- JavaScript to be able to dismiss the banner indefinitely (using Key-Value saved in browser LocalStorage)

Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/15
2025-06-17 17:45:49 +02:00
Thomas Dinges
9f13fd84f5 Merge branch 'develop' 2025-06-04 14:49:58 +02:00
Thomas Dinges
315d129a31 Release: Update cards for 4.5 beta and 5.0 alpha 2025-06-04 14:49:37 +02:00
Oleg Komarov
e696fea64c Merge branch 'develop' 2025-04-03 13:45:29 +02:00
Márton Lente
17a8c0cb76 UI: Add template style overrides for user badges 2025-04-03 13:09:35 +02:00
Márton Lente
709320bd61 UI: Add template style overrides for user badges 2025-04-03 13:09:10 +02:00
Thomas Dinges
87b323e694 Merge branch 'develop' 2025-04-01 11:46:29 +02:00
Thomas Dinges
47078285e9 Projects: Add UV Sync project 2025-04-01 11:46:12 +02:00
Thomas Dinges
a226af559b Merge branch 'develop' 2025-04-01 09:54:29 +02:00
Thomas Dinges
11d26d24b5 Modules: Rename Platforms module 2025-04-01 09:53:52 +02:00
Thomas Dinges
c1eaa5a951 Merge branch 'develop' 2025-03-18 14:11:40 +01:00
Thomas Dinges
6a8d5be40c Cards: Update for 4.4 release 2025-03-18 14:11:17 +01:00
Thomas Dinges
1485618b83 Merge branch 'develop' 2025-03-12 12:34:31 +01:00
Thomas Dinges
b11c1ba3ae Cards: Update 4.4 to RC 2025-03-12 12:34:04 +01:00
Dalai Felinto
07d6cd160e Merge remote-tracking branch 'origin/develop' 2025-03-04 17:04:40 +01:00
Dalai Felinto
c836ad5410 Remote Assets: Point Under Development to the board
Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/14
2025-03-04 17:04:22 +01:00
Thomas Dinges
0b3ac69225 Merge branch 'develop' 2025-02-24 18:01:52 +01:00
Thomas Dinges
53501de51f Projects: Fix issue id for story tools. 2025-02-24 18:01:17 +01:00
Thomas Dinges
cfc21ef106 Merge branch 'develop' 2025-02-24 17:54:37 +01:00
Thomas Dinges
8bcd2baf7f Projects: Add Story Tools: VSE Sequence 2025-02-24 17:54:00 +01:00
Pablo Vazquez
b2370abbd6 Merge branch 'develop' 2025-02-24 12:16:43 +01:00
Pablo Vazquez
a4844c21ad UI: Markup: Slight highlight on strong and headings
Slight highlight on strong and heading elements, to improve
readability.

On dark themes they display slightly lighter. On light themes there
isn't much of a difference (they're already pure black).
2025-02-24 12:14:53 +01:00
Pablo Vazquez
418f600c18 UI: Align emoji in markup
Middle-align emoji in markup, for example when used in headings.
2025-02-24 12:07:30 +01:00
Márton Lente
5984bae2b9 Fix: Style navbar dropdown item flex justification for browser Chrome globally
Fix style navbar dropdown item flex justification for browser Chrome in all
themes.
2025-02-24 12:06:43 +01:00
Márton Lente
abc91b5a95 Revert "Fix: Style navbar dropdown item flex justification for browser Chrome"
This reverts commit a60d4f1b7e.
2025-02-24 12:06:35 +01:00
Márton Lente
58b236e323 UI: Map style variable color-accent to existing color-primary definition
Part of  infrastructure/blender-projects-platform#133
2025-02-24 12:06:28 +01:00
Márton Lente
381b1d116a Fix: Theme milestone progress bar statuses not rendered correctly
Fixes Milestones progress bar statuses not rendered correctly after Gitea
1.23.x update. Maps explicit styling values for progress bars to existing colours.
Part of infrastructure/blender-projects-platform#133
2025-02-24 12:06:08 +01:00
Márton Lente
db83e38963 Revert "Fix: Theme milestone progress bar statuses not rendered correctly"
This reverts commit a705ab8ab4.
2025-02-24 12:06:01 +01:00
Márton Lente
063323eb74 Fix: Style navbar dropdown item flex justification for browser Chrome 2025-02-24 12:05:52 +01:00
Márton Lente
36983de723 Fix: Theme milestone progress bar statuses not rendered correctly
Fixes Milestones progress bar statuses not rendered correctly after Gitea
1.23.x update. Adds explicit styling for progress bars, using theme colours.
Fixes #133
2025-02-24 12:05:31 +01:00
Pablo Vazquez
74208b0f32 UI: Align emoji in markup
Middle-align emoji in markup, for example when used in headings.
2025-02-24 11:45:55 +01:00
Márton Lente
4e09d8e7bf Fix: Style navbar dropdown item flex justification for browser Chrome globally
Fix style navbar dropdown item flex justification for browser Chrome in all
themes.
2025-02-17 19:22:25 +01:00
Márton Lente
fcfcc48fce Revert "Fix: Style navbar dropdown item flex justification for browser Chrome"
This reverts commit a60d4f1b7e.
2025-02-17 19:17:44 +01:00
Márton Lente
2d9abfbf2d UI: Map style variable color-accent to existing color-primary definition
Part of  infrastructure/blender-projects-platform#133
2025-02-17 19:00:42 +01:00
Márton Lente
c2131fea1e Fix: Theme milestone progress bar statuses not rendered correctly
Fixes Milestones progress bar statuses not rendered correctly after Gitea
1.23.x update. Maps explicit styling values for progress bars to existing colours.
Part of infrastructure/blender-projects-platform#133
2025-02-17 18:58:27 +01:00
Márton Lente
a088c9e2b6 Revert "Fix: Theme milestone progress bar statuses not rendered correctly"
This reverts commit a705ab8ab4.
2025-02-17 18:37:04 +01:00
Márton Lente
a60d4f1b7e Fix: Style navbar dropdown item flex justification for browser Chrome 2025-02-17 17:14:43 +01:00
Márton Lente
a705ab8ab4 Fix: Theme milestone progress bar statuses not rendered correctly
Fixes Milestones progress bar statuses not rendered correctly after Gitea
1.23.x update. Adds explicit styling for progress bars, using theme colours.
Fixes #133
2025-02-17 15:10:17 +01:00
Bart van der Braak
0993a08790 Delete options/locale/locale_en-US.ini (#13)
Add any changes in upstream fork

Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/13
2025-02-14 14:46:00 +01:00
Thomas Dinges
7076ec07d6 Card Projects: Update link for remote asset library 2025-02-13 16:29:04 +01:00
Thomas Dinges
8954d46c6f Project Card: Add Project Setup and sort alphabetically 2025-02-11 11:48:39 +01:00
Thomas Dinges
2ce9af9657 Cards: Update animation project 2025-02-06 14:51:38 +01:00
Thomas Dinges
050076dcb4 Cards: Add 4.5 LTS and remove code quality project 2025-02-05 11:28:16 +01:00
Márton Lente
87c73fef69 Fix: Template nav global icon dropdown toggle
Change to inline SVG dropdown icon in navbar since project doesn't use Web
Assets' icon set.
Part of #9
2025-02-04 10:32:47 +01:00
Márton Lente
9eae45125d UI: Upgrade nav-global to web-assets v2 component (#9)
This pull request upgrades navigation global's markup and styles to Web Assets v2 pre-compiled _nav-global_ component, to improve visual consistency with other sites.

The Web Assets v2 _nav-global_ component brings UI fixes, spacing improvements and variable naming changes and cleanup to the navigation bar.

Co-authored-by: Pablo Vazquez <pablo@blender.org>
Co-authored-by: Thomas Dinges <thomas@blender.org>
Co-authored-by: Bastien Montagne <bastien@blender.org>
Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/9
2025-02-04 10:32:47 +01:00
Bart van der Braak
0429b45190 Add custom default locale (#11)
We have altered the text in `password_username_disabled` from upstream.

Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/11
2025-01-29 14:02:30 +01:00
Thomas Dinges
f7a1427a3a Merge branch 'develop' 2024-12-06 15:28:53 +01:00
Thomas Dinges
400b97460e Projects: Update link for NPR 2024-12-06 15:28:31 +01:00
Thomas Dinges
0b70b97234 Merge branch 'develop' 2024-12-06 11:00:19 +01:00
Thomas Dinges
076a739b0f Projects: Update ongoing projects 2024-12-06 11:00:06 +01:00
Bastien Montagne
206c4bdc08 Merge branch 'develop' 2024-11-27 18:34:02 +01:00
Bastien Montagne
72a13bdc74 Remove 'Asset' part from 'Pipeline & I/O' module
'Asset System' is now a "real" module.
2024-11-27 18:19:57 +01:00
Bastien Montagne
6a392a468c Remove 'Asset' part from 'Pipeline & I/O' module
'Asset System' is now a "real" module.
2024-11-27 18:18:49 +01:00
Thomas Dinges
0b2490e115 Merge branch 'develop' 2024-11-19 15:53:53 +01:00
Thomas Dinges
a25a4813d9 Cards: Update for 4.3 2024-11-19 15:53:25 +01:00
Thomas Dinges
e36dfa2394 Merge branch 'develop' 2024-11-14 19:12:13 +01:00
Thomas Dinges
ea12833acf Cards: Remove sculpting project and bump 4.3 to rc 2024-11-14 19:11:27 +01:00
Pablo Vazquez
201642f5db Merge branch 'develop' 2024-10-15 17:52:13 +02:00
Pablo Vazquez
dc378e941c Header Links: Add link to Developer Documentation
Next to User Manual.
2024-10-15 17:51:20 +02:00
Pablo Vazquez
f5a39fd489 Header Links: Remove Add-ons links
Remove links to:
* Officially Maintained Add-ons
* Community Maintained Add-ons

Even though they may still be valid for 3.6 LTS, "Officially maintained"
add-ons are now part of core, and "Community maintained" are not really
maintained but moved to the Extensions platform.
2024-10-15 17:50:57 +02:00
Pablo Vazquez
7aa03b3ac1 Theme: Style menu header sections a little dimmer
They are hard to read if they have the same color as all other links.
2024-10-15 17:48:24 +02:00
Thomas Dinges
2297a2dc75 Merge branch 'develop' 2024-10-10 12:23:38 +02:00
Thomas Dinges
6471fe4029 Ongoing Projects: Remove Extensions 2024-10-10 12:23:14 +02:00
Thomas Dinges
3e4becdaa3 Merge branch 'develop' 2024-10-02 12:49:11 +02:00
Thomas Dinges
6f183d9ab8 Update release cards for 4.3/4.4 2024-10-02 12:48:47 +02:00
Pablo Vazquez
c42c8214e9 Merge branch 'develop' 2024-09-04 15:17:28 +02:00
Pablo Vazquez
3826b50682 UI: Projects: Fix link to Sculpting Improvements 2024-09-04 15:17:18 +02:00
Pablo Vazquez
5766538848 Merge branch 'develop' 2024-09-04 15:07:57 +02:00
Pablo Vazquez
c80ae99e82 UI: Sort modules alphabetically 2024-09-04 15:07:43 +02:00
Pablo Vazquez
aedd4eec66 UI: Update Viewport & EEVEE module name
The module has been renamed to follow Render & Cycles.
2024-09-04 15:05:12 +02:00
Pablo Vazquez
1cf1ca7b2f UI: Projects: Remove EEVEE Next
It's no longer a project, just good old EEVEE.
2024-09-04 15:04:30 +02:00
Pablo Vazquez
cf48a65b4e UI: Releases: Shorten sentence about date
It's still clear but with less text/noise.
2024-09-04 15:04:00 +02:00
Thomas Dinges
da25064cae Merge branch 'develop' 2024-08-01 18:46:57 +02:00
Thomas Dinges
cddeafd6d9 Release cards: Change from BCon1 to Alpha. 2024-08-01 18:46:29 +02:00
Pablo Vazquez
4939a66de3 Merge branch 'develop' 2024-07-22 12:46:35 +02:00
Pablo Vazquez
a690061baf Theme: Style alert blocks in bthree-dark theme
Fixes #92
2024-07-22 12:45:32 +02:00
Pablo Vazquez
a91ef365d0 Theme: Style alert blocks in bthree-dark theme
Fixes #92
2024-07-22 12:43:11 +02:00
Thomas Dinges
4046fb3138 Update release card for 4.2 LTS. 2024-07-16 15:26:08 +02:00
Thomas Dinges
929ae582ce Update templates/blender_components/card_releases.tmpl 2024-07-10 16:09:25 +02:00
Francesco Siddi
d16b89f711 Fix typo card_projects.tmpl 2024-07-08 15:46:48 +02:00
Pablo Vazquez
d74c98c180 Merge branch 'develop' 2024-07-03 16:30:46 +02:00
Pablo Vazquez
ff0e16a2d1 Theme: Add missing code markup variable
Add code markup variables missing in our theme.

Fixes infrastructure/blender-projects-platform#88
2024-07-03 16:30:28 +02:00
Pablo Vazquez
9d58880934 Merge branch 'develop' 2024-07-01 13:02:16 +02:00
Pablo Vazquez
da8d0e876c Theme: Add missing variables from upstream
Add variables available in upstream but missing in our theme.

Fixes infrastructure/blender-projects-platform#88
2024-07-01 13:00:33 +02:00
Brecht Van Lommel
878adcd989 Merge branch 'develop' 2024-06-20 10:35:17 +02:00
Thomas Dinges
8a094260e2 Update release card for Bcon3/Bcon1. 2024-06-05 12:45:50 +02:00
Thomas Dinges
0cdf137f88 Update release card for Bcon3/Bcon1. 2024-06-05 12:40:20 +02:00
Pablo Vazquez
829c083fbc Cleanup: CSS and global styling
In the latest releases, Gitea has fixed a lot of the styling issues we
had manually fixed in the past.

Additionally, the recent style adjustments they did look a lot better
so it is better to remove our custom styling as much as possible, and
follow stock Gitea. Making it easier to upgrade in the future.

* Fix broken styling
* Remove custom font
* Cleanup unused variables
* Add code comments
2024-05-30 12:18:04 +02:00
Pablo Vazquez
949885ab5e Fix styling for tooltips and labels background
Noticed by Brecht (thanks!) in Gitea 1.22
2024-05-30 10:43:21 +02:00
Francesco Siddi
d5133cebc5 Add Sculpting Improvements project 2024-05-29 21:20:49 +02:00
Brecht Van Lommel
8029efad98 Merge branch 'develop' 2024-05-29 19:14:57 +02:00
Brecht Van Lommel
e81dc72384 Fix: Broken user manual link 2024-05-29 19:14:15 +02:00
Pablo Vazquez
1375157807 Merge branch 'develop' 2024-05-28 16:33:59 +02:00
Pablo Vazquez
7597178483 Projects Card: Set Brush Assets to Feedback Wanted 2024-05-28 16:32:48 +02:00
Pablo Vazquez
6e99181b67 Projects Card: Display description instead of modules 2024-05-28 16:29:46 +02:00
Pablo Vazquez
ce02bb63cc Fix typo in Products dropdown 2024-05-28 16:29:13 +02:00
Pablo Vazquez
8e8d4a5201 Homepage: Move list of ongoing projects up
So it uses the full width and it's more visible what the team is working
on.
2024-05-24 19:06:49 +02:00
Pablo Vazquez
d9630c65ef Dashboard: Add list of ongoing projects 2024-05-24 19:06:09 +02:00
Pablo Vazquez
1740002e69 Projects Card: Update ongoing projects
Use a table instead of a the <ul> with links to the blog posts.
2024-05-24 19:05:39 +02:00
Pablo Vazquez
8904b6b97f Dashboard: Move large card links to header dropdown
Move the cards "Blender, User Manual, Flamenco", to a "Products" dropdown
in the header, together with other projects. We can add more in the
future to give visibility to other projects.
2024-05-24 19:04:49 +02:00
Thomas Dinges
28dcdb41ee Merge branch 'develop' 2024-05-02 10:34:07 +02:00
Thomas Dinges
a083144d04 Update release card for Bcon2 2024-05-02 10:33:49 +02:00
Márton Lente
b555bfe3c9 Docs: Update README with alternative setup with Docker
Update README with alternative setup with Docker, detailing Docker-specific steps.
2024-04-25 16:24:05 +02:00
Márton Lente
71090ea488 UI: Hide the navbar logo in the secondary navbar (#8)
Hide the redundant navbar logo in the secondary navbar that is already present in nav global.

Reviewed-on: https://projects.blender.org/infrastructure/gitea-custom/pulls/8
Reviewed-by: Pablo Vazquez <pablovazquez@noreply.localhost>
2024-04-25 15:27:15 +02:00
Thomas Dinges
1f79ce586a Release: Update card for 4.1 2024-03-26 14:27:24 +01:00
Thomas Dinges
daf629602e Cards: Update 4.1 to Bcon4. 2024-03-13 16:04:41 +01:00
Thomas Dinges
5102b6441d Update release cards for new release cycle 2024-02-07 13:17:31 +01:00
Brecht Van Lommel
0523b92903 Change navbar link from wiki to new docs 2024-01-18 20:34:39 +01:00
Damien Picard
d17c50ff65 Fix alignment in navbar 2024-01-17 15:15:56 +01:00
Thomas Dinges
d16be38b40 Fix links in menu and point release cycle to new docs 2024-01-17 13:09:49 +01:00
Thomas Dinges
76ecf6bfc3 Fix: Asset System link in modules header 2024-01-16 17:08:50 +01:00
Thomas Dinges
f53a7bdca2 Release: Bump to Bcon2 for 4.1 2024-01-04 17:41:25 +01:00
Brecht Van Lommel
771f37d356 Reduce project issue card title size 2023-11-28 17:40:54 +01:00
Arnd Marijnissen
9b708de650 Hiding logo seems to hide login 2023-11-28 17:12:58 +01:00
Brecht Van Lommel
013fbe1b18 Fix excessively bold text on project board issue cards 2023-11-28 16:25:13 +01:00
Brecht Van Lommel
a168b7d35a Update for changes in Gitea 1.21 and 1.20 2023-11-28 15:27:18 +01:00
Thomas Dinges
8f2a59000b Update release card for 4.0 release 2023-11-14 15:45:31 +01:00
Thomas Dinges
30aec05902 Update for 4.0 Bcon4 2023-11-09 11:45:02 +01:00
39 changed files with 1395 additions and 660 deletions

View File

@@ -10,3 +10,41 @@
- --custom-path pointing to the repo directory - --custom-path pointing to the repo directory
- --config pointing to the custom app.ini - --config pointing to the custom app.ini
- Update your user preferences to set the new theme, or it will keep showing the old one. - Update your user preferences to set the new theme, or it will keep showing the old one.
## Alternative setup with Docker
- Initialize `docker-compose.yml` following Gitea's [basic instructions](https://docs.gitea.com/installation/install-with-docker#basics).
- Install Gitea following Gitea's [installation instructions](https://docs.gitea.com/installation/install-with-docker#installation).
- Edit `app.ini` in `[Gitea's root]/conf` to append the following:
```
[ui]
DEFAULT_THEME = bthree-dark
THEMES = bthree-dark
```
(Docker Gitea's root directory defaults to `/gitea/gitea/` from installation root.)
- Clone this repository to Gitea's root directory, so that its contents are merged. (Gitea's _custom_ directory defaults to Gitea's root.)
Gitea's root flat directory tree should look similar to the following, if done correctly:
```
.
├── actions_artifacts
├── actions_log
├── attachments
├── avatars
├── conf
├── gitea.db
├── home
├── indexers
├── jwt
├── log
├── packages
├── public
├── queues
├── README.md
├── repo-archive
├── repo-avatars
├── sessions
├── sphinx
├── templates
└── tmp
```

View File

@@ -0,0 +1,5 @@
${CommitTitle}
${CommitBody}
Pull Request: https://projects.blender.org/infrastructure/blender-devops/pulls/${PullRequestIndex}

View File

@@ -0,0 +1,3 @@
${PullRequestTitle}
Pull Request: https://projects.blender.org/infrastructure/blender-devops/pulls/${PullRequestIndex}

1
git-hooks/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
test/**/tmp

41
git-hooks/README.md Normal file
View File

@@ -0,0 +1,41 @@
# Git Hooks
## Reject Merge Commits
The `blender_merged_hook` script rejects merge commits to branches were we don't want them. It is installed as an `pre-receive` hook in the following repositories:
- `blender/blender`
- `blender/blender-addons`
- `blender/blender-addons-contrib`
- `blender/blender-assets`
- `blender/blender-benchmarks`
- `blender/blender-developer-docs`
- `blender/blender-manual`
- `blender/blender-test-data`
- `blender/lib-linux_x64`
- `blender/lib-macos_arm64`
- `blender/lib-macos_x64`
- `blender/lib-source`
- `blender/lib-windows_arm64`
- `blender/lib-windows_x64`
- `brecht/test-hooks`
## Deny Binary Files
The `deny-binary` script rejects commit that add binary files that should have been tracked as Git LFS object instead. We also provide some tests, which can be run using Docker Compose inside our Gitea container image. It has been installed as a `pre-receive` hook in the following repositories:
- `blender/blender`
- `blender/blender-assets`
- `blender/blender-benchmarks`
- `blender/blender-developer-docs`
- `blender/blender-manual`
- `blender/blender-test-data`
- `blender/lib-linux_x64`
- `blender/lib-macos_arm64`
- `blender/lib-macos_x64`
- `blender/lib-source`
- `blender/lib-windows_arm64`
- `blender/lib-windows_x64`
- `studio/dogwalk`
To circumvent the rejection you can add `override restrictions` anywhere in the commit message.

116
git-hooks/blender_merge_hook Executable file
View File

@@ -0,0 +1,116 @@
#!/bin/bash -eu
#
# Blender: modified version of update.sample in hooks directory to:
# - Deny merge commits to release branches
# - Deny merge of non-release branches to main
#
# This indirectly checks for accidentally merging main into release
# branches, as main is almost certain to contain merge commits not
# in the release branch.
#
# To enable this hook, rename this file to "pre-receive" or place it in
# an "pre-receive.d" folder.
# No revision indicator.
zero_revision="0000000000000000000000000000000000000000"
# Check if we need to verify merge commits for this branch.
need_verify_merge_commit()
{
local branch="$1"
local old_revision="$2"
if [ "$old_revision" = "$zero_revision" ]; then
# New branch, always ok to push.
false
elif [ "$branch" = "main" ]; then
# Some merge commits allowed in main branch.
true
elif (echo "${branch}" | grep -Eq ^blender-v[0-9]\.[0-9][0-9]?-release$); then
# No merge commits in release branch.
true
else
false
fi
}
# Check if this is an invalid merge commit.
is_invalid_merge_commit()
{
local branch="$1"
local revision="$2"
# Detect if this revision is a merge commit. It's based on the commit merge
# message which is weak, but not clear how to do it otherwise.
if git show -s --format=%B ${revision} | grep -Eq "Merge (remote-tracking )?branch '"; then
if (echo "${branch}" | grep -Eq ^blender-v[0-9]\.[0-9][0-9]?-release$); then
# In release branch, all merge commits are invalid.
true
elif [ "$branch" = "main" ]; then
# In main branch, only merge commits from release branches.
if git show -s --format=%B ${revision} | grep -Eq "Merge (remote-tracking )?branch '(origin\/)?blender-v[0-9]\.[0-9][0-9]?-release'"; then
false
else
true
fi
else
false
fi
else
false
fi
}
# Read stdin for ref information.
while read oldrev newrev refname; do
# Detect type of update.
if [ "$newrev" = "$zero_revision" ]; then
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
;;
refs/tags/*,delete)
# delete tag
;;
refs/tags/*,tag)
# annotated tag
;;
refs/heads/*,commit)
# branch
branch=${refname##refs/heads/}
if need_verify_merge_commit "$branch" "$oldrev"; then
for r in $(test "$oldrev" = $zero_revision \
&& git rev-list $newrev \
|| git rev-list $newrev ^$oldrev); do
is_invalid_merge_commit ${branch} ${r} && {
printf "error: *** %s\n" \
"You may only merge release branches into main, no other merge commits are allowed." \
"See Blender's release branch developer documentation for details." >&2
exit 1
}
done
fi
;;
refs/heads/*,delete)
# delete branch
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
;;
*)
# Anything else (is there anything else?)
;;
esac
done
exit 0

94
git-hooks/deny-binary Executable file
View File

@@ -0,0 +1,94 @@
#!/bin/bash -eu
#
# Reject commits with binary files, which should have used LFS instead. Allow
# overriding when "override restrictions" is in the commit message.
#
# To enable this hook, rename this file to "pre-receive" or place it in
# a "pre-receive.d" folder.
# Use 'strict mode': http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -o pipefail
nullsha="0000000000000000000000000000000000000000"
status=0
# This is the message to include in your commit to override.
commit_override_msg="override restrictions"
handle_pipefails() {
# ignore exit code 141 from simple command pipes
# - use with: cmd1 | cmd2 || handle_pipefails $?
(( $1 == 141 )) && return 0
return $1
}
# Read stdin for ref information.
while read oldrev newrev refname; do
# Skip branch deletions.
if [ "$newrev" = "$nullsha" ]; then
continue
fi
# Set oldrev to HEAD if this is branch creation.
if [ "$oldrev" = "$nullsha" ]; then
oldrev="HEAD"
fi
# Check for branches and tags, but not pull requests in refs/pull. Otherwise Gitea
# fails to create a pull request without explaining why.
if [[ "$refname" == refs/heads/* ]]; then
:
elif [[ "$refname" == refs/tags/* ]]; then
:
else
exit 0
fi
# Loop over each commit.
for commit in $(git rev-list --objects ${oldrev}..${newrev} |
git cat-file --batch-check='%(objectname) %(objecttype) %(objectsize) %(rest)' | grep commit | awk '{print $1}'); do
# Get list of potentially binary files in this commit
mapfile -t binary_files < <(git log --diff-filter=d --pretty=format:%H -M100% --numstat ${commit}^! | grep -e "- - \w" | awk '{print $3}')
if [ ${#binary_files[@]} -eq 0 ]; then
continue
fi
# Check for override message
override=0
if git log --pretty=format:%B ${commit}^! | grep -qi "${commit_override_msg}"; then
override=1
fi
rejected_files=()
for file in "${binary_files[@]}"; do
# Check if it's an LFS pointer
# Use handle_pipefails as we may run into SIGPIPE error code
if git show "${commit}:${file}" | git lfs pointer --check --stdin || handle_pipefails $?; then
continue
fi
rejected_files+=("$file")
done
if [ ${#rejected_files[@]} -gt 0 ]; then
if [ "$override" -gt 0 ]; then
echo "Your push contains binary files but was accepted because of override commit message:"
else
status=1
echo "Your push was rejected because it contains binary files not tracked by Git LFS:"
fi
echo "Commit: $commit"
for file in "${rejected_files[@]}"; do
echo "File: $file"
done
fi
done
done
if [ "$status" -ne "0" ]; then
echo
echo "You must make sure that the binary files are tracked with Git LFS or seek help from the repo administrators."
echo "(Perhaps you did not setup Git LFS with 'git lfs install'?)"
echo
fi
exit $status

View File

@@ -0,0 +1,9 @@
services:
gitea_deny_binary_tests:
image: ghcr.io/blender/gitea:v1.25.2
container_name: gitea_deny_binary_tests
working_dir: /workspace
command: bash -c "./test/run_deny_binary_tests.sh"
volumes:
- ./:/workspace
user: root

17
git-hooks/notice Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/sh
REPO_PATH=$(pwd)
REPO_NAME=$(basename "$REPO_PATH" .git)
ORG_NAME=$(basename "$(dirname "$REPO_PATH")")
NEW_SERVER="git.blender.org"
echo ""
echo "*********************************************************************************"
echo "* IMPORTANT NOTICE *"
echo "* Blender Projects is moving its Git SSH domain to git.blender.org! *"
echo "* If you haven't already, please update your Git remote to use the *"
echo "* git@git.blender.org host instead of the git@projects.blender.org one. *"
echo "* *"
echo "* More information: https://devtalk.blender.org/t/-/41098 *"
echo "*********************************************************************************"
echo ""

View File

@@ -0,0 +1,45 @@
# Run single test provided via $1.
# Prints "ok" on success, "FAIL" on failure, and returns the appropriate status code.
run_test() {
local TEST_SCRIPT=$1
printf '%s' "Running $(basename "${TEST_SCRIPT}")... "
# Run test silently.
# Return 0 on success, 1 on failure.
if "${TEST_SCRIPT}" > /dev/null 2>&1; then
echo "ok"
return 0
else
echo "FAIL"
return 1
fi
}
# Run all tests in the given directory (specified as $1).
# All .sh tests are executed in sorted order.
# The script reports how many tests failed and exits with non-zero status if any did.
run_tests_in_directory() {
local DIR=$1
local failed=0
echo "== Running tests in directory $(basename "${DIR}") =="
# Iterate over all .sh files and run them one by one.
for test_script in $(ls "${DIR}" | sort); do
case "${test_script}" in
*.sh)
if ! run_test "${DIR}/${test_script}"; then
failed=$((failed + 1))
fi
;;
esac
done
# After running all tests, report overall result.
if [ "$failed" -ne 0 ]; then
echo "$failed test(s) failed."
exit 1
else
echo "All tests passed."
fi
}

View File

@@ -0,0 +1,31 @@
#!/bin/sh
# Test: create text file in the empty repository and try to push it.
#
# It is expected to pass as it is perfectly nomial usage of Git for text
# based files.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,38 @@
#!/bin/sh
# Test: add text file to the existing repository and try to push it.
#
# It is expected to pass as it is perfectly nomial usage of Git for text
# based files.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo "Hello, World!" > "${WORK_GIT_DIR}/NOTES.txt"
git -C "${WORK_GIT_DIR}" add NOTES.txt
git -C "${WORK_GIT_DIR}" commit --message "Add file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,32 @@
#!/bin/sh
# Test: Add binary file to an empty repository and try to push.
#
# It is expected to pass as part of a logic which allows to branch off
# existing branches where it is possible to have binary files that were
# added prior to migration to Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,38 @@
#!/bin/sh
# Test: add binary file to the existing repository and try to push it.
#
# This test is expected to fail as new binary files are expected to be
# using Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,41 @@
#!/bin/sh
# Test: add binary file that starts with Git LFS reference content.
#
# This test is expected to fail as it is actually a binary file.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo "version https://git-lfs.github.com/spec/v1" > "${WORK_GIT_DIR}/data.bin"
echo "oid sha256:c35020473aed1b4642cd726cad727b63fff2824ad68cedd7ffb73c7cbd890479" >> "${WORK_GIT_DIR}/data.bin"
echo "size 32768" >> "${WORK_GIT_DIR}/data.bin"
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k oflag=append conv=notrunc
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,46 @@
#!/bin/sh
# Test: add binary file to the existing repository with proper LFS filters
# installed prior to adding a binary file.
#
# This test is expected to pass as it is an expected usage of Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
git -C "${WORK_GIT_DIR}" lfs install
git -C "${WORK_GIT_DIR}" lfs track "*.bin"
git -C "${WORK_GIT_DIR}" add .gitattributes
git -C "${WORK_GIT_DIR}" commit --message "Track .bin files with Git LFS"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,47 @@
#!/bin/sh
# Test: add binary file to the existing repository before LFS filters is
# configured, configure filter, and convert to LFS.
#
# This test is expected to fail as all new files after adding filter are
# supposed to be covered by Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
git -C "${WORK_GIT_DIR}" lfs install
git -C "${WORK_GIT_DIR}" lfs track "*.bin"
git -C "${WORK_GIT_DIR}" add .gitattributes
git -C "${WORK_GIT_DIR}" commit --message "Track .bin files with Git LFS"
git -C "${WORK_GIT_DIR}" lfs migrate import --no-rewrite --yes data.bin
if git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,53 @@
#!/bin/sh
# Test: Add filter and convert binary file to LFS on an existing repository.
#
# This test is expected to pass since it is perfectly nominal operation to do
# when dealing with legacy code base where binary files were added before LFS
# was configured, and when conversion is needed after the install of the deny
# hook.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
git -C "${WORK_GIT_DIR}" lfs install
git -C "${WORK_GIT_DIR}" lfs track "*.bin"
git -C "${WORK_GIT_DIR}" add .gitattributes
git -C "${WORK_GIT_DIR}" commit --message "Track .bin files with Git LFS"
git -C "${WORK_GIT_DIR}" lfs migrate import --no-rewrite --yes data.bin
git -C "${WORK_GIT_DIR}" reset --soft HEAD~1
git -C "${WORK_GIT_DIR}" commit --amend --message "Track .bin files with Git LFS and convert existing file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -0,0 +1,47 @@
# Set up temp Git identity if none is set
setup_temp_git_identity() {
export GIT_AUTHOR_NAME="Test User"
export GIT_AUTHOR_EMAIL="tests@example.com"
export GIT_COMMITTER_NAME="Test User"
export GIT_COMMITTER_EMAIL="tests@example.com"
}
# Get temporary directory where test data will be generated.
# The function echo's the directory.
get_tmp_dir() {
local SCRIPT=$(readlink -f "$0")
local SCRIPT_PATH=$(dirname "$SCRIPT")
echo "$(dirname ${0})/tmp/$(basename "${SCRIPT%.*}")"
}
# Setup bare repository which could be used as a server-side upstream.
# The function echo's the path to the repository.
setup_bare_origin_repository() {
local TMP_DIR=`get_tmp_dir`
local REPO_DIR="${TMP_DIR}/origin/test-repo.git"
rm -rf "${REPO_DIR}"
mkdir -p "${REPO_DIR}"
git -C "${REPO_DIR}" init --bare --initial-branch=main > /dev/null 2>&1
echo "${REPO_DIR}"
}
# Install hook to the given bare repository.
# The bare git repository is provided as $1, hook script is provided as $2,
# and the hook name is provided as $3.
install_hook() {
local GIT_DIR="${1}"
local HOOK_SCRIPT="${2}"
local HOOK_NAME="${3}"
cp "${HOOK_SCRIPT}" "${GIT_DIR}/hooks/${HOOK_NAME}"
}
# Clone repository provided via $1. The path to the working directory is
# echo'd.
clone_repository() {
local TMP_DIR=`get_tmp_dir`
local WORK_GIT_DIR="${TMP_DIR}/checkout/test-repo"
rm -rf "${WORK_GIT_DIR}"
git clone "${1}" "${WORK_GIT_DIR}" > /dev/null 2>&1
echo "${WORK_GIT_DIR}"
}

View File

@@ -0,0 +1,10 @@
#!/bin/sh
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. "${SCRIPT_PATH}/common/functions"
run_tests_in_directory "${SCRIPT_PATH}/deny_binary"

View File

@@ -2,16 +2,14 @@
:root { :root {
--is-dark-theme: true; --is-dark-theme: true;
/* Borders. */
--border-radius: .33rem;
--border-radius-outer: .28571429rem;
/* Colors. */ /* Colors. */
/* Some colors must be set as HEX, due to the monaco-editor no supporting /* Some colors must be set as HEX, due to the monaco-editor no supporting
* conversion of non-hex colors. https: //github.com/microsoft/monaco-editor/issues/1815 */ * conversion of non-hex colors. https: //github.com/microsoft/monaco-editor/issues/1815 */
color-scheme: dark; color-scheme: dark;
--color-primary: hsl(204deg, 90%, 56%); --color-primary: hsl(204deg, 90%, 60%);
--color-primary-bg: hsla(204deg, 100%, 36%, .2); --color-primary-hover: hsl(204deg, 90%, 50%);
--color-primary-bg: hsla(204deg, 100%, 36%, .6);
--color-primary-text: hsl(204deg, 90%, 72%);
--color-primary-contrast: hsl(0, 0%, 100%); --color-primary-contrast: hsl(0, 0%, 100%);
--color-primary-dark-1: #14a1ff; --color-primary-dark-1: #14a1ff;
@@ -74,6 +72,7 @@
/* Colors for buttons, labels, etc. */ /* Colors for buttons, labels, etc. */
--color-red: hsl(0, 56.4%, 54.1%); --color-red: hsl(0, 56.4%, 54.1%);
--color-red-light: hsl(0, 56.5%, 48.6%); --color-red-light: hsl(0, 56.5%, 48.6%);
--color-red-dark-1: hsl(3deg, 75%, 59%);
--color-orange: hsl(23.8, 89%, 42.4%); --color-orange: hsl(23.8, 89%, 42.4%);
--color-orange-light: hsl(23.6, 88.7%, 38%); --color-orange-light: hsl(23.6, 88.7%, 38%);
--color-yellow: hsl(44.8, 97%, 40.6%); --color-yellow: hsl(44.8, 97%, 40.6%);
@@ -86,8 +85,12 @@
--color-teal-light: hsl(176.8, 100%, 26%); --color-teal-light: hsl(176.8, 100%, 26%);
--color-blue: hsl(206, 56%, 50.2%); --color-blue: hsl(206, 56%, 50.2%);
--color-blue-light: hsl(206, 55%, 45.3%); --color-blue-light: hsl(206, 55%, 45.3%);
--color-blue-dark-1: hsl(213deg, 89%, 64%);
--color-blue-dark-bg: hsla(213deg, 89%, 64%, .15);
--color-violet: hsl(259.2, 66.5%, 65%); --color-violet: hsl(259.2, 66.5%, 65%);
--color-violet-light: hsl(259.1, 66.2%, 58%); --color-violet-light: hsl(259.1, 66.2%, 58%);
--color-violet-dark-1: hsl(262deg, 66%, 66%);
--color-violet-dark-bg: hsla(262deg, 66%, 66%, .15);
--color-purple: hsl(285, 55.9%, 58%); --color-purple: hsl(285, 55.9%, 58%);
--color-purple-light: hsl(285, 55.6%, 52%); --color-purple-light: hsl(285, 55.6%, 52%);
--color-pink: hsl(326, 64.6%, 50.2%); --color-pink: hsl(326, 64.6%, 50.2%);
@@ -130,7 +133,7 @@
--color-warning-text: hsl(44.7, 96.8%, 50.8%); --color-warning-text: hsl(44.7, 96.8%, 50.8%);
--color-info-border: hsl(210, 50%, 37.6%); --color-info-border: hsl(210, 50%, 37.6%);
--color-info-bg: hsl(216.3, 33.3%, 22.4%); --color-info-bg: hsl(216.3, 33.3%, 22.4%);
--color-info-text: hsl(201.8, 79.3%, 56.5%); --color-info-text: hsl(213deg, 89%, 64%);
--color-body: #202327; --color-body: #202327;
@@ -155,31 +158,27 @@
--color-active: hsla(213, 18%, 90%, .1); --color-active: hsla(213, 18%, 90%, .1);
--color-menu: hsl(213, 12%, 21%); --color-menu: hsl(213, 12%, 21%);
--color-card: transparent; --color-card: #202327;
--color-markup-table-row: hsla(0, 0%, 100%, 0); --color-markup-table-row: hsla(0, 0%, 100%, 0);
--color-markup-code-block: hsla(0, 0%, 100%, 0.1); --color-markup-code-block: hsla(0, 0%, 100%, 0.1);
--color-markup-code-inline: hsla(0, 0%, 100%, 0.1);
--color-code-bg: #1e2329; --color-code-bg: #1e2329;
--color-code-line-bg-hover: hsl(213, 16%, 16%); --color-code-line-bg-hover: hsl(213, 16%, 16%);
--color-code-sidebar-bg: hsl(213, 15%, 21%); --color-code-sidebar-bg: hsl(213, 15%, 21%);
--color-timeline: hsl(220, 10%, 33%); --color-tooltip-text: #fbfdff;
--color-tooltip-bg: #000017f0;
/* Navbar. */ /* Navbar. */
--color-navbar: hsl(213, 10%, 18%); --color-navbar: hsl(213, 10%, 18%);
--color-nav-bg: hsl(213, 10%, 18%);
--color-nav-hover-bg: hsla(213, 18%, 90%, .05);
--color-header-wrapper: hsl(213, 10%, 18%);
--color-navbar-transparent: hsla(213, 10%, 14%, 0); --color-navbar-transparent: hsla(213, 10%, 14%, 0);
--color-header-bar: hsl(213, 10%, 18%); --color-header-bar: hsl(213, 10%, 18%);
/* Buttons. */
--color-button: hsl(213, 14%, 24%);
--color-expand-button: hsl(213.9, 12.4%, 26.9%);
--color-button-basic-border: hsl(213, 14%, 30%);
--color-button-basic-bg: hsl(213, 14%, 22%);
--color-button-basic-bg: var(--color-light);
--color-button-basic-text: var(--color-text);
/* Inputs. */ /* Inputs. */
--color-input-text: #d6dbe6; --color-input-text: #d6dbe6;
--color-input-background: #17191c; --color-input-background: #17191c;
@@ -191,188 +190,57 @@
--color-editor-line-highlight: var(--color-primary-light-5); --color-editor-line-highlight: var(--color-primary-light-5);
--color-project-board-bg: var(--color-secondary-light-2); --color-project-board-bg: var(--color-secondary-light-2);
--color-highlight-fg: #87651e;
--color-highlight-bg: #352c1c;
--color-overlay-backdrop: #080808c0;
--color-button: #282d33;
--color-caret: var(--color-text); --color-caret: var(--color-text);
--color-border: var(--color-secondary-alpha-40); --color-border: var(--color-secondary-alpha-40);
--color-reaction-bg: hsla(0, 0%, 100%, 0.1); --color-reaction-bg: hsla(0, 0%, 100%, 0.1);
--color-reaction-active-bg: var(--color-primary-alpha-40); --color-reaction-active-bg: var(--color-primary-alpha-30);
--color-small-accent: var(--color-primary-light-5); --color-small-accent: var(--color-primary-light-5);
--color-active-line: hsl(53.6, 50.9%, 22%); --color-active-line: hsl(53.6, 50.9%, 22%);
/* Labels. e.g. issues count indicator in repo tabs. */ /* Labels. e.g. issues count indicator in repo tabs. */
--color-label-text: var(--color-text-light); --color-label-text: var(--color-text-light);
--color-label-bg: var(--color-secondary-alpha-60);
--color-label-active-bg: hsl(220, 10.6%, 33.3%); --color-label-active-bg: hsl(220, 10.6%, 33.3%);
/* Footer. */ /* Footer. */
--color-footer: hsl(213, 14.8%, 21%); --color-footer: hsl(213, 14.8%, 21%);
--color-footer-text: var(--color-text-light-3); --color-footer-text: var(--color-text-light-3);
--color-footer-links: var(--color-text-light-1); --color-footer-links: var(--color-text-light-1);
/* Color aliases. */
--color-accent: var(--color-primary);
} }
/* Custom styling of individual elements. /* Custom styling of individual elements.
* Using !important is bad, but unfortunately gitea does it already in _base.less. */ * Using !important is bad, but unfortunately gitea does it already in _base.less. */
/* Buttons. */ /* Primary button. */
.ui.basic.button {
color: var(--color-button-basic-text);
background: var(--color-button-basic-bg);
border-color: var(--color-button-basic-border);
}
.ui.primary.button, .ui.primary.button,
.ui.primary.buttons .button { .ui.primary.buttons .button {
background-color: var(--color-primary-bg) !important; background-color: var(--color-primary-bg) !important;
border-color: var(--color-primary-bg) !important; border-color: var(--color-primary-bg) !important;
color: var(--color-primary) !important; color: var(--color-primary-text) !important;
} }
a.ui.primary.label:hover,
.ui.primary.button:hover, .ui.primary.button:hover,
.ui.primary.buttons .button:hover { .ui.primary.buttons .button:hover {
background-color: var(--color-primary) !important; background-color: var(--color-primary-hover) !important;
color: var(--color-primary-contrast) !important; color: var(--color-primary-contrast) !important;
} }
/* Small buttons .ui.primary.label {
* e.g. HTTP/SSH clone buttons in repo homepage. */ background-color: var(--color-primary-bg) !important;
.ui.basic.primary.button, border-color: var(--color-primary-bg) !important;
.ui.basic.primary.buttons .button { color: var(--color-primary) !important;
box-shadow: none !important;
}
.ui.menu,
.ui.vertical.menu {
border-color: var(--color-secondary-alpha-30) !important;
}
/* Vertical menu.
* Used in: /issues */
.ui.vertical.menu {
padding: var(--spacer-1);
border-radius: var(--border-radius);
}
/* Vertical menu: active item.
* Gitea adds a "primary" class to what would be the active item. */
.ui.vertical.menu > .item.primary {
background-color: var(--color-active) !important;
box-shadow: none !important;
}
/* Dropdown menus.
* e.g. user menu. */
.ui.dropdown .menu {
border-radius: var(--border-radius) !important;
box-shadow: var(--box-shadow-dropdown-menu) !important;
}
/* Replace gitea's hardcoded border-radius with variables. */
.ui.compact.menu {
border-radius: var(--border-radius-outer);
}
.ui.compact.menu>.item:first-child {
border-radius: var(--border-radius) 0 0 var(--border-radius);
}
.ui.compact.menu>.item:last-child {
border-radius: 0 var(--border-radius) var(--border-radius) 0;
}
.ui.menu.new-menu {
border-color: var(--color-secondary-alpha-50) !important;
}
/* Top navigation bar.
* e.g. Issues, Pull Requests, etc. */
.ui.menu.bar {
border-color: var(--color-border);
}
.ui.menu .item>.label {
color: var(--color-label-text);
}
.following.bar #navbar {
min-height: 45px;
}
/* Align items (notifications, dropdown toggle) to the right. */
.following.bar #navbar .brand {
justify-content: flex-end !important;
}
.ui.tabular.menu {
border-color: var(--color-border);
}
/* Navbar logo. */
.item.brand a {
opacity: .8;
transition: opacity var(--transition-speed) ease-in-out;
}
.item.brand a:hover {
opacity: 1;
}
.item.brand svg {
height: 21px;
color: #fff;
}
.ui.breadcrumb a {
color: var(--color-text);
}
/* Cards. */
.ui.cards>.card .meta,
.ui.card .meta {
color: var(--color-text-dark-2);
}
.ui.card.card-with-icon .icon svg {
margin: 0 var(--spacer) 0 0;
width: 50px;
opacity: .7;
}
/* Users/Organizations list. */
/* Fix alignment issue since */
.ui.user.list img.avatar,
.ui.user.list img.avatar+.content {
display: inline-block;
}
.ui.user.list img.avatar {
position: relative;
top: 3px;
vertical-align: initial !important;
}
.ui.user.list .content {
margin-left: var(--spacer-2);
width: auto;
}
.ui.user.list .content .description .svg {
margin-right: var(--spacer-1);
position: relative;
top: 2px;
}
.issue.list>.item+.item {
border-color: var(--color-border);
}
/* Divider. */
.ui.divider:not(.vertical, .horizontal) {
border-top-color: var(--color-border) !important;
}
/* Homepage. */
.home a {
color: var(--color-accent);
} }
/* (from arc-green) /* (from arc-green)
@@ -652,3 +520,17 @@
.CodeMirror.cm-s-default .cm-error, .CodeMirror.cm-s-paper .cm-error { .CodeMirror.cm-s-default .cm-error, .CodeMirror.cm-s-paper .cm-error {
color: #dbdbeb; color: #dbdbeb;
} }
/* Progress bar. */
progress::-moz-progress-bar,
progress::-webkit-progress-value {
background-color: var(--color-primary);
}
.issue-list-toolbar-left a.item {
opacity: 50%;
}
.issue-list-toolbar-left a.active.item {
opacity: 100%;
}

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 124 KiB

View File

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View File

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -5,13 +5,13 @@
<p>Blender development is split into the following modules and projects.</p> <p>Blender development is split into the following modules and projects.</p>
<ul class="mb-0"> <ul class="mb-0">
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Animation & Rigging">Animation & Rigging</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Animation & Rigging">Animation & Rigging</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Asset Browser">Asset Browser</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Asset System">Asset System</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Core">Core</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Core">Core</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Grease Pencil">Grease Pencil</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Grease Pencil">Grease Pencil</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline, Assets & I/O">Pipeline, Assets & I/O</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline & I/O">Pipeline & I/O</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms, Builds, Tests & Devices">Platforms, Builds, Tests & Devices</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms & Builds">Platforms & Builds</a></li>
<li> <li>
Python & Add-ons Python & Add-ons
<ul> <ul>
@@ -23,8 +23,8 @@
<li> <li>
Rendering Rendering
<ul> <ul>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: EEVEE & Viewport">EEVEE & Viewport</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Render & Cycles">Render & Cycles</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Render & Cycles">Render & Cycles</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Viewport & EEVEE">Viewport & EEVEE</a></li>
</ul> </ul>
</li> </li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Sculpt, Paint & Texture">Sculpt, Paint & Texture</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Sculpt, Paint & Texture">Sculpt, Paint & Texture</a></li>

View File

@@ -1,27 +1,111 @@
<div class="ui fluid card" style="width: 100%;"> <div class="ui fluid card" style="width: 100%;">
<div class="content"> <div class="content">
<div class="ui grid">
<div class="eight wide column">
<h3>Ongoing Projects</h3> <h3>Ongoing Projects</h3>
<p>Focused activities to advance Blender.</p> </div>
<div class="eight wide column right" style="text-align: right">
<h3>
<a href="{{AppSubUrl}}/blender/blender/">
<svg data-v-9113ce96="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"
class="svg octicon-repo repo-list-icon" style="margin-top: .333rem;">
<path
d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.5 2.5 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.5 2.5 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.25.25 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z">
</path>
</svg>
blender/blender
</a>
</h3>
</div>
</div>
<div class="description"> <table class="ui celled striped table">
<ul> <thead>
<li> <tr>
<a href="https://code.blender.org/2022/11/the-future-of-character-animation-rigging/"> <th>Project</th>
The Future of Character Animation <th>Description</th>
</a> <th>Status</th>
<li> </tr>
<a href="https://code.blender.org/2022/12/brush-assets-workflow/"> </thead>
Brush Assets <tbody>
</a> <tr>
</li> <td>
</ul> <a href="{{AppSubUrl}}/studio/flamenco/issues/104437">Blender Asset Tracer</a>
</div> </td>
</div> <td>
<div class="extra content"> BAT version 2 for Flamenco
<span class="right floated"> </td>
<a href="https://code.blender.org"> <td>
See all articles {{svg "octicon-chevron-right" 18}} <a href="{{AppSubUrl}}/studio/flamenco/issues/104437">Under Development</a>
</a> </td>
</span> </tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/141609">Hair Dynamics</a>
</td>
<td>
High quality hair dynamics modifier.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/141609">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/153880">Modeling: Looptools</a>
</td>
<td>
Porting Looptools into core Blender.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/153880">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/133001">Project Setup</a>
</td>
<td>
Shared "project" environment for different blend-files.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/133001">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/134495">Remote Asset Libraries</a>
</td>
<td>
Add support for online / remote hosted asset libraries.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/projects/707">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/141089">VR Location Scouting</a>
</td>
<td>
Support blocking camera vantage points while immersed in VR (Virtual Reality)
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/141089">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/148059">VSE: Compositor Modifier</a>
</td>
<td>
Implement a compositor modifier in the Video Sequencer.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/148059">Under Development</a>
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>

View File

@@ -6,27 +6,27 @@
<div class="description"> <div class="description">
<ul> <ul>
<li> <li>
<a href="{{AppSubUrl}}/blender/blender/milestone/18">Blender 4.1</a> <a href="{{AppSubUrl}}/blender/blender/milestone/33">Blender 5.2 LTS</a>
— <strong>Bcon1</strong>: New features and changes — <strong>Alpha</strong>: New features and changes
</li> </li>
<li> <li>
<a href="{{AppSubUrl}}/blender/blender/milestone/7">Blender 4.0</a> <a href="{{AppSubUrl}}/blender/blender/milestone/32">Blender 5.1</a>
<strong>Bcon3</strong>: Bug fixing only Released March 17, 2026
</li> </li>
<li> <li>
<a href="{{AppSubUrl}}/blender/blender/milestone/5">Blender 3.6 LTS</a> <a href="{{AppSubUrl}}/blender/blender/milestone/25">Blender 4.5 LTS</a>
— Released on Jun 27, 2023 — Released July 15, 2025
</li> </li>
<li> <li>
<a href="{{AppSubUrl}}/blender/blender/milestone/3">Blender 3.3 LTS</a> <a href="{{AppSubUrl}}/blender/blender/milestone/19">Blender 4.2 LTS</a>
— Released on Sep 7, 2022 — Released Jul 16, 2024
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="extra content"> <div class="extra content">
<span class="right floated"> <span class="right floated">
<a href="https://wiki.blender.org/wiki/Process/Release_Cycle"> <a href="https://developer.blender.org/docs/handbook/release_process/release_cycle/">
Read more {{svg "octicon-chevron-right" 18}} Read more {{svg "octicon-chevron-right" 18}}
</a> </a>
</span> </span>

View File

@@ -1,47 +1,49 @@
<!-- @build Blender Web Assets v2.0.0-beta.2 - Do not remove comment -->
<style> <style>
/* This style block is copied across all sites using the developer navbar.
* For custom styling on this website, add a <style> block after this one. */
/* Variables. */ /* Variables. */
.nav-global { .nav-global {
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
--nav-global-color-bg: hsl(213, 10%, 14%); /*
--nav-global-color-text: hsl(213, 5%, 64%); *Variables come from, and match partial _variables, and are prefixed with 'bwa-'.
--nav-global-color-text-secondary: hsl(213, 5%, 44%); *Sizes must be defined in pixels as default rem-sizing might vary in projects.
--nav-global-color-text-highlight: hsl(213, 5%, 84%); */
--nav-global-color-text-hover: white;
--nav-global-color-text-active: white;
--nav-global-color-primary: hsl(204, 98%, 54%); --bwa-color-bg-primary: hsl(213, 10%, 21%);
--nav-global-color-primary-bg: hsla(204, 100%, 46%, .1); --bwa-color-bg-tertiary: hsl(213, 10%, 14%);
--nav-global-color-button-bg-hover: hsl(213, 10%, 24%); --bwa-color-text: hsl(213, 10%, 80%);
--nav-global-color-button-text: var(--nav-global-color-text); --bwa-color-text-primary: hsl(213, 10%, 98%);
--nav-global-color-menu-bg: var(--nav-global-color-bg); /* Colours Components. */
--nav-global-color-menu-border: hsl(213, 10%, 18%); --bwa-border-color: hsla(213, 10%, 80%, .15);
--nav-global-color-menu-zindex: 1040; --bwa-btn-color-bg-hover: hsl(213, 10%, 30%);
--nav-global-box-shadow-menu: 0px 5px 15px -2px rgba(0, 0, 0, 0.33), 0px 5px 15px -5px rgba(0, 0, 0, 0.33); /* Colours Status. */
--nav-global-box-shadow-menu-item: 0px 1px 4px 0px rgba(0, 0, 0, 0.05), 0px 15px 20px -1px rgba(0, 0, 0, 0.025); --bwa-color-accent: hsl(204deg, 100%, 50%);
--bwa-color-accent-bg: hsla(204deg, 100%, 50%, .1);
--bwa-color-accent-bg-hover: hsla(204deg, 100%, 50%, .2);
--nav-global-navbar-height: var(--navbar-primary-height, 56px); --bwa-border-radius: 6px;
--bwa-border-radius-lg: 12px;
--nav-global-spacer: 15px; --bwa-transition-speed: 150ms;
--nav-global-spacer-sm: 10px;
--nav-global-spacer-xs: 5px;
--nav-global-border-radius: 6px; --bwa-zindex-dropdown: 1040;
--nav-global-border-radius-lg: 10px; --bwa-zindex-fixed: 1030;
--nav-global-button-height: 35px; /* Grid. */
--nav-global-link-padding-x: var(--nav-global-spacer); --bwa-spacer: 16px;
--nav-global-link-padding-y: var(--nav-global-spacer-sm); --bwa-spacer-1: calc(var(--bwa-spacer) * 0.25);
--bwa-spacer-2: calc(var(--bwa-spacer) * 0.5);
--bwa-spacer-3: var(--bwa-spacer);
--nav-global-font-size: 14px; /* Type. */
--nav-global-transition-speed: 150ms; --bwa-fs-base: 14px;
/* Components. */
--bwa-navbar-zindex: calc(var(--bwa-zindex-fixed) + 1);
} }
/* Reset. */ /* Reset. */
@@ -50,8 +52,6 @@
.nav-global :not(svg|*), .nav-global :not(svg|*),
.nav-global *::before, .nav-global *::before,
.nav-global *::after { .nav-global *::after {
-webkit-box-sizing: border-box;
all: unset; all: unset;
display: revert; display: revert;
box-sizing: border-box; box-sizing: border-box;
@@ -64,17 +64,17 @@
.nav-global * { .nav-global * {
-webkit-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
font-family: 'Heebo', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-variation-settings: 'wght' 400; font-variation-settings: 'wght' 400;
font-weight: normal; font-weight: normal;
} }
.nav-global { .nav-global {
background-color: var(--nav-global-color-bg); background-color: var(--bwa-color-bg-tertiary);
color: var(--nav-global-color-text); color: var(--bwa-color-text);
display: flex; display: flex;
position: relative; position: relative;
z-index: var(--zindex-fixed); z-index: var(--bwa-navbar-zindex);
} }
.nav-global h3, .nav-global h3,
@@ -102,11 +102,12 @@
.nav-global nav { .nav-global nav {
align-items: center; align-items: center;
display: flex; display: flex;
line-height: var(--nav-global-font-size); line-height: var(--bwa-fs-base);
font-size: var(--nav-global-font-size); font-size: var(--bwa-fs-base);
height: var(--nav-global-navbar-height); justify-content: space-between;
min-height: calc(var(--bwa-spacer) * 4);
margin: 0 auto; margin: 0 auto;
padding: 0 var(--nav-global-spacer); padding: 0 var(--bwa-spacer);
position: relative; position: relative;
} }
@@ -115,23 +116,34 @@
color: inherit; color: inherit;
cursor: pointer; cursor: pointer;
text-decoration: none; text-decoration: none;
transition: background-color var(--nav-global-transition-speed) ease-out, color var(--nav-global-transition-speed) ease-out; transition: background-color var(--bwa-transition-speed) ease-out, color var(--bwa-transition-speed) ease-out;
}
.nav-global-nav-links {
flex-grow: 1;
}
.nav-global-nav-links a:not(.dropdown-item) {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.nav-global a:not(.dropdown-item):hover { .nav-global a:not(.dropdown-item):hover {
color: var(--nav-global-color-text-hover); color: var(--bwa-color-text-primary);
} }
/* Navigation items. */ /* Navigation items. */
.nav-global nav > ul { .nav-global nav>ul {
flex-wrap: wrap;
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.nav-global nav > ul, .nav-global nav>ul,
.nav-global nav > ul > li, .nav-global nav>ul>li,
.nav-global nav > ul > li > a, .nav-global nav>ul>li>a,
.nav-global-apps-dropdown-container { .nav-global-apps-dropdown-container {
align-items: center; align-items: center;
display: inline-flex; display: inline-flex;
@@ -142,98 +154,143 @@
position: relative; position: relative;
} }
.nav-global nav > ul > li > a { .nav-global nav>ul>li>a {
padding: var(--nav-global-link-padding-y) var(--nav-global-link-padding-x); padding: var(--bwa-spacer-2);
} }
.nav-global nav > a.is-active, @media (min-width: 1320px) {
.nav-global nav > a.is-active svg, .nav-global nav>ul>li>a {
.nav-global nav > ul > li > a.is-active, padding-left: var(--bwa-spacer);
.nav-global .nav-global-link-active, padding-right: var(--bwa-spacer);
.nav-global .nav-global-link-active svg { }
color: var(--nav-global-color-text-active) !important; }
fill: var(--nav-global-color-text-active);
font-variation-settings: 'wght' 500; .nav-global nav>a.is-active,
.nav-global nav>a.is-active svg,
.nav-global nav>ul>li>a.is-active {
color: var(--bwa-color-text-primary) !important;
fill: var(--bwa-color-text-primary);
font-variation-settings: 'wght', 500;
font-weight: bold;
} }
.nav-global .nav-global-links-right { .nav-global .nav-global-links-right {
margin-left: auto; flex-wrap: nowrap;
gap: 0 var(--bwa-spacer-2);
} }
/* Logo. */ /* Logo. */
.nav-global a.nav-global-logo { .nav-global a.nav-global-logo {
margin-right: var(--nav-global-spacer); margin-right: var(--bwa-spacer);
position: relative; position: relative;
top: 2px; top: 2px;
white-space: nowrap;
} }
.nav-global a.nav-global-logo strong { .nav-global a.nav-global-logo strong {
margin-inline: var(--nav-global-spacer-sm); margin-inline: var(--bwa-spacer-2);
font-size: 18px; font-size: 18px;
} }
.nav-global .nav-global-logo svg { .nav-global .nav-global-logo svg,
.nav-global .nav-global-logo img {
height: 21px; height: 21px;
pointer-events: none;
} }
.nav-global a.nav-global-logo svg { .nav-global a.nav-global-logo svg {
position: relative; position: relative;
top: -4px; top: calc(var(--bwa-spacer-1) * -1);
} }
.nav-global svg { .nav-global svg {
fill: var(--nav-global-color-text); fill: var(--bwa-color-text);
transition: fill var(--nav-global-transition-speed) ease-out; transition: fill var(--bwa-transition-speed) ease-out;
} }
.nav-global .nav-global-logo:hover svg { .nav-global .nav-global-logo:hover svg {
fill: white; fill: var(--bwa-color-text-primary);
}
.nav-global .nav-global-logo.is-active,
.nav-global .nav-global-logo.is-active svg,
// TODO: make classes 'is-active' and 'nav-global-btn-active' consistent
.nav-global button.nav-global-btn-active svg {
color: var(--bwa-color-text-primary);
fill: var(--bwa-color-text-primary);
} }
/* Apps button. */ /* Apps button. */
.nav-global {
--bwa-nav-global-btn-height: calc(var(--bwa-spacer) * 2.25);
}
.nav-global button, .nav-global button,
.nav-global .nav-global-btn { .nav-global .nav-global-btn {
-webkit-appearance: button; -webkit-appearance: button;
align-items: center; align-items: center;
background-color: transparent; background-color: transparent;
border-radius: var(--nav-global-border-radius); border-radius: var(--bwa-border-radius);
border: 0; border: 0;
color: var(--nav-global-color-button-text); color: var(--bwa-btn-color-text);
cursor: pointer; cursor: pointer;
display: inline-flex; display: inline-flex;
font: inherit; font: inherit;
height: var(--nav-global-button-height); height: var(--bwa-nav-global-btn-height);
margin: 0; margin: 0;
outline: 0; outline: 0;
overflow: visible; overflow: visible;
padding: var(--nav-global-spacer-xs) var(--nav-global-spacer); padding: var(--bwa-spacer-1) var(--bwa-spacer-2);
text-transform: none; text-transform: none;
transition: background-color var(--nav-global-transition-speed) ease-out, color var(--nav-global-transition-speed) ease-out, transform var(--nav-global-transition-speed) ease-out; transition: background-color var(--bwa-transition-speed) ease-out, color var(--bwa-transition-speed) ease-out, transform var(--bwa-transition-speed) ease-out;
white-space: nowrap; white-space: nowrap;
} }
/* Button overrides. */
/*
*Button overrides for Web Assets button components for BWA projects.
*/
.nav-global button,
.nav-global .btn {
height: var(--bwa-nav-global-btn-height);
line-height: 1;
}
.nav-global .btn-accent {
color: white !important;
}
.nav-global .nav-global-btn.nav-global-btn-primary {
padding-left: var(--bwa-spacer);
padding-right: var(--bwa-spacer);
}
.nav-global button span, .nav-global button span,
.nav-global .nav-global-btn span { .nav-global .nav-global-btn span {
white-space: nowrap; white-space: nowrap;
} }
.nav-global button:hover, .nav-global button:hover,
.nav-global .nav-global-btn:hover { .nav-global .nav-global-btn:hover,
background-color: var(--nav-global-color-button-bg-hover); .nav-global button.nav-global-btn-active,
color: var(--nav-global-color-text-hover); .nav-global .nav-global-btn.nav-global-btn-active {
background-color: var(--bwa-btn-color-bg-hover);
color: var(--bwa-color-text-primary);
cursor: pointer; cursor: pointer;
} }
.nav-global button.nav-global-btn-active, .nav-global .nav-global-btn span {
.nav-global .nav-global-btn.nav-global-btn-active { margin-left: var(--bwa-spacer-2);
background-color: var(--nav-global-color-primary-bg);
color: var(--nav-global-color-primary);
} }
.nav-global button.nav-global-btn-active svg, .nav-global .nav-global-btn-primary {
.nav-global .nav-global-btn.nav-global-btn-active svg { background-color: var(--bwa-color-accent-bg);
fill: var(--nav-global-color-primary); color: var(--bwa-color-accent) !important;
}
.nav-global .nav-global-btn-primary:hover {
background-color: var(--bwa-color-accent-bg-hover);
} }
.nav-global .nav-global-icon { .nav-global .nav-global-icon {
@@ -242,8 +299,12 @@
width: 20px; width: 20px;
} }
.nav-global-icon-dropdown-toggle { .nav-global .nav-global-icon-alt {
margin-left: var(--nav-global-spacer-xs); transform: rotate(90deg);
}
.nav-global .dropdown-toggle.active {
color: var(--bwa-color-text-primary)
} }
.nav-global button:hover svg, .nav-global button:hover svg,
@@ -253,18 +314,18 @@
/* Apps dropdown menu. */ /* Apps dropdown menu. */
.nav-global .nav-global-apps-menu { .nav-global .nav-global-apps-menu {
background-color: var(--nav-global-color-menu-bg); background-color: var(--bwa-color-bg-tertiary);
border-radius: var(--nav-global-border-radius-lg); border-radius: var(--bwa-border-radius-lg);
border: thin solid var(--nav-global-color-menu-border); border: thin solid var(--bwa-border-color);
box-shadow: var(--nav-global-box-shadow-menu); box-shadow: 0 var(--bwa-spacer-1) var(--bwa-spacer) -2px rgba(0, 0, 0, 0.33), 0px var(--bwa-spacer-1) var(--bwa-spacer) calc(var(--bwa-spacer-1) * -1) rgba(0, 0, 0, 0.33);
display: none; display: none;
padding: var(--nav-global-spacer-sm); padding: var(--bwa-spacer-2);
position: absolute; position: absolute;
right: 0; right: 0;
top: calc(100% + 15px); top: calc(100% + var(--bwa-spacer));
visibility: hidden; visibility: hidden;
width: 640px; width: 640px;
z-index: var(--nav-global-color-menu-zindex); z-index: var(--bwa-zindex-dropdown);
} }
.nav-global .nav-global-dropdown.is-visible { .nav-global .nav-global-dropdown.is-visible {
@@ -273,10 +334,11 @@
} }
/* Tiny triangle in the corner. */ /* Tiny triangle in the corner. */
// TODO: consider removing for consistency
.nav-global .nav-global-apps-menu::before { .nav-global .nav-global-apps-menu::before {
background-color: var(--nav-global-color-menu-bg); background-color: var(--bwa-color-bg-tertiary);
border-radius: 3px; border-radius: 3px;
border: 2px var(--nav-global-color-menu-bg) solid; border: 2px var(--bwa-color-bg-tertiary) solid;
content: ''; content: '';
display: block; display: block;
height: .85rem; height: .85rem;
@@ -291,15 +353,15 @@
.nav-global .nav-global-apps-menu ul { .nav-global .nav-global-apps-menu ul {
border-bottom: 2px solid rgba(255, 255, 255, .05); border-bottom: 2px solid rgba(255, 255, 255, .05);
display: grid; display: grid;
gap: var(--nav-global-spacer-sm); gap: var(--bwa-spacer-2);
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
list-style: none; list-style: none;
margin: 0 0 var(--nav-global-spacer-xs) 0; margin: 0 0 var(--bwa-spacer-1) 0;
padding: var(--nav-global-spacer-xs) 0 var(--nav-global-spacer-sm) 0; padding: var(--bwa-spacer-1) 0 var(--bwa-spacer-2) 0;
} }
.nav-global .nav-global-apps-menu ul>li>a { .nav-global .nav-global-apps-menu ul>li>a {
border-radius: var(--nav-global-border-radius-lg); border-radius: var(--bwa-border-radius-lg);
display: flex; display: flex;
flex: 1; flex: 1;
height: 100%; height: 100%;
@@ -307,45 +369,46 @@
.nav-global .nav-global-apps-menu ul>li>a:hover { .nav-global .nav-global-apps-menu ul>li>a:hover {
background-color: rgba(255, 255, 255, .05); background-color: rgba(255, 255, 255, .05);
color: var(--nav-global-color-text-active); color: var(--bwa-color-text-primary);
box-shadow: var(--nav-global-box-shadow-menu-item); box-shadow: 0px 1px var(--bwa-spacer-1) 0 rgba(0, 0, 0, 0.05), 0 var(--bwa-spacer) 20px -1px rgba(0, 0, 0, 0.025);
} }
.nav-global .nav-global-apps-menu ul>li>a:hover h4, .nav-global .nav-global-apps-menu ul>li>a:hover h4,
.nav-global .nav-global-apps-menu ul>li>a:hover svg { .nav-global .nav-global-apps-menu ul>li>a:hover svg {
color: var(--nav-global-color-primary); color: var(--bwa-color-accent);
fill: var(--nav-global-color-primary); fill: var(--bwa-color-accent);
} }
.nav-global .nav-global-apps-menu h3 { .nav-global .nav-global-apps-menu h3 {
color: white; color: white;
display: inline-block; display: inline-block;
font-size: 13px; font-size: 12px;
line-height: 18px; line-height: var(--bwa-spacer);
margin: 0; margin: 0;
margin-top: 2px;
opacity: .3; opacity: .3;
padding-left: var(--nav-global-spacer); padding-left: var(--bwa-spacer);
} }
.nav-global .nav-global-apps-menu h4 { .nav-global .nav-global-apps-menu h4 {
color: var(--nav-global-color-text-highlight); color: var(--bwa-color-text-primary);
font-size: 17px; font-size: 18px;
line-height: 18px; line-height: 20px;
margin: var(--nav-global-spacer-xs) 0 0; margin: var(--bwa-spacer-1) 0 0;
padding: var(--nav-global-spacer-sm) var(--nav-global-spacer) 0; padding: var(--bwa-spacer-2) var(--bwa-spacer) 0;
transition: color var(--nav-global-transition-speed) ease-out; transition: color var(--bwa-transition-speed) ease-out;
} }
.nav-global .nav-global-apps-menu p { .nav-global .nav-global-apps-menu p {
font-size: 15px; font-size: var(--bwa-fs-base);
line-height: 20px; line-height: 20px;
margin: 0; margin: 0;
opacity: .8; opacity: .8;
padding: var(--nav-global-spacer-xs) var(--nav-global-spacer) var(--nav-global-spacer-sm); padding: var(--bwa-spacer-1) var(--bwa-spacer) var(--bwa-spacer-2);
} }
.nav-global .nav-global-apps-menu figure { .nav-global .nav-global-apps-menu figure {
margin: var(--nav-global-spacer) 0 0 var(--nav-global-spacer); margin: var(--bwa-spacer) 0 0 var(--bwa-spacer);
} }
.nav-global .nav-global-apps-menu ul>li>a svg { .nav-global .nav-global-apps-menu ul>li>a svg {
@@ -362,7 +425,7 @@
.nav-global .nav-global-apps-menu-section-donate a svg { .nav-global .nav-global-apps-menu-section-donate a svg {
fill: hsl(352, 90%, 62%) !important; fill: hsl(352, 90%, 62%) !important;
transition: transform var(--nav-global-transition-speed) ease-out; transition: transform var(--bwa-transition-speed) ease-out;
} }
.nav-global .nav-global-apps-menu-section-donate ul>li:first-child>a { .nav-global .nav-global-apps-menu-section-donate ul>li:first-child>a {
@@ -382,91 +445,96 @@
color: white; color: white;
} }
/* Mobile. */ /* Mobile. */
.nav-global button.nav-global-logo { .nav-global button.nav-global-logo {
display: none; display: none;
visibility: hidden; visibility: hidden;
} }
@media (max-width: 767px) {
@media (max-width: 767px) {
.nav-global-apps-dropdown-container, .nav-global-apps-dropdown-container,
.nav-global a.nav-global-logo { .nav-global a.nav-global-logo {
display: none; display: none;
} }
.nav-global button.nav-global-logo { .nav-global button.nav-global-logo {
display: block; display: flex;
visibility: visible; visibility: visible;
} }
.nav-global button.nav-global-logo strong,
.nav-global button.nav-global-logo svg {
margin-right: var(--bwa-spacer-2)
}
.nav-global .nav-global-nav-links { .nav-global .nav-global-nav-links {
align-items: flex-start; align-items: flex-start;
background-color: var(--nav-global-color-menu-bg); background-color: var(--bwa-color-bg-primary);
border-radius: var(--nav-global-border-radius-lg); border-radius: 6px;
display: none; display: none;
flex-direction: column; flex-direction: column;
left: 1rem; height: auto;
padding: 0 var(--nav-global-spacer-sm); padding: var(--bwa-spacer-1);
position: absolute; position: absolute;
top: calc(100% + .5rem); top: 72px;
visibility: visible; visibility: visible;
width: 10rem; z-index: var(--bwa-zindex-dropdown);
z-index: var(--nav-global-color-menu-zindex);
} }
.nav-global .nav-global-nav-links.is-visible { .nav-global .nav-global-nav-links.is-visible {
display: flex; display: flex;
} }
.nav-global .nav-global-nav-links::before { .nav-global .nav-global-nav-links li {
background-color: var(--nav-global-color-menu-bg); align-items: center;
border-radius: 3px; display: flex;
border: 2px var(--nav-global-color-menu-bg) solid; margin-bottom: var(--bwa-spacer-1);
content: '';
display: block;
height: 0.8rem;
position: absolute;
left: 1.5rem;
top: -0.133rem;
transform: rotate(45deg);
width: 1rem;
z-index: -1;
}
.nav-global nav>ul {
height: initial;
}
.nav-global .nav-global-nav-links>li {
border-bottom: 2px solid rgba(255, 255, 255, .05);
width: 100%; width: 100%;
} }
.nav-global .nav-global-nav-links>li:last-child { .nav-global .nav-global-nav-links li:last-child {
border: none; margin-bottom: 0;
} }
.nav-global .nav-global-nav-links>li>a { .nav-global .nav-global-nav-links li a {
padding-inline: 0; border-radius: 6px;
color: var(--bwa-color-text);
display: inline-flex;
flex: 1;
line-height: initial;
padding: var(--bwa-spacer-2) var(--bwa-spacer);
transition: background-color var(--bwa-transition-speed) var(--bwa-transition-timing-fast), color var(--bwa-transition-speed) var(--bwa-transition-timing-fast);
text-decoration: none;
white-space: nowrap;
width: 100%; width: 100%;
} }
}
</style>
<style>
/* Custom styling for code.blender.org */ .nav-global .nav-global-nav-links li a:hover,
.nav-global .nav-global-nav-links li a.nav-global-link-active {
background-color: var(--bwa-color-accent-bg);
color: var(--bwa-color-accent);
text-decoration: none;
}
}
.nav-global .nav-global-nav-links li a.nav-global-link-active {
font-variation-settings: 'wght' 700;
font-weight: bold;
}
/* Site-specific tweaks. */
/* Make sure to start every line with ".nav-global" /* Make sure to start every line with ".nav-global"
* so changes affect the developer navbar only. */ * so changes affect the developer navbar only. */
/* Limit navbar width on large screens. */ /* Limit navbar width on large screens (optional). */
@media (min-width: 1200px) { /*
[role="main"] > .dashboard-navbar, @media (min-width: 1380px) { // grid breakpoint 'xl'
.full.height > .menu.bar > [role="navigation"],
.nav-global .nav-global-container { .nav-global .nav-global-container {
max-width: 1170px; max-width: var(--container-width);
} }
} }
*/
</style> </style>
<div class="nav-global"> <div class="nav-global">
@@ -476,26 +544,28 @@
<svg fill-rule="nonzero" viewBox="0 0 200 162.05"> <svg fill-rule="nonzero" viewBox="0 0 200 162.05">
<path <path
d="M61.1 104.56c.05 2.6.88 7.66 2.12 11.61a61.27 61.27 0 0 0 13.24 22.92 68.39 68.39 0 0 0 23.17 16.64 74.46 74.46 0 0 0 30.42 6.32 74.52 74.52 0 0 0 30.4-6.42 68.87 68.87 0 0 0 23.15-16.7 61.79 61.79 0 0 0 13.23-22.97 58.06 58.06 0 0 0 2.07-25.55 59.18 59.18 0 0 0-8.44-23.1 64.45 64.45 0 0 0-15.4-16.98h.02L112.76 2.46l-.16-.12c-4.09-3.14-10.96-3.13-15.46.02-4.55 3.18-5.07 8.44-1.02 11.75l-.02.02 26 21.14-79.23.08h-.1c-6.55.01-12.85 4.3-14.1 9.74-1.27 5.53 3.17 10.11 9.98 10.14v.02l40.15-.07-71.66 55-.27.2c-6.76 5.18-8.94 13.78-4.69 19.23 4.32 5.54 13.51 5.55 20.34.03l39.1-32s-.56 4.32-.52 6.91zm100.49 14.47c-8.06 8.2-19.34 12.86-31.54 12.89-12.23.02-23.5-4.6-31.57-12.79-3.93-4-6.83-8.59-8.61-13.48a35.57 35.57 0 0 1 2.34-29.25 39.1 39.1 0 0 1 9.58-11.4 44.68 44.68 0 0 1 28.24-9.85 44.59 44.59 0 0 1 28.24 9.77 38.94 38.94 0 0 1 9.58 11.36 35.58 35.58 0 0 1 4.33 14.18 35.1 35.1 0 0 1-1.98 15.05 37.7 37.7 0 0 1-8.61 13.52zm-57.6-27.91a23.55 23.55 0 0 1 8.55-16.68 28.45 28.45 0 0 1 18.39-6.57 28.5 28.5 0 0 1 18.38 6.57 23.57 23.57 0 0 1 8.55 16.67c.37 6.83-2.37 13.19-7.2 17.9a28.18 28.18 0 0 1-19.73 7.79c-7.83 0-14.84-3-19.75-7.8a23.13 23.13 0 0 1-7.19-17.88z" /> d="M61.1 104.56c.05 2.6.88 7.66 2.12 11.61a61.27 61.27 0 0 0 13.24 22.92 68.39 68.39 0 0 0 23.17 16.64 74.46 74.46 0 0 0 30.42 6.32 74.52 74.52 0 0 0 30.4-6.42 68.87 68.87 0 0 0 23.15-16.7 61.79 61.79 0 0 0 13.23-22.97 58.06 58.06 0 0 0 2.07-25.55 59.18 59.18 0 0 0-8.44-23.1 64.45 64.45 0 0 0-15.4-16.98h.02L112.76 2.46l-.16-.12c-4.09-3.14-10.96-3.13-15.46.02-4.55 3.18-5.07 8.44-1.02 11.75l-.02.02 26 21.14-79.23.08h-.1c-6.55.01-12.85 4.3-14.1 9.74-1.27 5.53 3.17 10.11 9.98 10.14v.02l40.15-.07-71.66 55-.27.2c-6.76 5.18-8.94 13.78-4.69 19.23 4.32 5.54 13.51 5.55 20.34.03l39.1-32s-.56 4.32-.52 6.91zm100.49 14.47c-8.06 8.2-19.34 12.86-31.54 12.89-12.23.02-23.5-4.6-31.57-12.79-3.93-4-6.83-8.59-8.61-13.48a35.57 35.57 0 0 1 2.34-29.25 39.1 39.1 0 0 1 9.58-11.4 44.68 44.68 0 0 1 28.24-9.85 44.59 44.59 0 0 1 28.24 9.77 38.94 38.94 0 0 1 9.58 11.36 35.58 35.58 0 0 1 4.33 14.18 35.1 35.1 0 0 1-1.98 15.05 37.7 37.7 0 0 1-8.61 13.52zm-57.6-27.91a23.55 23.55 0 0 1 8.55-16.68 28.45 28.45 0 0 1 18.39-6.57 28.5 28.5 0 0 1 18.38 6.57 23.57 23.57 0 0 1 8.55 16.67c.37 6.83-2.37 13.19-7.2 17.9a28.18 28.18 0 0 1-19.73 7.79c-7.83 0-14.84-3-19.75-7.8a23.13 23.13 0 0 1-7.19-17.88z" />
<strong>Developer</strong>
</svg> </svg>
<strong>Developer</strong>
</a> </a>
<button class="nav-global-logo js-dropdown-toggle" data-toggle-menu-id="nav-global-nav-links"> <button class="nav-global-logo js-dropdown-toggle" data-toggle-menu-id="nav-global-nav-links">
<svg fill-rule="nonzero" viewBox="0 0 850.2 162.05"> <svg fill-rule="nonzero" viewBox="0 0 200 162.05">
<path d="M61.1 104.56c.05 2.6.88 7.66 2.12 11.61a61.27 61.27 0 0 0 13.24 22.92 68.39 68.39 0 0 0 23.17 16.64 74.46 74.46 0 0 0 30.42 6.32 74.52 74.52 0 0 0 30.4-6.42 68.87 68.87 0 0 0 23.15-16.7 61.79 61.79 0 0 0 13.23-22.97 58.06 58.06 0 0 0 2.07-25.55 59.18 59.18 0 0 0-8.44-23.1 64.45 64.45 0 0 0-15.4-16.98h.02L112.76 2.46l-.16-.12c-4.09-3.14-10.96-3.13-15.46.02-4.55 3.18-5.07 8.44-1.02 11.75l-.02.02 26 21.14-79.23.08h-.1c-6.55.01-12.85 4.3-14.1 9.74-1.27 5.53 3.17 10.11 9.98 10.14v.02l40.15-.07-71.66 55-.27.2c-6.76 5.18-8.94 13.78-4.69 19.23 4.32 5.54 13.51 5.55 20.34.03l39.1-32s-.56 4.32-.52 6.91zm100.49 14.47c-8.06 8.2-19.34 12.86-31.54 12.89-12.23.02-23.5-4.6-31.57-12.79-3.93-4-6.83-8.59-8.61-13.48a35.57 35.57 0 0 1 2.34-29.25 39.1 39.1 0 0 1 9.58-11.4 44.68 44.68 0 0 1 28.24-9.85 44.59 44.59 0 0 1 28.24 9.77 38.94 38.94 0 0 1 9.58 11.36 35.58 35.58 0 0 1 4.33 14.18 35.1 35.1 0 0 1-1.98 15.05 37.7 37.7 0 0 1-8.61 13.52zm-57.6-27.91a23.55 23.55 0 0 1 8.55-16.68 28.45 28.45 0 0 1 18.39-6.57 28.5 28.5 0 0 1 18.38 6.57 23.57 23.57 0 0 1 8.55 16.67c.37 6.83-2.37 13.19-7.2 17.9a28.18 28.18 0 0 1-19.73 7.79c-7.83 0-14.84-3-19.75-7.8a23.13 23.13 0 0 1-7.19-17.88z" /> <path
<path d="M829.17 133.76h-15.9V64.39h15.13l.77 13.59zM850.07 79q-1.47-.25-3.14-.38-1.6-.13-3.2-.13-5.26 0-8.8 1.92-3.45 1.86-5.25 5.39-1.8 3.46-2.11 8.2l-3.66.07q0-8.78 2.31-15.77 2.3-6.99 6.92-11.1 4.62-4.1 11.54-4.1 1.35 0 3.02.26 1.66.26 2.5.58zm-76.55 56.04q-10.32 0-17.82-4.42-7.5-4.5-11.55-12.06-4.03-7.63-4.03-17.05v-2.63q0-10.84 4.1-18.85 4.1-8.08 11.22-12.5 7.18-4.43 16.22-4.43 10 0 16.6 4.36 6.6 4.3 9.88 12 3.27 7.62 3.27 17.69V104h-53.67V92.53h37.96v-1.22q-.13-4.04-1.54-7.56-1.4-3.53-4.49-5.7-3.01-2.19-8.07-2.19-5.07 0-8.53 2.89-3.46 2.82-5.26 8.01-1.8 5.13-1.8 12.12v2.63q0 5.9 2.19 10.58 2.18 4.68 6.34 7.43 4.17 2.7 9.94 2.7 5.58 0 9.87-2.18 4.36-2.18 7.5-6.29l8.34 8.34q-3.27 4.93-9.87 8.97-6.54 3.98-16.8 3.98zm-88.67 25.39h-15.9V64.39h14.68l1.22 13.33zm45-60.72q0 10.13-3.13 18.15-3.08 7.95-9.1 12.56-5.97 4.62-14.63 4.62-8.72 0-14.49-4.23-5.7-4.3-8.9-11.8-3.21-7.5-4.43-17.12v-4.55q1.22-10.26 4.42-17.89 3.2-7.7 8.91-11.99 5.71-4.36 14.3-4.36 8.79 0 14.81 4.43 6.03 4.42 9.1 12.37 3.15 7.95 3.15 18.47zm-15.9-1.34q0-6.22-1.6-11.29-1.53-5.06-5-8.01-3.4-2.95-8.9-2.95-3.98 0-6.87 1.35-2.88 1.28-4.87 3.65-1.92 2.37-3.01 5.64-1.1 3.2-1.54 7.05v11.6q.77 4.62 2.56 8.47 1.8 3.85 5.13 6.16 3.4 2.24 8.72 2.24 5.51 0 8.91-3.08 3.4-3.14 4.94-8.2 1.54-5.13 1.54-11.29zm-122.51.06q0-10.13 3.84-18.08 3.85-7.95 11.03-12.57 7.25-4.68 17.38-4.68 10.25 0 17.5 4.68 7.24 4.62 11.03 12.57 3.84 7.95 3.84 18.08v1.35q0 10.06-3.84 18.08-3.79 7.95-11.03 12.56-7.18 4.62-17.38 4.62-10.19 0-17.43-4.62-7.25-4.61-11.1-12.56-3.84-8.02-3.84-18.08zm15.9 1.35q0 6.15 1.73 11.28 1.73 5.07 5.32 8.14 3.65 3.08 9.42 3.08 5.71 0 9.3-3.08 3.65-3.07 5.32-8.14 1.73-5.13 1.73-11.28v-1.35q0-6.09-1.73-11.22-1.67-5.13-5.32-8.2-3.65-3.15-9.42-3.15-5.71 0-9.36 3.14-3.6 3.08-5.33 8.21-1.66 5.13-1.66 11.22zm-29.69 33.98h-15.9V35.28h15.9zm-56.67 1.28q-10.33 0-17.83-4.42-7.5-4.5-11.54-12.06-4.04-7.63-4.04-17.05v-2.63q0-10.84 4.1-18.85 4.11-8.08 11.23-12.5 7.18-4.43 16.22-4.43 10 0 16.6 4.36 6.6 4.3 9.88 12 3.27 7.62 3.27 17.69V104H495.2V92.53h37.96v-1.22q-.13-4.04-1.54-7.56-1.41-3.53-4.49-5.7-3.01-2.19-8.08-2.19-5.06 0-8.52 2.89-3.47 2.82-5.26 8.01-1.8 5.13-1.8 12.12v2.63q0 5.9 2.18 10.58t6.35 7.43q4.17 2.7 9.94 2.7 5.58 0 9.87-2.18 4.36-2.18 7.5-6.29l8.34 8.34q-3.27 4.93-9.88 8.97-6.54 3.98-16.8 3.98zM464.3 64.39h16.48l-23.98 69.37h-10.26l1.03-12.57zm-12.25 57 .77 12.37h-10.19l-24.17-69.37H435zm-65.88 13.65q-10.32 0-17.82-4.42-7.5-4.5-11.54-12.06-4.04-7.63-4.04-17.05v-2.63q0-10.84 4.1-18.85 4.1-8.08 11.22-12.5 7.18-4.43 16.22-4.43 10 0 16.6 4.36 6.61 4.3 9.88 12 3.27 7.62 3.27 17.69V104H360.4V92.53h37.95v-1.22q-.12-4.04-1.53-7.56-1.42-3.53-4.5-5.7-3-2.19-8.07-2.19t-8.53 2.89q-3.46 2.82-5.26 8.01-1.8 5.13-1.8 12.12v2.63q0 5.9 2.19 10.58 2.18 4.68 6.35 7.43 4.16 2.7 9.93 2.7 5.58 0 9.88-2.18 4.36-2.18 7.5-6.29l8.33 8.34q-3.27 4.93-9.87 8.97-6.54 3.98-16.8 3.98zm-107.64-1.28.12-13.27h19.75q8.6 0 14.36-3.72 5.77-3.72 8.72-10.65 2.95-6.98 2.95-16.67v-4.87q0-9.94-2.95-16.8-2.88-6.86-8.59-10.45-5.7-3.59-13.91-3.59h-20.84V40.41h20.84q12.5 0 21.93 5.51 9.48 5.52 14.8 15.45 5.33 9.94 5.33 23.34v4.74q0 13.47-5.32 23.4-5.33 9.94-14.94 15.46-9.56 5.45-22.38 5.45zm9.23 0h-16.54V40.4h16.54z" /> d="M61.1 104.56c.05 2.6.88 7.66 2.12 11.61a61.27 61.27 0 0 0 13.24 22.92 68.39 68.39 0 0 0 23.17 16.64 74.46 74.46 0 0 0 30.42 6.32 74.52 74.52 0 0 0 30.4-6.42 68.87 68.87 0 0 0 23.15-16.7 61.79 61.79 0 0 0 13.23-22.97 58.06 58.06 0 0 0 2.07-25.55 59.18 59.18 0 0 0-8.44-23.1 64.45 64.45 0 0 0-15.4-16.98h.02L112.76 2.46l-.16-.12c-4.09-3.14-10.96-3.13-15.46.02-4.55 3.18-5.07 8.44-1.02 11.75l-.02.02 26 21.14-79.23.08h-.1c-6.55.01-12.85 4.3-14.1 9.74-1.27 5.53 3.17 10.11 9.98 10.14v.02l40.15-.07-71.66 55-.27.2c-6.76 5.18-8.94 13.78-4.69 19.23 4.32 5.54 13.51 5.55 20.34.03l39.1-32s-.56 4.32-.52 6.91zm100.49 14.47c-8.06 8.2-19.34 12.86-31.54 12.89-12.23.02-23.5-4.6-31.57-12.79-3.93-4-6.83-8.59-8.61-13.48a35.57 35.57 0 0 1 2.34-29.25 39.1 39.1 0 0 1 9.58-11.4 44.68 44.68 0 0 1 28.24-9.85 44.59 44.59 0 0 1 28.24 9.77 38.94 38.94 0 0 1 9.58 11.36 35.58 35.58 0 0 1 4.33 14.18 35.1 35.1 0 0 1-1.98 15.05 37.7 37.7 0 0 1-8.61 13.52zm-57.6-27.91a23.55 23.55 0 0 1 8.55-16.68 28.45 28.45 0 0 1 18.39-6.57 28.5 28.5 0 0 1 18.38 6.57 23.57 23.57 0 0 1 8.55 16.67c.37 6.83-2.37 13.19-7.2 17.9a28.18 28.18 0 0 1-19.73 7.79c-7.83 0-14.84-3-19.75-7.8a23.13 23.13 0 0 1-7.19-17.88z" />
</svg> </svg>
<svg class="nav-global-icon nav-global-icon-dropdown-toggle" height="100px" width="100px" viewBox="0 0 1000 1000"> <strong>Developer</strong>
<path d="m 206.53824,376.41174 a 42,42 0 0 1 71,-29 l 221,220 220,-220 a 42,42 0 1 1 59,59 l -250,250 a 42,42 0 0 1 -59,0 l -250,-250 a 42,42 0 0 1 -12,-30 z"/> <svg class="nav-global-icon nav-global-icon-dropdown-toggle" height="100" width="100" viewBox="0 0 1000 1000">
<path
d="m 206.53824,376.41174 a 42,42 0 0 1 71,-29 l 221,220 220,-220 a 42,42 0 1 1 59,59 l -250,250 a 42,42 0 0 1 -59,0 l -250,-250 a 42,42 0 0 1 -12,-30 z" />
</svg> </svg>
</button> </button>
<ul class="nav-global-nav-links nav-global-dropdown js-dropdown-menu" id="nav-global-nav-links"> <ul class="nav-global-nav-links nav-global-dropdown" id="nav-global-nav-links">
<li> <li>
<a href="https://projects.blender.org" class="is-active">Projects</a> <a href="/" class="is-active">Projects</a>
</li> </li>
<li> <li>
<a href="https://wiki.blender.org">Docs</a> <a href="https://developer.blender.org/docs/">Docs</a>
</li> </li>
<li> <li>
<a href="https://code.blender.org">Blog</a> <a href="https://code.blender.org">Blog</a>
@@ -512,9 +582,9 @@
<li> <li>
<div class="nav-global-apps-dropdown-container"> <div class="nav-global-apps-dropdown-container">
<button class="js-dropdown-toggle" data-toggle-menu-id="nav-global-apps-menu"> <button class="js-dropdown-toggle" data-toggle-menu-id="nav-global-apps-menu">
<svg class="nav-global-icon" height="100px" width="100px" viewBox="0 0 1000 1000"> <svg class="nav-global-icon" height="100" width="100" viewBox="0 0 1000 1000">
<path <path
d="m 150.5,899 a 50,50 0 0 1 -49,-50 V 749 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 749 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 749 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m -598,-299 a 50,50 0 0 1 -49,-50 V 450 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 450 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 450 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m -598,-299 a 50,50 0 0 1 -49,-50 V 151 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 151 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 151 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z"/> d="m 150.5,899 a 50,50 0 0 1 -49,-50 V 749 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 749 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 749 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m -598,-299 a 50,50 0 0 1 -49,-50 V 450 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 450 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 450 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m -598,-299 a 50,50 0 0 1 -49,-50 V 151 a 50,50 0 0 1 49,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 151 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z m 299,0 a 50,50 0 0 1 -50,-50 V 151 a 50,50 0 0 1 50,-50 h 100 a 50,50 0 0 1 50,50 v 100 a 50,50 0 0 1 -50,50 z" />
</svg> </svg>
</button> </button>
@@ -589,7 +659,7 @@
</a> </a>
</li> </li>
<li> <li>
<a href="https://wiki.blender.org/?utm_medium=nav-global" target="_blank"> <a href="https://developer.blender.org/docs/?utm_medium=nav-global" target="_blank">
<div> <div>
<h4>Documentation</h4> <h4>Documentation</h4>
<p>Guidelines, release notes and development docs.</p> <p>Guidelines, release notes and development docs.</p>
@@ -649,7 +719,6 @@
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
</li> </li>
</ul> </ul>
@@ -657,58 +726,88 @@
</div> </div>
</div> </div>
<style>
/* Custom styling for projects.blender.org */
/* Make sure to start every line with ".nav-global"
* so changes affect the developer navbar only. */
/* TODO: remove if custom font 'Inter' is added to Gitea
* Don't try to load custom font 'Inter' */
.nav-global * {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
/* Limit navbar width on large screens. */
@media(min-width: 1200px) {
.nav-global .nav-global-container {
max-width: 1170px;
}
}
/* TODO: @web-assets incriease nav-global-logo height for better antialising on low pixel density screens
* .nav-global .nav-global-logo svg,
* .nav-global .nav-global-logo img {
* height: 22px;
* pointer-events: none;
* }
*/
</style>
<script> <script>
const dropdownToggles = document.getElementsByClassName("js-dropdown-toggle"); /* Simple dropdown toggle.
const btnActiveClass = 'nav-global-btn-active'; * Synced with 'navbar.js' manually. */
const isVisibleClass = 'is-visible'; function dropdownToggle() {
let dropdownToggleBtn = this;
let dropdownMenuName;
let dropdownMenuItem;
/* Hide all dropdowns. */ if (dropdownToggleBtn.hasAttribute('data-toggle-menu-id')) {
function dropdownHideAll() { dropdownMenuName = dropdownToggleBtn.getAttribute('data-toggle-menu-id');
const dropdownMenus = document.getElementsByClassName("js-dropdown-menu"); dropdownMenuItem = document.getElementById(dropdownMenuName);
if (dropdownMenus) {
for (let i = 0; i < dropdownMenus.length; i++) {
dropdownMenus[i].classList.remove(isVisibleClass);
}
}
/* Remove styling from all dropdown toggles. */
for (let i = 0; i < dropdownToggles.length; i++) {
dropdownToggles[i].classList.remove(btnActiveClass);
}
}
for (let i = 0; i < dropdownToggles.length; i++) {
dropdownToggles[i].addEventListener("click", function (e) {
e.stopPropagation();
const dropdownId = this.getAttribute('data-toggle-menu-id');
const el = document.getElementById(dropdownId);
if (el) {
/* If the button is already active, remove styling. */
if (el.classList.contains(isVisibleClass)) {
dropdownHideAll();
} else { } else {
/* Style button as active and show menu. */ dropdownMenuItem = dropdownToggleBtn.nextElementSibling;
this.classList.add(btnActiveClass);
el.classList.add(isVisibleClass);
}
}
});
} }
/* Hide all dropdowns when clicking anywhere except menus. */ if (!dropdownMenuItem) {
document.body.addEventListener("click", function (e) { return;
if (!e.target.classList.contains("js-dropdown-menu")) {
dropdownHideAll();
} }
});
/* Hide all dropdowns when pressing Esc. */ dropdownToggleBtn.classList.toggle('active');
window.addEventListener('keydown', function (event) { dropdownMenuItem.classList.toggle('is-visible');
if (event.key === 'Escape') {
dropdownHideAll();
} }
});
window.onload = function(e) {
const dropdownToggles = document.querySelectorAll('.js-dropdown-toggle, .js-show-toggle');
for (var i = 0; i < dropdownToggles.length; i++) {
dropdownToggles[i].addEventListener('click', dropdownToggle, false);
}
/* Close all menus, to prevent multiple menus open at the same time. */
document.onclick = function (e) {
const targetMenuId = e.target.getAttribute('data-toggle-menu-id');
const targetMenuElement = document.getElementById(targetMenuId);
/* If the clicked element is not a menu, or it's not the menu
* that we are trying to open, close it. */
if (!e.target.classList.contains('.js-dropdown-toggle') || targetMenuElement && targetMenuElement.classList.contains('is-visible')) {
const dropdownMenus = document.querySelectorAll('.dropdown-menu, .js-dropdown-menu');
if (dropdownMenus.length == 0) { return };
for (var i = 0; i < dropdownMenus.length; i++) {
if (dropdownMenus[i].id && dropdownMenus[i].id != targetMenuId) {
dropdownMenus[i].classList.remove('is-visible', 'active');
}
}
for (var i = 0; i < dropdownToggles.length; i++) {
if (dropdownToggles[i].id && dropdownToggles[i].id != targetMenuId) {
dropdownToggles[i].classList.remove('is-active', 'active');
}
}
};
}
};
</script> </script>

View File

@@ -1,35 +1,43 @@
<div class="ui dropdown jump item tooltip" data-content="Products">
Products
<span class="fitted not-mobile">{{svg "octicon-triangle-down"}}</span>
<div class="menu">
<a class="item" href="{{AppSubUrl}}/blender/blender/">Blender</a>
<a class="item" href="{{AppSubUrl}}/blender/blender-manual/">User Manual</a>
<a class="item" href="{{AppSubUrl}}/blender/blender-developer-docs/">Developer Documentation</a>
<div class="divider"></div>
<a class="item" href="{{AppSubUrl}}/infrastructure/blender-open-data/">Blender Benchmark</a>
<div class="divider"></div>
<a class="item" href="{{AppSubUrl}}/studio/">Blender Studio Tools</a>
<a class="item" href="{{AppSubUrl}}/studio/flamenco/">Flamenco</a>
<a class="item" href="{{AppSubUrl}}/studio/watchtower/">Watchtower</a>
</div>
</div>
<div class="ui dropdown jump item tooltip" data-content="Modules"> <div class="ui dropdown jump item tooltip" data-content="Modules">
<span class="text">
Modules Modules
<span class="fitted not-mobile">{{svg "octicon-triangle-down"}}</span> <span class="fitted not-mobile">{{svg "octicon-triangle-down"}}</span>
</span>
<div class="menu"> <div class="menu">
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Animation & Rigging">Animation & Rigging</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Animation & Rigging">Animation & Rigging</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Asset Browser">Asset Browser</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Asset System">Asset System</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Core">Core</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Core">Core</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Grease Pencil">Grease Pencil</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Grease Pencil">Grease Pencil</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline, Assets & I/O">Pipeline, Assets & I/O</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline & I/O">Pipeline & I/O</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms, Builds, Tests & Devices">Platforms, Builds, Tests & Devices</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms & Builds">Platforms & Builds</a>
<div class="divider"></div>
<div class="header">Python & Add-ons</div>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Python API & Text Editor">Python API & Text Editor</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Python API & Text Editor">Python API & Text Editor</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Officially Maintained Add-ons">Officially Maintained Add-ons</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Community Maintained Add-ons">Community Maintained Add-ons</a>
<div class="divider"></div>
<div class="header">Rendering</div>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: EEVEE & Viewport">EEVEE & Viewport</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Render & Cycles">Render & Cycles</a>
<div class="divider"></div>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Sculpt, Paint & Texture">Sculpt, Paint & Texture</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Sculpt, Paint & Texture">Sculpt, Paint & Texture</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Triaging">Triaging</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Triaging">Triaging</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: User Interface">User Interface</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: User Interface">User Interface</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: VFX & Video">VFX & Video</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: VFX & Video">VFX & Video</a>
<div class="divider"></div>
<div class="header">Rendering</div>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Render & Cycles">Render & Cycles</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Viewport & EEVEE">Viewport & EEVEE</a>
</div> </div>
</div> </div>
<a class="item" href="{{AppSubUrl}}/blender/blender/issues/new?template=.gitea%2fissue_template%2fbug.yaml">{{.locale.Tr "Report a Bug"}}</a> <a class="item hide-on-mid" href="{{AppSubUrl}}/blender/blender/issues/new?template=.gitea%2fissue_template%2fbug.yaml">Report a Bug</a>
<a class="item hide-on-mid" href="{{AppSubUrl}}/paste/">Paste Code</a>

View File

@@ -1,33 +1,9 @@
<style> <style>
/* bthree dark theme */
@font-face {
font-family: "Heebo";
src: url("/assets/fonts/Heebo-VariableFont_wght.ttf") format("truetype-variations");
font-weight: normal;
font-variation-settings: "wght" var(--font-weight);
font-style: normal
}
:root { :root {
/* Spacing. */
--spacer: 1rem;
--spacer-1: .25rem;
--spacer-2: .5rem;
--spacer-3: var(--spacer);
--spacer-4: 1.5rem;
--spacer-5: 3rem;
/* Override fonts. */
--fonts-override: 'Heebo', -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
--font-weight-thin: 300;
--font-weight-bold: 600;
--border-radius: .33rem; --border-radius: .33rem;
--color-border: var(--color-secondary);
/* Transitions. */
--transition-speed: 150ms; --transition-speed: 150ms;
--color-timeline: var(--color-secondary);
} }
/* Light-theme specific. */ /* Light-theme specific. */
@@ -35,65 +11,28 @@
--color-primary: hsl(204deg, 90%, 52%); --color-primary: hsl(204deg, 90%, 52%);
} }
/* Set weight variations. */ /* Revert the red color in dashboard header buttons. */
strong, b, h1, h2, h3, h4, h5, h6, .bold,
a.issue-title,
.ui.tabular.menu .active.item {
font-weight: normal !important;
font-variation-settings: "wght" var(--font-weight-bold);
}
.repository.view.issue .title .issue-title h1 {
font-variation-settings: "wght" var(--font-weight-thin);
}
@media (min-width: 1200px) {
/* Limit navbar width on large screens. */
.dashboard-navbar {
margin-left: auto;
margin-right: auto;
max-width: 1170px;
}
}
/* Revert the red color in dashboard eader buttons. */
.dashboard.feeds .right.stackable.menu>.item.active, .dashboard.feeds .right.stackable.menu>.item.active,
.dashboard.issues .right.stackable.menu>.item.active { .dashboard.issues .right.stackable.menu>.item.active {
color: unset; color: unset;
} }
/* Global tweaks (all themes) */ /* Global tweaks (all themes) */
.ui.avatar { /* Buttons. */
.ui.button,
a.ui.label {
transition: background-color var(--transition-speed), color var(--transition-speed);
}
/* Avatars. */
img.ui.avatar {
border-radius: 50%; border-radius: 50%;
} }
.ui.user.list .ui.avatar, /* Emoji. */
.ui.user.list .ui.avatar+.content { .markup .emoji {
display: inline-block; margin-right: .075em;
} vertical-align: -.075em;
/* Fix alignment and margin issues in avatars. */
.user.list img.avatar,
.comment-list .code-comment img.avatar,
.comment-list .comment img.avatar {
vertical-align: unset !important;
}
.user.list img.avatar,
.commit-list img.avatar,
.comment-list .code-comment img.avatar,
.comment-list .comment img.avatar,
.comment-list .timeline-item img.avatar {
margin-right: var(--spacer-2) !important;
}
.commit-list .author img.avatar {
margin-right: var(--spacer-3) !important;
}
/* Labels. e.g. issues count indicator in repo tabs. */
.ui.small.label {
border-radius: 2em;
} }
/* Hide the app logo (first link in "brand" div). */ /* Hide the app logo (first link in "brand" div). */
@@ -101,8 +40,22 @@
display: none; display: none;
} }
.following.bar #navbar .brand #navbar-expand-toggle { /* Dim the "header" of sections in dropdown menus. */
margin-left: var(--spacer-4); .ui.dropdown .menu>.header:not(.ui) {
color: var(--color-text-light-3);
}
/* Markup. */
/* Slight highlight on strong and heading elements, to improve readability. */
.markup strong,
.markup h1, .markup h2, .markup h3, .markup h4, .markup h5, .markup h6 {
color: var(--color-text-dark);
}
/* Homepage. */
/* By default Gitea colors links green */
.home a {
color: var(--color-primary);
} }
/* Hide brand navbar completely when not in mobile. */ /* Hide brand navbar completely when not in mobile. */
@@ -112,56 +65,18 @@
} }
} }
/* Notifications indicator. */ /* Hide the navbar logo. */
.notification_count { #navbar #navbar-logo {
border-radius: 0.6em; display: none;
font-size: 12px;
font-weight: normal !important;
font-variation-settings: "wght" var(--font-weight-bold);
line-height: unset;
margin-left: var(--spacer-1);
padding: 2px 4px;
} }
/* Navigation tabs. @media (max-width: 1000px) {
* e.g. Code, Issues pages in a repository. */ .hide-on-mid {
.ui.tabular.menu .item { display: none !important;
border: none;
border-bottom: 3px solid transparent;
border-radius: 0;
transition: border-bottom-color var(--transition-speed) ease-in-out, color var(--transition-speed) ease-in-out;
} }
.ui.tabular.menu .item:hover {
border-bottom-color: var(--color-text-dark);
}
.ui.tabular.menu .active.item {
background: transparent;
border: none;
border-bottom: 3px solid currentColor;
margin-bottom: unset;
}
.ui.tabular.menu .active.item:hover {
background: transparent;
border-color: var(--color-text-dark);
color: var(--color-text-dark);
} }
/* Repository page. */ /* Repository page. */
.repository .repo-title .repo-icon svg {
max-width: 22px;
}
.ui.table {
background: transparent;
}
.repository .ui.table a {
color: var(--color-text);
}
.repository .file-view.markdown a { .repository .file-view.markdown a {
color: var(--color-primary); color: var(--color-primary);
} }
@@ -175,10 +90,6 @@
color: currentColor; color: currentColor;
} }
.ui.repo-topic.label {
border-radius: 2em;
}
/* Repository stats. */ /* Repository stats. */
.repository-summary-language-stats { .repository-summary-language-stats {
height: unset; height: unset;
@@ -190,18 +101,7 @@
/* Repository: Activity page. */ /* Repository: Activity page. */
.stats-table { .stats-table {
border-radius: 2em;
margin-bottom: var(--spacer); margin-bottom: var(--spacer);
overflow: hidden;
}
.issue.list {
border-radius: var(--border-radius);
border: thin solid var(--color-border);
}
.issue.list > .item {
padding: var(--spacer-2) var(--spacer) !important;
} }
/* Hide branches from PR list. */ /* Hide branches from PR list. */
@@ -209,17 +109,6 @@
display: none !important; display: none !important;
} }
.issue.list a.project,
.issue.list a.milestone {
margin-inline: var(--spacer-2) !important;
}
.issue.list a.project svg {
margin-right: var(--spacer-2) !important;
position: relative;
top: 2px;
}
/* Footer. */ /* Footer. */
footer { footer {
color: var(--color-footer-text); color: var(--color-footer-text);
@@ -255,6 +144,77 @@
.restructuredtext section dl dt { .restructuredtext section dl dt {
font-style: normal; font-style: normal;
} }
/* Alert blocks. */
blockquote.attention-note {
background-color: var(--color-info-bg);
border-left-color: var(--color-blue-dark-1);
}
strong.attention-note, span.attention-note {
color: var(--color-blue-dark-1);
}
blockquote.attention-tip {
background-color: var(--color-success-bg);
border-left-color: var(--color-success-text);
}
strong.attention-tip, span.attention-tip {
color: var(--color-success-text);
}
blockquote.attention-important {
background-color: var(--color-violet-dark-bg);
border-left-color: var(--color-violet-dark-1);
}
strong.attention-important, span.attention-important {
color: var(--color-violet-dark-1);
}
blockquote.attention-warning {
background-color: var(--color-warning-bg);
border-left-color: var(--color-warning-text);
}
strong.attention-warning, span.attention-warning {
color: var(--color-warning-text);
}
blockquote.attention-caution {
background-color: var(--color-error-bg);
border-left-color: var(--color-red-dark-1);
}
strong.attention-caution, span.attention-caution {
color: var(--color-red-dark-1);
}
/* Make Navbar dropdown item left-aligned. Needed from Chromium v133.x. */
#navbar .dropdown .item {
justify-content: flex-start;
}
/* User badges */
.user-badges {
/* Some rules override Gitea defaults. */
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 16px; /* --spacer */
padding: 0;
width: 100%;
}
.user-badges li {
list-style: none;
}
form[action="/blender/blender/issues/new"] {
--min-height-textarea: 300px;
}
form[action="/blender/blender/issues/new"] .combo-markdown-editor textarea.markdown-text-editor {
max-height: calc(100vh - 132px) !important;
}
</style> </style>
<script defer data-domain="projects.blender.org" src="https://analytics.blender.org/js/script.js"></script> <script defer data-domain="projects.blender.org" src="https://analytics.blender.org/js/script.js"></script>

View File

@@ -19,12 +19,12 @@
<p>This portal hosts more than just the Blender sources, bug and patch tracker. Explore the other repositories and get involved!</p> <p>This portal hosts more than just the Blender sources, bug and patch tracker. Explore the other repositories and get involved!</p>
</div> </div>
{{template "blender_components/card_projects" .}}
{{template "blender_components/card_repos" .}} {{template "blender_components/card_repos" .}}
<div class="ui stackable two column grid mb-4 pt-0"> <div class="ui stackable two column grid mb-4 pt-0">
<div class="column"> <div class="column">
{{template "blender_components/card_releases" .}} {{template "blender_components/card_releases" .}}
{{template "blender_components/card_projects" .}}
</div> </div>
<div class="column"> <div class="column">
{{template "blender_components/card_modules" .}} {{template "blender_components/card_modules" .}}

View File

@@ -4,57 +4,7 @@
<div class="ui container"> <div class="ui container">
<div class="ui stackable grid"> <div class="ui stackable grid">
<div class="ui container ten wide column"> <div class="ui container ten wide column">
{{template "blender_components/card_projects" .}}
<div class="ui">
<div class="ui stackable three column grid">
<div class="column">
<div class="ui card card-with-image card-with-icon">
<a href="{{AppSubUrl}}/blender/blender" class="image">
<img src="/assets/img/thumb_blender.jpg" style="width: 100%; height: 100%;">
</a>
<div class="content">
<a href="{{AppSubUrl}}/blender/blender">
<h4>Blender</h4>
</a>
<div class="description">
<p>The main repository for Blender's code and all its branches.</p>
</div>
</div>
</div>
</div>
<div class="column">
<div class="ui card card-with-image card-with-icon">
<a href="{{AppSubUrl}}/blender/documentation" class="image">
<img src="/assets/img/thumb_manual.jpg" style="width: 100%; height: 100%;">
</a>
<div class="content">
<a href="{{AppSubUrl}}/blender/documentation">
<h4>User Manual</h4>
</a>
<div class="description">
<p>The official Blender manual, with references and examples.</p>
</div>
</div>
</div>
</div>
<div class="column">
<div class="ui card card-with-image card-with-icon">
<a href="{{AppSubUrl}}/studio/flamenco" class="image">
<img src="/assets/img/thumb_flamenco.jpg" style="width: 100%; height: 100%;">
</a>
<div class="content">
<a href="{{AppSubUrl}}/studio/flamenco">
<h4>Flamenco</h4>
</a>
<div class="description">
<p>Free and open source render management software.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div> </div>
<div class="six wide column"> <div class="six wide column">
{{template "blender_components/card_releases" .}} {{template "blender_components/card_releases" .}}