Add new welcome message step

This commit is contained in:
Robin Ward 2016-09-20 17:01:54 -04:00
parent ff17950993
commit 2545c2ffa6
8 changed files with 106 additions and 1 deletions

View file

@ -0,0 +1,5 @@
export default Ember.Component.extend({
keyPress(e) {
e.stopPropagation();
}
});

View file

@ -74,7 +74,7 @@ export default Ember.Component.extend({
}, },
animateInvalidFields() { animateInvalidFields() {
Ember.run.scheduleOnce('afterRender', () => $('.invalid input[type=text]').wiggle(2, 100)); Ember.run.scheduleOnce('afterRender', () => $('.invalid input[type=text], .invalid textarea').wiggle(2, 100));
}, },
advance() { advance() {

View file

@ -0,0 +1 @@
{{textarea elementId=field.id value=field.value class=fieldClass placeholder=field.placeholder}}

View file

@ -334,6 +334,21 @@ body.wizard {
} }
} }
.textarea-field {
textarea {
width: 100%;
height: 10em;
}
&.invalid {
textarea {
padding: 3px;
border: 4px solid red;
border-radius: 3px;
}
}
}
.text-field { .text-field {
input { input {
width: 100%; width: 100%;

View file

@ -3238,6 +3238,15 @@ en:
label: "How would you describe your community in one sentence?" label: "How would you describe your community in one sentence?"
placeholder: "A place for Jane and her friends to discuss cool stuff" placeholder: "A place for Jane and her friends to discuss cool stuff"
introduction:
title: "Introduction"
fields:
welcome:
label: "Welcome Topic"
description: 'Think of this as your "elevator pitch" how would you describe this site to a stranger on an elevator when you had about 1 minute to talk?'
one_paragraph: "Please restrict your welcome message to one paragraph."
privacy: privacy:
title: "Access" title: "Access"
description: "Is your community open to everyone, or is it restricted by membership, invitation, or approval? If you prefer, you can set things up privately, then switch to public later." description: "Is your community open to everyone, or is it restricted by membership, invitation, or approval? If you prefer, you can set things up privately, then switch to public later."

View file

@ -0,0 +1,42 @@
class IntroductionUpdater
def initialize(user)
@user = user
end
def get_summary
summary_from_post(find_welcome_post)
end
def update_summary(new_value)
post = find_welcome_post
return unless post
previous_value = summary_from_post(post).strip
if previous_value != new_value
revisor = PostRevisor.new(post)
remaining = post.raw.split("\n")[1..-1]
revisor.revise!(@user, raw: "#{new_value}\n#{remaining.join("\n")}")
end
end
protected
def summary_from_post(post)
return post ? post.raw.split("\n").first : nil
end
def find_welcome_post
welcome_topic = Topic.where(slug: 'welcome-to-discourse').first
return nil unless welcome_topic.present?
post = welcome_topic.posts.where(post_number: 1).first
return nil unless post.present?
post
end
end

View file

@ -1,3 +1,5 @@
require_dependency 'introduction_updater'
class Wizard class Wizard
class Builder class Builder
@ -40,6 +42,22 @@ class Wizard
end end
end end
@wizard.append_step('introduction') do |step|
introduction = IntroductionUpdater.new(@wizard.user)
step.add_field(id: 'welcome', type: 'textarea', required: true, value: introduction.get_summary)
step.on_update do |updater|
value = updater.fields[:welcome].strip
if value.index("\n")
updater.errors.add(:welcome, I18n.t("wizard.step.introduction.fields.welcome.one_paragraph"))
else
introduction.update_summary(value)
end
end
end
@wizard.append_step('privacy') do |step| @wizard.append_step('privacy') do |step|
locked = SiteSetting.login_required? && SiteSetting.invite_only? locked = SiteSetting.login_required? && SiteSetting.invite_only?
privacy = step.add_field(id: 'privacy', privacy = step.add_field(id: 'privacy',

View file

@ -38,6 +38,21 @@ describe Wizard::StepUpdater do
expect(wizard.completed_steps?('forum-title')).to eq(true) expect(wizard.completed_steps?('forum-title')).to eq(true)
end end
it "updates the introduction step" do
topic = Fabricate(:topic, title: "Welcome to Discourse")
welcome_post = Fabricate(:post, topic: topic, raw: "this will be the welcome topic post\n\ncool!")
updater = wizard.create_updater('introduction', welcome: "Welcome to my new awesome forum!")
updater.update
expect(updater.success?).to eq(true)
welcome_post.reload
expect(welcome_post.raw).to eq("Welcome to my new awesome forum!\n\ncool!")
expect(wizard.completed_steps?('introduction')).to eq(true)
end
it "won't allow updates to the default value, when required" do it "won't allow updates to the default value, when required" do
updater = wizard.create_updater('forum_title', title: SiteSetting.title, site_description: 'neat place') updater = wizard.create_updater('forum_title', title: SiteSetting.title, site_description: 'neat place')
updater.update updater.update