Skip to content

Commit 0a2e57f

Browse files
merge branch v2 (release 2.0.0-beta.48)
2 parents 9b22f9a + ebda912 commit 0a2e57f

21 files changed

Lines changed: 183 additions & 69 deletions

File tree

CHANGELOG.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
11
# Changelog
22

3-
## [v2.0.0-beta.47](https://github.com/marcantondahmen/automad/commit/28a5e345188828c815c1ae0472789587e18449fb)
3+
## [v2.0.0-beta.48](https://github.com/marcantondahmen/automad/commit/f542c98275e53da3b46e9f9c482228cd042ff10f)
44

5-
Sun, 12 Jul 2026 11:57:58 +0200
5+
Thu, 16 Jul 2026 19:37:31 +0200
6+
7+
### New Features
8+
9+
- add option to set a custom title that is displayed on open-graph images ([73e8fb6e4](https://github.com/marcantondahmen/automad/commit/73e8fb6e4578ad7b8b16990019dd6226f8c17ed8))
10+
- update image slideshow and gallery block ui ([37ee8da29](https://github.com/marcantondahmen/automad/commit/37ee8da29a2c0290f7c739f6b8d16761900fb24b))
11+
- update standard lite theme ([f542c9827](https://github.com/marcantondahmen/automad/commit/f542c98275e53da3b46e9f9c482228cd042ff10f))
12+
- wait for confirmation before discarding unsaved changes in the in-page editing dialog ([6c574cfb4](https://github.com/marcantondahmen/automad/commit/6c574cfb45a9fb067e883a36086c6a593b074575))
13+
14+
### Bugfixes
15+
16+
- exclude aliases from sitemap.xml ([0807eaf07](https://github.com/marcantondahmen/automad/commit/0807eaf07f136214a27c1532107e65fefc73f8d4))
17+
- fix syntax highlighting of foreach keyword in automad language ([b18246a5e](https://github.com/marcantondahmen/automad/commit/b18246a5ec38eda64f44ab6d61b70f4a22dd13ab))
18+
19+
## [v2.0.0-beta.47](https://github.com/marcantondahmen/automad/commit/9b22f9a7cc1df09a3f882334244145f9206fc6ad)
20+
21+
Sun, 12 Jul 2026 12:00:13 +0200
622

723
### New Features
824

automad/lang/english.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@
369369
"openComponentEditor": "Open component editor",
370370
"openGraphImage": "Open-Graph Image (leave blank in order to use the automatically generated image)",
371371
"openGraphImageShared": "Open-Graph Image (overrides automatically generated open-graph images sitewide)",
372+
"openGraphTitle": "Custom title that is displayed on the generated open-graph image",
372373
"openInNewTab": "Open in a new tab",
373374
"optimizeContentForCards": "Optimize content for cards",
374375
"orderedList": "Ordered list",

automad/src/client/admin/components/Forms/InPageForm.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ export class InPageFormComponent extends FormComponent {
9090
return true;
9191
}
9292

93+
/**
94+
* Track if the form has changed.
95+
*/
96+
private hasChanged: boolean = false;
97+
9398
/**
9499
* The field name.
95100
*/
@@ -166,6 +171,35 @@ export class InPageFormComponent extends FormComponent {
166171

167172
window.location.href = this.bindings.inPageReturnUrlBinding.value;
168173
});
174+
175+
this.listen(window, 'beforeunload', (event: Event) => {
176+
if (!this.hasChanged) {
177+
return;
178+
}
179+
180+
event.preventDefault();
181+
});
182+
}
183+
184+
/**
185+
* The callback that is called when a form input has changed.
186+
*/
187+
onChange(): void {
188+
super.onChange();
189+
190+
this.hasChanged = true;
191+
}
192+
193+
/**
194+
* Submit the form.
195+
*
196+
* @param skipConfirmOnInit
197+
* @async
198+
*/
199+
async submit(skipConfirmOnInit?: boolean): Promise<void> {
200+
this.hasChanged = false;
201+
202+
await super.submit(skipConfirmOnInit);
169203
}
170204

171205
/**

automad/src/client/admin/components/Forms/PageDataForm.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,12 @@ export class PageDataFormComponent extends FormComponent {
335335
App.text('metaDescription')
336336
);
337337

338+
createMainField(
339+
FieldTag.input,
340+
App.reservedFields.OPEN_GRAPH_TITLE,
341+
App.text('openGraphTitle')
342+
);
343+
338344
createMainField(
339345
FieldTag.image,
340346
App.reservedFields.OPEN_GRAPH_IMAGE,

automad/src/client/admin/components/PackageManager/RepositoryCard.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export class RepositoryCardComponent extends BaseComponent {
9696
>
9797
${data.name}
9898
</a>
99-
<div class="${CSS.cardBody} ${CSS.flexGapLarge}">
99+
<div class="${CSS.cardBody} ${CSS.flexGap}">
100100
<a
101101
href="${data.repositoryUrl}"
102102
class="${CSS.flex} ${CSS.flexColumn} ${CSS.textParagraph}"
@@ -117,9 +117,7 @@ export class RepositoryCardComponent extends BaseComponent {
117117
</a>
118118
${!!data.commit
119119
? html`
120-
<div
121-
class="${CSS.flex} ${CSS.flexGap} ${CSS.flexAlignCenter}"
122-
>
120+
<div>
123121
<a
124122
href="${data.commit?.url}"
125123
class="${CSS.badge} ${CSS.badgeMuted} ${CSS.flexGap}"

automad/src/client/admin/styles/elements/badge.less

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@
4242
align-items: center;
4343
gap: 0.35em;
4444
font-size: 0.75rem;
45-
line-height: 1.2;
46-
min-width: 2.65em;
45+
line-height: 1;
46+
min-width: 2.5em;
4747
max-width: 100%;
48-
padding: 0.4em 0.85em 0.3em 0.85em;
48+
padding: 0.45em 0.8em;
4949
border-radius: 100px;
5050
color: hsl(var(--text));
5151
background-color: hsl(var(--bg));
@@ -70,6 +70,7 @@
7070
&--muted {
7171
--text: var(--am-clr-text-muted);
7272
--bg: var(--am-clr-background-faded);
73+
border: @am-border;
7374

7475
a& {
7576
transition: color 0.2s;

automad/src/client/admin/styles/elements/tooltip.less

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@
6464

6565
&__content {
6666
padding: 0.45rem 0.75rem;
67-
max-width: 20rem;
67+
max-width: 18rem;
6868
font-size: 0.8rem;
6969
text-align: var(--align);
70-
text-wrap: balance;
70+
text-wrap: pretty;
7171
white-space: pre-line;
7272
font-weight: 540;
7373
line-height: 1.5;

automad/src/client/blocks/components/ImageSlideshow.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ export default class Slider {
123123
speed: 300,
124124
loop: settings.loop ?? true,
125125
autoplay,
126+
autoHeight: false,
126127
effect: settings.effect ?? 'slide',
127128
slidesPerView: settings.slidesPerView || 1,
128129
spaceBetween: settings.gapPx ?? 0,

automad/src/client/blocks/styles/gallery.less

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,18 @@
120120
}
121121

122122
svg.am-pswp__icon {
123-
color: var(--am-gallery-controls-color);
123+
color: var(--am-gallery-ui-color);
124124
}
125125

126126
.am-pswp.pswp {
127-
--pswp-bg: var(--am-gallery-background);
127+
--pswp-bg: hsl(
128+
from var(--am-gallery-ui-background) h s l /
129+
var(--am-gallery-ui-background-opacity)
130+
);
128131

129132
& .pswp__counter,
130133
& .pswp__dynamic-caption {
131-
color: var(--am-gallery-controls-color);
134+
color: var(--am-gallery-ui-color);
132135
text-shadow: none;
133136
}
134137
}

automad/src/client/blocks/styles/image-slideshow.less

Lines changed: 73 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,30 +32,37 @@
3232
* See LICENSE.md for license information.
3333
*/
3434

35+
.swiper-ui-background() {
36+
background-color: hsl(
37+
from var(--am-image-slideshow-ui-background) h s l /
38+
var(--am-image-slideshow-ui-background-opacity)
39+
);
40+
backdrop-filter: blur(var(--am-image-slideshow-ui-backdrop-blur));
41+
}
42+
43+
.swiper-icon-mask(@path) {
44+
mask: data-uri('image/svg+xml;charset=UTF-8', @path);
45+
mask-repeat: no-repeat no-repeat;
46+
mask-position: center center;
47+
mask-size: 75%;
48+
}
49+
3550
am-image-slideshow {
36-
--swiper-navigation-size: 42px;
51+
--swiper-navigation-size: 38px;
52+
--swiper-navigation-border-radius: 6px;
3753
--swiper-navigation-top-offset: 50%;
38-
--swiper-navigation-sides-offset: 0;
39-
--swiper-navigation-color: var(--am-image-slideshow-controls-color);
40-
41-
--swiper-pagination-color: var(--am-image-slideshow-controls-color);
42-
--swiper-pagination-left: auto;
43-
--swiper-pagination-right: 8px;
44-
--swiper-pagination-bottom: 8px;
45-
--swiper-pagination-top: auto;
46-
--swiper-pagination-fraction-color: inherit;
47-
--swiper-pagination-progressbar-bg-color: rgba(0, 0, 0, 0.25);
48-
--swiper-pagination-progressbar-size: 4px;
49-
--swiper-pagination-bullet-size: 10px;
50-
--swiper-pagination-bullet-width: 10px;
51-
--swiper-pagination-bullet-height: 10px;
54+
--swiper-navigation-sides-offset: 12px;
55+
--swiper-navigation-color: var(--am-image-slideshow-ui-color);
56+
57+
--swiper-pagination-bottom: 12px;
58+
--swiper-pagination-gap: 4px;
59+
--swiper-pagination-color: var(--am-image-slideshow-ui-color);
60+
--swiper-pagination-bullet-size: 8px;
5261
--swiper-pagination-bullet-inactive-color: var(
53-
--am-image-slideshow-controls-color
62+
--am-image-slideshow-ui-color
5463
);
55-
--swiper-pagination-bullet-inactive-opacity: 0.2;
56-
--swiper-pagination-bullet-opacity: 1;
57-
--swiper-pagination-bullet-horizontal-gap: 5px;
58-
--swiper-pagination-bullet-vertical-gap: 5px;
64+
--swiper-pagination-bullet-opacity: 0.8;
65+
--swiper-pagination-bullet-inactive-opacity: 0.4;
5966

6067
& .swiper-slide {
6168
display: flex;
@@ -66,24 +73,62 @@ am-image-slideshow {
6673
display: inline-flex;
6774
justify-content: center;
6875
align-items: center;
69-
width: 42px;
70-
height: 42px;
76+
width: var(--swiper-navigation-size);
77+
height: var(--swiper-navigation-size);
78+
margin-inline: 0;
79+
border-radius: var(--swiper-navigation-border-radius);
7180
opacity: 0;
7281
transition: opacity 0.2s;
73-
background-color: var(--am-image-slideshow-controls-background);
82+
.swiper-ui-background;
7483

7584
&:after {
76-
font-size: 24px !important;
85+
content: '';
86+
display: flex;
87+
position: absolute;
88+
inset: 0;
89+
opacity: var(--swiper-pagination-bullet-opacity);
90+
background-color: var(--am-image-slideshow-ui-color);
7791
}
7892
}
7993

94+
& .swiper-button-prev:after {
95+
.swiper-icon-mask('../svg/arrowPrev.svg');
96+
}
97+
98+
& .swiper-button-next:after {
99+
.swiper-icon-mask('../svg/arrowNext.svg');
100+
}
101+
80102
&:hover .swiper-button-prev,
81103
&:hover .swiper-button-next {
82104
opacity: 1;
83105
}
84106

85-
& .swiper-pagination-bullet {
86-
outline: var(--am-image-slideshow-controls-background) solid 2px;
107+
& .swiper-horizontal > .swiper-pagination-bullets {
108+
display: flex;
109+
align-items: center;
110+
gap: var(--swiper-pagination-gap);
111+
left: 50%;
112+
transform: translateX(-50%);
113+
width: auto;
114+
max-width: 90%;
115+
line-height: 0;
116+
padding: var(--swiper-pagination-gap);
117+
border-radius: calc(2 * var(--swiper-pagination-bullet-size));
118+
.swiper-ui-background;
119+
120+
& .swiper-pagination-bullet {
121+
margin: 0;
122+
padding: 0;
123+
border-radius: var(--swiper-pagination-bullet-size);
124+
transition:
125+
width 0.4s ease-out,
126+
opacity 0.4s ease-out;
127+
128+
&-active {
129+
width: calc(3 * var(--swiper-pagination-bullet-size));
130+
}
131+
}
87132
}
88133

89134
& .swiper-caption {
@@ -95,13 +140,13 @@ am-image-slideshow {
95140
left: 0;
96141
right: 0;
97142
padding: var(--am-image-slideshow-caption-padding);
98-
color: var(--am-image-slideshow-caption-color);
99-
background-color: var(--am-image-slideshow-caption-background);
143+
color: var(--am-image-slideshow-ui-color);
100144
font-size: var(--am-image-slideshow-caption-font-size);
101145
font-weight: var(--am-image-slideshow-caption-font-weight);
102146
line-height: var(--am-image-slideshow-caption-line-height);
103147
opacity: 0;
104148
transition: opacity 0.2s;
149+
.swiper-ui-background;
105150

106151
& > :first-child {
107152
margin-top: 0;

0 commit comments

Comments
 (0)