Skip to content

Commit cca77a9

Browse files
authored
Merge pull request #2364 from tf/new-spacing-defaults
New spacing defaults
2 parents 460ef1a + ad0f240 commit cca77a9

20 files changed

Lines changed: 283 additions & 198 deletions

File tree

app/models/pageflow/customized_theme.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def self.build(entry:, theme:, theme_customization:)
2424
config = Pageflow.config_for(entry)
2525

2626
new(theme,
27-
config.themes.apply_default_options(theme.options),
27+
config.themes.apply_default_options(theme.options, entry:),
2828
config.transform_theme_customization_overrides.call(
2929
theme_customization.overrides,
3030
entry:,

app/models/pageflow/entry_at_revision.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ def initialize(entry, revision, theme: nil)
2626
:type_name,
2727
to: :entry)
2828

29-
delegate(:title, :summary, :credits,
29+
delegate(:layout_version,
30+
:title, :summary, :credits,
3031
:widgets,
3132
:storylines, :main_storyline_chapters, :chapters, :pages,
3233
:share_url, :share_image_id, :share_image_x, :share_image_y,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class AddLayoutVersionToRevisions < ActiveRecord::Migration[6.0]
2+
def change
3+
add_column :pageflow_revisions, :layout_version, :integer
4+
change_column_default :pageflow_revisions, :layout_version, from: nil, to: 1
5+
end
6+
end

entry_types/scrolled/config/locales/de.yml

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,10 @@ de:
123123
name: 360° Bilder
124124
decoration_effects:
125125
feature_name: Dekoration-Effekte
126-
content_element_margins:
127-
feature_name: "Element Margins"
128126
icon_scroll_indicator:
129127
feature_name: Icon Scroll-Indikator
130128
iconScrollIndicator:
131129
widget_type_name: Icon unten am Viewport-Rand
132-
section_paddings:
133-
feature_name: "Abschnittsinnenabstände"
134130
pageflow_scrolled:
135131
editor:
136132
backdrop_effects:
@@ -1241,12 +1237,8 @@ de:
12411237
label: Hintergrund-Video (Hochkant)
12421238
dynamicShadowOpacity:
12431239
inline_help: Intensität der Abblendung, die - gesteuert durch die Scrollposition - hinter dem Text eingeblendet wird, sobald sich Motivbereich und Inhalt des Abschnitts zu überschneiden beginnen, um einen ausreichnenden Kontrast zu gewährleisten. Beachte, dass diese Abblendung nur sichtbar ist, wenn Motivbereich und Inhalt nicht nebeneinander dargestellt werden können. Wechsle am besten in die Phone-Vorschau, wenn du den eingestellten Wert veränderst.
1244-
inline_help_disabled: Aktiviere "Motivbereich freilegen" weiter oben, um diese Einstellung zu verwenden.
1240+
inline_help_disabled: Setze den oberen Innenabstand in den Abstandseinstellungen des Abschnitts auf "Automatisch anpassen", um diese Einstellung zu verwenden.
12451241
label: Dynamische Abblendung
1246-
exposeMotifArea:
1247-
inline_help: Sicherstellen, dass der markierte Motivbereich des Hintergrunds beim Erreichen des Abschnitts sichtbar ist und nicht von anderen Elementen überlagert wird. Wenn Motivbereich und Inhalt des Abschnitts nicht nebeneiner dargestellt werden können, wird zusätzlicher Freiraum am Anfang des Abschnitts eingefügt und der Inhalt nach unten verschoben.
1248-
inline_help_disabled: Wähle "Motivbereich markieren" im Drei-Punkte-Menü des Hintergrund-Bilds/Videos weiter oben, um diese Funktion zu verwenden. du kannst damit sicherzustellen, dass wichtige Teile des Hintegrunds nicht von anderen Elementen überdeckt werden.
1249-
label: Motivbereich freilegen
12501242
fullHeight:
12511243
inline_help: Aktiviere diese Einstellung, wenn der Hintergrund des Abschnitts (z.B. Bild, Farbfläche oder Hintergrundvideo) so groß angezeigt werden soll, dass das gesamte Browserfenster (der sogenannte Viewport) gefüllt ist. Wenn du mit kurzen Abschnitten arbeiten möchtest, musst du diese Option deaktivieren. Dann nimmt der Abschnitt und sein Hintergrund vertikal nur so viel Platz ein, wie für den Inhalt des Abschnitts unbedingt nötig ist. Es können dann mehrere Abschnitte mit verschiedenen Hintergründen gleichzeitig auf dem Bildschirm des Nutzers sichtbar sein. Um einen Überblendeffekt zwischen den Hintergründen zweier Abschnitte verwenden zu können, muss diese Option für beide Abschnitte aktiviert sein.
12521244
label: Volle Viewport-Höhe
@@ -1646,10 +1638,11 @@ de:
16461638
rechts neben dem Text dargestellt werden kann, so wird
16471639
kein zusätzlicher Abstand oberhalb des Texts eingefügt.
16481640
1649-
Deaktiviere die Option **Motivbereich freilegen**, falls
1650-
der Bildauschnitt zwar passend zum Motivbereich gewählt
1651-
werden soll, der Inhalt des Abschnitts das Motiv aber
1652-
überlagern darf.
1641+
Wähle in den Abstandseinstellungen des Abschnitts beim
1642+
oberen Innenabstand die Option **Manuell festlegen**,
1643+
falls der Bildauschnitt zwar passend zum Motivbereich
1644+
gewählt werden soll, der Inhalt des Abschnitts das Motiv
1645+
aber überlagern darf.
16531646
16541647
Der Motivbereich kann über den Menüpunkt **Bildmotiv
16551648
markieren** der **Hintergrund-Bild**- und **Hintergrund

entry_types/scrolled/config/locales/en.yml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,10 @@ en:
123123
name: 360° images
124124
decoration_effects:
125125
feature_name: Decoration Effects
126-
content_element_margins:
127-
feature_name: "Element Margins"
128126
icon_scroll_indicator:
129127
feature_name: Icon Scroll Indicator
130128
iconScrollIndicator:
131129
widget_type_name: Icon at bottom of viewport
132-
section_paddings:
133-
feature_name: "Section paddings"
134130
pageflow_scrolled:
135131
editor:
136132
backdrop_effects:
@@ -1225,12 +1221,8 @@ en:
12251221
label: Background-Video (Portrait)
12261222
dynamicShadowOpacity:
12271223
inline_help: Intensity of the shadow which is faded in behind the text to ensure contrast when content is scrolled to intersect with the motif area. Note that this shadow is only visible if motif area and section content do not fit side by side. It's best to switch to phone preview when adjusting this value.
1228-
inline_help_disabled: Activate "Expose motif area" above to use this setting.
1224+
inline_help_disabled: Set top padding to "Adjust automatically" in the section's padding settings to use this option.
12291225
label: Dynamic shadow
1230-
exposeMotifArea:
1231-
inline_help: Ensure the selected motif area of the background asset is visible and not covered by other elements when first reaching the section. If motif area and section content do not fit side by side, extra space will be inserted at the top of the section to move content down.
1232-
inline_help_disabled: Click "Select motif area" in the "three dots" menu of the background image/video field above to use this feature. It let's you make sure important parts of the backdrop asset won't be hidden by other elements.
1233-
label: Expose motif area
12341226
fullHeight:
12351227
inline_help: Activate this option if the background of this section (e.g. image, color or video) is supposed to be enlarged such that the whole browser window (the so called viewport) is covered. Deactivate this option to create a short section. The height of the section and its background is then determined only by the content of the section. Multiple sections with different backgrounds can then be visible at once on the user's screen. This option needs to be activated for two adjacent sections to be able to use a fade transition between them.
12361228
label: Use Full Viewport-Height

entry_types/scrolled/lib/pageflow_scrolled/plugin.rb

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,21 @@ def configure(config)
3030
'xxl' => '16em'
3131
}
3232

33-
c.themes.register_default_options(
33+
c.themes.register_options_transform(
3434
ThemeOptionsDefaultScale.new(
3535
prefix: 'section_padding_top',
3636
values: padding_scale
3737
)
3838
)
3939

40-
c.themes.register_default_options(
40+
c.themes.register_options_transform(
4141
ThemeOptionsDefaultScale.new(
4242
prefix: 'section_padding_bottom',
4343
values: padding_scale
4444
)
4545
)
4646

47-
c.themes.register_default_options(
47+
c.themes.register_options_transform(
4848
ThemeOptionsDefaultScale.new(
4949
prefix: 'content_element_margin',
5050
values: margin_scale
@@ -54,16 +54,37 @@ def configure(config)
5454
c.themes.register_default_options(
5555
properties: {
5656
root: {
57-
'section_default_padding_top' => '1.375em',
58-
'section_default_padding_bottom' => '4.375em',
57+
'section_default_padding_top' => 'max(10em, 20svh)',
58+
'section_default_padding_bottom' => 'max(10em, 20svh)',
5959
'content_element_margin_style_default' => '2em'
6060
},
61+
cards_appearance_section: {
62+
'section_default_padding_top' => 'max(10em, 20svh)',
63+
'section_default_padding_bottom' => 'max(10em, 20svh)'
64+
}
65+
}
66+
)
67+
68+
legacy_paddings = {
69+
properties: {
70+
root: {
71+
'section_default_padding_top' => '1.375em',
72+
'section_default_padding_bottom' => '4.375em'
73+
},
6174
cards_appearance_section: {
6275
'section_default_padding_top' => '3em',
6376
'section_default_padding_bottom' => '6em'
6477
}
6578
}
66-
)
79+
}
80+
81+
c.themes.register_options_transform(lambda { |options, entry:, **|
82+
if entry.layout_version
83+
options
84+
else
85+
options.deep_merge(legacy_paddings)
86+
end
87+
})
6788

6889
c.themes.register_default_options(
6990
typography: {
@@ -174,9 +195,7 @@ def configure(config)
174195
c.features.register('backdrop_content_elements')
175196
c.features.register('custom_palette_colors')
176197
c.features.register('decoration_effects')
177-
c.features.register('content_element_margins')
178198
c.features.register('backdrop_size')
179-
c.features.register('section_paddings')
180199

181200
c.features.register('faq_page_structured_data') do |feature_config|
182201
feature_config.entry_structured_data_types.register(

entry_types/scrolled/lib/pageflow_scrolled/theme_options_default_scale.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def initialize(prefix:, values:)
1010
@values = values
1111
end
1212

13-
def call(options)
13+
def call(options, **)
1414
return options if scale_defined?(options)
1515

1616
options.deep_merge(

entry_types/scrolled/package/spec/editor/views/EditDefaultsView-spec.js

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import '@testing-library/jest-dom/extend-expect';
22
import {fireEvent} from '@testing-library/react';
33

44
import {EditDefaultsView} from 'editor/views/EditDefaultsView';
5-
import {features} from 'pageflow/frontend';
65
import {CheckBoxInputView} from 'pageflow/ui';
76

87
import {ConfigurationEditor, useFakeTranslations, renderBackboneView} from 'pageflow/testHelpers';
@@ -99,50 +98,46 @@ describe('EditDefaultsView', () => {
9998
expect(getByText('Changes to these settings have no effect on existing elements.')).toBeInTheDocument();
10099
});
101100

102-
describe('with section_paddings feature flag', () => {
103-
beforeEach(() => features.enable('frontend', ['section_paddings']));
104-
105-
it('contains defaultSectionPaddingTop slider input', () => {
106-
const entry = createEntry({});
107-
108-
const view = new EditDefaultsView({
109-
model: entry.metadata,
110-
entry
111-
});
112-
113-
view.render();
114-
const configurationEditor = ConfigurationEditor.find(view);
101+
it('contains defaultSectionPaddingTop slider input', () => {
102+
const entry = createEntry({});
115103

116-
expect(configurationEditor.inputPropertyNames()).toContain('defaultSectionPaddingTop');
104+
const view = new EditDefaultsView({
105+
model: entry.metadata,
106+
entry
117107
});
118108

119-
it('contains defaultSectionPaddingBottom slider input', () => {
120-
const entry = createEntry({});
109+
view.render();
110+
const configurationEditor = ConfigurationEditor.find(view);
121111

122-
const view = new EditDefaultsView({
123-
model: entry.metadata,
124-
entry
125-
});
112+
expect(configurationEditor.inputPropertyNames()).toContain('defaultSectionPaddingTop');
113+
});
126114

127-
view.render();
128-
const configurationEditor = ConfigurationEditor.find(view);
115+
it('contains defaultSectionPaddingBottom slider input', () => {
116+
const entry = createEntry({});
129117

130-
expect(configurationEditor.inputPropertyNames()).toContain('defaultSectionPaddingBottom');
118+
const view = new EditDefaultsView({
119+
model: entry.metadata,
120+
entry
131121
});
132122

133-
it('shows padding visualizations', () => {
134-
const entry = createEntry({});
123+
view.render();
124+
const configurationEditor = ConfigurationEditor.find(view);
135125

136-
const view = new EditDefaultsView({
137-
model: entry.metadata,
138-
entry
139-
});
126+
expect(configurationEditor.inputPropertyNames()).toContain('defaultSectionPaddingBottom');
127+
});
140128

141-
const {getByRole} = renderBackboneView(view);
129+
it('shows padding visualizations', () => {
130+
const entry = createEntry({});
142131

143-
expect(getByRole('img', {name: 'TopPadding'})).toBeInTheDocument();
144-
expect(getByRole('img', {name: 'Bottom'})).toBeInTheDocument();
132+
const view = new EditDefaultsView({
133+
model: entry.metadata,
134+
entry
145135
});
136+
137+
const {getByRole} = renderBackboneView(view);
138+
139+
expect(getByRole('img', {name: 'TopPadding'})).toBeInTheDocument();
140+
expect(getByRole('img', {name: 'Bottom'})).toBeInTheDocument();
146141
});
147142

148143
describe('with content element type defaultsInputs', () => {

entry_types/scrolled/package/spec/frontend/features/marginIndicator-spec.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import {useInlineEditingPageObjects, renderEntry} from 'support/pageObjects';
22
import {fakeParentWindow} from 'support';
3-
import {features} from 'pageflow/frontend';
43
import '@testing-library/jest-dom/extend-expect';
54

65
describe('MarginIndicator', () => {
76
useInlineEditingPageObjects();
87

98
beforeEach(() => {
109
fakeParentWindow();
11-
features.enable('frontend', ['content_element_margins']);
1210
});
1311

1412
it('displays scale translation for top margin when element is selected', () => {

entry_types/scrolled/package/spec/frontend/features/paddingIndicator-spec.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {useInlineEditingPageObjects, renderEntry} from 'support/pageObjects';
22
import {fakeParentWindow} from 'support';
33
import {useMotifAreaState} from 'frontend/v1/useMotifAreaState';
4-
import {features} from 'pageflow/frontend';
54
import '@testing-library/jest-dom/extend-expect';
65

76
jest.mock('frontend/v1/useMotifAreaState');
@@ -11,7 +10,6 @@ describe('PaddingIndicator', () => {
1110

1211
beforeEach(() => {
1312
fakeParentWindow();
14-
features.enable('frontend', ['section_paddings']);
1513
});
1614

1715
it('displays scale translation for top padding when section is selected', () => {

0 commit comments

Comments
 (0)