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>
This commit is contained in:
Emilio Coppola
2022-12-31 15:07:48 +01:00
committed by Yuri Sizov
parent 2163d37b42
commit 2fa65521ee
2702 changed files with 57721 additions and 13016 deletions

View File

@@ -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

View File

@@ -1,6 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

View File

@@ -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

View File

@@ -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
View File

@@ -1,47 +1,6 @@
# Exclude everything by default (this is a CMS!), and whitelist the safe stuff
/*
!/README.md
!/DEVELOPMENT_SETUP.md
!/ISSUE_TEMPLATE.md
!/LICENSE.txt
!.well-known/
# Build artifacts and cache
.jekyll-cache
_site
# Vim
*.swp
*.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
# Code editors
.vscode/

View File

@@ -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/

View File

@@ -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
View 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
View 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

View File

@@ -1,5 +1,5 @@
Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.
Copyright (c) 2014-2022 Godot Engine contributors (cf. https://github.com/godotengine/godot/blob/master/AUTHORS.md).
Copyright (c) 2014 - present 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
of this software and associated documentation files (the "Software"), to deal

172
README.md
View File

@@ -1,35 +1,21 @@
# Godot Website
# Godot Engine Website
This repository contains the theme used by the Godot Engine's OctoberCMS/WinterCMS
instance. The theme describes both the styling of the website and the components
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.
Welcome to the source code for the Godot Engine website. This is a static website, generated offline using
[Jekyll](https://jekyllrb.com/).
## Contributing
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
acts as a public face of Godot organization and community. Thus, substantial
changes must be discussed ahead of time. You don't necessarily need to open a formal
Godot improvement proposal like you do with engine features, but starting an issue
on this repository or joining the discussion on the
[Godot Contributors Chat](https://chat.godotengine.org/channel/website) is a good idea.
However, when contributing to the website, it is important to keep in mind that it acts as a public face of Godot
organization and community. Thus, substantial changes must be discussed ahead of time. You don't necessarily need to
open a formal Godot improvement proposal like you do with engine features, but starting an issue on this repository
or joining the discussion on the [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
_evergreen browsers_:
When working on new features, keep in mind this website only supports _evergreen browsers_:
- Chrome (latest version and N-1 version)
- Edge (latest version and N-1 version)
@@ -39,37 +25,131 @@ _evergreen browsers_:
**Internet Explorer isn't supported.**
### Dependencies
## Development
This project requires the following stack:
### Building
- PHP 7.2+ & Composer 2
- MySQL/MariaDB
- OctoberCMS/WinterCMS v1.0.xxx
To build the website locally, follow these steps:
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
create a network of compatible ready-to-use containers.
Alternatively, you can also use the official Docker container for Jekyll. This container is designed to be run once
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.
For development purposes, you don't need that database, as the only thing that is specific
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.
```shell
docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:stable ./build.sh
```
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
[OctoberCMS Template Language](https://marketplace.visualstudio.com/items?itemName=dqsully.octobercms-template-language)
extension to benefit from syntax highlighting in `.htm` templates.
Building may take several minutes to finish.
### 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
- Join the discussion on Godot Contributors Chat in the
[#website](https://chat.godotengine.org/channel/website) channel.
- When working on the theme, please take note of the
[website stats](https://stats.tuxfamily.org/godotengine.org).
- Join the discussion on Godot Contributors Chat in the [#website](https://chat.godotengine.org/channel/website)
channel.
- Please, consider the [website usage stats](https://stats.tuxfamily.org/godotengine.org) when relying on modern
web technologies (web standards support, file type support, etc).

96
_config.yml Normal file
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1,3 @@
home:
h1: "The game engine you've been waiting&nbsp;for."
subtitle: "A simple, responsive Jekyll theme for your blog or site."

3
_i18n/es.yml Normal file
View 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
View 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>&nbsp;</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>&nbsp;</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
View 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">&#xFE0E; Donate</a></li>
</ul>
</nav>
</div>
</header>
<main>

146
_layouts/article.html Normal file
View 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
View 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">&nbsp;-&nbsp;{{ 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
View 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
View 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
View 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
View 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>&lt;</strong>&nbsp;&nbsp;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 %}

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

View File

@@ -1158,11 +1158,8 @@ pre > code {
margin-top: 2rem;
}
/* The teams page */
.teams-team-section {
background-color: var(--teams-odd-color);
box-shadow: var(--base-shadow);
padding: 20px 16px;
margin: 40px 0;
}
@@ -1175,115 +1172,57 @@ pre > code {
}
.teams-team-section > h4 {
font-size: 24px;
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 {
background-color: var(--teams-subteams-color);
border-left: 6px solid var(--accent-color);
border-radius: 2px;
padding: 4px 10px;
margin-top: 30px;
display: grid;
grid-template-columns: 25% 75%;
width: 100%;
table-layout: fixed;
}
.teams-subteam-name {
font-family: "Montserrat", sans-serif;
font-weight: 600;
font-size: 18px;
text-align: left;
padding: 16px 16px 16px 10px;
vertical-align: top;
.teams-subteams th {
padding: 16px;
border-right: 1px dashed var(--table-divider-color);
}
.teams-subteam-members {
.teams-subteams td {
padding: 16px 0 16px 12px;
}
.teams-subteam-name,
.teams-subteam-members {
border-bottom: 2px dashed var(--table-divider-color);
.teams-subteams th,
.teams-subteams td {
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;
}
.teams-subteams .teams-team-leader,
.teams-subteam-name {
text-align: left;
width: 25%;
}
.teams-subteam-leader:before {
content: "⭐ ";
}
.teams-subteam-leader {
font-weight: 700;
}
.teams-subteam-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 {
border-bottom: 0;
}
.teams-team-members,
.teams-subteam-members {
display: grid;
grid-template-columns: 1fr;
}
.teams-team-members > span:after,
.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;
}
.teams-team-leader {
margin-left: -6px;
}
}
.rounded {
border-radius: 0.25rem; /* 4px */
}

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 271 KiB

View File

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 172 KiB

View File

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 217 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

View File

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 160 KiB

View File

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 975 B

After

Width:  |  Height:  |  Size: 975 B

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 932 B

After

Width:  |  Height:  |  Size: 932 B

View File

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

View File

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

Before

Width:  |  Height:  |  Size: 669 KiB

After

Width:  |  Height:  |  Size: 669 KiB

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 536 B

After

Width:  |  Height:  |  Size: 536 B

View File

Before

Width:  |  Height:  |  Size: 430 B

After

Width:  |  Height:  |  Size: 430 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 666 B

After

Width:  |  Height:  |  Size: 666 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 546 B

After

Width:  |  Height:  |  Size: 546 B

View File

Before

Width:  |  Height:  |  Size: 363 B

After

Width:  |  Height:  |  Size: 363 B

View File

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

Before

Width:  |  Height:  |  Size: 370 B

After

Width:  |  Height:  |  Size: 370 B

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Some files were not shown because too many files have changed in this diff Show More