Skip to content

Commit 17ca3e5

Browse files
authored
Merge pull request #3260 from AlchemyCMS/new-welcome-screen
New welcome screen
2 parents da67748 + 7bca84b commit 17ca3e5

10 files changed

Lines changed: 204 additions & 129 deletions

File tree

app/assets/builds/alchemy/welcome.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/builds/alchemy/welcome.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controllers/alchemy/pages_controller.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@ def locale_prefix_not_allowed?
106106
def load_index_page
107107
@page ||= Language.current_root_page
108108
Current.page = @page
109-
render template: "alchemy/welcome", layout: false if signup_required?
109+
110+
if signup_required? && @page.nil?
111+
render template: "alchemy/welcome", layout: false
112+
elsif !@page&.public?
113+
render template: "alchemy/no_index", layout: false
114+
end
110115
end
111116

112117
# == Loads page by urlname
@@ -192,7 +197,7 @@ def set_expiration_headers
192197

193198
def signup_required?
194199
if Alchemy.user_class.respond_to?(:admins)
195-
Alchemy.user_class.admins.empty? && @page.nil?
200+
Alchemy.user_class.admins.empty?
196201
end
197202
end
198203

app/stylesheets/alchemy/welcome.scss

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body {
1212

1313
h3 {
1414
font-weight: bold;
15-
font-size: 25px;
15+
font-size: 1.5rem;
1616
line-height: 1.2;
1717
margin-bottom: 20px;
1818
padding-top: 20px;
@@ -22,9 +22,14 @@ h3 {
2222
position: absolute;
2323
top: 50%;
2424
left: 50%;
25-
width: 600px;
25+
max-width: 50vw;
2626
margin-top: -50px;
27-
transform: translateY(-50%) translateX(-300px);
27+
transform: translateY(-50%) translateX(-50%);
28+
29+
img {
30+
height: 75px;
31+
margin-left: -0.35em;
32+
}
2833
}
2934

3035
ul {
@@ -44,13 +49,27 @@ ul {
4449
}
4550
}
4651

52+
p {
53+
margin: 2em 0;
54+
}
55+
4756
a {
4857
color: var(--color-white);
49-
text-decoration: underline;
50-
transition: all 0.1s ease-in-out;
58+
text-decoration: none;
59+
transition: all var(--transition-duration) var(--transition-easing);
5160

5261
&:hover {
5362
color: var(--color-white);
63+
text-decoration: underline;
64+
}
65+
66+
&.button {
67+
background-color: white;
68+
border-radius: var(--border-radius_medium);
69+
padding: 0.5em 0.75em;
5470
text-decoration: none;
71+
font-size: 0.9em;
72+
font-weight: 600;
73+
color: var(--color-blue_dark);
5574
}
5675
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title><%= Alchemy.t("Welcome to Alchemy") %></title>
7+
<%= stylesheet_link_tag("alchemy/welcome", media: "all") %>
8+
</head>
9+
<body>
10+
<div class="container">
11+
<%= image_tag("alchemy/alchemy-logo.svg") %>
12+
<% if @page.nil? %>
13+
<h3>
14+
<%= Alchemy.t("There are no pages yet") %>
15+
</h3>
16+
<p>
17+
<%= link_to Alchemy.t("Create your first page"),
18+
alchemy.admin_pages_path, class: "button" %>
19+
</p>
20+
<% else %>
21+
<h3>
22+
<%= Alchemy.t("There are no published pages yet") %>
23+
</h3>
24+
<p>
25+
<%= link_to Alchemy.t("Publish your homepage"),
26+
alchemy.edit_admin_page_path(@page), class: "button" %>
27+
</p>
28+
<% end %>
29+
</div>
30+
</body>
31+
</html>

app/views/alchemy/welcome.html.erb

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
<!DOCTYPE html>
2-
<html lang="en">
2+
<html>
33
<head>
44
<meta charset="utf-8">
5-
<meta http-equiv="X-UA-Compatible" content="IE=edge">
65
<meta name="viewport" content="width=device-width, initial-scale=1">
7-
<title>Welcome to AlchemyCMS</title>
8-
<%= stylesheet_link_tag "alchemy/welcome", media: "all" %>
6+
<title><%= Alchemy.t("Welcome to Alchemy") %></title>
7+
<%= stylesheet_link_tag("alchemy/welcome", media: "all") %>
98
</head>
109
<body>
1110
<div class="container">
12-
<%= image_tag 'alchemy/alchemy-logo.svg' %>
13-
<h3>You have successfully installed AlchemyCMS!</h3>
11+
<%= image_tag("alchemy/alchemy-logo.svg") %>
12+
<h3><%= Alchemy.t("You have successfully installed Alchemy") %></h3>
1413
<p>
15-
Thank you for using Alchemy. We hope you enjoy using it as much as we do.
14+
<%= Alchemy.t("Before creating your first page you need an admin user") %>.
1615
</p>
1716
<p>
18-
The first thing you probably want to do before creating your first page:
17+
<%= link_to Alchemy.t("Create admin user"), Alchemy.signup_path, class: "button" %>
1918
</p>
19+
<h4><%= Alchemy.t("More resources") %></h4>
2020
<ul>
21-
<li><%= link_to 'Create your first admin user', Alchemy.signup_path %></li>
22-
<li><%= link_to 'Read the guidelines', 'https://guides.alchemy-cms.com/', target: '_blank', rel: 'noopener' %></li>
21+
<li>
22+
<%= link_to Alchemy.t("Read the guidelines"),
23+
"https://guides.alchemy-cms.com/", target: "_blank", rel: "noopener" %>
24+
</li>
2325
</ul>
2426
</div>
2527
</body>

lib/alchemy/test_support/factories/page_factory.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
parent do
1414
Alchemy::Page.find_by(language_root: true, language: language) ||
15-
FactoryBot.create(:alchemy_page, :language_root, language: language)
15+
FactoryBot.create(:alchemy_page, :public, :language_root, language: language)
1616
end
1717

1818
# This speeds up creating of pages dramatically.
@@ -23,7 +23,6 @@
2323
name { language&.frontpage_name || "Intro" }
2424
page_layout { language&.page_layout || "index" }
2525
language_root { true }
26-
public_on { Time.current }
2726
parent { nil }
2827
end
2928

spec/controllers/alchemy/on_page_layout_mixin_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
context "for index action" do
3535
%w[standard news].each do |page_layout|
3636
it "runs callback on #{page_layout} layout" do
37-
create(:alchemy_page, :language_root, page_layout: page_layout)
37+
create(:alchemy_page, :public, :language_root, page_layout: page_layout)
3838

3939
get :index
4040
expect(assigns(:on_all_layouts)).to eq(page_layout)
@@ -63,7 +63,7 @@
6363
end
6464

6565
context "for index action" do
66-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
66+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
6767

6868
it "runs the callback" do
6969
get :index
@@ -132,7 +132,7 @@
132132

133133
%w[standard news].each do |page_layout|
134134
it "runs both callbacks on #{page_layout} layout" do
135-
create(:alchemy_page, :language_root, page_layout: page_layout)
135+
create(:alchemy_page, :public, :language_root, page_layout: page_layout)
136136

137137
get :index
138138
expect(assigns(:page_layout)).to eq(page_layout)
@@ -163,7 +163,7 @@
163163
end
164164

165165
context "for index action" do
166-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
166+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
167167

168168
it "runs both callbacks" do
169169
get :index
@@ -190,7 +190,7 @@
190190
end
191191

192192
context "for index action" do
193-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
193+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
194194

195195
it "evaluates the given block" do
196196
get :index
@@ -218,7 +218,7 @@ def run_method
218218
end
219219

220220
context "for index action" do
221-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
221+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
222222

223223
it "runs the given callback method" do
224224
get :index
@@ -257,7 +257,7 @@ def run_method
257257

258258
%w[standard news].each do |page_layout|
259259
it "evaluates the given callback on both page_layouts for index action" do
260-
create(:alchemy_page, :language_root, page_layout: page_layout)
260+
create(:alchemy_page, :public, :language_root, page_layout: page_layout)
261261

262262
get :index
263263
expect(assigns(:successful)).to eq(page_layout)

spec/controllers/alchemy/pages_controller_spec.rb

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module Alchemy
1010
let(:default_language) { create(:alchemy_language) }
1111

1212
let(:default_language_root) do
13-
create(:alchemy_page, :language_root, language: default_language, name: "Home")
13+
create(:alchemy_page, :public, :language_root, language: default_language, name: "Home")
1414
end
1515

1616
let(:page) do
@@ -29,11 +29,8 @@ module Alchemy
2929

3030
describe "#index" do
3131
context "without a site or language present" do
32-
it "returns a 404" do
33-
expect { get(:index) }.to raise_exception(
34-
ActionController::RoutingError,
35-
'Alchemy::Page not found "/"'
36-
)
32+
it "returns a no_index page" do
33+
expect(get(:index)).to render_template("alchemy/no_index")
3734
end
3835
end
3936

@@ -57,10 +54,8 @@ module Alchemy
5754
create(:alchemy_page, :language_root, public_on: nil, language: default_language, name: "Home")
5855
end
5956

60-
it "raises routing error (404)" do
61-
expect {
62-
get :index
63-
}.to raise_error(ActionController::RoutingError)
57+
it "returns a no_index page" do
58+
expect(get(:index)).to render_template("alchemy/no_index")
6459
end
6560

6661
context "when a page layout callback is set" do
@@ -71,10 +66,8 @@ module Alchemy
7166
end
7267
end
7368

74-
it 'raises routing error (404) and no "undefined method for nil" error' do
75-
expect {
76-
get :index
77-
}.to raise_error(ActionController::RoutingError)
69+
it 'does not raise "undefined method for nil" error' do
70+
expect { get :index }.to_not raise_error
7871
end
7972
end
8073
end

0 commit comments

Comments
 (0)