Complete website rewrite
This PR replaces the current CMS website with a static version of it built using Jekyll. - Everything should be working 1 to 1 with the same permalinks except for the `/news` page (not articles) which was renamed as `/blog` (old links will redirect to new ones). - The showcase entries on the home page now redirect to their showcase page in our site so that the user can choose which store front or page to visit next. - I also changed the first link from the nav bar to go to the showcase page since the features one is still pretty outdated. Co-authored-by: Yuri Sizov <yuris@humnom.net>
@@ -1,16 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
|
||||||
indent_style = space
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
|
|
||||||
[*.{htm,css,js,json}]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
70
.github/workflows/ci.yml
vendored
@@ -1,70 +0,0 @@
|
|||||||
name: Continuous integration
|
|
||||||
on:
|
|
||||||
- push
|
|
||||||
- pull_request
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test:
|
|
||||||
name: Validate formatting and setup
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Lint and format CSS
|
|
||||||
run: |
|
|
||||||
npm ci
|
|
||||||
npm run lint
|
|
||||||
|
|
||||||
- name: Install PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: "7.3"
|
|
||||||
tools: composer:v2
|
|
||||||
extensions: curl, fileinfo, gd, mbstring, openssl, pdo, pdo_mysql, xml, zip
|
|
||||||
# Disable Xdebug to improve performance.
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Set up MySQL and install OctoberCMS
|
|
||||||
run: |
|
|
||||||
sudo systemctl start mysql
|
|
||||||
echo -e '[client]\nuser="root"\npassword="root"' > "$HOME/.my.cnf"
|
|
||||||
|
|
||||||
mysql -e "CREATE DATABASE IF NOT EXISTS october;"
|
|
||||||
# https://stackoverflow.com/questions/52364415/php-with-mysql-8-0-error-the-server-requested-authentication-method-unknown-to
|
|
||||||
mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';"
|
|
||||||
|
|
||||||
# Explicitly allow all plugins to run scripts during installation.
|
|
||||||
composer config -g allow-plugins true
|
|
||||||
|
|
||||||
mkdir -p october
|
|
||||||
composer create-project october/october ./october "v1.0.474" --no-dev
|
|
||||||
pushd october
|
|
||||||
|
|
||||||
php artisan key:generate
|
|
||||||
|
|
||||||
# Copy project files.
|
|
||||||
cp -r ../themes/* themes
|
|
||||||
cp -r ../docker/php/config/* config
|
|
||||||
# Fix up the config for CI.
|
|
||||||
sed -i "s/'host' => 'mariadb'/'host' => 'localhost'/g" config/database.php
|
|
||||||
sed -i "s/'username' => 'godot'/'username' => 'root'/g" config/database.php
|
|
||||||
sed -i "s/'password' => 'godot'/'password' => 'root'/g" config/database.php
|
|
||||||
|
|
||||||
php artisan october:up
|
|
||||||
php artisan october:fresh
|
|
||||||
|
|
||||||
php artisan plugin:install paulvonzimmerman.patreon
|
|
||||||
php artisan plugin:install pikanji.agent
|
|
||||||
php artisan plugin:install rainlab.blog
|
|
||||||
php artisan plugin:install rainlab.translate
|
|
||||||
php artisan plugin:install sobored.rss
|
|
||||||
|
|
||||||
cp -r ../plugins/* plugins
|
|
||||||
composer update -d ./plugins/godotengine/i18n
|
|
||||||
php artisan october:up
|
|
||||||
|
|
||||||
- name: Run Lighthouse CI
|
|
||||||
run: |
|
|
||||||
npm install @lhci/cli@0.6.x
|
|
||||||
npx lhci autorun
|
|
||||||
19
.github/workflows/reminder.yml
vendored
@@ -1,19 +0,0 @@
|
|||||||
name: Yearly update security.txt
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 0 1 11 *"
|
|
||||||
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
create-issue:
|
|
||||||
name: Create issue
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions: write-all
|
|
||||||
steps:
|
|
||||||
- name: Create issue
|
|
||||||
run: |
|
|
||||||
gh issue create --repo '${{ github.repository }}' --title 'Update `security.txt` expiration date' --body 'This is the yearly reminder to update `.well-known/security.txt`'
|
|
||||||
51
.gitignore
vendored
@@ -1,47 +1,6 @@
|
|||||||
# Exclude everything by default (this is a CMS!), and whitelist the safe stuff
|
# Build artifacts and cache
|
||||||
/*
|
.jekyll-cache
|
||||||
!/README.md
|
_site
|
||||||
!/DEVELOPMENT_SETUP.md
|
|
||||||
!/ISSUE_TEMPLATE.md
|
|
||||||
!/LICENSE.txt
|
|
||||||
!.well-known/
|
|
||||||
|
|
||||||
# Vim
|
# Code editors
|
||||||
*.swp
|
.vscode/
|
||||||
*.swo
|
|
||||||
|
|
||||||
# Git stuff
|
|
||||||
!.gitattributes
|
|
||||||
!.gitmodules
|
|
||||||
!.gitignore
|
|
||||||
|
|
||||||
# Local development tools
|
|
||||||
node_modules
|
|
||||||
|
|
||||||
# Winter CMS files
|
|
||||||
# Themes
|
|
||||||
!/themes
|
|
||||||
# Custom plugins
|
|
||||||
!/plugins
|
|
||||||
|
|
||||||
# Docker
|
|
||||||
/docker/mariadb/init/*.sql
|
|
||||||
/docker/mariadb/storage
|
|
||||||
!/docker
|
|
||||||
!/docker/mariadb/init/000-setup.sql
|
|
||||||
|
|
||||||
# Continuous integration
|
|
||||||
!.github/
|
|
||||||
!lighthouserc.js
|
|
||||||
|
|
||||||
# Editor config
|
|
||||||
!.editorconfig
|
|
||||||
|
|
||||||
# Linting/formatting setup
|
|
||||||
!.prettierignore
|
|
||||||
!package-lock.json
|
|
||||||
!package.json
|
|
||||||
|
|
||||||
# OS specific
|
|
||||||
.DS_Store
|
|
||||||
docker/.DS_Store
|
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
# Ignore everything by default.
|
|
||||||
/*
|
|
||||||
|
|
||||||
# Ignore October templates which Prettier can't format.
|
|
||||||
*.htm
|
|
||||||
|
|
||||||
# Only format the files specified below.
|
|
||||||
!/.github/
|
|
||||||
!/docker/
|
|
||||||
!/themes/
|
|
||||||
!/plugins/
|
|
||||||
!/ISSUE_TEMPLATE.md
|
|
||||||
!/README.md
|
|
||||||
!/lighthouserc.js
|
|
||||||
!/package.json
|
|
||||||
|
|
||||||
# Ignore third-party CSS and JavaScript.
|
|
||||||
/themes/godotengine/assets/css/highlight.obsidian.min.css
|
|
||||||
/themes/godotengine/assets/css/normalize.min.css
|
|
||||||
/themes/godotengine/assets/css/tobii.min.css
|
|
||||||
/themes/godotengine/assets/leaflet/
|
|
||||||
/themes/godotengine/assets/js/
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
# Local development setup
|
|
||||||
|
|
||||||
The provided Docker setup takes care of installing all the necessary
|
|
||||||
dependencies so you don't have to.
|
|
||||||
|
|
||||||
## Automatic Docker setup
|
|
||||||
|
|
||||||
Clone this repository, and then follow the steps described below:
|
|
||||||
|
|
||||||
### 0. Prepare the database dump.
|
|
||||||
|
|
||||||
**You don't need a database dump to contribute, just skip to step 1.**
|
|
||||||
|
|
||||||
If you have a database dump, put it into the `./docker/mariadb/init` folder.
|
|
||||||
|
|
||||||
- Make sure that your script starts with the line `USE october;` and that the
|
|
||||||
file extension is `.sql`.
|
|
||||||
- Every `.sql` and `.sh` file from the `./docker/mariadb/init` folder will be
|
|
||||||
automatically executed when building the container.
|
|
||||||
|
|
||||||
### 1. Open the `./docker` folder.
|
|
||||||
|
|
||||||
Using a terminal, or another command-line environment, navigate to the `./docker`
|
|
||||||
folder.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# Assuming you're in the project root.
|
|
||||||
cd ./docker
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Run the Docker compose command.
|
|
||||||
|
|
||||||
Execute the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
docker-compose -p "godot-website" up --build -d --force-recreate
|
|
||||||
```
|
|
||||||
|
|
||||||
- You can replace `"godot-website"` with anything else to help you identify this
|
|
||||||
project in your Docker manager.
|
|
||||||
- In the future, you can use the `./docker/restart.sh` script to rebuild containers
|
|
||||||
(Linux and macOS only).
|
|
||||||
|
|
||||||
The script will take **a couple of minutes** to run the first time. After the
|
|
||||||
build is done, the containers will automatically start and perform their first
|
|
||||||
time setup. Check the logs of the `godotengine-org--php` container, as it takes
|
|
||||||
more time to finish. You will see the following line in the logs when it's done:
|
|
||||||
|
|
||||||
> Godot Website is READY to use!
|
|
||||||
|
|
||||||
### 3. Open the website in a browser!
|
|
||||||
|
|
||||||
You can see the website at [http://localhost:8080](http://localhost:8080).
|
|
||||||
|
|
||||||
- The control panel is located at [http://localhost:8080/backend](http://localhost:8080/backend).
|
|
||||||
- The default admin account is `admin/admin`.
|
|
||||||
|
|
||||||
You can now start contributing and changing files in `./themes/godotengine`.
|
|
||||||
Changes should be visible in real time, without a need to restart the web server.
|
|
||||||
|
|
||||||
## Interfacing with Docker containers
|
|
||||||
|
|
||||||
You can use the standard syntax to either execute a shell command or connect
|
|
||||||
to the running container:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# Execute shell command.
|
|
||||||
docker exec -it godotengine-org--[php|mariadb] [command]
|
|
||||||
# Connect to a remote shell.
|
|
||||||
docker exec -it godotengine-org--[php|mariadb] /bin/bash
|
|
||||||
```
|
|
||||||
|
|
||||||
There are several shell scripts that come with the project, that may be useful
|
|
||||||
when developing (assuming you're running Linux or macOS).
|
|
||||||
|
|
||||||
- For the web server:
|
|
||||||
- `./docker/php/bash.sh` starts a bash session with the PHP container.
|
|
||||||
- `./docker/php/install-plugin.sh` is used to install additional CMS plugins with `artisan`.
|
|
||||||
- `./docker/php/log.sh` is used to access logs of the PHP container.
|
|
||||||
- For the database server:
|
|
||||||
- `./docker/mariadb/bash.sh` starts a bash session with the MariaDB container.
|
|
||||||
- `./docker/mariadb/log.sh` is used to access logs of the MariaDB container.
|
|
||||||
- `./docker/mariadb/mysql.sh` starts a MySQL shell session in the MariaDB container.
|
|
||||||
|
|
||||||
## Manual setup
|
|
||||||
|
|
||||||
If you would rather configure your own development environment, you
|
|
||||||
can investigate the follow files to replicate the required steps:
|
|
||||||
|
|
||||||
- `./docker/docker-compose.yml`
|
|
||||||
- `./docker/mariadb/init/000-setup.sql`
|
|
||||||
- `./docker/php/Dockerfile`
|
|
||||||
- `./docker/php/init/init.sh`
|
|
||||||
6
Gemfile
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
gem 'jekyll', '4.2.2'
|
||||||
|
gem 'jekyll-paginate-v2'
|
||||||
|
gem 'jekyll-multiple-languages-plugin'
|
||||||
|
gem 'jekyll-redirect-from'
|
||||||
80
Gemfile.lock
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
addressable (2.8.1)
|
||||||
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
|
colorator (1.1.0)
|
||||||
|
concurrent-ruby (1.1.10)
|
||||||
|
em-websocket (0.5.3)
|
||||||
|
eventmachine (>= 0.12.9)
|
||||||
|
http_parser.rb (~> 0)
|
||||||
|
eventmachine (1.2.7)
|
||||||
|
ffi (1.15.5)
|
||||||
|
ffi (1.15.5-x64-mingw-ucrt)
|
||||||
|
forwardable-extended (2.6.0)
|
||||||
|
http_parser.rb (0.8.0)
|
||||||
|
i18n (1.12.0)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
jekyll (4.2.2)
|
||||||
|
addressable (~> 2.4)
|
||||||
|
colorator (~> 1.0)
|
||||||
|
em-websocket (~> 0.5)
|
||||||
|
i18n (~> 1.0)
|
||||||
|
jekyll-sass-converter (~> 2.0)
|
||||||
|
jekyll-watch (~> 2.0)
|
||||||
|
kramdown (~> 2.3)
|
||||||
|
kramdown-parser-gfm (~> 1.0)
|
||||||
|
liquid (~> 4.0)
|
||||||
|
mercenary (~> 0.4.0)
|
||||||
|
pathutil (~> 0.9)
|
||||||
|
rouge (~> 3.0)
|
||||||
|
safe_yaml (~> 1.0)
|
||||||
|
terminal-table (~> 2.0)
|
||||||
|
jekyll-multiple-languages-plugin (1.8.0)
|
||||||
|
jekyll (>= 2.0, < 5.0)
|
||||||
|
jekyll-paginate-v2 (3.0.0)
|
||||||
|
jekyll (>= 3.0, < 5.0)
|
||||||
|
jekyll-redirect-from (0.16.0)
|
||||||
|
jekyll (>= 3.3, < 5.0)
|
||||||
|
jekyll-sass-converter (2.2.0)
|
||||||
|
sassc (> 2.0.1, < 3.0)
|
||||||
|
jekyll-watch (2.2.1)
|
||||||
|
listen (~> 3.0)
|
||||||
|
kramdown (2.4.0)
|
||||||
|
rexml
|
||||||
|
kramdown-parser-gfm (1.1.0)
|
||||||
|
kramdown (~> 2.0)
|
||||||
|
liquid (4.0.3)
|
||||||
|
listen (3.7.1)
|
||||||
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
|
mercenary (0.4.0)
|
||||||
|
pathutil (0.16.2)
|
||||||
|
forwardable-extended (~> 2.6)
|
||||||
|
public_suffix (5.0.1)
|
||||||
|
rb-fsevent (0.11.2)
|
||||||
|
rb-inotify (0.10.1)
|
||||||
|
ffi (~> 1.0)
|
||||||
|
rexml (3.2.5)
|
||||||
|
rouge (3.30.0)
|
||||||
|
safe_yaml (1.0.5)
|
||||||
|
sassc (2.4.0)
|
||||||
|
ffi (~> 1.9)
|
||||||
|
terminal-table (2.0.0)
|
||||||
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||||
|
unicode-display_width (1.8.0)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
arm64-darwin-22
|
||||||
|
x64-mingw-ucrt
|
||||||
|
x64-unknown
|
||||||
|
x86_64-linux-musl
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
jekyll (= 4.2.2)
|
||||||
|
jekyll-multiple-languages-plugin
|
||||||
|
jekyll-paginate-v2
|
||||||
|
jekyll-redirect-from
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
2.4.2
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.
|
Copyright (c) 2014 - present Godot Engine contributors (cf. https://github.com/godotengine/godot/blob/master/AUTHORS.md).
|
||||||
Copyright (c) 2014-2022 Godot Engine contributors (cf. https://github.com/godotengine/godot/blob/master/AUTHORS.md).
|
Copyright (c) 2007 Juan Linietsky, Ariel Manzur.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
172
README.md
@@ -1,35 +1,21 @@
|
|||||||
# Godot Website
|
# Godot Engine Website
|
||||||
|
|
||||||
This repository contains the theme used by the Godot Engine's OctoberCMS/WinterCMS
|
Welcome to the source code for the Godot Engine website. This is a static website, generated offline using
|
||||||
instance. The theme describes both the styling of the website and the components
|
[Jekyll](https://jekyllrb.com/).
|
||||||
of its layouts, as well as some of its content.
|
|
||||||
|
|
||||||
- [OctoberCMS](https://github.com/octobercms/october) is the original CMS platform
|
|
||||||
of choice.
|
|
||||||
- [WinterCMS](https://github.com/wintercms/winter) is the current CMS platform, a fork
|
|
||||||
of October with more active development.
|
|
||||||
|
|
||||||
_WinterCMS_ is compatible with _OctoberCMS_, and uses the same plugin system. This is
|
|
||||||
at least true for the version of the project that we use.
|
|
||||||
|
|
||||||
This repository also contains a Docker setup to be used by contributors. It
|
|
||||||
is not used for production.
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Contributions are always welcome! Godot website, just like Godot engine, is open source.
|
Contributions are always welcome! Godot website, just like Godot engine, is open source.
|
||||||
|
|
||||||
However, when contributing to the website, it is important to keep in mind that it
|
However, when contributing to the website, it is important to keep in mind that it acts as a public face of Godot
|
||||||
acts as a public face of Godot organization and community. Thus, substantial
|
organization and community. Thus, substantial changes must be discussed ahead of time. You don't necessarily need to
|
||||||
changes must be discussed ahead of time. You don't necessarily need to open a formal
|
open a formal Godot improvement proposal like you do with engine features, but starting an issue on this repository
|
||||||
Godot improvement proposal like you do with engine features, but starting an issue
|
or joining the discussion on the [Godot Contributors Chat](https://chat.godotengine.org/channel/website) is a good
|
||||||
on this repository or joining the discussion on the
|
idea.
|
||||||
[Godot Contributors Chat](https://chat.godotengine.org/channel/website) is a good idea.
|
|
||||||
|
|
||||||
### Browser support
|
## Browser support
|
||||||
|
|
||||||
When working on new features, keep in mind this website only supports
|
When working on new features, keep in mind this website only supports _evergreen browsers_:
|
||||||
_evergreen browsers_:
|
|
||||||
|
|
||||||
- Chrome (latest version and N-1 version)
|
- Chrome (latest version and N-1 version)
|
||||||
- Edge (latest version and N-1 version)
|
- Edge (latest version and N-1 version)
|
||||||
@@ -39,37 +25,131 @@ _evergreen browsers_:
|
|||||||
|
|
||||||
**Internet Explorer isn't supported.**
|
**Internet Explorer isn't supported.**
|
||||||
|
|
||||||
### Dependencies
|
## Development
|
||||||
|
|
||||||
This project requires the following stack:
|
### Building
|
||||||
|
|
||||||
- PHP 7.2+ & Composer 2
|
To build the website locally, follow these steps:
|
||||||
- MySQL/MariaDB
|
|
||||||
- OctoberCMS/WinterCMS v1.0.xxx
|
|
||||||
|
|
||||||
There are also some linting tools that can be run locally that require Node.js.
|
1. Install [Jekyll](https://jekyllrb.com/docs/installation/); make sure `bundle` is available from the command line.
|
||||||
|
2. Clone this repository.
|
||||||
|
3. Install the necessary dependencies: `bundle install`.
|
||||||
|
4. Build the site: `bundle exec jekyll build`.
|
||||||
|
|
||||||
### Local development setup
|
For simplicity, these two commands are also available as a `build.sh` script in this repository.
|
||||||
|
|
||||||
This project comes with a [Docker](https://docker.com) setup that can be used to quickly
|
Alternatively, you can also use the official Docker container for Jekyll. This container is designed to be run once
|
||||||
create a network of compatible ready-to-use containers.
|
to perform the build, so you don't need to compose and permanently store it in your Docker setup. If you're on Linux,
|
||||||
|
execute the following command:
|
||||||
|
|
||||||
Using this setup, you can have a local copy of the project, without the production database.
|
```shell
|
||||||
For development purposes, you don't need that database, as the only thing that is specific
|
docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:stable ./build.sh
|
||||||
to production is blog posts, which can be easily recreated if required. Everything else
|
```
|
||||||
is located in the `./themes/godotengine` folder, including all static pages and their content.
|
|
||||||
|
|
||||||
To start contributing, please follow this [Local development setup](DEVELOPMENT_SETUP.md) guide.
|
On Windows (from `CMD.exe`):
|
||||||
|
|
||||||
### Syntax highlighting
|
```shell
|
||||||
|
docker run --rm --volume="%CD%:/srv/jekyll" -it jekyll/jekyll:stable ./build.sh
|
||||||
|
```
|
||||||
|
|
||||||
If you use Visual Studio Code, you can install the
|
Building may take several minutes to finish.
|
||||||
[OctoberCMS Template Language](https://marketplace.visualstudio.com/items?itemName=dqsully.octobercms-template-language)
|
|
||||||
extension to benefit from syntax highlighting in `.htm` templates.
|
### Local server
|
||||||
|
|
||||||
|
As this is a static website, it can be served locally using any server stack you want.
|
||||||
|
|
||||||
|
- It is possible to use Jekyll and `bundle` to immediately serve the pages upon building it. To do this, replace the final build
|
||||||
|
step with `bundle exec jekyll serve`. With Docker you can use `build-and-serve.sh`.
|
||||||
|
- You can also use Python, which is likely pre-installed on your system. To serve the pages with its local server, run
|
||||||
|
`python -m http.server 4000 -d ./_site`.
|
||||||
|
|
||||||
|
After following either one of these steps the site will be available at `http://localhost:4000`.
|
||||||
|
|
||||||
|
## Project structure
|
||||||
|
|
||||||
|
### Content data and metadata
|
||||||
|
|
||||||
|
The following folders contain data files, used for generating more dynamic parts of the website, such as the blog,
|
||||||
|
the showcase, the downloads page. These pages are written in Markdown and contain a metadata header used by the
|
||||||
|
generator. Markdown files form Jekyll collections with the same name as their containing folder. To create a new
|
||||||
|
Markdown document, you can start by copying an existing one and then change its content.
|
||||||
|
|
||||||
|
- `collections/_article` contains articles for the blog. Each article is written in Markdown with a metadata header located at
|
||||||
|
the top of the file. The following metadata fields are required for the article to be correctly displayed throughout
|
||||||
|
the website: `title`, `excerpt`, `categories`, `author`, `image`, and `date`. The name of the file acts as a slug in
|
||||||
|
the generated URL.
|
||||||
|
|
||||||
|
- `collections/_download` contains the download instructions for Godot builds per platform. Each document is written in Markdown
|
||||||
|
with a metadata header located at the top of the file. Download links are generated from the `downloads` field in the
|
||||||
|
metadata. When adding a new platform, make sure to create a new tab for it in the `/_layouts/download.html` template.
|
||||||
|
|
||||||
|
- `collections/_showcase` contains entries for the showcase. Each article is written in Markdown with a metadata header located at
|
||||||
|
the top of the file. Showcase entries can be featured on the home page by setting the `featured_in_home` field to
|
||||||
|
`true`. The image used is the one from the `image` field.
|
||||||
|
|
||||||
|
Some information is also stored in YAML files, acting as a file-based database for several meta properties.
|
||||||
|
|
||||||
|
- `_data` contains various metadata files for the website:
|
||||||
|
- `authors.yml` contains a list of authors used for the blog articles;
|
||||||
|
- `categories.yml` contains a list of categories for the blog articles;
|
||||||
|
- `communities.yml` contains a list of user communities for the `/community/user-groups` page.
|
||||||
|
|
||||||
|
### Content pages and templates
|
||||||
|
|
||||||
|
The following folders contain entry points for almost every website page, as well as shared templates and assets. The
|
||||||
|
templating language used in Jekyll is [liquid](https://jekyllrb.com/docs/liquid/).
|
||||||
|
|
||||||
|
- `_i18n` contains translations for the website. The default language is English. Only static information is
|
||||||
|
translated, with the blog and the showcase being displayed in English. **Currently disabled and a work in progress.**
|
||||||
|
|
||||||
|
- `_includes` contains navigation and footer elements used by most pages. If you want to create an element to reuse
|
||||||
|
in multiple pages, you can create a new include file here.
|
||||||
|
|
||||||
|
- `_layouts` contains the wrapping content for the pages. Each layout inherits from `_layouts/default.html` which
|
||||||
|
contains the main structure of the page, including the head and meta tags. Other layouts are used for specific pages,
|
||||||
|
like the blog, download, and showcase pages.
|
||||||
|
|
||||||
|
- `assets` contains static assets for the website. This includes the CSS, JS, and images used in the theme and layout.
|
||||||
|
For media content used in articles and other pages check the `storage` folder. **Some files may be obsolete and
|
||||||
|
unused.**
|
||||||
|
|
||||||
|
- `pages` contains most of the pages for the website. The final URL for each page is specified in the metadata header
|
||||||
|
using the `permalink` field. Generally, it should map to the file's path inside `pages`. Dynamic content pages are
|
||||||
|
generated using Markdown collections and layouts.
|
||||||
|
|
||||||
|
### File storage
|
||||||
|
|
||||||
|
- `storage` contains media and other files uploaded for use in dynamic content pages, such as the blog, the showcase,
|
||||||
|
the events. **Some files may be obsolete and unused.**
|
||||||
|
|
||||||
|
### Buildsystem and service files
|
||||||
|
|
||||||
|
This project is build with Jekyll, with most of the build instructions located in `Gemfile` and `_config.yml`.
|
||||||
|
The following folders contain extra files and scripts on top of that.
|
||||||
|
|
||||||
|
- `_migration` contains files used when migrating from the previous version of the website. Namely, there is a
|
||||||
|
database of posts extracted from the old website. It was used to generate the new Markdown articles. We are keeping
|
||||||
|
it for now in case there are some issues with the migration.
|
||||||
|
|
||||||
|
## Content update guidelines
|
||||||
|
|
||||||
|
### Updating Godot download version
|
||||||
|
|
||||||
|
When a new stable build of the engine is released, you need to update the number and date in the `/_config.yml` file.
|
||||||
|
This looks like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Godot download version
|
||||||
|
stable_version: "3.5.1"
|
||||||
|
stable_version_date: "28 September 2022"
|
||||||
|
```
|
||||||
|
|
||||||
|
After this change is merged and the website is built, everything referencing the engine version should be updated
|
||||||
|
automatically, including download links for every platform.
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- Join the discussion on Godot Contributors Chat in the
|
- Join the discussion on Godot Contributors Chat in the [#website](https://chat.godotengine.org/channel/website)
|
||||||
[#website](https://chat.godotengine.org/channel/website) channel.
|
channel.
|
||||||
- When working on the theme, please take note of the
|
- Please, consider the [website usage stats](https://stats.tuxfamily.org/godotengine.org) when relying on modern
|
||||||
[website stats](https://stats.tuxfamily.org/godotengine.org).
|
web technologies (web standards support, file type support, etc).
|
||||||
|
|||||||
96
_config.yml
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
# Settings
|
||||||
|
exclude: [".github", "Gemfile", "Gemfile.lock", "build.sh", "build-and-serve.sh", "README.md"]
|
||||||
|
permalink: pretty
|
||||||
|
|
||||||
|
collections_dir: collections
|
||||||
|
collections:
|
||||||
|
article:
|
||||||
|
output: true
|
||||||
|
showcase:
|
||||||
|
output: true
|
||||||
|
download:
|
||||||
|
output: true
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
- scope:
|
||||||
|
path: ""
|
||||||
|
type: "article"
|
||||||
|
values:
|
||||||
|
layout: "article"
|
||||||
|
og_type: "article"
|
||||||
|
- scope:
|
||||||
|
path: ""
|
||||||
|
type: "download"
|
||||||
|
values:
|
||||||
|
layout: "download"
|
||||||
|
|
||||||
|
# Plugins
|
||||||
|
plugins:
|
||||||
|
- jekyll-paginate-v2
|
||||||
|
- jekyll-redirect-from
|
||||||
|
# - jekyll-multiple-languages-plugin
|
||||||
|
|
||||||
|
# Internationalization
|
||||||
|
languages: ["en", "es"]
|
||||||
|
exclude_from_localizations: ["assets", "storage"]
|
||||||
|
default_lang: "en"
|
||||||
|
|
||||||
|
# Godot download version
|
||||||
|
stable_version: "3.5.1"
|
||||||
|
stable_version_date: "28 September 2022"
|
||||||
|
|
||||||
|
# Pagination (used by the blog)
|
||||||
|
pagination:
|
||||||
|
# Site-wide kill switch, disabled here it doesn't run at all
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Set to 'true' to enable pagination debugging. This can be enabled in the site config or only for individual pagination pages
|
||||||
|
debug: false
|
||||||
|
|
||||||
|
# The default document collection to paginate if nothing is specified ('posts' is default)
|
||||||
|
collection: "article"
|
||||||
|
|
||||||
|
# How many objects per paginated page, used to be `paginate` (default: 0, means all)
|
||||||
|
per_page: 24
|
||||||
|
|
||||||
|
# The permalink structure for the paginated pages (this can be any level deep)
|
||||||
|
permalink: "/:num/" # Pages are index.html inside this folder (default)
|
||||||
|
#permalink: '/page/:num.html' # Pages are simple html files
|
||||||
|
#permalink: '/page/:num' # Pages are html files, linked jekyll extensionless permalink style.
|
||||||
|
|
||||||
|
# Optional the title format for the paginated pages (supports :title for original page title, :num for pagination page number, :max for total number of pages)
|
||||||
|
title: ":title - Page :num"
|
||||||
|
|
||||||
|
# Limit how many pagenated pages to create (default: 0, means all)
|
||||||
|
limit: 0
|
||||||
|
|
||||||
|
# Optional, defines the field that the posts should be sorted on (omit to default to 'date')
|
||||||
|
sort_field: "date"
|
||||||
|
|
||||||
|
# Optional, sorts the posts in reverse order (omit to default decending or sort_reverse: true)
|
||||||
|
sort_reverse: true
|
||||||
|
|
||||||
|
# Optional, the default category to use, omit or just leave this as 'posts' to get a backwards-compatible behavior (all posts)
|
||||||
|
category: "posts"
|
||||||
|
|
||||||
|
# Optional, the default tag to use, omit to disable
|
||||||
|
tag: ""
|
||||||
|
|
||||||
|
# Optional, the default locale to use, omit to disable (depends on a field 'locale' to be specified in the posts,
|
||||||
|
# in reality this can be any value, suggested are the Microsoft locale-codes (e.g. en_US, en_GB) or simply the ISO-639 language code )
|
||||||
|
locale: ""
|
||||||
|
|
||||||
|
# Optional,omit or set both before and after to zero to disable.
|
||||||
|
# Controls how the pagination trail for the paginated pages look like.
|
||||||
|
trail:
|
||||||
|
before: 2
|
||||||
|
after: 2
|
||||||
|
|
||||||
|
# Optional, the default file extension for generated pages (e.g html, json, xml).
|
||||||
|
# Internally this is set to html by default
|
||||||
|
extension: html
|
||||||
|
|
||||||
|
# Optional, the default name of the index file for generated pages (e.g. 'index.html')
|
||||||
|
# Without file extension
|
||||||
|
indexpage: "index"
|
||||||
|
############################################################
|
||||||
62
_data/authors.yml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
- name: Andrea Catania
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Ariel Manzur
|
||||||
|
image: /assets/images/authors/punto.png
|
||||||
|
- name: Bartleby Lawnjelly
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Bastiaan Olij
|
||||||
|
image: /assets/images/authors/bastiaan.jpg
|
||||||
|
- name: Camille Mohr-Daurat
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Clay John
|
||||||
|
image: /assets/images/authors/clayjohn.jpg
|
||||||
|
- name: Emi
|
||||||
|
image: /assets/images/authors/emi.png
|
||||||
|
- name: Ernest Lee
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Fabio Alessandrelli
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Fredia Huya-Kouadio
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: George Marques
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Gilles Roudiere
|
||||||
|
image: /assets/images/authors/groud.png
|
||||||
|
- name: Gordon MacPherson
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Hein-Pieter van Braam
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Hugo Locurcio
|
||||||
|
image: /assets/images/authors/calinou.png
|
||||||
|
- name: Ignacio Roldán Etcheverry
|
||||||
|
image: /assets/images/authors/ignacio.png
|
||||||
|
- name: Ilaria Cislaghi
|
||||||
|
image: /assets/images/authors/ilaria.jpg
|
||||||
|
- name: Joan Fons
|
||||||
|
image: /assets/images/authors/joan.png
|
||||||
|
- name: Juan Linietsky
|
||||||
|
image: /assets/images/authors/reduzio.jpg
|
||||||
|
- name: Julian Murgia
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: karroffel
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Nathan GDQuest
|
||||||
|
image: /assets/images/authors/nathan.png
|
||||||
|
- name: Matias Goldberg
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Max Hilbrunner
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Pāvels Nadtočajevs
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Pedro J. Estébanez
|
||||||
|
image: /assets/images/authors/pedro.png
|
||||||
|
- name: Rémi Verschelde
|
||||||
|
image: /assets/images/authors/akien.jpg
|
||||||
|
- name: Silc Renew
|
||||||
|
image: /assets/images/authors/tokage.png
|
||||||
|
- name: Yuri Roubinsky
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
|
- name: Yuri Sizov
|
||||||
|
image: /assets/images/authors/yuri.jpeg
|
||||||
|
- name: default
|
||||||
|
image: /assets/images/authors/default_avatar.svg
|
||||||
24
_data/categories.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
news:
|
||||||
|
- name: News
|
||||||
|
slug: news
|
||||||
|
description: General news that don't fit in other categories.
|
||||||
|
progress-report:
|
||||||
|
- name: Progress Report
|
||||||
|
slug: progress-report
|
||||||
|
description: Progress report about a specific engine subsystem in Godot.
|
||||||
|
events:
|
||||||
|
- name: Events
|
||||||
|
slug: events
|
||||||
|
description: Physical and online Godot-related event announcements.
|
||||||
|
release:
|
||||||
|
- name: Release
|
||||||
|
slug: release
|
||||||
|
description: Godot stable release announcements. See Pre-release category for alphas, betas and release candidates.
|
||||||
|
pre-release:
|
||||||
|
- name: Pre-release
|
||||||
|
slug: pre-release
|
||||||
|
description: Godot pre-release announcement (alpha, beta or release candidate).
|
||||||
|
showcase:
|
||||||
|
- name: Showcase
|
||||||
|
slug: showcase
|
||||||
|
description: Showreel video postings and showcase interviews. Showreel-related announcements are in the News category.
|
||||||
325
_data/communities.yml
Normal file
@@ -0,0 +1,325 @@
|
|||||||
|
Algeria:
|
||||||
|
- name: Arab Gamedev
|
||||||
|
links:
|
||||||
|
- title: Facebook
|
||||||
|
url: https://facebook.com/groups/arabgamedev
|
||||||
|
Argentina:
|
||||||
|
- name: Godot en Español
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/2BtycSPdkk
|
||||||
|
Brazil:
|
||||||
|
- name: Godot Brazil
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/gWmQKBv
|
||||||
|
- name: Godot Brasil
|
||||||
|
links:
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/godotBrasil
|
||||||
|
- name: São Paulo
|
||||||
|
coordinates:
|
||||||
|
- -23.5505
|
||||||
|
- -46.6333
|
||||||
|
links:
|
||||||
|
- title: MeetUp
|
||||||
|
url: https://www.meetup.com/GodotSP/
|
||||||
|
- name: Campinas
|
||||||
|
coordinates:
|
||||||
|
- -22.8136
|
||||||
|
- -47.0641
|
||||||
|
links:
|
||||||
|
- title: Gamux
|
||||||
|
url: https://gamuxunicamp.github.io/website/
|
||||||
|
Belgium:
|
||||||
|
- name: Godot Club
|
||||||
|
coordinates:
|
||||||
|
- 50.848916943044415
|
||||||
|
- 4.349575282209013
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://polymorph.cool/godot-club/
|
||||||
|
Bulgaria:
|
||||||
|
- name: BGodot
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/j3KRdV3b4P
|
||||||
|
Canada:
|
||||||
|
- name: Godot Toronto
|
||||||
|
links:
|
||||||
|
- title: MeetUp
|
||||||
|
url: https://www.meetup.com/Godot-Toronto/
|
||||||
|
China:
|
||||||
|
- name: Godot China
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/R23VUTXwvz
|
||||||
|
- title: QQ Group
|
||||||
|
url: https://qm.qq.com/cgi-bin/qm/qr?k=EneMKrKt96ttI4ZFmQ8omTtpF0Sd0iL_&jump_from=webapi
|
||||||
|
- name: GodoterCN
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://godoter.cn
|
||||||
|
- name: Godoter Planet (Godoter 星球)
|
||||||
|
links:
|
||||||
|
- title: QQ Group
|
||||||
|
url: https://qm.qq.com/cgi-bin/qm/qr?k=jKCCDvS6uTXHLrVBRuGk67iCvA5bshPY&jump_from=webapi
|
||||||
|
- name: Godot Tieba
|
||||||
|
links:
|
||||||
|
- title: Forum
|
||||||
|
url: https://tieba.baidu.com/f?kw=godot
|
||||||
|
- name: GodotCN (Godot中文社区)
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: http://godott.com
|
||||||
|
- title: QQ Group
|
||||||
|
url: https://qm.qq.com/cgi-bin/qm/qr?k=hEscGFbQTiOX0bhsTT2myxM3PifsAmIp&jump_from=webapi
|
||||||
|
Croatia:
|
||||||
|
- name: Croatia
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/6gjwfSG
|
||||||
|
- title: Facebook
|
||||||
|
url: https://web.facebook.com/groups/godotenginecroatia/
|
||||||
|
Czech Republic and Slovakia:
|
||||||
|
- name: Godot CZ/SK
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.com/invite/g4XVFjXwfu
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/godotczsk
|
||||||
|
Ecuador:
|
||||||
|
- name: Godot Ecuador
|
||||||
|
coordinates:
|
||||||
|
- -1.8312
|
||||||
|
- -78.1834
|
||||||
|
links:
|
||||||
|
- title: Reddit
|
||||||
|
url: https://www.reddit.com/r/GodotEcuador/
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/nZecyhN
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/godotengineecuador/
|
||||||
|
Egypt:
|
||||||
|
- name: Godot Egypt (Ain Shams University)
|
||||||
|
coordinates:
|
||||||
|
- 30.077605
|
||||||
|
- 31.2858
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/QCxAgAAtYg
|
||||||
|
Finland:
|
||||||
|
- name: Godot Suomi
|
||||||
|
coordinates:
|
||||||
|
- 60.16952
|
||||||
|
- 24.93545
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/5QF5du3
|
||||||
|
France or French-speaking:
|
||||||
|
- name: Godot Francophone
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://www.godot-francophone.org/
|
||||||
|
- title: Discord
|
||||||
|
url: https://discordapp.com/invite/NQVd34V
|
||||||
|
- title: GitHub
|
||||||
|
url: https://github.com/Godot-Engine-Francophone
|
||||||
|
- name: Godot est arrivé!
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/9FJAZaC
|
||||||
|
- name: SoloCode France
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/gZ3QJ5T
|
||||||
|
Germany:
|
||||||
|
- name: Godot Germany
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://godot-community.de/
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/Tr7Ma6E
|
||||||
|
- title: Reddit
|
||||||
|
url: https://www.reddit.com/r/GodotCommunityDE/
|
||||||
|
- name: Godot Engine German Developers
|
||||||
|
links:
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/359812631518879
|
||||||
|
India:
|
||||||
|
- name: Godot India
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/cRvFbRg
|
||||||
|
- title: Telegram
|
||||||
|
url: https://t.me/godotindia
|
||||||
|
Indonesia:
|
||||||
|
- name: Godot Indonesia
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://godot.id
|
||||||
|
- title: Telegram
|
||||||
|
url: https://t.me/godot_indonesia
|
||||||
|
Italy:
|
||||||
|
- name: Godot Engine Italia
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://godotengineitalia.com/
|
||||||
|
- title: Telegram
|
||||||
|
url: https://t.me/joinchat/Ga4KigwWn53t2RRfoaPSKg
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/7YuUqJB
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/1926189904375792/
|
||||||
|
Iran:
|
||||||
|
- name: Godot Iran (گودو ایران)
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://TahsinRafiey.org/godot-iran
|
||||||
|
- title: Telegram
|
||||||
|
url: https://t.me/GodotIran
|
||||||
|
- title: Matrix
|
||||||
|
url: https://matrix.to/#/#godotiran:matrix.org
|
||||||
|
- name: GDworld
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/n3BX6ujU5f
|
||||||
|
- title: Telegram
|
||||||
|
url: https://t.me/world_of_godot
|
||||||
|
Israel:
|
||||||
|
- name: Godot Israel
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/k5HN6SQqnv
|
||||||
|
Japan:
|
||||||
|
- name: Godot Japan
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/DyFvSJZ
|
||||||
|
Latvia:
|
||||||
|
- name: Godot Engine Latvia
|
||||||
|
coordinates:
|
||||||
|
- 56.9496
|
||||||
|
- 24.1052
|
||||||
|
links:
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/844651272628474/
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/r6ewZGv
|
||||||
|
- title: Twitter
|
||||||
|
url: https://twitter.com/GodotLatvia
|
||||||
|
Pakistan:
|
||||||
|
- name: Godot Engine Pakistan
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/YYjxgdn47P
|
||||||
|
Philippines:
|
||||||
|
- name: Godot Engine Philippines
|
||||||
|
links:
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/godotph
|
||||||
|
Poland:
|
||||||
|
- name: Godocik
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/HBuuuPa
|
||||||
|
- title: YouTube
|
||||||
|
url: https://www.youtube.com/channel/UCLYdPKE5eviBMZV5WLG43rA
|
||||||
|
Portugal:
|
||||||
|
- name: Godot Portugal
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/nWMbpsFf
|
||||||
|
- title: Twitter
|
||||||
|
url: https://twitter.com/godot_pt
|
||||||
|
Russia:
|
||||||
|
- name: Godot Engine Russia
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/MK9aWFX
|
||||||
|
- name: Godot Russia
|
||||||
|
links:
|
||||||
|
- title: VKontakte
|
||||||
|
url: https://vk.com/godot_engine
|
||||||
|
- title: Telegram
|
||||||
|
url: https://t.me/godot_engine
|
||||||
|
- name: Game Constructors
|
||||||
|
links:
|
||||||
|
- title: VKontakte
|
||||||
|
url: https://vk.com/game_constructors
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/VjZ2ZZH93c
|
||||||
|
- title: ZEN
|
||||||
|
url: https://zen.me/1WHp7X
|
||||||
|
Saudi Arabia:
|
||||||
|
- name: Godot Engine Arabic
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/sGukE2UDJ6
|
||||||
|
- name: Godot Engine Arabic 2
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/fvNyxDQAJy
|
||||||
|
South Korea:
|
||||||
|
- name: Godot Engine Korea
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/XK8Emsf
|
||||||
|
Spain:
|
||||||
|
- name: Godot Engine in Spanish
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: http://godotengineenespanol.surge.sh
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.com/invite/fp4Z7QmZGu
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/GodotEngineEnEspanol
|
||||||
|
- name: Zenvoid (Medialab Prado)
|
||||||
|
coordinates:
|
||||||
|
- 40.4105013
|
||||||
|
- -3.6958529
|
||||||
|
links:
|
||||||
|
- title: Website
|
||||||
|
url: https://www.medialab-prado.es/actividades/zenvoid-studio-desarrollo-de-videojuegos
|
||||||
|
Sweden:
|
||||||
|
- name: Godot Sweden
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/6ZsgWmH
|
||||||
|
Taiwan:
|
||||||
|
- name: Godot Engine Taiwan
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/fuTtQMaxZ2
|
||||||
|
- name: Godot Taiwan (Godot 台灣使用者小聚)
|
||||||
|
links:
|
||||||
|
- title: Facebook
|
||||||
|
url: https://www.facebook.com/groups/godot.taiwan
|
||||||
|
Turkey:
|
||||||
|
- name: Godot Engine Türkiye
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/3zuaj9EsYv
|
||||||
|
- title: Telegram
|
||||||
|
url: https://t.me/joinchat/GsAFJn7i-1fk0YUW
|
||||||
|
- name: Godot in Turkey
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/AtHr842H7b
|
||||||
|
- name: Godot Türk Topluluğu
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/B48HBJM
|
||||||
|
United States:
|
||||||
|
- name: Godot Southwest US
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/qx7Ec49yDg
|
||||||
|
- name: Godot Wisconsin
|
||||||
|
links:
|
||||||
|
- title: Meetup
|
||||||
|
url: https://www.meetup.com/wi-godot-game-app-developer-meetup/
|
||||||
|
- name: Chickensoft
|
||||||
|
links:
|
||||||
|
- title: Discord
|
||||||
|
url: https://discord.gg/MjA6HUzzAE
|
||||||
3
_i18n/en.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
home:
|
||||||
|
h1: "The game engine you've been waiting for."
|
||||||
|
subtitle: "A simple, responsive Jekyll theme for your blog or site."
|
||||||
3
_i18n/es.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
home:
|
||||||
|
h1: "Español"
|
||||||
|
subtitle: "Un tema Jekyll simple y adaptable para tu blog o sitio."
|
||||||
112
_includes/footer.html
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container flex">
|
||||||
|
<div id="copyright">
|
||||||
|
<p>
|
||||||
|
© 2007-{{ site.time | date: '%Y' }} Juan Linietsky, Ariel Manzur and <a
|
||||||
|
href="https://github.com/godotengine/godot/blob/master/AUTHORS.md" target="_blank"
|
||||||
|
rel="noopener">contributors</a><br>
|
||||||
|
Godot is a member of the <a href="https://sfconservancy.org/" target_="_blank" rel="noopener">Software Freedom
|
||||||
|
Conservancy</a>.<br>
|
||||||
|
Kindly hosted by <a href="https://tuxfamily.org" target="_blank" rel="noopener">TuxFamily.org</a>.<br>
|
||||||
|
<a href="https://github.com/godotengine/godot-website" target="_blank" rel="noopener">Website source code on
|
||||||
|
GitHub</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div id="sitemap">
|
||||||
|
<ul class="sitemap-group">
|
||||||
|
<li><strong>Get Godot</strong></li>
|
||||||
|
<li><a href="/download/windows" class="set-os-download-url">Download</a></li>
|
||||||
|
<li><a href="https://editor.godotengine.org/releases/latest/">Web Editor</a></li>
|
||||||
|
<li> </li>
|
||||||
|
<li><strong>Public Relations</strong></li>
|
||||||
|
<li><a href="/blog">Blog</a></li>
|
||||||
|
<li><a href="/community">Communities and Events</a></li>
|
||||||
|
<li><a href="/press">Press Kit</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="sitemap-group">
|
||||||
|
<li><strong>About Godot</strong></li>
|
||||||
|
<li><a href="/features">Features</a></li>
|
||||||
|
<li><a href="/showcase">Showcase</a></li>
|
||||||
|
<li><a href="/education">Education</a></li>
|
||||||
|
<li><a href="/license">License</a></li>
|
||||||
|
<li><a href="/code-of-conduct">Code of Conduct</a></li>
|
||||||
|
<li><a href="/privacy-policy">Privacy Policy</a></li>
|
||||||
|
<li><a href="/donate">Donate</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="sitemap-group">
|
||||||
|
<li><strong>Project Team</strong></li>
|
||||||
|
<li><a href="/governance">Governance</a></li>
|
||||||
|
<li><a href="/teams">Teams</a></li>
|
||||||
|
<li> </li>
|
||||||
|
<li><strong>Extra Resources</strong></li>
|
||||||
|
<li><a href="/asset-library/asset">Asset Library</a></li>
|
||||||
|
<li><a href="https://docs.godotengine.org">Documentation</a></li>
|
||||||
|
<li><a href="https://github.com/godotengine">Code Repository</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div id="social" class="dark-desaturate">
|
||||||
|
<h4 class="text-right"><a href="/contact">Contact us</a></h4>
|
||||||
|
<div class="flex justify-space-between">
|
||||||
|
<a href="https://github.com/godotengine" target="_blank" rel="noopener">
|
||||||
|
<img src="/assets/footer/github_logo.svg" width="32" height="32" alt="GitHub">
|
||||||
|
</a>
|
||||||
|
<a href="https://twitter.com/godotengine" target="_blank" rel="noopener">
|
||||||
|
<img src="/assets/footer/twitter_logo.svg" width="32" height="32" alt="Twitter">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.facebook.com/groups/godotengine/" target="_blank" rel="noopener">
|
||||||
|
<img src="/assets/footer/facebook_logo.svg" width="32" height="32" alt="Facebook">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.reddit.com/r/godot" target="_blank" rel="noopener">
|
||||||
|
<!-- Zero-width space in the `alt` text to prevent content blockers from blocking the icon -->
|
||||||
|
<img src="/assets/footer/reddit_logo.svg" width="32" height="32" alt="Reddit">
|
||||||
|
</a>
|
||||||
|
<a href="/rss.xml" target="_blank" rel="noopener">
|
||||||
|
<!-- Icon is called `feed` instead of `rss` to prevent content blockers from blocking the icon -->
|
||||||
|
<img src="/assets/footer/feed_logo.svg" width="32" height="32" alt="RSS feed">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script defer src="/assets/js/tobii.min.js"></script>
|
||||||
|
<script defer src="/assets/js/highlight.min.js?1"></script>
|
||||||
|
<script defer src="/assets/js/highlight.gdscript.min.js?1"></script>
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
// This needs to be done on page load but also after page changes,
|
||||||
|
// in case a code block appears in an article.
|
||||||
|
document.querySelectorAll('pre code').forEach((block) => {
|
||||||
|
hljs.highlightBlock(block);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelectorAll('.content-article img').forEach((articleImg) => {
|
||||||
|
// Add lightbox elements in blog articles for Tobii.
|
||||||
|
const lightbox = document.createElement('a');
|
||||||
|
lightbox.href = articleImg.src;
|
||||||
|
lightbox.classList.add('lightbox');
|
||||||
|
lightbox.dataset.group = 'article';
|
||||||
|
articleImg.parentNode.appendChild(lightbox);
|
||||||
|
lightbox.appendChild(articleImg);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Initialize lightbox.
|
||||||
|
new Tobii({
|
||||||
|
zoom: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update any download link to point to identified user's OS.
|
||||||
|
const links = document.querySelectorAll('.set-os-download-url');
|
||||||
|
for (let i = 0; i < links.length; i++) {
|
||||||
|
const link = links[i];
|
||||||
|
link.href = "/download/windows";
|
||||||
|
if (navigator.platform.indexOf('Mac') !== -1) {
|
||||||
|
link.href = "/download/macos";
|
||||||
|
} else if (navigator.platform.indexOf('Linux') !== -1) {
|
||||||
|
link.href = "/download/linux";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
39
_includes/header.html
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<input type="checkbox" id="nav_toggle_cb">
|
||||||
|
<header>
|
||||||
|
<div class="container flex align-center">
|
||||||
|
<div id="nav_head">
|
||||||
|
<a href="/" id="logo-link">
|
||||||
|
<img class="nav-logo" src="/assets/logo.svg" width="136" height="48" alt="Godot Engine">
|
||||||
|
<img class="nav-logo dark-logo" src="/assets/logo_dark.svg" width="136" height="48" alt="Godot Engine">
|
||||||
|
</a>
|
||||||
|
<label for="nav_toggle_cb" id="nav_toggle_btn">
|
||||||
|
<img src="/assets/hamburger.svg" width="24" height="24" alt="">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav id="nav">
|
||||||
|
<ul class="left">
|
||||||
|
<li><a href="/showcase">Showcase</a></li>
|
||||||
|
<div class="only-on-mobile" style="width: 100%">
|
||||||
|
<li><a href="/features">Features</a></li>
|
||||||
|
</div>
|
||||||
|
<li><a href="/blog">Blog</a></li>
|
||||||
|
<li><a href="/community">Community</a></li>
|
||||||
|
<li><a href="/contact">About</a></li>
|
||||||
|
<li><a href="https://godotengine.org/asset-library/asset">Assets</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<ul class="right">
|
||||||
|
<li><a href="/download/windows" class="set-os-download-url">Download</a></li>
|
||||||
|
<li><a href="https://docs.godotengine.org">Learn</a></li>
|
||||||
|
<li><a href="https://docs.godotengine.org/en/stable/community/contributing/index.html">Contribute</a></li>
|
||||||
|
{% comment %}
|
||||||
|
We add the control character at the end to force the heart to render as text and not as an emoji.
|
||||||
|
{% endcomment %}
|
||||||
|
<li class="fund"><a href="/donate">❤︎ Donate</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
146
_layouts/article.html
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
|
||||||
|
{% include header.html %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: var(--background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
margin-top: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(pre)>code {
|
||||||
|
background: var(--code-background-color);
|
||||||
|
padding: 1px 4px;
|
||||||
|
font-size: 0.95em;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
background: var(--codeblock-background-color);
|
||||||
|
color: var(--codeblock-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
padding: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.date-big {
|
||||||
|
line-height: 2;
|
||||||
|
margin-left: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article {
|
||||||
|
background-color: var(--base-color);
|
||||||
|
box-shadow: 0px 3px 2px 0px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure img {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
article img,
|
||||||
|
article video {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article h1 {
|
||||||
|
margin-top: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article h2,
|
||||||
|
article h3,
|
||||||
|
article h4 {
|
||||||
|
margin-top: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.author {
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag.active {
|
||||||
|
filter: saturate(0.75);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 900px) {
|
||||||
|
article .content {
|
||||||
|
width: 70%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
body {
|
||||||
|
background-color: var(--base-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
article {
|
||||||
|
background-color: transparent;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
article img:first-child,
|
||||||
|
article video:first-child {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assets/css/highlight.obsidian.min.css">
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<article class="flex padded">
|
||||||
|
<div class="content content-article">
|
||||||
|
<figure>
|
||||||
|
<img src="{{ page.image }}" title="{{ page.image_caption_title }}"
|
||||||
|
alt="{{ page.image_caption_title }} {{ page.image_caption_description }}" class="rounded-lg"
|
||||||
|
style="width: 100%; height: auto" />
|
||||||
|
<figcaption style="opacity: 0.8; line-height: 1.5">
|
||||||
|
<strong>{{ page.image_caption_title }}</strong>
|
||||||
|
<span style="margin-left: 0.75rem; font-size: 90%">{{ page.image_caption_description }}</span>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<div class="info">
|
||||||
|
<h1>
|
||||||
|
{{ page.title }}
|
||||||
|
</h1>
|
||||||
|
<h4 class="author">
|
||||||
|
By: {{ page.author }}
|
||||||
|
<span class="date"> {{ page.date | date: "%e %B %Y" }}</span>
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<div class="tags">
|
||||||
|
{% for category in page.categories %}
|
||||||
|
<a href="/blog/{{ category }}">
|
||||||
|
<div class="tag active">{{ site.data.categories[category][0].name }}</div>
|
||||||
|
</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
131
_layouts/blog.html
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
---
|
||||||
|
title: "Godot Engine - Blog"
|
||||||
|
description: "Keep up-to-date with the latest Godot Engine development news."
|
||||||
|
layout: default
|
||||||
|
pagination:
|
||||||
|
enabled: true
|
||||||
|
collection: article
|
||||||
|
---
|
||||||
|
|
||||||
|
{% include header.html %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.posts {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.posts {
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
.posts {
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="head">
|
||||||
|
<div class="container flex eqsize responsive">
|
||||||
|
<div class="main">
|
||||||
|
<h1 class="intro-title">Blog</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<!-- Search -->
|
||||||
|
<form class="search-bar" method="get" action="https://duckduckgo.com/">
|
||||||
|
<input type="hidden" name="sites" value="godotengine.org/article" />
|
||||||
|
<input type="text" name="q" maxlength="300" placeholder="Search articles" />
|
||||||
|
<button class="btn search-bar-btn" type="submit">
|
||||||
|
<img width="24" height="24" src="/assets/icons/search.svg" alt="search" title="search" />
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
|
||||||
|
<h3 style="margin-top: 1rem; margin-bottom: 4rem">Categories</h3>
|
||||||
|
|
||||||
|
<div class="tags">
|
||||||
|
<a href="/blog" title="Show all categories">
|
||||||
|
<div class="tag tag--default {% if page.category == 'all' %}active{% endif %}">All</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{% for category in site.data.categories %}
|
||||||
|
{% for tag in category[1] %}
|
||||||
|
<a href="/blog/{{ tag.slug }}" title="{{ tag.description }}">
|
||||||
|
<div class="tag tag--{{ category.slug }} {% if tag.slug == page.category %} active {% endif %}">
|
||||||
|
{{ tag.name }}</div>
|
||||||
|
</a>
|
||||||
|
{% endfor%}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% if page.category != 'all' %}
|
||||||
|
<h3 style="margin-top: 1rem;">Filtered by: {{ site.data.categories[page.category][0].name }}</h3>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<!-- Posts -->
|
||||||
|
<div class="flex pagination">
|
||||||
|
{% if paginator.previous_page %}
|
||||||
|
<a class="pagination-previous"
|
||||||
|
href="{{ paginator.previous_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">← Previous</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if paginator.page_trail %}
|
||||||
|
{% for trail in paginator.page_trail %}
|
||||||
|
<a {% if page.url==trail.path %}class="active" {% endif %} title="{{trail.title}}"
|
||||||
|
href="{{ trail.path | prepend: site.baseurl | replace: 'index.html', '' }}">{{ trail.num }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if paginator.next_page %}
|
||||||
|
<a class="pagination-next"
|
||||||
|
href="{{ paginator.next_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">Next →</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="posts">
|
||||||
|
{% for post in paginator.posts %}
|
||||||
|
<a href="{{ post.url }}" style="text-decoration: none">
|
||||||
|
<article class="article-card">
|
||||||
|
<div class="thumbnail" style="background-image: url('{{ post.image }}');" href="{{ post.url }}"></div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="info">
|
||||||
|
<img class="avatar" width="25" height="25" src="{% for author in site.data.authors %}{% if author.name == post.author %}{{ author.image }}{% endif %}{%
|
||||||
|
endfor %}" alt="" loading="lazy">
|
||||||
|
<span class="by">{{ post.author }} </span>
|
||||||
|
<span class="date"> - {{ post.date | date: "%e %B %Y" }}</span>
|
||||||
|
</div>
|
||||||
|
<h3>{{ post.title }}</h3>
|
||||||
|
<p class="excerpt">{{ post.excerpt }}</p>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<div class="flex pagination">
|
||||||
|
{% if paginator.previous_page %}
|
||||||
|
<a class="pagination-previous"
|
||||||
|
href="{{ paginator.previous_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">← Previous</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if paginator.page_trail %}
|
||||||
|
{% for trail in paginator.page_trail %}
|
||||||
|
<a {% if page.url==trail.path %}class="active" {% endif %} title="{{trail.title}}"
|
||||||
|
href="{{ trail.path | prepend: site.baseurl | replace: 'index.html', '' }}">{{ trail.num }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if paginator.next_page %}
|
||||||
|
<a class="pagination-next"
|
||||||
|
href="{{ paginator.next_page_path | prepend: site.baseurl | replace: 'index.html', '' }}">Next →</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
36
_layouts/default.html
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ site.lang }}">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="author" content="Godot Engine">
|
||||||
|
<meta name="description" content="{{ page.description | default: 'Free and open source 2D and 3D game engine' }}">
|
||||||
|
<meta name="theme-color" content="#3d8fcc">
|
||||||
|
<meta property="og:site_name" content="Godot Engine">
|
||||||
|
<meta property="og:url" content="https://godotengine.org">
|
||||||
|
<meta name="twitter:site" content="@godotengine">
|
||||||
|
|
||||||
|
<meta property="og:title" content="{{ page.title | default: 'Godot Engine' }}">
|
||||||
|
<meta property="og:description"
|
||||||
|
content="{{ page.description | default: 'Free and open source 2D and 3D game engine' }}">
|
||||||
|
<meta property="og:image" content="{{ page.image | default: '/assets/og_image.png' }}">
|
||||||
|
<meta property="og:type" content="{{ page.og_type | default: 'website' }}">
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<title>{{ page.title | default: "Godot Engine" }}</title>
|
||||||
|
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Godot News" href="/rss.xml">
|
||||||
|
<link rel="icon" href="/assets/favicon.png" sizes="any">
|
||||||
|
<link rel="icon" href="/assets/favicon.svg" type="image/svg+xml">
|
||||||
|
<link rel="stylesheet" href="/assets/css/main.css">
|
||||||
|
<link rel="stylesheet" href="/assets/css/tobii.min.css">
|
||||||
|
<link rel="preload" as="font" href="/assets/fonts/Montserrat-Bold.woff2" crossorigin>
|
||||||
|
<link rel="preload" as="font" href="/assets/fonts/Montserrat-ExtraBold.woff2" crossorigin>
|
||||||
|
<link rel="me" href="https://mastodon.gamedev.place/@godotengine">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
{{ content }}
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
317
_layouts/download.html
Normal file
@@ -0,0 +1,317 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
{% assign platform = page.platform %}
|
||||||
|
|
||||||
|
{% include header.html %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.btn.btn-version-download {
|
||||||
|
background-color: var(--primary-color);
|
||||||
|
color: white;
|
||||||
|
display: inline-flex;
|
||||||
|
flex-basis: content;
|
||||||
|
padding: 0px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn.btn-version-download a {
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 10px 20px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.digital-stores {
|
||||||
|
width: 85%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.digital-stores-download {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 16px;
|
||||||
|
color: var(--dark-color-text-hl);
|
||||||
|
font-size: 16px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.digital-stores-logo {
|
||||||
|
background-color: var(--digital-store-background-color);
|
||||||
|
padding: 8px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.digital-stores-logo img {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.digital-stores-name {
|
||||||
|
color: var(--base-color-text-hl);
|
||||||
|
font-family: "Montserrat", sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
padding: 8px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.version-overview {
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.version-overview h2 {
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.version-overview .version-link {
|
||||||
|
color: var(--primary-color);
|
||||||
|
font-style: normal;
|
||||||
|
margin-left: 16px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.version-overview .date {
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.version-overview img {
|
||||||
|
filter: drop-shadow(var(--base-shadow));
|
||||||
|
}
|
||||||
|
|
||||||
|
.platform-details hr {
|
||||||
|
border-top-color: rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.platform-details pre {
|
||||||
|
background-color: var(--platform-code-background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.extras .card {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.extras .card p {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subheader {
|
||||||
|
margin-top: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* hide tab icons by default */
|
||||||
|
.tab img {
|
||||||
|
display: none;
|
||||||
|
filter: invert(100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1060px) {
|
||||||
|
|
||||||
|
/* hide tab text only show icons */
|
||||||
|
.tab img {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* hide tab text, except for active tabs */
|
||||||
|
.tab:not(.active) span {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="head">
|
||||||
|
<div class="container flex responsive justify-space-between">
|
||||||
|
<div class="main">
|
||||||
|
<h1 class="intro-title">Download</h1>
|
||||||
|
</div>
|
||||||
|
<div class="tabs snap-tabs">
|
||||||
|
<a href="/download/linux" class="tab title-font {% if page.platform == 'linux' %} active {% endif %}">
|
||||||
|
<img width="24" height="24" src="/assets/icons/linux.svg" title="Linux" alt="Linux" />
|
||||||
|
<span>Linux</span>
|
||||||
|
</a>
|
||||||
|
<a href="/download/macos" class="tab title-font {% if page.platform == 'macos' %} active {% endif %}">
|
||||||
|
<img width="24" height="24" src="/assets/icons/macos.svg" title="macOS" alt="macOS" />
|
||||||
|
<span>macOS</span>
|
||||||
|
</a>
|
||||||
|
<a href="/download/windows" class="tab title-font {% if page.platform == 'windows' %} active {% endif %}">
|
||||||
|
<img width="24" height="24" src="/assets/icons/windows.svg" title="Windows" alt="Windows" />
|
||||||
|
<span>Windows</span>
|
||||||
|
</a>
|
||||||
|
<a href="/download/server" class="tab title-font {% if page.platform == 'server' %} active {% endif %}">
|
||||||
|
<img width="24" height="24" src="/assets/icons/server.svg" title="Linux Server" alt="Linux Server" />
|
||||||
|
<span>Linux Server</span>
|
||||||
|
</a>
|
||||||
|
<a href="/download/android" class="tab title-font {% if page.platform == 'android' %} active {% endif %}">
|
||||||
|
<img width="24" height="24" src="/assets/icons/android.svg" title="Android" alt="Android" />
|
||||||
|
<span>Android</span>
|
||||||
|
</a>
|
||||||
|
<a href="https://editor.godotengine.org/releases/latest/" class="tab title-font">
|
||||||
|
<img width="24" height="24" src="/assets/icons/html5.svg" title="Web Editor" alt="Web Editor" />
|
||||||
|
<span>Web Editor</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<div class="flex responsive eqsize">
|
||||||
|
<div class="version-overview">
|
||||||
|
<img src="/assets/download/godot_logo.svg" width="200" height="200" alt="logo">
|
||||||
|
<h2>Godot <a class="version-link" href="#links">{{ site.stable_version }}</a></h2>
|
||||||
|
<i class="date">released {{ site.stable_version_date }}</i>
|
||||||
|
|
||||||
|
<div style="margin-top:32px; line-height: 1.6; font-size: 85%">
|
||||||
|
You can find previous releases on the
|
||||||
|
<a href="https://downloads.tuxfamily.org/godotengine">download repository</a>.<br>
|
||||||
|
Slow download? Try the mirror on <a href="https://github.com/godotengine/godot/releases">GitHub
|
||||||
|
Releases</a>.<br>
|
||||||
|
<br>
|
||||||
|
Also available on digital distribution platforms:
|
||||||
|
</div>
|
||||||
|
<div class="digital-stores">
|
||||||
|
<a class="digital-stores-download card" href="https://godotengine.itch.io/godot"
|
||||||
|
title="Godot Engine on itch.io">
|
||||||
|
<div class="digital-stores-logo">
|
||||||
|
<img src="/assets/download/itch_logo.svg" width="28" height="28" alt="itch logo">
|
||||||
|
</div>
|
||||||
|
<div class="digital-stores-name">itch.io</div>
|
||||||
|
</a>
|
||||||
|
<a class="digital-stores-download card" href="https://store.steampowered.com/app/404790"
|
||||||
|
title="Godot Engine on Steam">
|
||||||
|
<div class="digital-stores-logo">
|
||||||
|
<img src="/assets/download/steam_logo.svg" width="28" height="28" alt="Steam logo">
|
||||||
|
</div>
|
||||||
|
<div class="digital-stores-name">Steam</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="links" class="platform-details">
|
||||||
|
<div class="card">
|
||||||
|
<div class="base-padding">
|
||||||
|
<h4>Standard version</h4>
|
||||||
|
{% for download in page.downloads %}
|
||||||
|
<div class="btn btn-version-download">
|
||||||
|
<a
|
||||||
|
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/Godot_v{{site.stable_version}}-stable_{{ download.url }}">{{ download.caption }}</a>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
<h4 style="margin-top: 2rem">Mono version (C# support)</h4>
|
||||||
|
{% for download in page.downloads_mono %}
|
||||||
|
<div class="btn btn-version-download">
|
||||||
|
<a
|
||||||
|
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/mono/Godot_v{{site.stable_version}}-stable_{{ download.url }}">{{
|
||||||
|
download.caption }}</a>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{{ page.mono_note }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<div class="base-padding">
|
||||||
|
<h4>Requirements</h4>
|
||||||
|
<ul>
|
||||||
|
<li>OpenGL 2.1 / OpenGL ES 2.0 compatible hardware</li>
|
||||||
|
{% if platform != 'android' %}
|
||||||
|
<li>
|
||||||
|
<strong>For the Mono version:</strong> <a href="https://dotnet.microsoft.com/download">.NET SDK</a> or the
|
||||||
|
<a href="https://www.mono-project.com/download/stable/">Mono SDK</a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<div class="base-padding">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer base-padding" style="line-height: 1.6; font-size: 90%">
|
||||||
|
Learn how to use Godot with the <a
|
||||||
|
href="https://docs.godotengine.org/en/stable/getting_started/step_by_step/">Step by Step tutorial</a>.<br>
|
||||||
|
Give a try to <a href="https://godotengine.org/asset-library/asset?category=10&support[official]=1">demo
|
||||||
|
projects</a> showcasing some of the engine features.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex responsive eqsize padded">
|
||||||
|
<div class="extras">
|
||||||
|
|
||||||
|
<a class="card"
|
||||||
|
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/Godot_v{{site.stable_version}}-stable_export_templates.tpz">
|
||||||
|
<div class="base-padding">
|
||||||
|
<h3>Export templates (standard)</h3>
|
||||||
|
<p>Used to export your games to all supported platforms.</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="card"
|
||||||
|
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/mono/Godot_v{{site.stable_version}}-stable_mono_export_templates.tpz">
|
||||||
|
<div class="base-padding">
|
||||||
|
<h3>Export templates (Mono / C#)</h3>
|
||||||
|
<p>
|
||||||
|
Used to export your C# games to the supported platforms.<br>
|
||||||
|
Currently, the C# version can export to desktop platforms (Linux, macOS and Windows), Android, iOS, and
|
||||||
|
HTML5/WebAssembly.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="card"
|
||||||
|
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/godot-lib.{{site.stable_version}}.stable.release.aar">
|
||||||
|
<div class="base-padding">
|
||||||
|
<h3>AAR library for Android plugins (standard)</h3>
|
||||||
|
<p>Use it to develop Android plugins in Java or Kotlin using the Godot API.</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="card"
|
||||||
|
href="https://downloads.tuxfamily.org/godotengine/{{site.stable_version}}/mono/godot-lib.{{site.stable_version}}.stable.mono.release.aar">
|
||||||
|
<div class="base-padding">
|
||||||
|
<h3>AAR library for Android plugins (Mono / C#)</h3>
|
||||||
|
<p>Use it to develop Android plugins in Java or Kotlin using the Godot API.</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://github.com/godotengine/godot-blender-exporter" class="base-padding card">
|
||||||
|
<div>
|
||||||
|
<h3>Blender ESCN exporter</h3>
|
||||||
|
<p>
|
||||||
|
Blender add-on to export scenes to Godot's scene format directly.<br>
|
||||||
|
Godot also supports glTF 2.0 and OBJ.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-center base-padding">
|
||||||
|
<img class="flex-center dark-invert" src="/assets/download/dl_icon_github.png" width="200" height="200" alt="">
|
||||||
|
<p>
|
||||||
|
Godot's development is <strong>open</strong>. This means that you can
|
||||||
|
fix or improve any part of the engine yourself and choose
|
||||||
|
whether to contribute it back or keep it private.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
New features are always available to use and test, without the need of
|
||||||
|
having to wait for the next major release. Compiling Godot from source
|
||||||
|
is <em>very easy</em> and the process is well-documented for each platform.
|
||||||
|
To obtain the source code, please visit the
|
||||||
|
<a href="https://github.com/godotengine/godot">GitHub project page</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
43
_layouts/more.html
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
header_text: ''
|
||||||
|
current_tab: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
{% include header.html %}
|
||||||
|
|
||||||
|
<div class="head">
|
||||||
|
<div class="container flex eqsize" style="flex-direction: column">
|
||||||
|
<div class="main">
|
||||||
|
<h1 class="intro-title">{{ page.header_text }}</h1>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tabs">
|
||||||
|
<a href="/contact" class="title-font {% if page.current_tab == 'contact' %} active {% endif %}">
|
||||||
|
Contact
|
||||||
|
</a>
|
||||||
|
<a href="/code-of-conduct" class="title-font {% if page.current_tab == 'code-of-conduct' %} active {% endif %}">
|
||||||
|
Code of Conduct
|
||||||
|
</a>
|
||||||
|
<a href="/privacy-policy" class="title-font {% if page.current_tab == 'privacy-policy' %} active {% endif %}">
|
||||||
|
Privacy
|
||||||
|
</a>
|
||||||
|
<a href="/governance" class="title-font {% if page.current_tab == 'governance' %} active {% endif %}">
|
||||||
|
Governance
|
||||||
|
</a>
|
||||||
|
<a href="/teams" class="title-font {% if page.current_tab == 'teams' %} active {% endif %}">
|
||||||
|
Teams
|
||||||
|
</a>
|
||||||
|
<a href="/license" class="title-font {% if page.current_tab == 'license' %} active {% endif %}">
|
||||||
|
License
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
194
_layouts/showcase-item.html
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
|
||||||
|
{% include header.html %}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.showcase-video-image {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.showcase-developer-quote {
|
||||||
|
font-style: italic;
|
||||||
|
color: var(--base-color-text-title);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.showcase-developer-quote p:first-child::before {
|
||||||
|
content: '“';
|
||||||
|
font-size: 150%;
|
||||||
|
margin-right: -0.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.showcase-developer-quote p:last-child::after {
|
||||||
|
content: '”';
|
||||||
|
font-size: 150%;
|
||||||
|
margin-left: -0.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 900px) {
|
||||||
|
.showcase-video-image {
|
||||||
|
margin-left: 1rem;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="head">
|
||||||
|
<div class="container flex eqsize responsive">
|
||||||
|
<div class="main">
|
||||||
|
|
||||||
|
<div style="margin: 1.25rem 0">
|
||||||
|
<a href="/showcase"><strong><</strong> Back to showcase</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1 class="intro-title">{{ page.title }}</h1>
|
||||||
|
<h3 style="opacity: 0.75; margin-top: 0.5rem">
|
||||||
|
by <a href="{{ page.website }}" target="_blank"
|
||||||
|
style="text-decoration: underline; text-decoration-thickness: 0.125rem; text-decoration-color: hsla(0, 0%, 100%, 0.5)">{{
|
||||||
|
page.author }}</a>
|
||||||
|
| {% if page.release_date == "TBD" %}Release date: <abbr title="To Be Determined">TBD</abbr>{% else %}{{
|
||||||
|
page.release_date }}{% endif %}
|
||||||
|
</h3>
|
||||||
|
<div style="filter: invert(100%); opacity: 0.75; margin-top: 1rem">
|
||||||
|
|
||||||
|
|
||||||
|
{% if page.windows %}
|
||||||
|
<img src="/assets/icons/windows.svg" alt="Windows" title="Windows" style="margin: 0 0.125rem" width="24"
|
||||||
|
height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.macos %}
|
||||||
|
<img src="/assets/icons/macos.svg" alt="Mac" title="Mac" style="margin: 0 0.125rem" width="24" height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.linux %}
|
||||||
|
<img src="/assets/icons/linux.svg" alt="Linux" title="Linux" style="margin: 0 0.125rem" width="24" height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.switch %}
|
||||||
|
<img src="/assets/icons/switch.svg" alt="Nintendo Switch" title="Switch" style="margin: 0 0.125rem" width="24"
|
||||||
|
height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.html5 %}
|
||||||
|
<img src="/assets/icons/html5.svg" alt="HTML5" title="HTML5" style="margin: 0 0.125rem" width="24" height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.android %}
|
||||||
|
<img src="/assets/icons/android.svg" alt="Android" title="Android" style="margin: 0 0.125rem" width="24"
|
||||||
|
height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.ios %}
|
||||||
|
<img src="/assets/icons/ios.svg" alt="iOS" title="iOS" style="margin: 0 0.125rem" width="24" height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.playstation %}
|
||||||
|
<img src="/assets/icons/playstation.svg" alt="PlayStation" title="PlayStation" style="margin: 0 0.125rem"
|
||||||
|
width="24" height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.xbox %}
|
||||||
|
<img src="/assets/icons/xbox.svg" alt="Xbox" title="Xbox" style="margin: 0 0.125rem" width="24" height="24">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<section class="flex eqsize responsive">
|
||||||
|
<article>
|
||||||
|
{{ content }}
|
||||||
|
|
||||||
|
<div class="flex responsive" style="justify-content: center; margin-top: 2rem">
|
||||||
|
{% if page.steam %}
|
||||||
|
<a href="{{ page.steam }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
View on Steam
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.itch %}
|
||||||
|
<a href="{{ page.itch }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
View on Itch.io
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.humble %}
|
||||||
|
<a href="{{ page.humble }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
View on Humble Store
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.gog %}
|
||||||
|
<a href="{{ page.gog }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
View on Humble GOG
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.nintendo %}
|
||||||
|
<a href="{{ page.nintendo }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
View on Switch
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.xbox %}
|
||||||
|
<a href="{{ page.xbox }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
View on Xbox
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.github %}
|
||||||
|
<a href="{{ page.github }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
View on GitHub
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.custom %}
|
||||||
|
<a href="{{ page.custom }}" class="btn" style="margin: 0 0.5rem; white-space: nowrap" target="_blank">
|
||||||
|
Learn More
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
<article class="showcase-video-image">
|
||||||
|
{% if page.youtube_id %}
|
||||||
|
<div class="card youtube" style="padding-bottom: 56.25%">
|
||||||
|
<iframe src="https://www.youtube-nocookie.com/embed/{{ page.youtube_id }}"
|
||||||
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||||
|
allowfullscreen="" frameborder="0">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% for image in page.gallery %}
|
||||||
|
<a href="{{ image }}" class="lightbox" data-group="showcase">
|
||||||
|
<img class="rounded-lg" src="{{ image }}" alt="Screenshot of {{ page.title }} by {{ page.author }}"
|
||||||
|
style="width: 100%; height: auto; margin-top: 1rem; background: linear-gradient(90deg, #947451 12%, #a8885f 29%, #8c8977 65%, #d2ba9f 98%) "
|
||||||
|
width="16" height="9">
|
||||||
|
</a>
|
||||||
|
{% endfor %}
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
{% if page.developer_interview %}
|
||||||
|
<section style="margin-top: 3rem">
|
||||||
|
<h3>{{ page.developer_interview.title }}</h3>
|
||||||
|
|
||||||
|
<blockquote class="showcase-developer-quote">
|
||||||
|
{{ page.developer_interview.text }}
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
{% if page.developer_interview.url %}
|
||||||
|
<a href="{{ page.developer_interview.url }}">{{ page.developer_interview.context }}</a>
|
||||||
|
{% else %}
|
||||||
|
<p>{{ page.developer_interview.context }}</p>
|
||||||
|
{% endif %}
|
||||||
|
</section>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
@@ -1158,11 +1158,8 @@ pre > code {
|
|||||||
margin-top: 2rem;
|
margin-top: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The teams page */
|
|
||||||
|
|
||||||
.teams-team-section {
|
.teams-team-section {
|
||||||
background-color: var(--teams-odd-color);
|
background-color: var(--teams-odd-color);
|
||||||
box-shadow: var(--base-shadow);
|
|
||||||
padding: 20px 16px;
|
padding: 20px 16px;
|
||||||
margin: 40px 0;
|
margin: 40px 0;
|
||||||
}
|
}
|
||||||
@@ -1175,113 +1172,55 @@ pre > code {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.teams-team-section > h4 {
|
.teams-team-section > h4 {
|
||||||
font-size: 24px;
|
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-team-section em {
|
|
||||||
font-size: 94%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-team-section > p {
|
|
||||||
margin-top: 1.5em;
|
|
||||||
margin-bottom: 0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-team-leader:before {
|
|
||||||
content: "⭐\00a0"; /* This is a non-breakable space. */
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-team-leader {
|
|
||||||
color: var(--base-color-text-hl);
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-subteams {
|
.teams-subteams {
|
||||||
background-color: var(--teams-subteams-color);
|
background-color: var(--teams-subteams-color);
|
||||||
border-left: 6px solid var(--accent-color);
|
border-left: 6px solid var(--accent-color);
|
||||||
border-radius: 2px;
|
|
||||||
padding: 4px 10px;
|
padding: 4px 10px;
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
display: grid;
|
width: 100%;
|
||||||
grid-template-columns: 25% 75%;
|
table-layout: fixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-subteam-name {
|
.teams-subteams th {
|
||||||
font-family: "Montserrat", sans-serif;
|
padding: 16px;
|
||||||
font-weight: 600;
|
border-right: 1px dashed var(--table-divider-color);
|
||||||
font-size: 18px;
|
|
||||||
text-align: left;
|
|
||||||
padding: 16px 16px 16px 10px;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-subteam-members {
|
.teams-subteams td {
|
||||||
padding: 16px 0 16px 12px;
|
padding: 16px 0 16px 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-subteam-name,
|
.teams-subteams th,
|
||||||
.teams-subteam-members {
|
.teams-subteams td {
|
||||||
border-bottom: 2px dashed var(--table-divider-color);
|
border-bottom: 1px dashed var(--table-divider-color);
|
||||||
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
.teams-subteam-name:last-of-type,
|
|
||||||
.teams-subteam-members:last-of-type {
|
.teams-subteams tr:last-of-type td,
|
||||||
|
.teams-subteams tr:last-of-type th {
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-subteams .teams-team-leader,
|
|
||||||
.teams-subteam-members {
|
|
||||||
font-size: 16px;
|
|
||||||
line-height: 1.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-team-members > span:after,
|
|
||||||
.teams-subteam-members > span:after {
|
|
||||||
content: ", ";
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-team-members > span:last-child:after,
|
|
||||||
.teams-subteam-members > span:last-child:after {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.teams-team-section {
|
|
||||||
margin-left: -18px;
|
|
||||||
margin-right: -18px;
|
|
||||||
padding-left: 20px;
|
|
||||||
padding-right: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-subteams {
|
|
||||||
padding: 4px;
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
}
|
|
||||||
|
|
||||||
.teams-subteam-name {
|
.teams-subteam-name {
|
||||||
border-bottom: 0;
|
text-align: left;
|
||||||
|
width: 25%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-team-members,
|
.teams-subteam-leader:before {
|
||||||
.teams-subteam-members {
|
content: "⭐ ";
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-team-members > span:after,
|
.teams-subteam-leader {
|
||||||
.teams-subteam-members > span:after {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
.teams-team-members > span:not(.teams-team-leader):before,
|
|
||||||
.teams-subteam-members > span:not(.teams-team-leader):before {
|
|
||||||
content: "· ";
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
.teams-team-leader {
|
.teams-subteam-leader,
|
||||||
margin-left: -6px;
|
.teams-subteam-members {
|
||||||
}
|
font-size: 16px;
|
||||||
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rounded {
|
.rounded {
|
||||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 271 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 975 B After Width: | Height: | Size: 975 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 932 B After Width: | Height: | Size: 932 B |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 669 KiB After Width: | Height: | Size: 669 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 536 B |
|
Before Width: | Height: | Size: 430 B After Width: | Height: | Size: 430 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 666 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 546 B After Width: | Height: | Size: 546 B |
|
Before Width: | Height: | Size: 363 B After Width: | Height: | Size: 363 B |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 370 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
BIN
assets/images/authors/akien.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
assets/images/authors/bastiaan.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |