Skip to content

Commit

Permalink
Move show_raw_product_description preference to frontend gem
Browse files Browse the repository at this point in the history
  • Loading branch information
damianlegawiec committed Sep 21, 2021
1 parent 101304c commit ebc19f7
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 65 deletions.
10 changes: 0 additions & 10 deletions core/app/helpers/spree/products_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,6 @@ def product_wysiwyg_editor_enabled?
Spree::Config[:product_wysiwyg_editor_enabled]
end

# converts line breaks in product description into <p> tags (for html display purposes)
def product_description(product)
description = if Spree::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled?
product.description
else
product.description.to_s.gsub(/(.*?)\r?\n\r?\n/m, '<p>\1</p>')
end
description.blank? ? Spree.t(:product_has_no_description) : description
end

def line_item_description_text(description_text)
if description_text.present?
truncate(strip_tags(description_text.gsub('&nbsp;', ' ').squish), length: 100)
Expand Down
2 changes: 1 addition & 1 deletion core/app/models/spree/app_configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class AppConfiguration < Preferences::Configuration
preference :show_only_complete_orders_by_default, :boolean, default: true
preference :show_variant_full_price, :boolean, default: false # Displays variant full price or difference with product price. Default false to be compatible with older behavior
preference :show_products_without_price, :boolean, default: false
preference :show_raw_product_description, :boolean, default: false
preference :show_raw_product_description, :boolean, deprecated: true
preference :tax_using_ship_address, :boolean, default: true
preference :taxon_wysiwyg_editor_enabled, :boolean, default: true
preference :track_inventory_levels, :boolean, default: true # Determines whether to track on_hand values for variants / products.
Expand Down
53 changes: 0 additions & 53 deletions core/spec/helpers/products_helper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -117,59 +117,6 @@ module Spree
end
end

context '#product_description' do
context 'when configuration is set to sanitize output' do
before { Spree::Config.product_wysiwyg_editor_enabled = false }

after { Spree::Config.product_wysiwyg_editor_enabled = true }

# Regression test for #1607
it 'renders a product description without excessive paragraph breaks' do
product.description = %Q{
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a ligula leo. Proin eu arcu at ipsum dapibus ullamcorper. Pellentesque egestas orci nec magna condimentum luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut ac ante et mauris bibendum ultricies non sed massa. Fusce facilisis dui eget lacus scelerisque eget aliquam urna ultricies. Duis et rhoncus quam. Praesent tellus nisi, ultrices sed iaculis quis, euismod interdum ipsum.</p>
<ul>
<li>Lorem ipsum dolor sit amet</li>
<li>Lorem ipsum dolor sit amet</li>
</ul>
}
description = product_description(product)
expect(description.strip).to eq(product.description.strip)
end

it 'renders a product description with automatic paragraph breaks' do
product.description = %Q{
THIS IS THE BEST PRODUCT EVER!
"IT CHANGED MY LIFE" - Sue, MD}

description = product_description(product)
expect(description.strip).to eq(%Q{<p>\nTHIS IS THE BEST PRODUCT EVER!</p>"IT CHANGED MY LIFE" - Sue, MD})
end

it 'renders a product description without any formatting based on configuration' do
initial_description = %Q{
<p>hello world</p>
<p>tihs is completely awesome and it works</p>
<p>why so many spaces in the code. and why some more formatting afterwards?</p>
}

product.description = initial_description

Spree::Config[:show_raw_product_description] = true
description = product_description(product)
expect(description).to eq(initial_description)
end

context 'renders a product description default description incase description is blank' do
before { product.description = '' }

it { expect(product_description(product)).to eq(Spree.t(:product_has_no_description)) }
end
end
end

shared_examples_for 'line item descriptions' do
context 'variant has a blank description' do
let(:description) { nil }
Expand Down
14 changes: 14 additions & 0 deletions frontend/app/helpers/spree/frontend_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,20 @@ def country_flag_icon(country_iso_code = nil)
content_tag :span, nil, class: "flag-icon flag-icon-#{country_iso_code.downcase}"
end

