Skip to content

Commit d58ff1c

Browse files
authored
Merge pull request #1138 from adamscott/release-4.5
4.5 release page
2 parents c9f1406 + 5387797 commit d58ff1c

File tree

177 files changed

+6695
-390
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

177 files changed

+6695
-390
lines changed

.editorconfig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,7 @@ indent_size = 2
2020
[*.md]
2121
indent_style = space
2222
indent_size = 2
23+
24+
[*.sh]
25+
indent_style = tab
26+
indent_size = 4

_config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ collections:
3030
output: true
3131
release_4_4:
3232
output: true
33+
release_4_5:
34+
output: true
3335

3436
# Build collection items with a future date.
3537
future: true

_data/versions.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
- name: "4.5"
2-
flavor: "rc2"
3-
release_date: "10 September 2025"
4-
release_notes: "/article/release-candidate-godot-4-5-rc-2/"
2+
flavor: "stable"
3+
release_date: "15 September 2025"
4+
release_notes: "/article/godot-4-5-making-dreams-accessible/"
5+
featured: "4"
56
releases:
7+
- name: "rc2"
8+
release_date: "10 September 2025"
9+
release_notes: "/article/release-candidate-godot-4-5-rc-2/"
610
- name: "rc1"
711
release_date: "5 September 2025"
812
release_notes: "/article/release-candidate-godot-4-5-rc-1/"
@@ -47,7 +51,6 @@
4751
flavor: "stable"
4852
release_date: "26 March 2025"
4953
release_notes: "/article/maintenance-release-godot-4-4-1/"
50-
featured: "4"
5154
releases:
5255
- name: "rc2"
5356
release_date: "21 March 2025"

