Skip to content

Commit e0cd2ef

Browse files
authored
Merge pull request #2505 from tf/entry-links-v1
Entry links
2 parents 14c2940 + 869303e commit e0cd2ef

72 files changed

Lines changed: 3776 additions & 334 deletions

File tree

Some content is hidden

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

‎app/assets/stylesheets/pageflow/editor/composables.scss‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@
1111
.secondary_icon_button {
1212
@include icon-button;
1313
}
14+
15+
.destructive_icon_button {
16+
@include icon-button("destructive");
17+
}

‎app/assets/stylesheets/pageflow/ui.scss‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
@import "./ui/table_cells/presence_table_cell";
1616
@import "./ui/table_cells/delete_row_table_cell";
1717
@import "./ui/table_cells/icon_table_cell";
18+
@import "./ui/accordion_view";
1819
@import "./ui/tabs_view";
1920
@import "./ui/tooltip";
2021
@import "./ui/validation_error_messages";
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
.accordion_view {
2+
display: flex;
3+
flex-direction: column;
4+
gap: space(2);
5+
min-height: 0;
6+
7+
&-section {
8+
flex: none;
9+
display: flex;
10+
flex-direction: column;
11+
border: 1px solid var(--ui-on-surface-color-lighter);
12+
border-radius: rounded();
13+
}
14+
15+
&-section-fill {
16+
&[open],
17+
&.accordion_view-section-selected {
18+
flex: 1 1 auto;
19+
min-height: 0;
20+
}
21+
22+
> .accordion_view-content {
23+
flex: 1 1 auto;
24+
}
25+
}
26+
27+
&-section[open],
28+
&-section-selected {
29+
> .accordion_view-header {
30+
border-bottom: 1px solid var(--ui-on-surface-color-lightest);
31+
border-radius: rounded() rounded() 0 0;
32+
}
33+
}
34+
35+
&-selectable_section > .accordion_view-header {
36+
background: var(--ui-secondary-surface-color);
37+
}
38+
39+
&-section-selected > .accordion_view-header {
40+
background: var(--ui-selection-color-lighter);
41+
}
42+
43+
&-section[open] > .accordion_view-summary::before {
44+
transform: rotate(0deg);
45+
}
46+
47+
&-header {
48+
display: flex;
49+
align-items: flex-start;
50+
gap: space(2);
51+
margin: 0;
52+
padding: space(3) space(4);
53+
border-radius: rounded();
54+
line-height: 20px;
55+
cursor: pointer;
56+
background: var(--ui-primary-color-lightest);
57+
58+
input[type="radio"] {
59+
flex: none;
60+
width: 16px;
61+
height: 16px;
62+
margin: 2px 0 0;
63+
}
64+
}
65+
66+
&-summary {
67+
list-style: none;
68+
69+
&::-webkit-details-marker {
70+
display: none;
71+
}
72+
73+
&::before {
74+
content: "";
75+
flex: none;
76+
align-self: center;
77+
border-left: 5px solid transparent;
78+
border-right: 5px solid transparent;
79+
border-top: 6px solid var(--ui-on-surface-color-light);
80+
transform: rotate(-90deg);
81+
transition: transform 0.2s;
82+
}
83+
}
84+
85+
&-header_text {
86+
display: flex;
87+
flex-direction: column;
88+
gap: space(1);
89+
}
90+
91+
&-title {
92+
font-weight: 600;
93+
}
94+
95+
&-description {
96+
color: var(--ui-on-surface-color-light);
97+
}
98+
99+
&-content {
100+
display: flex;
101+
flex-direction: column;
102+
gap: space(3);
103+
padding: space(4);
104+
min-height: 0;
105+
color: var(--ui-on-surface-color);
106+
107+
&[hidden] {
108+
display: none;
109+
}
110+
}
111+
}

‎app/assets/stylesheets/pageflow/ui/properties.scss‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
--ui-warning-color: #ff7400;
4646
--ui-warning-color-lighter: hsla(27, 100%, 50%, 0.3);
4747
--ui-warning-color-lightest: hsla(27, 100%, 50%, 0.1);
48+
--ui-on-warning-color: #fff;
4849

4950
--ui-error-color: #ff4d6d;
5051
--ui-error-color-light: hsla(349, 100%, 65%, 0.6);

‎entry_types/scrolled/app/controllers/pageflow_scrolled/editor/fragment_libraries_controller.rb‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class FragmentLibrariesController < ActionController::Base
55
include Pageflow::EditorController
66

