solidus_slider 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +26 -0
- data/LICENSE +26 -0
- data/README.md +61 -0
- data/README.textile +71 -0
- data/Rakefile +21 -0
- data/Versionfile +5 -0
- data/app/assets/javascripts/spree/backend/slide_location_picker.js +53 -0
- data/app/assets/javascripts/spree/backend/solidus_slider.js +1 -0
- data/app/controllers/spree/admin/slide_locations_controller.rb +19 -0
- data/app/controllers/spree/admin/slides_controller.rb +57 -0
- data/app/models/spree/product_decorator.rb +8 -0
- data/app/models/spree/slide.rb +49 -0
- data/app/models/spree/slide_location.rb +8 -0
- data/app/models/spree/slide_slide_location.rb +8 -0
- data/app/overrides/spree/admin/configurations/index/add_slides_to_admin_configurations_menu.html.erb.deface +11 -0
- data/app/overrides/spree/admin/shared/_configuration_menu/add_slide_locations_to_admin_configurations_sidebar_menu.html.erb.deface +3 -0
- data/app/overrides/spree/admin/shared/_configuration_menu/add_slides_to_admin_configurations_sidebar_menu.html.erb.deface +3 -0
- data/app/overrides/spree/home/index/add_slider.html.erb.deface +5 -0
- data/app/overrides/spree/shared/_header/add_slider.html.erb.deface +3 -0
- data/app/views/spree/admin/slide_locations/_form.html.erb +10 -0
- data/app/views/spree/admin/slide_locations/edit.html.erb +18 -0
- data/app/views/spree/admin/slide_locations/index.html.erb +40 -0
- data/app/views/spree/admin/slide_locations/new.html.erb +16 -0
- data/app/views/spree/admin/slide_locations/search.json.jbuilder +4 -0
- data/app/views/spree/admin/slides/_form.html.erb +70 -0
- data/app/views/spree/admin/slides/edit.html.erb +23 -0
- data/app/views/spree/admin/slides/index.html.erb +50 -0
- data/app/views/spree/admin/slides/new.html.erb +18 -0
- data/app/views/spree/admin/slides/show.html.erb +54 -0
- data/app/views/spree/shared/_slider.html.erb +19 -0
- data/bin/rails +7 -0
- data/config/locales/de.yml +27 -0
- data/config/locales/en.yml +28 -0
- data/config/locales/es-MX.yml +33 -0
- data/config/locales/es.yml +27 -0
- data/config/locales/nl-NL.yml +27 -0
- data/config/locales/nl.yml +27 -0
- data/config/locales/pl.yml +29 -0
- data/config/locales/pt-BR.yml +36 -0
- data/config/locales/ru.yml +27 -0
- data/config/routes.rb +15 -0
- data/db/migrate/20120222184238_create_slides.rb +16 -0
- data/db/migrate/20120816192758_add_position_to_slides.rb +5 -0
- data/db/migrate/20121219124126_add_product_id_to_slides.rb +5 -0
- data/db/migrate/20150611113500_create_slider_location.rb +8 -0
- data/db/migrate/20160214061128_add_show_caption_to_slides.rb +5 -0
- data/db/migrate/20180113010348_create_spree_slide_slide_locations_table.rb +10 -0
- data/lib/generators/solidus_slider/install/install_generator.rb +24 -0
- data/lib/generators/solidus_slider/install_anything_generator.rb +31 -0
- data/lib/generators/solidus_slider/install_nivo_generator.rb +34 -0
- data/lib/generators/solidus_slider/install_simple_carousel_generator.rb +30 -0
- data/lib/generators/solidus_slider/templates/anything_slider.html.erb +23 -0
- data/lib/generators/solidus_slider/templates/nivo_slider.html.erb +37 -0
- data/lib/generators/solidus_slider/templates/simple_carousel_slider.html.erb +15 -0
- data/lib/solidus_slider.rb +4 -0
- data/lib/solidus_slider/engine.rb +22 -0
- data/lib/solidus_slider/version.rb +3 -0
- data/solidus_slider.gemspec +55 -0
- data/spec/spec_helper.rb +21 -0
- metadata +550 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
<!-- insert_bottom "[data-hook='admin_configurations_menu']" -->
|
2
|
+
|
3
|
+
<tr>
|
4
|
+
<td><%= link_to Spree.t('slider.config_name'), admin_slides_path %></td>
|
5
|
+
<td><%= Spree.t('slider.config_description') %></td>
|
6
|
+
</tr>
|
7
|
+
|
8
|
+
<tr>
|
9
|
+
<td><%= link_to Spree.t('slider_locations.config_name'), admin_slide_locations_path %></td>
|
10
|
+
<td><%= Spree.t('slider_locations.config_description') %></td>
|
11
|
+
</tr>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div data-hook='admin_slide_location_form_fields'>
|
2
|
+
<div class='row'>
|
3
|
+
<div class='col-12'>
|
4
|
+
<%= f.field_container :name do %>
|
5
|
+
<%= f.label :name, Spree.t(:name) %><br>
|
6
|
+
<%= f.text_field :name, class: 'form-control fullwidth' %>
|
7
|
+
<% end %>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= render partial: 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t('slider_locations.editing_location') %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<%= button_link_to Spree.t('slider_locations.back_to_locations'), spree.admin_slide_locations_path %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<%= render 'spree/shared/error_messages', target: @slide_location %>
|
12
|
+
|
13
|
+
<%= form_for [:admin, @slide_location] do |f| %>
|
14
|
+
<%= render partial: 'form', locals: { f: f } %>
|
15
|
+
<div class="form-actions" data-hook="buttons">
|
16
|
+
<%= render partial: 'spree/admin/shared/edit_resource_links' %>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<%= render partial: 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_actions do %>
|
4
|
+
<%= button_link_to Spree.t('slider_locations.new_location'), new_object_url, { id: 'admin_new_slide_link' } %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_title do %>
|
8
|
+
<%= Spree.t('slider_locations.title') %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% if @slide_locations %>
|
12
|
+
<table class='table' id='listing_slide_locations' data-hook>
|
13
|
+
<thead>
|
14
|
+
<tr data-hook='admin_slides_index_headers'>
|
15
|
+
<th><%= Spree.t(:name) %></th>
|
16
|
+
<th data-hook='admin_slides_index_header_actions' class='actions'></th>
|
17
|
+
</tr>
|
18
|
+
</thead>
|
19
|
+
|
20
|
+
<tbody>
|
21
|
+
<% @slide_locations.each do |location|%>
|
22
|
+
<tr>
|
23
|
+
<td class='align-left'><%= location.name %></td>
|
24
|
+
<td data-hook='admin_slide_locations_index_row_actions' class='actions'>
|
25
|
+
<%= link_to_edit location, no_text: true, class: 'edit' if can?(:edit, location) %>
|
26
|
+
<%= link_to_delete location, no_text: true if can?(:delete, location) %>
|
27
|
+
</td>
|
28
|
+
</tr>
|
29
|
+
<% end %>
|
30
|
+
</tbody>
|
31
|
+
</table>
|
32
|
+
<% else %>
|
33
|
+
<div class='no-objects-found'>
|
34
|
+
<%= render 'spree/admin/shared/no_objects_found',
|
35
|
+
resource: Spree::SlideLocation,
|
36
|
+
new_resource_url: new_object_url %>
|
37
|
+
</div>
|
38
|
+
<% end %>
|
39
|
+
|
40
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%= render partial: 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t('slider_locations.new_location') %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<%= button_link_to Spree.t('slider_locations.back_to_locations'), spree.admin_slide_locations_path %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<%= render 'spree/shared/error_messages', target: @slide_location %>
|
12
|
+
|
13
|
+
<%= form_for [:admin, @slide_location] do |f| %>
|
14
|
+
<%= render partial: 'form', locals: { f: f } %>
|
15
|
+
<%= render partial: 'spree/admin/shared/new_resource_links' %>
|
16
|
+
<% end %>
|
@@ -0,0 +1,70 @@
|
|
1
|
+
<div data-hook='admin_slide_form_fields'>
|
2
|
+
<div class='row'>
|
3
|
+
<div class='left col-2'>
|
4
|
+
<%= f.field_container :position do %>
|
5
|
+
<%= f.label :position, Spree.t(:position) %>
|
6
|
+
<%= f.number_field :position, class: 'fullwidth' %>
|
7
|
+
<% end %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class='col-5'>
|
11
|
+
<%= f.field_container :product_id do %>
|
12
|
+
<%= label_tag :product_id, Spree.t(:product) %><br />
|
13
|
+
<%= hidden_field_tag 'slide[product_id]', f.object.product_id.to_s, class: 'product_picker fullwidth' %>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class='col-5'>
|
18
|
+
<%= f.field_container :name do %>
|
19
|
+
<%= f.label :name, Spree.t(:name) %><br />
|
20
|
+
<%= f.text_field :name, class: 'fullwidth', placeholder: Spree.t('slider.placeholder_name') %>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class='col-2'>
|
25
|
+
<div class='field checkbox'>
|
26
|
+
<label>
|
27
|
+
<%= f.check_box :published %>
|
28
|
+
<%= Spree.t(:published) %>
|
29
|
+
</label>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<div class='col-5'>
|
34
|
+
<%= f.field_container :link_url do %>
|
35
|
+
<%= f.label :link_url, Spree.t(:link_url) %><br />
|
36
|
+
<%= f.text_field :link_url, class: 'fullwidth', placeholder: Spree.t('slider.placeholder_link_url') %>
|
37
|
+
<% end %>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class='col-5'>
|
41
|
+
<%= f.field_container :body do %>
|
42
|
+
<%= f.label :body, Spree.t(:body) %><br />
|
43
|
+
<%= f.text_area :body, { cols: 60, rows: 4, class: 'fullwidth'} %>
|
44
|
+
<% end %>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div class='col-5'>
|
48
|
+
<%= f.field_container :slide_locations do %>
|
49
|
+
<%= label_tag :slide_location_ids, Spree.t(:location) %><br />
|
50
|
+
<%= hidden_field_tag 'slide[slide_location_ids]', f.object.slide_location_ids.join(','), class: 'slide_location_picker fullwidth' %>
|
51
|
+
<% end %>
|
52
|
+
</div>
|
53
|
+
|
54
|
+
<div class='col-4'>
|
55
|
+
<%= f.field_container :image do %>
|
56
|
+
<%= f.label :image, Spree.t(:image) %> <i>(<%= Spree.t('slider.image_tip') %>)</i><br />
|
57
|
+
<%= f.file_field :image %>
|
58
|
+
<% end %>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<div class='col-2'>
|
62
|
+
<%= f.field_container :image do %>
|
63
|
+
<% if f.object.image? %>
|
64
|
+
<p><%= image_tag f.object.image, style: 'max-width: 100%; height: auto;' %></p>
|
65
|
+
<% end %>
|
66
|
+
<% end %>
|
67
|
+
</div>
|
68
|
+
|
69
|
+
</div>
|
70
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= render partial: 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t('slider.editing_slide') %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<li>
|
9
|
+
<%= button_link_to Spree.t('slider.back_to_slides'), new_object_url, { id: 'admin_new_slide' } %>
|
10
|
+
</li>
|
11
|
+
<li>
|
12
|
+
<%= button_link_to Spree.t('slider_locations.new_location'), admin_slide_locations_path, { id: 'admin_new_slide_location' } %>
|
13
|
+
</li>
|
14
|
+
<% end %>
|
15
|
+
|
16
|
+
<%= render 'spree/shared/error_messages', target: @slide %>
|
17
|
+
|
18
|
+
<%= form_for [:admin, @slide], html: { multipart: true } do |f| %>
|
19
|
+
<%= render partial: 'form', locals: { f: f } %>
|
20
|
+
<div class="form-actions" data-hook="buttons">
|
21
|
+
<%= render partial: 'spree/admin/shared/edit_resource_links' %>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<%= render partial: 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_actions do %>
|
4
|
+
<li>
|
5
|
+
<%= button_link_to Spree.t(:'slider.new_slide'), new_object_url, id: 'admin_new_slide_link' %>
|
6
|
+
</li>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% content_for :page_title do %>
|
10
|
+
<%= Spree.t('slider.title') %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% if @slides %>
|
14
|
+
<table class='index sortable' id='listing_slides' data-hook data-sortable-link='<%= update_positions_admin_slides_url %>' >
|
15
|
+
<thead>
|
16
|
+
<tr data-hook='admin_slides_index_headers'>
|
17
|
+
<th colspan='2'><%= Spree.t(:image) %></th>
|
18
|
+
<th><%= Spree.t(:name) %></th>
|
19
|
+
<th><%= Spree.t(:product) %></th>
|
20
|
+
<th><%= Spree.t(:published) %></th>
|
21
|
+
<th data-hook='admin_slides_index_header_actions' class='actions'></th>
|
22
|
+
</tr>
|
23
|
+
</thead>
|
24
|
+
|
25
|
+
<tbody>
|
26
|
+
<% @slides.each do |slide|%>
|
27
|
+
<tr id='<%= spree_dom_id slide %>' data-hook='admin_slides_index_rows'>
|
28
|
+
<td class='no-border'><span class='handle'></span></td>
|
29
|
+
<td class='align-left'><%= image_tag slide.slide_image, style: 'width: 120px; height: auto;' %></td>
|
30
|
+
<td class='align-left'><%= link_to slide.name, object_url(slide) %></td>
|
31
|
+
<td class='align-left'><%= link_to slide.product.name, object_url(slide) unless slide.product_id.blank? %></td>
|
32
|
+
<td class='align-center'><%= slide.published ? Spree.t(:say_yes) : Spree.t(:say_no) %></td>
|
33
|
+
<td data-hook='admin_slides_index_row_actions' class='actions'>
|
34
|
+
<%= link_to_edit slide, no_text: true, class: 'edit' if can?(:edit, slide) %>
|
35
|
+
|
36
|
+
<%= link_to_delete slide, no_text: true if can?(:delete, slide) %>
|
37
|
+
</td>
|
38
|
+
</tr>
|
39
|
+
<% end %>
|
40
|
+
</tbody>
|
41
|
+
</table>
|
42
|
+
<% else %>
|
43
|
+
<div class='no-objects-found'>
|
44
|
+
<%= render 'spree/admin/shared/no_objects_found',
|
45
|
+
resource: Spree::Slide,
|
46
|
+
new_resource_url: new_object_url %>
|
47
|
+
</div>
|
48
|
+
<% end %>
|
49
|
+
|
50
|
+
<%= paginate @slides, theme: 'solidus_admin' %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= render partial: 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t('slider.new_slide') %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<li>
|
9
|
+
<%= button_link_to Spree.t('slider.back_to_slides'), spree.admin_slides_path %>
|
10
|
+
</li>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<%= render 'spree/shared/error_messages', target: @slide %>
|
14
|
+
|
15
|
+
<%= form_for [:admin, @slide] , html: { multipart: true } do |f| %>
|
16
|
+
<%= render :partial => 'form', locals: { f: f } %>
|
17
|
+
<%= render partial: 'spree/admin/shared/new_resource_links' %>
|
18
|
+
<% end %>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<h1><%= t(:slide) %></h1>
|
2
|
+
<%= render partial: 'spree/admin/shared/configuration_menu' %>
|
3
|
+
|
4
|
+
<h1><%= Spree.t(:slide) %></h1>
|
5
|
+
|
6
|
+
<table class="table">
|
7
|
+
<tr data-hook="product_id">
|
8
|
+
<th><%= Spree.t(:product) %></th>
|
9
|
+
<td>
|
10
|
+
<%= @slide.product.name unless @slide.product_id.blank? %>
|
11
|
+
</td>
|
12
|
+
</tr>
|
13
|
+
<tr data-hook="name">
|
14
|
+
<th><%= Spree.t(:name) %></th>
|
15
|
+
<td>
|
16
|
+
<%= @slide.name %>
|
17
|
+
</td>
|
18
|
+
</tr>
|
19
|
+
<tr data-hook="body">
|
20
|
+
<th><%= Spree.t(:body) %></th>
|
21
|
+
<td>
|
22
|
+
<%= @slide.body %>
|
23
|
+
</td>
|
24
|
+
</tr>
|
25
|
+
<tr data-hook="link_url">
|
26
|
+
<th><%= Spree.t(:link_url) %></th>
|
27
|
+
<td>
|
28
|
+
<%= @slide.link_url %>
|
29
|
+
</td>
|
30
|
+
</tr>
|
31
|
+
<tr data-hook="published">
|
32
|
+
<th><%= Spree.t(:published) %></th>
|
33
|
+
<td>
|
34
|
+
<%= @slide.published ? Spree.t(:y) : Spree.t(:n) %>
|
35
|
+
</td>
|
36
|
+
</tr>
|
37
|
+
<tr data-hook="image_file_name">
|
38
|
+
<th><%= Spree.t(:image_file_name) %></th>
|
39
|
+
<td>
|
40
|
+
<%= @slide.image_file_name %>
|
41
|
+
</td>
|
42
|
+
</tr>
|
43
|
+
<tr data-hook="position">
|
44
|
+
<th><%= Spree.t(:position) %></th>
|
45
|
+
<td>
|
46
|
+
<%= @slide.position %>
|
47
|
+
</td>
|
48
|
+
</tr>
|
49
|
+
</table>
|
50
|
+
|
51
|
+
<p>
|
52
|
+
<%= link_to_edit @slide, class: 'edit_slide' %> <%= Spree.t(:or) %>
|
53
|
+
<%= link_to Spree.t(:back), collection_url %>
|
54
|
+
</p>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% if slider.size > 0 %>
|
2
|
+
<slick slides-to-show="1" ng-if="true" settings="{arrows:false,centerMode:false,centerPadding:'0',autoplay: true,autoplaySpeed: 5000,fade:true}">
|
3
|
+
<% slider.each_with_index do |slide, index| %>
|
4
|
+
<div class="item">
|
5
|
+
<%= link_to image_tag(slide.slide_image.url, alt: slide.slide_caption, class:'img-responsive'), url_for(slide.slide_link) %>
|
6
|
+
|
7
|
+
<div>
|
8
|
+
<% if slide.show_caption? %>
|
9
|
+
<h3><%= slide.slide_caption %></h3>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<% unless slide.body.blank? %>
|
13
|
+
<p><%= slide.body %><p>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
</slick>
|
19
|
+
<% end %>
|
data/bin/rails
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
2
|
+
|
3
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
4
|
+
ENGINE_PATH = File.expand_path('../../lib/solidus_slider/engine', __FILE__)
|
5
|
+
|
6
|
+
require 'rails/all'
|
7
|
+
require 'rails/engine/commands'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
de:
|
2
|
+
activerecord:
|
3
|
+
models:
|
4
|
+
spree/slide: "Slide"
|
5
|
+
|
6
|
+
spree:
|
7
|
+
next: "Nächste"
|
8
|
+
previous: "Vorhergehend"
|
9
|
+
name: "Name"
|
10
|
+
body: "Körper"
|
11
|
+
link_url: "Link URL"
|
12
|
+
image: "Bild"
|
13
|
+
image_file_name: "Name der Bilddatei"
|
14
|
+
published: "Veröffentlicht"
|
15
|
+
position: "Position"
|
16
|
+
y: "Ja"
|
17
|
+
n: "Nein"
|
18
|
+
|
19
|
+
slider:
|
20
|
+
config_name: "Spree Slides"
|
21
|
+
config_description: "Verwalten Spree Slider Inhalt"
|
22
|
+
title: "Slides"
|
23
|
+
new_slide: "Neue Slide"
|
24
|
+
editing_slide: "Bearbeiten Slide"
|
25
|
+
placeholder_name: "Leer lassen, um Produkt-Namen verwenden"
|
26
|
+
placeholder_link_url: "Leer lassen, um Produkt-URL verwenden"
|
27
|
+
image_tip: "Standard ersten product image"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
en:
|
2
|
+
activerecord:
|
3
|
+
models:
|
4
|
+
spree/slide: "Slide"
|
5
|
+
|
6
|
+
spree:
|
7
|
+
next: "Next"
|
8
|
+
previous: "Previous"
|
9
|
+
name: "Name"
|
10
|
+
body: "Body"
|
11
|
+
link_url: "Link URL"
|
12
|
+
image: "Image"
|
13
|
+
image_file_name: "Image file name"
|
14
|
+
published: "Published"
|
15
|
+
position: "Position"
|
16
|
+
y: "Yes"
|
17
|
+
n: "No"
|
18
|
+
|
19
|
+
slider:
|
20
|
+
config_name: "Spree Slider"
|
21
|
+
config_description: "Manage Spree Slider contents"
|
22
|
+
title: "Slides"
|
23
|
+
new_slide: "New Slide"
|
24
|
+
editing_slide: "Editing Slide"
|
25
|
+
back_to_slides: "Back to Slides"
|
26
|
+
placeholder_name: "Leave blank to use product name"
|
27
|
+
placeholder_link_url: "Leave blank to use product url"
|
28
|
+
image_tip: "Default first product image"
|