_includes/footer.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ <h2>{% t footer.foundation %}</h2>
8383
document.addEventListener('DOMContentLoaded', () => {
8484
// This needs to be done on page load but also after page changes,
8585
// in case a code block appears in an article.
86-
document.querySelectorAll('pre code').forEach((block) => {
86+
document.querySelectorAll('pre:not(.manual) code').forEach((block) => {
8787
hljs.highlightBlock(block);
8888
});
8989

_includes/header.html

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,20 @@
4545
</ul>
4646
</nav>
4747
</div>
48-
{% comment %}
4948
{% if page.path == "pages/home.html" %}
5049
<div class="banner-container" style="background-color: #fb99ff;">
5150
<div class="container">
5251
<div class="banner">
5352
<div class="banner-text">
54-
Godot 4.4 just released!
53+
Godot 4.5 just released!
5554
</div>
5655
<div class="banner-text">
57-
Check out the <a href="/releases/4.4/">release page!</a>
56+
Check out the <a href="/releases/4.5/">release page!</a>
5857
</div>
5958
</div>
6059
</div>
6160
</div>
6261
{% endif %}
63-
{% endcomment %}
6462
</header>
6563

6664
<!-- Dropdown menu positioned outside header to avoid backdrop-filter nesting issues -->

_plugins/manual_code_highlight.rb

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
# frozen_string_literal: true
2+
3+
require 'English'
4+
5+
module Jekyll
6+
# Definition of the filters.
7+
module CodeHighlightFilters
8+
def manual_highlight_code(input)
9+
new_input = input
10+
last_code_block_end = 0
11+
until (code_block = find_next_code_block(new_input, last_code_block_end)).nil?
12+
unless code_block.valid?
13+
last_code_block_end = code_block.end
14+
next
15+
end
16+
17+
code_block_begin = ''
18+
code_block_begin = new_input[0..code_block.begin - 1] || '' if code_block.begin > 0
19+
new_input = code_block_begin \
20+
+ replace_highlights(code_block.contents, block: code_block.block?) \
21+
+ (new_input[code_block.end..] || '')
22+
23+
last_code_block_end = 0
24+
end
25+
26+
new_input
27+
end
28+
29+
private
30+
31+
CodeBlock = Struct.new(:begin, :end, :delimiter, :data) do
32+
def valid?
33+
!(delimiter == '`' && !block?) || (block? && %w[manual manual-highlight].include?(type))
34+
end
35+
36+
def block?
37+
data.include?("\n")
38+
end
39+
40+
def contents
41+
if block?
42+
new_content = data.delete_prefix("#{type}\n")
43+
new_content = unindent(new_content)
44+
45+
# Make sure that it ends with a newline.
46+
new_content = "#{new_content.delete_suffix("\n")}\n"
47+
return new_content
48+
end
49+
50+
data
51+
end
52+
53+
def type
54+
return '' unless block?
55+
56+
/^(.+?)\n/ =~ data
57+
Regexp.last_match(1) || ''
58+
end
59+
60+
private
61+
62+
def unindent(str)
63+
loop do
64+
populated_lines_regex = /^.+/
65+
unindent_regex = /^#{str.scan(/^[^\S\n\r]+/).min}/
66+
67+
# We hit the maximum.
68+
break unless str.scan(unindent_regex).length == str.scan(populated_lines_regex).length
69+
70+
unindented_str = str.gsub(unindent_regex, '')
71+
str = unindented_str
72+
end
73+
74+
str
75+
end
76+
end
77+
78+
def find_next_code_block(input, from, delimiter = '`')
79+
code_block_start_regex = /(?:#{delimiter})+/
80+
from_substr_start = input[from..]
81+
code_block_start_match = code_block_start_regex.match(from_substr_start)
82+
return nil if code_block_start_match.nil?
83+
84+
code_block_start_begin = from + code_block_start_match.begin(0)
85+
code_block_start_end = from + code_block_start_match.end(0)
86+
code_block_delimiter = code_block_start_match[0]
87+
88+
code_block_end_regex = /(?<!`)#{code_block_delimiter}(?!`)/
89+
from_substr_end = input[code_block_start_end..]
90+
code_block_end_match = code_block_end_regex.match(from_substr_end)
91+
return nil if code_block_end_match.nil?
92+
93+
code_block_end_begin = code_block_start_end + code_block_end_match.begin(0)
94+
code_block_end_end = code_block_start_end + code_block_end_match.end(0)
95+
96+
code_block_data = input[code_block_start_end..code_block_end_begin - 1]
97+
98+
CodeBlock.new(begin: code_block_start_begin, end: code_block_end_end, delimiter: code_block_delimiter,
99+
data: code_block_data)
100+
end
101+
102+
def replace_highlights(input, block: false)
103+
return input if input.empty?
104+
105+
highlights_regex = /(?<!\\)@\[(?<content>.*?)\]\((?<type>.+?)\)/
106+
non_highlights_regex = /(?<non_highlight>.*?)(?:(?<highlight>#{highlights_regex})|$)/
107+
108+
num_highlights = input.scan(highlights_regex).length
109+
highlight_only = input.gsub(highlights_regex, '') == ''
110+
111+
force_spaces_input = input.gsub(non_highlights_regex) do |_match|
112+
non_highlight = $LAST_MATCH_INFO[:non_highlight]
113+
highlight = $LAST_MATCH_INFO[:highlight] || ''
114+
non_highlight.gsub!('<', '&lt;')
115+
non_highlight.gsub!('>', '&gt;')
116+
non_highlight + highlight
117+
end
118+
119+
highlights_result = force_spaces_input.gsub(highlights_regex) do |_match|
120+
type = $LAST_MATCH_INFO[:type]
121+
next '<wbr>' if type == 'wbr'
122+
123+
classes = []
124+
classes.push('code-highlight') if num_highlights == 1 && !block
125+
classes.push(type)
126+
content = $LAST_MATCH_INFO[:content]
127+
content.gsub!('<', '&lt;')
128+
content.gsub!('>', '&gt;')
129+
130+
"<span class=\"#{classes.join(' ')}\">#{content}</span>"
131+
end
132+
133+
if block
134+
code_tag = "<code class=\"highlight\">#{highlights_result}</code>"
135+
pre_tag = "<pre class=\"manual\" markdown=0>#{code_tag}</pre>"
136+
return pre_tag
137+
end
138+
139+
return "<span class=\"code-highlight\">#{highlights_result}</span>" unless highlight_only && num_highlights == 1
140+
141+
highlights_result
142+
end
143+
end
144+
end
145+
146+
Liquid::Template.register_filter(Jekyll::CodeHighlightFilters)

_sass/common/_colors.scss

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
1-
$godot-blue: #478CBF;
1+
$godot-blue: #478cbf;
22

33
$code-symbol--light: #00009c;
4-
$code-symbol--dark: #ABC9FF;
4+
$code-symbol--dark: #abc9ff;
55
$code-keyword--light: #e62282;
6-
$code-keyword--dark: #FF7085;
6+
$code-keyword--dark: #ff7085;
77
$code-controlflow--light: #bd1fcc;
8-
$code-controlflow--dark: #FF8CCC;
8+
$code-controlflow--dark: #ff8ccc;
99
$code-basetype--light: #009933;
10-
$code-basetype--dark: #42FFC2;
10+
$code-basetype--dark: #42ffc2;
1111
$code-enginetype--light: #1c8c66;
12-
$code-enginetype--dark: #8FFFDB;
12+
$code-enginetype--dark: #8fffdb;
1313
$code-usertype--light: #2e7366;
14-
$code-usertype--dark: #C7FFED;
14+
$code-usertype--dark: #c7ffed;
15+
$code-comment--light: #14141480;
16+
$code-comment--dark: #cdcfd280;
1517
$code-string--light: #996b00;
16-
$code-string--dark: #FFEDA1;
18+
$code-string--dark: #ffeda1;
1719
$code-background--light: #ffffff;
18-
$code-background--dark: #1D2229;
20+
$code-background--dark: #1d2229;
1921
$code-text--light: #393939;
20-
$code-text--dark: #CDCFD2;
22+
$code-text--dark: #cdcfd2;
2123
$code-function--light: #0039e6;
22-
$code-function--dark: #57B3FF;
24+
$code-function--dark: #57b3ff;
2325
$code-membervariable--light: #0066ad;
24-
$code-membervariable--dark: #BCE0FF;
26+
$code-membervariable--dark: #bce0ff;
2527
$code-gdscript-function--light: #009999;
26-
$code-gdscript-function--dark: #66E6FF;
28+
$code-gdscript-function--dark: #66e6ff;
2729
$code-gdscript-globalfunction--light: #5c2eb8;
28-
$code-gdscript-globalfunction--dark: #A3A3F5;
30+
$code-gdscript-globalfunction--dark: #a3a3f5;
2931
$code-gdscript-nodepath--light: #2e8c00;
30-
$code-gdscript-nodepath--dark: #B8C47D;
32+
$code-gdscript-nodepath--dark: #b8c47d;
3133
$code-gdscript-nodereference--light: #008000;
32-
$code-gdscript-nodereference--dark: #63C259;
34+
$code-gdscript-nodereference--dark: #63c259;
3335
$code-gdscript-annotation--light: #cc5e00;
34-
$code-gdscript-annotation--dark: #FFB373;
36+
$code-gdscript-annotation--dark: #ffb373;
3537
$code-gdscript-stringname--light: #cc8f73;
36-
$code-gdscript-stringname--dark: #FFC2A6;
38+
$code-gdscript-stringname--dark: #ffc2a6;

assets/css/releases/4.4.scss

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,9 @@ $donate-robot-size: 500px;
517517
* Responsive sizes.
518518
*/
519519
--release-title-font-size: #{release.get-desktop($release-title-font-size)};
520-
--release-section-margin-top: #{release.get-desktop($release-section-margin-top)};
520+
--release-section-margin-top: #{release.get-desktop(
521+
$release-section-margin-top
522+
)};
521523
--release-section-margin-bottom: #{release.get-desktop(
522524
$release-section-margin-bottom
523525
)};
@@ -589,7 +591,9 @@ $donate-robot-size: 500px;
589591

590592
@include is-mobile() {
591593
--release-title-font-size: #{release.get-mobile($release-title-font-size)};
592-
--release-section-margin-top: #{release.get-mobile($release-section-margin-top)};
594+
--release-section-margin-top: #{release.get-mobile(
595+
$release-section-margin-top
596+
)};
593597
--release-section-margin-bottom: #{release.get-mobile(
594598
$release-section-margin-bottom
595599
)};
@@ -731,7 +735,7 @@ $donate-robot-size: 500px;
731735
padding: var(--card-padding);
732736
margin-top: var(--card-padding);
733737
border-radius: var(--card-padding);
734-
backdrop-filter: blur(5px);
738+
backdrop-filter: blur(10px);
735739
background-color: rgba(0, 0, 0, 0.75);
736740
box-shadow: $card-box-shadow;
737741

@@ -812,6 +816,29 @@ $donate-robot-size: 500px;
812816
}
813817
}
814818
}
819+
} // .header-content
820+
821+
.header-background-author-container {
822+
padding: calc(var(--card-padding) / 2);
823+
width: fit-content;
824+
margin-left: auto;
825+
margin-right: auto;
826+
827+
.header-background-author {
828+
position: relative;
829+
right: 0;
830+
font-size: 60%;
831+
font-weight: 600;
832+
color: white;
833+
border-top-left-radius: 9999px;
834+
border-bottom-right-radius: 9999px;
835+
padding: 0.25em 0.75em 0.35em 1.25em;
836+
837+
a {
838+
color: white;
839+
text-decoration-color: white;
840+
}
841+
}
815842
}
816843
}
817844
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
---
3+
4+
#download-download {
5+
.release-card-media {
6+
.release-platform {
7+
display: flex;
8+
flex-direction: column;
9+
align-items: center;
10+
}
11+
}
12+
}
13+
.comparison-range {
14+
display: none !important;
15+
}

0 commit comments

Comments
 (0)