def product_wysiwyg_editor_enabled?
Spree::Config[:product_wysiwyg_editor_enabled]
end

# converts line breaks in product description into <p> tags (for html display purposes)
def product_description(product)
description = if Spree::Frontend::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled?
product.description
else
product.description.to_s.gsub(/(.*?)\r?\n\r?\n/m, '<p>\1</p>')
end
description.blank? ? Spree.t(:product_has_no_description) : description
end

private

def formatted_price(value)
Expand Down
1 change: 1 addition & 0 deletions frontend/app/models/spree/frontend_configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class FrontendConfiguration < Preferences::Configuration
preference :locale, :string, default: nil
preference :products_filters, :array, default: %w(keywords price sort_by)
preference :remember_me_enabled, :boolean, default: true
preference :show_raw_product_description, :boolean, default: false
preference :title_site_name_separator, :string, default: '-' # When always_put_site_name_in_title is true, insert a separator character before the site name in the title
end
end
2 changes: 1 addition & 1 deletion frontend/app/views/spree/products/_description.html.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<h3 class="pt-4 font-weight-bold text-uppercase product-details-subtitle"><%= Spree.t(:description) %></h3>

<% if Spree::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled? %>
<% if Spree::Frontend::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled? %>
<div id="product-description-long" class="m-0 text-break product-description" data-hook="description">
<%= raw product_description(@product) %>
</div>
Expand Down
56 changes: 56 additions & 0 deletions frontend/spec/helpers/frontend_helper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,61 @@ module Spree
it { expect(country_flag_icon('US')).to eq('<span class="flag-icon flag-icon-us"></span>') }
it { expect { country_flag_icon(nil) }.not_to raise_error }
end

describe '#product_description' do
let(:store) { create(:store) }
let(:product) { create(:product, stores: [store]) }

context 'when configuration is set to sanitize output' do
before { Spree::Config.product_wysiwyg_editor_enabled = false }

after { Spree::Config.product_wysiwyg_editor_enabled = true }

# Regression test for #1607
it 'renders a product description without excessive paragraph breaks' do
product.description = %Q{
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a ligula leo. Proin eu arcu at ipsum dapibus ullamcorper. Pellentesque egestas orci nec magna condimentum luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut ac ante et mauris bibendum ultricies non sed massa. Fusce facilisis dui eget lacus scelerisque eget aliquam urna ultricies. Duis et rhoncus quam. Praesent tellus nisi, ultrices sed iaculis quis, euismod interdum ipsum.</p>
<ul>
<li>Lorem ipsum dolor sit amet</li>
<li>Lorem ipsum dolor sit amet</li>
</ul>
}
description = product_description(product)
expect(description.strip).to eq(product.description.strip)
end

it 'renders a product description with automatic paragraph breaks' do
product.description = %Q{
THIS IS THE BEST PRODUCT EVER!
"IT CHANGED MY LIFE" - Sue, MD}

description = product_description(product)
expect(description.strip).to eq(%Q{<p>\nTHIS IS THE BEST PRODUCT EVER!</p>"IT CHANGED MY LIFE" - Sue, MD})
end

it 'renders a product description without any formatting based on configuration' do
initial_description = %Q{
<p>hello world</p>
<p>tihs is completely awesome and it works</p>
<p>why so many spaces in the code. and why some more formatting afterwards?</p>
}

product.description = initial_description

Spree::Frontend::Config[:show_raw_product_description] = true
description = product_description(product)
expect(description).to eq(initial_description)
end

context 'renders a product description default description incase description is blank' do
before { product.description = '' }

it { expect(product_description(product)).to eq(Spree.t(:product_has_no_description)) }
end
end
end
end
end

0 comments on commit ebc19f7

Please sign in to comment.