77
helper Pageflow::FilesHelper
8+
helper PageflowScrolled::LinkedEntriesHelper
89

910
before_action do
1011
head :not_found unless @entry.feature_state('fragments')
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module PageflowScrolled
2+
module Editor
3+
# @api private
4+
class LinkableEntriesController < ActionController::Base
5+
include Pageflow::EditorController
6+
7+
helper PageflowScrolled::LinkedEntriesHelper
8+
9+
def index
10+
@entries = Pageflow::Entry
11+
.accessible_by(current_ability, :read)
12+
.where(account: @entry.account, fragment_library: nil)
13+
.where.not(id: @entry.id)
14+
.preload(:site, :account, :published_revision, :draft, permalink: :directory)
15+
.order(:title)
16+
end
17+
end
18+
end
19+
end

‎entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module EntryJsonSeedHelper
1212
include Pageflow::PublicI18n::LocalesHelper
1313
include PageflowScrolled::I18nHelper
1414
include PageflowScrolled::ThemesHelper
15+
include PageflowScrolled::LinkedEntriesHelper
1516

1617
def scrolled_entry_json_seed_script_tag(scrolled_entry, options = {})
1718
seed_json = render_json do |json|
@@ -28,6 +29,7 @@ def scrolled_entry_json_seed(json, scrolled_entry, options = {})
2829
revision = scrolled_entry.revision
2930
sections = scrolled_entry_json_seed_sections(scrolled_entry, options)
3031
content_elements = scrolled_entry_json_seed_content_elements(revision, sections)
32+
widgets = scrolled_entry.resolve_widgets(insert_point: :react)
3133
entry_config = Pageflow.config_for(scrolled_entry)
3234

3335
json.partial!('pageflow_scrolled/entry_json_seed/entry',
@@ -42,7 +44,9 @@ def scrolled_entry_json_seed(json, scrolled_entry, options = {})
4244
content_elements,
4345
include_unused: options[:include_unused_file_reference_locations]
4446
),
45-
widgets: scrolled_entry.resolve_widgets(insert_point: :react),
47+
linked_entries: scrolled_linked_entries(scrolled_entry,
48+
content_elements + widgets),
49+
widgets:,
4650
options:)
4751
end
4852

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
module PageflowScrolled
2+
# Determine urls of entries that links point to.
3+
#
4+
# @api private
5+
module LinkedEntriesHelper
6+
include Pageflow::SocialShareHelper
7+
8+
def scrolled_linked_entries(scrolled_entry, configurables)
9+
entry_ids = EntryLinkReferences.new(configurables.map(&:configuration)).entry_ids
10+
return [] if entry_ids.empty?
11+
12+
Pageflow::Entry
13+
.where(id: entry_ids, account_id: scrolled_entry.account.id)
14+
.preload(:site, :account, :published_revision, :draft, permalink: :directory)
15+
.order(:id)
16+
.map do |entry|
17+
scrolled_linked_entry(entry, include_preview: !scrolled_entry.published_revision?)
18+
end
19+
end
20+
21+
def scrolled_linked_entry(entry, include_preview: true)
22+
linked_entry = Pageflow::PublishedEntry.new(entry, entry.published_revision || entry.draft)
23+
result = {entry: linked_entry, url: social_share_entry_url(linked_entry)}
24+
25+
return result unless include_preview
26+
27+
result.merge(preview_url: main_app.preview_admin_entry_path(entry),
28+
publication_state: entry.publication_state,
29+
signature: EntryLinkSignature.generate(entry.id))
30+
end
31+
end
32+
end

‎entry_types/scrolled/app/views/pageflow_scrolled/editor/fragment_libraries/index.json.jbuilder‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ json.array!(@libraries) do |library|
3030
end
3131
end
3232

33+
json.linked_entries(scrolled_linked_entries(library.entry,
34+
library.content_elements)) do |linked_entry|
35+
json.partial!('pageflow_scrolled/entry_json_seed/linked_entry', **linked_entry)
36+
end
37+
3338
files_json_seed(json, library.entry)
3439
end
3540
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
json.key_format!(camelize: :lower)
2+
3+
json.array!(@entries) do |entry|
4+
json.partial!('pageflow_scrolled/entry_json_seed/linked_entry', **scrolled_linked_entry(entry))
5+
end

0 commit comments

Comments
 (0)