From 8649eaed0f9fcd5e497a8444d78ee9a211f897e0 Mon Sep 17 00:00:00 2001 From: Ben Halpern Date: Tue, 22 Feb 2022 10:01:52 -0500 Subject: [PATCH] [Small win] Add display name to campaign settings (#16653) * Add display name to campaign settings * Update app/models/settings/campaign.rb * Update app/views/admin/settings/forms/_campaign.html.erb --- app/decorators/campaign_decorator.rb | 11 ++++++++++- app/lib/constants/settings/campaign.rb | 4 ++++ app/models/campaign.rb | 1 + app/models/settings/campaign.rb | 1 + app/views/admin/settings/forms/_campaign.html.erb | 9 +++++++++ app/views/articles/_sidebar_campaign.html.erb | 2 +- spec/requests/stories_index_spec.rb | 12 ++++++++++++ 7 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/decorators/campaign_decorator.rb b/app/decorators/campaign_decorator.rb index ea8fbd9e3..819cd9c0c 100644 --- a/app/decorators/campaign_decorator.rb +++ b/app/decorators/campaign_decorator.rb @@ -5,12 +5,21 @@ class CampaignDecorator < ApplicationDecorator def sidebar_image(options) return unless show_in_sidebar? - img = image_tag(object.sidebar_image, options) + image_url = Images::Optimizer.call(object.sidebar_image, width: 500) + img = image_tag(image_url, options) return link_to(img, url) if url img end + def header_text(count) + if display_name.present? + "#{Campaign.current.display_name} (#{count})" + else + I18n.t("views.campaign.subtitle", count: count) + end + end + def main_tag @main_tag ||= featured_tags.first end diff --git a/app/lib/constants/settings/campaign.rb b/app/lib/constants/settings/campaign.rb index db0d3dce6..aa2e9a348 100644 --- a/app/lib/constants/settings/campaign.rb +++ b/app/lib/constants/settings/campaign.rb @@ -10,6 +10,10 @@ module Constants description: "", placeholder: "Campaign stories show up on sidebar with approval?" }, + display_name: { + description: "This text is displayed in reference to the campaign in titles, etc.", + placeholder: "My great campaign" + }, call_to_action: { description: "This text populates the call to action button on the campaign sidebar", placeholder: "Share your project" diff --git a/app/models/campaign.rb b/app/models/campaign.rb index b486eb21e..3c7065d10 100644 --- a/app/models/campaign.rb +++ b/app/models/campaign.rb @@ -13,6 +13,7 @@ class Campaign articles_expiry_time articles_require_approval? call_to_action + display_name featured_tags hero_html_variant_name sidebar_enabled? diff --git a/app/models/settings/campaign.rb b/app/models/settings/campaign.rb index c25a19685..8c99cd4e1 100644 --- a/app/models/settings/campaign.rb +++ b/app/models/settings/campaign.rb @@ -6,6 +6,7 @@ module Settings setting :articles_expiry_time, type: :integer, default: 4 setting :articles_require_approval, type: :boolean, default: 0 setting :call_to_action, type: :string, default: -> { I18n.t("models.settings.campaign.share_your_project") } + setting :display_name, type: :string, default: "" setting :featured_tags, type: :array, default: %w[] setting :hero_html_variant_name, type: :string, default: "" setting :sidebar_enabled, type: :boolean, default: 0 diff --git a/app/views/admin/settings/forms/_campaign.html.erb b/app/views/admin/settings/forms/_campaign.html.erb index bfda2107f..e51e31cb1 100644 --- a/app/views/admin/settings/forms/_campaign.html.erb +++ b/app/views/admin/settings/forms/_campaign.html.erb @@ -11,6 +11,15 @@ } %>
+
+ <%= admin_config_label :display_name, "Display Name" %> + <%= admin_config_description Constants::Settings::Campaign::DETAILS[:display_name][:description] %> + <%= f.text_field :display_name, + class: "crayons-textfield", + value: Settings::Campaign.display_name, + placeholder: Constants::Settings::Campaign::DETAILS[:display_name][:placeholder] %> +
+
<%= admin_config_label :hero_html_variant_name, "Campaign hero HTML variant name" %> <%= admin_config_description Constants::Settings::Campaign::DETAILS[:hero_html_variant_name][:description] %> diff --git a/app/views/articles/_sidebar_campaign.html.erb b/app/views/articles/_sidebar_campaign.html.erb index cd90bee98..8053e7f75 100644 --- a/app/views/articles/_sidebar_campaign.html.erb +++ b/app/views/articles/_sidebar_campaign.html.erb @@ -2,7 +2,7 @@
<%= campaign.sidebar_image(class: "block w-100 h-auto radius-default", width: 1000, height: 420) %>
-

<%= link_to t("views.campaign.subtitle", count: @campaign_articles_count), "/t/#{campaign.main_tag}", class: "crayons-link" %>

+

<%= link_to campaign.header_text(@campaign_articles_count), "/t/#{campaign.main_tag}", class: "crayons-link" %>

<%= render partial: "articles/widget_list_item", collection: @latest_campaign_articles, diff --git a/spec/requests/stories_index_spec.rb b/spec/requests/stories_index_spec.rb index d7e0a6609..f7a83c4af 100644 --- a/spec/requests/stories_index_spec.rb +++ b/spec/requests/stories_index_spec.rb @@ -231,6 +231,18 @@ RSpec.describe "StoriesIndex", type: :request do create(:article, approved: false, body_markdown: u_body, score: 1) end + it "displays display name when it is set" do + allow(Settings::Campaign).to receive(:display_name).and_return("Backstreet is back") + get "/" + expect(response.body).not_to include("Backstreet is back (0)") + end + + it "displays Stories fallback when display name is not set" do + allow(Settings::Campaign).to receive(:display_name).and_return("") + get "/" + expect(response.body).not_to include("Stories (0)") + end + it "doesn't display posts with the campaign tags when sidebar is disabled" do allow(Settings::Campaign).to receive(:sidebar_enabled).and_return(false) get "/"